Imported Upstream version 0.9.35 upstream/0.9.35
authorManuel Bachmann <manuel.bachmann@open.eurogiciel.org>
Thu, 13 Nov 2014 09:46:22 +0000 (10:46 +0100)
committerManuel Bachmann <manuel.bachmann@open.eurogiciel.org>
Thu, 13 Nov 2014 09:46:22 +0000 (10:46 +0100)
657 files changed:
AUTHORS
Android.mk
ChangeLog
INSTALL
Makefile.am
Makefile.in
NEWS
TODO
aclocal.m4
ar-lib [new file with mode: 0755]
autogen.sh
compile
config.guess
config.h.in
config.sub
configure
configure.ac
depcomp
docs/Makefile.am [new file with mode: 0644]
docs/Makefile.in [new file with mode: 0644]
docs/reference/Makefile.am [new file with mode: 0644]
docs/reference/Makefile.in [new file with mode: 0644]
docs/reference/harfbuzz-docs.xml [new file with mode: 0644]
docs/reference/harfbuzz-overrides.txt [new file with mode: 0644]
docs/reference/harfbuzz-sections.txt [new file with mode: 0644]
docs/reference/harfbuzz.types [new file with mode: 0644]
docs/reference/html/annotation-glossary.html [new file with mode: 0644]
docs/reference/html/api-index-full.html [new file with mode: 0644]
docs/reference/html/ch01.html [new file with mode: 0644]
docs/reference/html/deprecated-api-index.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-blob.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-buffer.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-common.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-coretext.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-deprecated.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-face.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-font.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-ft.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-glib.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-gobject.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-graphite2.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-icu.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-ot-layout.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-ot-tag.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-ot.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-set.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-shape-plan.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-shape.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-unicode.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-uniscribe.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-version.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb.html [new file with mode: 0644]
docs/reference/html/harfbuzz.devhelp2 [new file with mode: 0644]
docs/reference/html/home.png [new file with mode: 0644]
docs/reference/html/index.html [new file with mode: 0644]
docs/reference/html/index.sgml [new file with mode: 0644]
docs/reference/html/left-insensitive.png [new file with mode: 0644]
docs/reference/html/left.png [new file with mode: 0644]
docs/reference/html/object-tree.html [new file with mode: 0644]
docs/reference/html/right-insensitive.png [new file with mode: 0644]
docs/reference/html/right.png [new file with mode: 0644]
docs/reference/html/style.css [new file with mode: 0644]
docs/reference/html/up-insensitive.png [new file with mode: 0644]
docs/reference/html/up.png [new file with mode: 0644]
docs/reference/version.xml [new file with mode: 0644]
docs/reference/version.xml.in [new file with mode: 0644]
gtk-doc.make [new file with mode: 0644]
harfbuzz.pc.in [deleted file]
install-sh
ltmain.sh
m4/gtk-doc.m4 [new file with mode: 0644]
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
missing
src/Makefile.am
src/Makefile.in
src/check-c-linkage-decls.sh
src/check-defs.sh [moved from src/check-exported-symbols.sh with 59% similarity]
src/check-header-guards.sh
src/check-includes.sh
src/check-internal-symbols.sh [deleted file]
src/check-static-inits.sh
src/check-symbols.sh [new file with mode: 0755]
src/gen-arabic-table.py
src/gen-indic-table.py
src/harfbuzz-gobject.pc.in [new file with mode: 0644]
src/harfbuzz-icu.pc.in [new file with mode: 0644]
src/harfbuzz.pc.in [new file with mode: 0644]
src/hb-atomic-private.hh
src/hb-blob.cc
src/hb-blob.h
src/hb-buffer-deserialize-json.hh [new file with mode: 0644]
src/hb-buffer-deserialize-json.rl [new file with mode: 0644]
src/hb-buffer-deserialize-text.hh [new file with mode: 0644]
src/hb-buffer-deserialize-text.rl [new file with mode: 0644]
src/hb-buffer-private.hh
src/hb-buffer-serialize.cc [new file with mode: 0644]
src/hb-buffer.cc
src/hb-buffer.h
src/hb-common.cc
src/hb-common.h
src/hb-coretext.cc
src/hb-coretext.h
src/hb-deprecated.h [moved from src/hb-old/harfbuzz-stream.h with 63% similarity]
src/hb-face-private.hh [new file with mode: 0644]
src/hb-face.cc [new file with mode: 0644]
src/hb-face.h [new file with mode: 0644]
src/hb-fallback-shape.cc
src/hb-font-private.hh
src/hb-font.cc
src/hb-font.h
src/hb-ft.cc
src/hb-glib.cc
src/hb-gobject-enums.cc.tmpl
src/hb-gobject-enums.h.tmpl [new file with mode: 0644]
src/hb-gobject-structs.cc
src/hb-gobject-structs.h [new file with mode: 0644]
src/hb-gobject.h
src/hb-graphite2.cc
src/hb-graphite2.h
src/hb-icu-le.cc [deleted file]
src/hb-icu-le/COPYING [deleted file]
src/hb-icu-le/FontTableCache.cpp [deleted file]
src/hb-icu-le/FontTableCache.h [deleted file]
src/hb-icu-le/Makefile.am [deleted file]
src/hb-icu-le/Makefile.in [deleted file]
src/hb-icu-le/PortableFontInstance.cpp [deleted file]
src/hb-icu-le/PortableFontInstance.h [deleted file]
src/hb-icu-le/README [deleted file]
src/hb-icu-le/cmaps.cpp [deleted file]
src/hb-icu-le/cmaps.h [deleted file]
src/hb-icu-le/letest.h [deleted file]
src/hb-icu-le/license.html [deleted file]
src/hb-icu-le/sfnt.h [deleted file]
src/hb-icu.cc
src/hb-mutex-private.hh
src/hb-old.cc [deleted file]
src/hb-old/COPYING [deleted file]
src/hb-old/Makefile.am [deleted file]
src/hb-old/Makefile.in [deleted file]
src/hb-old/README [deleted file]
src/hb-old/harfbuzz-arabic.c [deleted file]
src/hb-old/harfbuzz-buffer-private.h [deleted file]
src/hb-old/harfbuzz-buffer.c [deleted file]
src/hb-old/harfbuzz-buffer.h [deleted file]
src/hb-old/harfbuzz-external.h [deleted file]
src/hb-old/harfbuzz-gdef-private.h [deleted file]
src/hb-old/harfbuzz-gdef.c [deleted file]
src/hb-old/harfbuzz-gdef.h [deleted file]
src/hb-old/harfbuzz-global.h [deleted file]
src/hb-old/harfbuzz-gpos-private.h [deleted file]
src/hb-old/harfbuzz-gpos.c [deleted file]
src/hb-old/harfbuzz-gpos.h [deleted file]
src/hb-old/harfbuzz-greek.c [deleted file]
src/hb-old/harfbuzz-gsub-private.h [deleted file]
src/hb-old/harfbuzz-gsub.c [deleted file]
src/hb-old/harfbuzz-gsub.h [deleted file]
src/hb-old/harfbuzz-hangul.c [deleted file]
src/hb-old/harfbuzz-hebrew.c [deleted file]
src/hb-old/harfbuzz-impl.c [deleted file]
src/hb-old/harfbuzz-impl.h [deleted file]
src/hb-old/harfbuzz-indic.cpp [deleted file]
src/hb-old/harfbuzz-khmer.c [deleted file]
src/hb-old/harfbuzz-myanmar.c [deleted file]
src/hb-old/harfbuzz-open-private.h [deleted file]
src/hb-old/harfbuzz-open.c [deleted file]
src/hb-old/harfbuzz-open.h [deleted file]
src/hb-old/harfbuzz-shaper-private.h [deleted file]
src/hb-old/harfbuzz-shaper.cpp [deleted file]
src/hb-old/harfbuzz-shaper.h [deleted file]
src/hb-old/harfbuzz-stream-private.h [deleted file]
src/hb-old/harfbuzz-stream.c [deleted file]
src/hb-old/harfbuzz-tibetan.c [deleted file]
src/hb-open-file-private.hh
src/hb-open-type-private.hh
src/hb-ot-cmap-table.hh [new file with mode: 0644]
src/hb-ot-font.cc [new file with mode: 0644]
src/hb-ot-font.h [moved from src/hb-old/harfbuzz.h with 68% similarity]
src/hb-ot-head-table.hh
src/hb-ot-hhea-table.hh
src/hb-ot-hmtx-table.hh
src/hb-ot-layout-common-private.hh
src/hb-ot-layout-gdef-table.hh
src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-jstf-table.hh [new file with mode: 0644]
src/hb-ot-layout-private.hh
src/hb-ot-layout.cc
src/hb-ot-layout.h
src/hb-ot-map-private.hh
src/hb-ot-map.cc
src/hb-ot-maxp-table.hh
src/hb-ot-name-table.hh
src/hb-ot-shape-complex-arabic-fallback.hh
src/hb-ot-shape-complex-arabic-table.hh
src/hb-ot-shape-complex-arabic-win1256.hh [new file with mode: 0644]
src/hb-ot-shape-complex-arabic.cc
src/hb-ot-shape-complex-default.cc
src/hb-ot-shape-complex-hangul.cc [new file with mode: 0644]
src/hb-ot-shape-complex-hebrew.cc [new file with mode: 0644]
src/hb-ot-shape-complex-indic-machine.hh
src/hb-ot-shape-complex-indic-machine.rl
src/hb-ot-shape-complex-indic-private.hh
src/hb-ot-shape-complex-indic-table.cc [moved from src/hb-ot-shape-complex-indic-table.hh with 63% similarity]
src/hb-ot-shape-complex-indic.cc
src/hb-ot-shape-complex-myanmar-machine.hh [new file with mode: 0644]
src/hb-ot-shape-complex-myanmar-machine.rl [new file with mode: 0644]
src/hb-ot-shape-complex-myanmar.cc [new file with mode: 0644]
src/hb-ot-shape-complex-private.hh
src/hb-ot-shape-complex-sea-machine.hh [new file with mode: 0644]
src/hb-ot-shape-complex-sea-machine.rl [new file with mode: 0644]
src/hb-ot-shape-complex-sea.cc [new file with mode: 0644]
src/hb-ot-shape-complex-thai.cc
src/hb-ot-shape-complex-tibetan.cc [moved from src/hb-tt-font.cc with 53% similarity]
src/hb-ot-shape-fallback-private.hh
src/hb-ot-shape-fallback.cc
src/hb-ot-shape-normalize-private.hh
src/hb-ot-shape-normalize.cc
src/hb-ot-shape-private.hh
src/hb-ot-shape.cc
src/hb-ot-shape.h [new file with mode: 0644]
src/hb-ot-tag.cc
src/hb-ot.h
src/hb-private.hh
src/hb-set-private.hh
src/hb-set.cc
src/hb-set.h
src/hb-shape-plan-private.hh
src/hb-shape-plan.cc
src/hb-shape.cc
src/hb-shaper-list.hh
src/hb-shaper.cc
src/hb-ucdn.cc
src/hb-ucdn/Makefile.am
src/hb-ucdn/Makefile.in
src/hb-ucdn/README
src/hb-ucdn/ucdn.c
src/hb-ucdn/ucdn.h
src/hb-ucdn/unicodedata_db.h
src/hb-unicode-private.hh
src/hb-unicode.cc
src/hb-unicode.h
src/hb-uniscribe.cc
src/hb-uniscribe.h
src/hb-utf-private.hh
src/hb-version.h
src/hb-version.h.in
src/hb-warning.cc
src/hb.h
src/main.cc
src/test-buffer-serialize.cc [new file with mode: 0644]
src/test-size-params.cc
src/test-would-substitute.cc
src/test.cc
test-driver [new file with mode: 0755]
test/Makefile.in
test/api/Makefile.am
test/api/Makefile.in
test/api/hb-test.h
test/api/test-blob.c
test/api/test-buffer.c
test/api/test-c.c
test/api/test-font.c
test/api/test-ot-tag.c
test/api/test-set.c
test/api/test-unicode.c
test/api/test-version.c
test/shaping/Makefile.am
test/shaping/Makefile.in
test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/MANIFEST [new file with mode: 0644]
test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf [new file with mode: 0644]
test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf [new file with mode: 0644]
test/shaping/hb_test_tools.py
test/shaping/record-test.sh [new file with mode: 0755]
test/shaping/run-tests.sh [new file with mode: 0755]
test/shaping/tests/arabic-fallback-shaping.tests [new file with mode: 0644]
test/shaping/tests/arabic-feature-order.tests [new file with mode: 0644]
test/shaping/tests/context-matching.tests [new file with mode: 0644]
test/shaping/tests/hangul-jamo.tests [new file with mode: 0644]
test/shaping/tests/indic-old-spec.tests [new file with mode: 0644]
test/shaping/tests/indic-pref-blocking.tests [new file with mode: 0644]
test/shaping/tests/mongolian-variation-selector.tests [new file with mode: 0644]
test/shaping/tests/zero-width-marks.tests [new file with mode: 0644]
test/shaping/texts/in-tree/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt [new file with mode: 0755]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mandaic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mandaic/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/variation-selectors.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-nko/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-syriac/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/alaph.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-ethiopic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-han/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-han/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-hiragana/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-linear-b/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-tifinagh/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hangul/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hangul/script-hangul/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hebrew/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/diacritics.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/reph.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/joiners.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/right-matras.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/cibu.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/extensive.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/split-matras.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/LICENSE [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/README [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/SOURCES [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/utn11.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-cham/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-cham/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-cham/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-tai-tham/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/torture.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-lao/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-lao/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-lao/misc/sara-am.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/misc.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/phinthu.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/pua-shaping.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-tibetan/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/MANIFEST [new file with mode: 0644]
test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt [new file with mode: 0644]
util/Makefile.am
util/Makefile.in
util/ansi-print.cc
util/hb-ot-shape-closure.cc
util/hb-shape.cc
util/helper-cairo-ansi.cc
util/helper-cairo.cc
util/helper-cairo.hh
util/options.cc
util/options.hh
util/shape-consumer.hh
util/view-cairo.hh

diff --git a/AUTHORS b/AUTHORS
index c611d7d..81cdc4c 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -4,5 +4,6 @@ Martin Hosken
 Jonathan Kew
 Lars Knoll
 Werner Lemberg
 Jonathan Kew
 Lars Knoll
 Werner Lemberg
+Roozbeh Pournader
 Owen Taylor
 David Turner
 Owen Taylor
 David Turner
index 832d55e..07dfa5b 100644 (file)
 ## limitations under the License.
 ##
 
 ## limitations under the License.
 ##
 
-LOCAL_PATH:= $(call my-dir)
-
 #############################################################
 #############################################################
-#   build the harfbuzz library
+#   Note:
+#
+#   This file is used to build HarfBuzz within the Android
+#   platform itself.  If you need to compile HarfBuzz to
+#   ship with your Android NDK app, you can use the autotools
+#   build system to do so.  To do that you need to install a
+#   "standalone" toolchain with the NDK, eg:
+#
+#       ndk/build/tools/make-standalone-toolchain.sh \
+#           --platform=android-18 \
+#           --install-dir=/prefix
+#
+#   Set PLATFORM_PREFIX eng var to that prefix and make sure
+#   the cross-compile tools from PLATFORM_PREFIX are in path.
+#   Configure and install HarfBuzz:
+#
+#       ./configure --host=arm-linux-androideabi \
+#           --prefix=$PLATFORM_PREFIX \
+#           --enable-static \
+#           --with-freetype \
+#           PKG_CONFIG_LIBDIR=$PLATFORM_PREFIX/lib/pkgconfig
+#       make install
+#
+#   You can first build FreeType the same way:
+#
+#       ./configure --host=arm-linux-androideabi \
+#           --prefix=$PLATFORM_PREFIX \
+#           --enable-static \
+#           --without-png \
+#           PKG_CONFIG_LIBDIR=$PLATFORM_PREFIX/lib/pkgconfig
+#       make install
 #
 
 #
 
-include $(CLEAR_VARS)
-
-LOCAL_ARM_MODE := arm
-
-LOCAL_MODULE_TAGS := optional
+LOCAL_PATH:= $(call my-dir)
 
 
-LOCAL_SRC_FILES:= \
+HARFBUZZ_SRC_FILES = \
        src/hb-blob.cc \
        src/hb-blob.cc \
+       src/hb-buffer-serialize.cc \
        src/hb-buffer.cc \
        src/hb-common.cc \
        src/hb-buffer.cc \
        src/hb-common.cc \
-       src/hb-fallback-shape.cc \
+       src/hb-face.cc \
        src/hb-font.cc \
        src/hb-ot-tag.cc \
        src/hb-set.cc \
        src/hb-shape.cc \
        src/hb-shape-plan.cc \
        src/hb-shaper.cc \
        src/hb-font.cc \
        src/hb-ot-tag.cc \
        src/hb-set.cc \
        src/hb-shape.cc \
        src/hb-shape-plan.cc \
        src/hb-shaper.cc \
-       src/hb-tt-font.cc \
        src/hb-unicode.cc \
        src/hb-warning.cc \
        src/hb-unicode.cc \
        src/hb-warning.cc \
+       src/hb-ot-font.cc \
        src/hb-ot-layout.cc \
        src/hb-ot-map.cc \
        src/hb-ot-shape.cc \
        src/hb-ot-shape-complex-arabic.cc \
        src/hb-ot-shape-complex-default.cc \
        src/hb-ot-layout.cc \
        src/hb-ot-map.cc \
        src/hb-ot-shape.cc \
        src/hb-ot-shape-complex-arabic.cc \
        src/hb-ot-shape-complex-default.cc \
+       src/hb-ot-shape-complex-hangul.cc \
+       src/hb-ot-shape-complex-hebrew.cc \
        src/hb-ot-shape-complex-indic.cc \
        src/hb-ot-shape-complex-indic.cc \
+       src/hb-ot-shape-complex-indic-table.cc \
+       src/hb-ot-shape-complex-myanmar.cc \
+       src/hb-ot-shape-complex-sea.cc \
        src/hb-ot-shape-complex-thai.cc \
        src/hb-ot-shape-complex-thai.cc \
+       src/hb-ot-shape-complex-tibetan.cc \
        src/hb-ot-shape-normalize.cc \
        src/hb-ot-shape-fallback.cc \
        src/hb-ot-shape-normalize.cc \
        src/hb-ot-shape-fallback.cc \
-       src/hb-icu.cc
+       $(NULL)
 
 
+#############################################################
+#   build the harfbuzz shared library
+#
+include $(CLEAR_VARS)
+LOCAL_ARM_MODE := arm
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES:= \
+       $(HARFBUZZ_SRC_FILES) \
+       src/hb-icu.cc
 LOCAL_CPP_EXTENSION := .cc
 LOCAL_CPP_EXTENSION := .cc
-
 LOCAL_SHARED_LIBRARIES := \
 LOCAL_SHARED_LIBRARIES := \
-        libcutils \
-        libicuuc \
-        libicui18n \
-        libutils
-
+       libcutils \
+       libicuuc \
+       libicui18n \
+       libutils \
+       liblog
 LOCAL_C_INCLUDES += \
         $(LOCAL_PATH)/src \
 LOCAL_C_INCLUDES += \
         $(LOCAL_PATH)/src \
-        external/icu4c/common
-
-LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU
-
-LOCAL_LDLIBS += -lpthread
-
+        external/icu/icu4c/source/common
+LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU -DHAVE_ICU_BUILTIN
 LOCAL_MODULE:= libharfbuzz_ng
 LOCAL_MODULE:= libharfbuzz_ng
-
 include $(BUILD_SHARED_LIBRARY)
 include $(BUILD_SHARED_LIBRARY)
-
-
index 014604b..909fdf0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+commit cd5a1149d980dc3c17b6bb9d961c761b2671ba1b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 13 12:39:34 2014 -0400
+
+    0.9.35
+
+ NEWS         | 29 +++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 30 insertions(+), 1 deletion(-)
+
+commit 20076cc41e673c31305fcb58d37b3b292fd35f83
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 19:26:35 2014 -0400
+
+    [coretext] Add version guards for kCTLanguageAttributeName
+
+ src/hb-coretext.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 1b3011c27df531875d432e909ae6b77f115c5017
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 19:17:19 2014 -0400
+
+    [coretext] Pass buffer language to CoreText
+
+ src/hb-coretext.cc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 3eb6a4dbf25b11fce5e0e426e89f7457887aeca0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 19:10:33 2014 -0400
+
+    [coretext] Minor
+
+ src/hb-coretext.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 08acfe0d3a1d8223a9fa0696703fff63d6c2ea8b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 18:57:08 2014 -0400
+
+    [hb-coretext] Fix cluster order of notdef runs in RTL text
+
+ src/hb-coretext.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 30eed75de24ac0b6648a72d98d10bb24a563d7ef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 17:15:09 2014 -0400
+
+    [shape-plan] Fix typo!
+
+    The only effect is, if shaper_list was not NULL and no shaper
+    was found,
+    we now don't insert anything into cache and return earlier.
+
+ src/hb-shape-plan.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dc9aba6fc53898acd7281b118cec0355d61b1df2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 17:14:36 2014 -0400
+
+    [shape-plan] Better debug messages
+
+ src/hb-shape-plan.cc | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+commit e956c65bf724a8403471362288d2361361b6ac58
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 17:03:27 2014 -0400
+
+    [shape-plan] Simplify macro
+
+ src/hb-shape-plan.cc | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+commit 29e25550ce8fee3fecc42d20a45ce9c212dc59df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 17:02:59 2014 -0400
+
+    Fix gcc warning
+
+ src/hb-private.hh | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 8d5eebc0c6ada01128c6ee384340efdbef7ba29d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 16:50:22 2014 -0400
+
+    [shape-plan] Fix shape-plan caching with more than one requested
+    shaper
+
+    Wasn't breaking out of loop, ouch!
+
+    http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
+
+ src/hb-shape-plan.cc | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit bc3d0dc60104f1cda465a5e8ba5b40ed5bec70b9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 16:49:18 2014 -0400
+
+    [shape-plan] Add debug tracing
+
+ src/hb-shape-plan.cc | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+commit 81b8d9777b9c38c7e6408591763a4cac6de18e4b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 15:49:47 2014 -0400
+
+    [coretext] Fix buffer resizing
+
+    Was very broken.  Now fixed and tested.
+
+ src/hb-coretext.cc | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+commit c3e924fb9e0e2d4003790817655efd9c5688c7e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 14:25:11 2014 -0400
+
+    [coretext] Rewind scratch-allocated arrays when not needed anymore
+
+ src/hb-coretext.cc | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+commit 8fd4d70b1450d7261a35ab3dea1c70baea2e5c99
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 13:12:31 2014 -0400
+
+    [wince] Two more Windows CE fixes
+
+    Report has it that it builds (and works) now:
+
+      https://codereview.qt-project.org/#/c/92087/
+
+ src/hb-mutex-private.hh | 2 +-
+ src/hb-private.hh       | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit fd0001d7dbe6ede99a9f87f96f231ffb53303be8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 12 10:32:41 2014 -0400
+
+    [coretext] Compare CGFont and PS name, if CTFont didn't match
+
+    See comments.
+
+    Fixes vertical text.  CoreText backend is in very good shape now!
+
+    Also see:
+    5a0eed3b50629be4826e4e9428f2c3255195395d
+    25f4fb9b56bb3f8bec821571c78f8829e40daa54
+
+    Fixes http://github.com/behdad/harfbuzz/pull/36
+
+ src/hb-coretext.cc | 54
+ ++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 48 insertions(+), 6 deletions(-)
+
+commit 5a0eed3b50629be4826e4e9428f2c3255195395d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 23:47:16 2014 -0400
+
+    [coretext] Implement vertical shaping
+
+    Currently doesn't work though, we detect font fallback.  Apparently
+    matching on ct_font is not safe for this.  Looks like commit
+    25f4fb9b56bb3f8bec821571c78f8829e40daa54 wasn't enough after all.
+
+ src/hb-coretext.cc | 127
+ ++++++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 81 insertions(+), 46 deletions(-)
+
+commit 1b55077f03758e49f93b8bc1de678e96ea58718c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 20:45:12 2014 -0400
+
+    [coretext] Remove unnecessary alt_size
+
+    Wasn't needed after a6b8dc87421de33746b0b14d86d2d1532aec02af.
+
+ src/hb-coretext.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 10b1104d791a0b0103c6bbb083b5819f2b7d328d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 20:02:45 2014 -0400
+
+    [coretext] Use CFRunStatus
+
+    Assert that all runs had expected direction, and take hint for
+    non-monotone clusters.
+
+ src/hb-coretext.cc | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+commit fd1a6aa8d029c701b1532efa59ce901109cfc216
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 20:01:37 2014 -0400
+
+    [coretext] Minor
+
+ src/hb-coretext.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 130856c705641aa681307b5b51b5fb84e295f382
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 19:16:26 2014 -0400
+
+    [coretext] Remove debug printf!
+
+ src/hb-coretext.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit b5fbc3b8f560235d014c62e49220574ffcf89349
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 18:40:01 2014 -0400
+
+    API: Do not clear buffer-flags in hb_buffer_clear_contents()
+
+    After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
+    need to set flags for different pieces of text.  The flags now
+    are something the client sets up once, depending on how it
+    actually uses the buffer.  As such, don't clear it in
+    clear_contents().
+
+    Tests updated.
+
+ src/hb-buffer-private.hh |  4 +---
+ src/hb-buffer.cc         |  4 ++--
+ test/api/test-buffer.c   | 15 ++++++++++++---
+ 3 files changed, 15 insertions(+), 8 deletions(-)
+
+commit 104484cefeca03d95837bba5f39178693c86ce8a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 18:23:43 2014 -0400
+
+    Minor
+
+ src/hb-common.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 4acce77db7dd588ba277779c4997b0256ebe426e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 17:46:50 2014 -0400
+
+    [coretext] Pass buffer direction to CoreText
+
+    Have to use a CTTypesetter for this.
+
+ src/hb-coretext.cc | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+commit 5ec45dd37caa8a87ce2689a66272ba8a343fe6ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 17:46:12 2014 -0400
+
+    [coretext] Minor
+
+    It's hard to handle all possible NULL returns from CoreText.  Add one
+    more...
+
+ src/hb-coretext.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 624a299b829ccf9864dd2f3001b1a49476e96b4a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 15:29:18 2014 -0400
+
+    [coretext] Attach marks to base clusters
+
+    Fixes https://githu.com/behdad/harfbuzz/issues/49
+    to the extent that it can be fixed.
+
+ src/hb-coretext.cc | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+commit 3c41ccb5358b0be6cc68d49f436d2cb1792cd5e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 15:11:59 2014 -0400
+
+    [coretext] Use input clusters
+
+    Before, this shaper was returning UTF-16 cluster indices instead of
+    returning whatever cluster values the user had had set up in the
+    buffer.
+    Ouch!
+
+ src/hb-coretext.cc | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit a6b8dc87421de33746b0b14d86d2d1532aec02af
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 15:08:19 2014 -0400
+
+    [coretext] Fix buffer resize handling
+
+    We can't really resize buffer and continue in this shaper as we are
+    using the scratch buffer for string_ref and log_cluster.  Restructure
+    shaper to retry from (almost) scratch.
+
+ src/hb-buffer-private.hh |   3 +
+ src/hb-coretext.cc       | 428
+ ++++++++++++++++++++++++++---------------------
+ 2 files changed, 238 insertions(+), 193 deletions(-)
+
+commit 9b3c60c88b118f01610ae7a608b138f79f2dc7be
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 13:25:43 2014 -0400
+
+    [coretext] Always compute log_clusters
+
+    To be used soon.
+
+ src/hb-coretext.cc | 24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
+
+commit 15c633dd1f412f9ef839d80a8f7af35e7ea48fbc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 13:42:42 2014 -0400
+
+    Minor
+
+ src/hb-graphite2.cc | 4 ++--
+ src/hb-uniscribe.cc | 6 ++----
+ 2 files changed, 4 insertions(+), 6 deletions(-)
+
+commit 9ce067c77524a9ffc77ceabcba5e7dab36fd39de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 11 02:04:38 2014 -0400
+
+    [coretext] Simplify cluster mapping
+
+ src/hb-coretext.cc | 41 +++++++++++++++++------------------------
+ 1 file changed, 17 insertions(+), 24 deletions(-)
+
+commit 49f7fb63761e4ca9936990fb90a77fd3600f5ad2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 19:19:38 2014 -0400
+
+    [coretext] Minor
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 25f4fb9b56bb3f8bec821571c78f8829e40daa54
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 19:05:25 2014 -0400
+
+    [coretext] Fix fallback detection
+
+    Fixes http://github.com/behdad/harfbuzz/pull/36
+
+ src/hb-coretext.cc | 29 ++++++++++++++++++++---------
+ 1 file changed, 20 insertions(+), 9 deletions(-)
+
+commit 77a7a53acef7de355116d488e7d64ff1d7e9e9e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 18:59:47 2014 -0400
+
+    [coretext] Fix last range
+
+    Test with:
+
+    hb-view /Library/Fonts/Zapfino.ttf ZapfinoZapfino --features=-dlig[7:]
+    --shaper=coretext
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c2b151d95262a8dc2d2ce94e19ab0ef5b0c8f98d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 18:52:07 2014 -0400
+
+    Fix hb_in_range() for types smaller than int
+
+    As exercised by hb-coretext .notdef code.
+
+ src/hb-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 26a963b9cb4af3119177f277a2d48a5d537458fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 18:04:50 2014 -0400
+
+    [wince] Try to fix some stuff on Windows CE
+
+    Based on errors seen here:
+    http://testresults.qt-project.org/ci/QtBase_dev_Integration/build_03837/wince70embedded-armv4i-msvc2008_Windows_7/log.txt.gz
+
+    Fully untested.
+
+ src/hb-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 92aeee3f040c2c32cbf70b27bd6954535388c870
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 17:42:19 2014 -0400
+
+    Minor
+
+ src/hb-coretext.cc  | 4 ++--
+ src/hb-uniscribe.cc | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit b9993d8d6d332994dfbd29e99ff8043622003417
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 10 17:40:24 2014 -0400
+
+    [coretext] Fix assert on Yosemite
+
+    Apparently those functions documented as sometimes returning NULL
+    actually exercise that right in OS X 10.10 Yosemite.  The scratch
+    was too small for that.  I *think* I fixed it, but haven't tested
+    as I don't have Yosemite.
+
+ src/hb-coretext.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 087733dd66e17297ef0e53680fafe42c84884104
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Apr 18 11:21:08 2014 -0700
+
+    [coretext] Use CGFont as face_data
+
+ src/hb-coretext.cc | 26 +++++++++-----------------
+ 1 file changed, 9 insertions(+), 17 deletions(-)
+
+commit d277c3d7eee1fd4fb41c38255e5c4df539353e89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 7 15:38:52 2014 -0400
+
+    [arabic] Bug 82306 - Mandaic had errors in its Unicode Joining_Type
+
+    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=82306
+
+ src/hb-ot-shape-complex-arabic-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 38fb30d7420a4b01f99cee31baa8c3990a1d1c5f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 6 13:34:49 2014 -0400
+
+    Use atexit() only if it's safe to call from shared library
+
+    Apparently they are not (advertised as?) safe on BSD systems.
+    We ignore the case of static libraries.
+
+    Whitelisted on glibc, Android, and MSVC / mingw.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=82246
+
+ src/hb-common.cc    |  4 ++--
+ src/hb-ft.cc        |  2 +-
+ src/hb-private.hh   | 25 +++++++++++++++++++++++++
+ src/hb-shape.cc     |  2 +-
+ src/hb-shaper.cc    |  2 +-
+ src/hb-uniscribe.cc |  2 +-
+ 6 files changed, 31 insertions(+), 6 deletions(-)
+
+commit d5e61470fa8e5046c35a79988e00e012ae4fff0f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 5 14:19:01 2014 -0400
+
+    [arabic] Fix fallback shaping regression
+
+    Was broken in 615d00ea252739da57edbd980ff27e573.
+
+    Fixes https://github.com/behdad/harfbuzz/pull/48
+
+    Micro-test added.
+
+ src/hb-ot-shape-complex-arabic.cc                        |   4 ++--
+ test/shaping/Makefile.am                                 |   1 +
+ test/shaping/fonts/sha1sum/MANIFEST                      |   1 +
+ .../sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf | Bin 0 ->
+ 6332 bytes
+ test/shaping/tests/MANIFEST                              |   1 +
+ test/shaping/tests/arabic-fallback-shaping.tests         |   1 +
+ 6 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 91c2c0fd2b0f660d79744b3dfaf39ab86883e96b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 19:24:55 2014 -0400
+
+    0.9.34
+
+ NEWS         | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 54 insertions(+), 1 deletion(-)
+
+commit d7c850f8037d2701366008eb8c2a527c9d40abde
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 17:46:38 2014 -0400
+
+    [uniscribe] Minor
+
+ src/hb-uniscribe.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 8f3eebf7ee4005f9a8efaafcb7f4058cc0a3756e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 17:18:46 2014 -0400
+
+    Make sure gsubgpos buffer vars are available during fallback_position
+
+    Add buffer var allocation asserts to a few key places.
+
+ src/hb-ot-layout-gpos-table.hh             |  4 ++--
+ src/hb-ot-layout-gsub-table.hh             |  2 +-
+ src/hb-ot-layout-private.hh                | 15 +++++++++++++++
+ src/hb-ot-shape-complex-arabic-fallback.hh |  2 +-
+ src/hb-ot-shape-fallback.cc                |  2 ++
+ src/hb-ot-shape-normalize.cc               |  2 ++
+ src/hb-ot-shape.cc                         |  3 +++
+ 7 files changed, 26 insertions(+), 4 deletions(-)
+
+commit 2053f369f84676f197ac41ea654a318c48922abd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 16:31:16 2014 -0400
+
+    Disable 'liga' for vertical text
+
+    The reason we turned it on is because Kazuraki uses it.  But that's
+    not reason enough.  Until the OpenType spec gets its act together re
+    adding design-direction to lookups, this is better user experience.
+
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 763e5466c0a03a7c27020e1e2598e488612529a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 16:17:44 2014 -0400
+
+    Make it easier to use HB_BUFFER_FLAG_BOT/EOT
+
+    Previously, we expected users to provide BOT/EOT flags when the
+    text *segment* was at paragraph boundaries.  This meant that for
+    clients that provide full paragraph to HarfBuzz (eg. Pango), they
+    had code like this:
+
+      hb_buffer_set_flags (hb_buffer,
+                           (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
+                           (item_offset + item_length == paragraph_length
+                           ?
+                            HB_BUFFER_FLAG_EOT : 0));
+
+      hb_buffer_add_utf8 (hb_buffer,
+                          paragraph_text, paragraph_length,
+                          item_offset, item_length);
+
+    After this change such clients can simply say:
+
+      hb_buffer_set_flags (hb_buffer,
+                           HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
+
+      hb_buffer_add_utf8 (hb_buffer,
+                          paragraph_text, paragraph_length,
+                          item_offset, item_length);
+
+    Ie, HarfBuzz itself checks whether the segment is at the beginning/end
+    of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
+    continue not setting any flags whatsoever.
+
+    Another way to put it is: if there's pre-context text in the buffer,
+    HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
+    EOT flag.
+
+ src/hb-ot-shape-complex-arabic.cc | 40
+ +++++++++++++++++++--------------------
+ src/hb-ot-shape.cc                |  1 +
+ 2 files changed, 20 insertions(+), 21 deletions(-)
+
+commit 0a5ae9336231c4d189e1682e4fd9c9c4552b8bbf
+Merge: ac53443 6ab6be3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 15:00:34 2014 -0400
+
+    Merge branch 'win1256'
+
+commit 6ab6be32c5857ce3344021ad2996e80b2a8c8f99
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 2 14:58:38 2014 -0400
+
+    [arabic/win1256] Remove unused MultipleSubst macros
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+commit abfa4252cce1c56c472693dcd8400cd97ededd2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 1 19:05:33 2014 -0400
+
+    [arabic/win1256] Really fix lam-alef this time
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=1045139#c26
+    https://github.com/behdad/harfbuzz/commit/b276e897d17519a2c28f79d024904ac2bdd86bcf#commitcomment-7243499
+
+ src/hb-ot-shape-complex-arabic-fallback.hh |  2 +-
+ src/hb-ot-shape-complex-arabic-win1256.hh  | 49
+ +++++++++---------------------
+ 2 files changed, 15 insertions(+), 36 deletions(-)
+
+commit 55977f2a462b7fa1248eab3787053dc82320d3e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 1 16:14:33 2014 -0400
+
+    [arabic/win1256] Hook up lamMedi lookup
+
+    Restructure lookup array to accommodate.
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=1045139#c18
+
+ src/hb-ot-shape-complex-arabic-fallback.hh | 26
+ ++++++++++----------------
+ src/hb-ot-shape-complex-arabic-win1256.hh  |  1 +
+ 2 files changed, 11 insertions(+), 16 deletions(-)
+
+commit e839e2523e64fd0cf21929f6a45e2facd59c7917
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 1 16:09:31 2014 -0400
+
+    [arabic/win1256] Fix TEH MARBUTA final form
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=1045139#c18
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit a2de193220ee2839125594bd1a60b5b66ab4598e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 31 18:21:05 2014 -0400
+
+    [arabic/win1256] Fix shaping of JEEM, HAH, and KHAH
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=1045139#c16
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+commit 1789ccb1dd56af6117eac00e633eff94860ba252
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 31 11:04:00 2014 -0400
+
+    [arabic/win1256] Remove GCC'ism
+
+    The table can now compile independently too.  If we cannot make
+    it work
+    on MSVC, we can always generate the data and distribute it.
+
+    The code now compiles cleanly with:
+
+    gcc -c -xc -std=c99 -Werror -pedantic
+    hb-ot-shape-complex-arabic-win1256.hh
+    g++ -c -xc -std=c++1x -Werror -pedantic
+    hb-ot-shape-complex-arabic-win1256.hh
+
+    See:
+    https://github.com/behdad/harfbuzz/commit/a97f537cec209649302899975d76ca2b2661da7a#commitcomment-7218736
+
+ src/hb-ot-shape-complex-arabic-fallback.hh |   4 +-
+ src/hb-ot-shape-complex-arabic-win1256.hh  | 123
+ +++++++++++++++++------------
+ 2 files changed, 75 insertions(+), 52 deletions(-)
+
+commit f28b1c823db2ad56fed356ef864a7508d23048b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 30 02:15:44 2014 -0400
+
+    [arabic] Implement Windows-1256 private shaping
+
+    Bug 1045139 - The Arabic text with "MS Sans Serif" font is rendered
+    bad
+    https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
+
+    This is only enabled on Windows platforms, and requires support from
+    Uniscribe to work.  But for clients that do hook up to Uniscribe, this
+    fixes shaping of Windows-1256-encoded bitmap fonts like "MS Sans
+    Serif".
+
+    The code and table together have just less than a 1kb footprint when
+    enabled.
+
+    UNTESTED.  I might even have broken regular Arabic fallback shaping.
+
+ src/Makefile.am                            |   1 +
+ src/check-includes.sh                      |   2 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh | 125 +++++++++--
+ src/hb-ot-shape-complex-arabic-win1256.hh  | 328
+ +++++++++++++++++++++++++++++
+ 4 files changed, 442 insertions(+), 14 deletions(-)
+
+commit ac53443f1cea83ed43a4e41a9fdb91902f7fae7b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 31 18:51:37 2014 -0400
+
+    [hangul] Don't apply 'calt'
+
+    See comments.
+
+    Micro-test added.
+
+ src/hb-ot-shape-complex-hangul.cc                        |  11
+ ++++++++++-
+ test/shaping/Makefile.am                                 |   1 +
+ .../sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf | Bin 0 ->
+ 1804 bytes
+ .../sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf | Bin 0 ->
+ 1644 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                      |   2 ++
+ test/shaping/tests/MANIFEST                              |   1 +
+ test/shaping/tests/hangul-jamo.tests                     |  11
+ +++++++++++
+ 7 files changed, 25 insertions(+), 1 deletion(-)
+
+commit 8292f96b2be173ebceb1b54426c271cfeaecd633
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 31 18:33:11 2014 -0400
+
+    [test] Fix record-test.sh
+
+ test/shaping/record-test.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 88911e8cc765c26e502503a3a00ac7f17973f3d9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 29 19:47:26 2014 -0400
+
+    Minor
+
+ src/hb-ot-shape-complex-arabic-fallback.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9e834e29e0b657f0555df1ab9cea79ff7abcf08d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 26 20:34:01 2014 -0400
+
+    [hebrew] Zero mark advance by GDEF late
+
+    Seems to be what Uniscribe does.
+
+    At this point I think it's work checking our default...
+
+    Fixes Bug 76767 - Zeroing of advance of 2nd component of multiple
+    substitution with SBL Hebrew
+    https://bugs.freedesktop.org/show_bug.cgi?id=76767
+
+    Micro-test added.
+
+ src/hb-ot-shape-complex-hebrew.cc                        |   2 +-
+ .../sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf | Bin 0 ->
+ 6068 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                      |   1 +
+ test/shaping/tests/zero-width-marks.tests                |   1 +
+ 4 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 6f2d9ba52a6d1e3fc200da1ef0e85ba020fcd0dc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 26 19:17:44 2014 -0400
+
+    Add old-Myanmar shaper
+
+    Looks like Unsicribe responds to the 'mymr' tag by zeroing marks
+    GDEF_LATE instead of generic-shaper UNICODE_LATE.  Implement that.
+
+    Fixes
+    Bug 81775 - Incorrect Rendering with harfbuzz-ng myanmar unicode
+    https://bugs.freedesktop.org/show_bug.cgi?id=81775
+
+    Micro-test added based on Padauk.
+
+ src/hb-ot-shape-complex-myanmar.cc                    |  18
+ ++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh                    |   5 +++--
+ test/shaping/Makefile.am                              |   1 +
+ test/shaping/fonts/sha1sum/MANIFEST                   |   1 +
+ .../bb9473d2403488714043bcfb946c9f78b86ad627.ttf      | Bin 0 ->
+ 3440 bytes
+ test/shaping/tests/MANIFEST                           |   1 +
+ test/shaping/tests/zero-width-marks.tests             |   1 +
+ 7 files changed, 25 insertions(+), 2 deletions(-)
+
+commit 595d2b96c37de8147489dc5e0ddcc4ab1ad3eea9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 26 18:44:15 2014 -0400
+
+    Minor
+
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ src/hb-ot-shape.cc               | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit fe6788bc570d77d5b3aafc68efd51ca6b80499b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:40:56 2014 -0400
+
+    Typo
+
+ src/hb-common.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0de25d4184d2d92b1a2ebb6fa054275aaae4c316
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:35:03 2014 -0400
+
+    [util] Note CSS compatibility in --help-features
+
+ util/options.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 6e69200a2aadbc6bba35ffb4a058c14286b84f46
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:30:47 2014 -0400
+
+    Fix snprintf() format
+
+    Patch from Maks Naumov.
+    Fixes https://github.com/behdad/harfbuzz/pull/22
+
+ src/hb-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 5c5cdbbdf8be231c433e21b050a6c6991d327b61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:21:49 2014 -0400
+
+    Make sure broken feature strings are not partially parsed
+
+    If user doesn't check hb_feature_from_string() return value, we
+    don't want them to end up see the partially-parsed feature.
+
+ src/hb-shape.cc | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+commit a795fe637846e0d9561d2f7cdd84cfafd58b23a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:15:33 2014 -0400
+
+    Allow quotation marks around feature tag in hb_feature_from_string()
+
+    With this, I believe we accept CSS feature strings completely.
+
+ src/hb-shape.cc | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+commit 3f6461847412e78bcddc8eba97200f3afcde869a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:04:27 2014 -0400
+
+    Allow space at the end of feature string with values, eg 'dlig=1 '
+
+ src/hb-shape.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit f31f7d2259dd8edffc070af55938cb7aa23514c1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:03:52 2014 -0400
+
+    Minor
+
+ src/hb-shape.cc | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit 60cb18a5dea2d30793f89e80995bb729c014864a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 12:01:22 2014 -0400
+
+    Allow on/off in hb_feature_from_string()
+
+    We now allow things like "dlig on" / "dlig=on".
+
+ src/hb-shape.cc | 26 ++++++++++++++++++++++++--
+ 1 file changed, 24 insertions(+), 2 deletions(-)
+
+commit d9e618eca9e01c2eb6db65504af3f73be370a1e7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 11:56:01 2014 -0400
+
+    Remove duplicate definition of ISALNUM
+
+    It's defined in hb-private.h already.
+
+ src/hb-shape.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 2ee5f665ded86147acedc400153c0b3a90fe07c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 11:53:46 2014 -0400
+
+    Fix parsing of features like "- liga" (with the space)
+
+ src/hb-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e15fa7a8cffbe6a67b1048d7b87b7df77d8b1686
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 11:44:35 2014 -0400
+
+    Do not require the '=' in hb_feature_from_string()
+
+    Towards accepting CSS font-feature-settings strings.
+
+ src/hb-shape.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit f4fe9baefdb7e0ff9946f88b6f4b55738fa30cdf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 11:39:55 2014 -0400
+
+    Reject tags longer than 4 chars in hb_feature_from_string()
+
+ src/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7e8c38954649c0bf2e6051d84ca08dce090ec169
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 25 11:18:11 2014 -0400
+
+    Minor warnings fixes
+
+    Some systems insist on -Wmissing-field-initializers.  We have
+    too many,
+    by design.  Fix a few easy ones.
+
+ src/hb-open-type-private.hh | 2 +-
+ src/hb-ot-layout-private.hh | 2 +-
+ src/hb-private.hh           | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit fc0daafab0336b847ac14682e581a8838f36a0bf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 23 16:48:51 2014 -0400
+
+    [indic] Handle old-spec Malayalam reordering with final Halant
+
+    See comment.
+
+    Micro-tests added.
+
+ src/hb-ot-shape-complex-indic.cc                   |  28
+ +++++++++++++++++----
+ test/shaping/Makefile.am                           |   1 +
+ .../270b89df543a7e48e206a2d830c0e10e5265c630.ttf   | Bin 0 -> 3428 bytes
+ .../57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf   | Bin 0 -> 2272 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                |   2 ++
+ test/shaping/tests/MANIFEST                        |   1 +
+ test/shaping/tests/indic-old-spec.tests            |   2 ++
+ .../indic/script-malayalam/misc/misc.txt           |   1 +
+ 8 files changed, 30 insertions(+), 5 deletions(-)
+
+commit d6d349d17898529ecdf8217a54987a3e9f81ce05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 23 11:38:49 2014 -0400
+
+    Give CC to gir-scanner
+
+    From:
+    https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-harfbuzz/0001-give-cc-to-gir-scanner.all.patch
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 8c1bdb46facb79cfca5ebfea9a7e467b40337f47
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 22 17:56:43 2014 -0400
+
+    0.9.33
+
+ NEWS         | 10 ++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+commit d218bdb26b226fbf68331eb586b24460c061313d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 22 18:01:46 2014 -0400
+
+    Fix test runner under Windows
+
+ test/shaping/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3f310dc0cae9015c45ba642b9b83d5695c807aad
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 22 16:26:27 2014 -0400
+
+    Disallow changing settings on immutable face
+
+    Ouch!
+
+ src/hb-face.cc    | 8 ++++----
+ src/hb-font.cc    | 4 ++--
+ src/hb-unicode.cc | 2 +-
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+commit 0fc0a1022854324261fea8893678a3e9fd9443eb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Jul 21 11:12:54 2014 -0400
+
+    [win] Fix Cygwin build
+
+    https://github.com/behdad/harfbuzz/commit/db308280488c2ee11ba865a9922eb6a0c1abeef3#commitcomment-7077778
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1132a7dd0ecf1c425078e39e5471330bace42659
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Jul 20 01:17:40 2014 -0400
+
+    Add HB_TAG_MAX_SIGNED / _HB_SCRIPT_MAX_VALUE_SIGNED
+
+    To make C language police happy.
+
+ src/hb-common.h | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+commit df99976398a53521e0228541055dcaee8f5ba87f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 19 17:31:23 2014 -0400
+
+    [gobject] Skip _HB_SCRIPT_MAX_VALUE
+
+    Fixes https://github.com/behdad/harfbuzz/pull/38
+
+ src/hb-common.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f1a8d50a87edfb8147aa1bec732ed7ccbfef2877
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 19 16:52:32 2014 -0400
+
+    [win] Don't define visibility attribtue under Cygwin
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9c77027d645142794c3ff1590a96bb151c3f2e91
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 19 16:37:22 2014 -0400
+
+    [win] Turn STRICT on for including windows.h
+
+ src/hb-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit db308280488c2ee11ba865a9922eb6a0c1abeef3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 19 16:32:04 2014 -0400
+
+    [win] Consolidate windows.h include tips and tricks
+
+ src/hb-atomic-private.hh |  4 ----
+ src/hb-mutex-private.hh  |  1 -
+ src/hb-private.hh        | 12 ++++++++++++
+ src/hb-uniscribe.cc      |  3 ---
+ src/hb-uniscribe.h       |  3 ---
+ 5 files changed, 12 insertions(+), 11 deletions(-)
+
+commit f26d59d4684be3419c976d781b6dbc956248e3bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 19 16:10:21 2014 -0400
+
+    More fixing MemoryBarrier() on Mingw32
+
+    Set requested windows header to Vista.  See discussion:
+
+    https://github.com/behdad/harfbuzz/commit/fbb2847f541389f40718af71c4945024ae177ab2#commitcomment-7054700
+
+ src/hb-atomic-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 00a57eb4b50fd894dc68c6525a5bbebf0ebc30e4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 18 14:42:50 2014 -0400
+
+    [test] Remove unused micro-font
+
+ .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf        | Bin 81968 ->
+ 0 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                     |   1 -
+ 2 files changed, 1 deletion(-)
+
+commit ed29b15f5d0d9e7b40143926ca7d40bf645f67e9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Jul 18 14:37:49 2014 -0400
+
+    [test] Add more Mongolian variation selector tests
+
+    From
+    https://code.google.com/p/chromium/issues/detail?id=393896
+
+ .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf        | Bin 0 ->
+ 81968 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                     |   2 ++
+ .../bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf        | Bin 0 ->
+ 74856 bytes
+ test/shaping/tests/mongolian-variation-selector.tests   |   1 +
+ .../shaper-arabic/script-mongolian/misc/MANIFEST        |   1 +
+ .../script-mongolian/misc/variation-selectors.txt       |   8 ++++++++
+ 6 files changed, 12 insertions(+)
+
+commit 385cf37cf084198e3aedb4354a7b025938a9f11b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 18:22:07 2014 -0400
+
+    Fix hb_in_range() unused-var warning on Windows
+
+ src/hb-private.hh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit e3b42f1af409c073b819bfc696024ccb1f1da63f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 17:13:54 2014 -0400
+
+    [arabic] Disable 'cswh' again
+
+    Ouch!
+
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 66f30915b185727a0041c998641edb550eb8a7fc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 16:05:47 2014 -0400
+
+    0.9.32
+
+ NEWS         | 12 ++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 82f4d9d53f348f41b14b877c1ac77c0372c49caa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 15:57:37 2014 -0400
+
+    [arabic] Add note re disabled 'cswh'
+
+ src/hb-ot-shape-complex-arabic.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 615d00ea252739da57edbd980ff27e573f88ee7e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 13:36:09 2014 -0400
+
+    [arabic] Apply init/medi/isol/fini/... in separate stages
+
+    Follows the order of the Arabic/Syriac specs.  Also don't stop
+    between rlig and calt in non-Arabic scripts.
+
+    Micro-tests for Arabic and Mongolian added for the latter.
+
+ src/hb-ot-shape-complex-arabic.cc                  |  56
+ +++++++++++++--------
+ test/shaping/Makefile.am                           |   2 +
+ .../813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf   | Bin 0 -> 3428 bytes
+ .../8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf   | Bin 0 -> 3428 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                |   3 ++
+ .../a919b33197965846f21074b24e30250d67277bce.ttf   | Bin 0 -> 12560 bytes
+ test/shaping/tests/MANIFEST                        |   1 +
+ test/shaping/tests/arabic-feature-order.tests      |   3 ++
+ 8 files changed, 43 insertions(+), 22 deletions(-)
+
+commit d21e997035b16e9807dfb29c3605abb93f92f1ee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 15:27:46 2014 -0400
+
+    [test] Make record_test understand cmdline args to hb-shape
+
+ test/shaping/record-test.sh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 7cd33f230441093dbfb1fec48f8c580ee8d9ef71
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 14:22:11 2014 -0400
+
+    Micro optimization
+
+ src/hb-fallback-shape.cc           | 36
+ +++++++++++++++++++-----------------
+ src/hb-ot-shape-complex-arabic.cc  | 19 +++++++++++--------
+ src/hb-ot-shape-complex-indic.cc   | 15 ++++++++++-----
+ src/hb-ot-shape-complex-myanmar.cc |  7 +++++--
+ src/hb-ot-shape-complex-sea.cc     |  7 +++++--
+ src/hb-ot-shape-fallback.cc        | 30 ++++++++++++++++--------------
+ src/hb-ot-shape.cc                 | 18 ++++++++++++------
+ 7 files changed, 78 insertions(+), 54 deletions(-)
+
+commit 164c13d73f67fdddba28e6409d76b4903e8ffab3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 14:16:38 2014 -0400
+
+    Another try to fix Mongolian free variation selectors
+
+    This reverts bf029281 and fixes it properly.  That commit
+    was not enough as it was only inheriting the shaping_action
+    for prev_action, but not curr_action.
+
+    Micro-test added.
+
+    https://code.google.com/p/chromium/issues/detail?id=393896
+
+ src/hb-ot-shape-complex-arabic.cc                  |  24
+ +++++++++++++++------
+ src/hb-unicode-private.hh                          |   3 ++-
+ test/shaping/fonts/sha1sum/MANIFEST                |   1 +
+ .../ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf   | Bin 0 -> 2748 bytes
+ .../tests/mongolian-variation-selector.tests       |   1 +
+ 5 files changed, 22 insertions(+), 7 deletions(-)
+
+commit 5209c505061130854a2bfea8849928ade3ee92f3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 17 12:23:44 2014 -0400
+
+    Revert "Show U+FFFD REPLACEMENT CHARACTER for invalid Unicode
+    codepoints"
+
+    We now handle U+FFFD replacement in hb_buffer_add_utf*().  Any other
+    manipulation can happen in user callbacks.  No need for this.
+
+    https://github.com/behdad/harfbuzz/commit/efe74214bbb68eaa3d7621e73869b5d58210107e#commitcomment-7039404
+
+    This reverts commit efe74214bbb68eaa3d7621e73869b5d58210107e.
+
+    Conflicts:
+       src/hb-ot-shape-normalize.cc
+
+ src/hb-ot-shape-normalize.cc | 7 -------
+ 1 file changed, 7 deletions(-)
+
+commit 9e7c720100e432b43564ed5ff12f3175ca2ed74a
+Author: Dominik Röttsches <dominik.rottsches@intel.com>
+Date:  Thu Jul 17 14:40:34 2014 +0300
+
+    Fix CoreText build after a8b89a09f6d3a34
+
+ src/hb-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit a4d643755a531c82ab91e1e43d6bb0b7bd46453a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 20:15:45 2014 -0400
+
+    Minor
+
+ src/hb-utf-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a18897f87ce2c6048c3a0339074924b2232e2b95
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 16:02:15 2014 -0400
+
+    0.9.31
+
+ NEWS        | 29 +++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 30 insertions(+), 1 deletion(-)
+
+commit 976c8f455221eb599d1c446eafd88d51d7d2aa65
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 15:34:20 2014 -0400
+
+    New API: hb_buffer_[sg]et_replacement_codepoint()
+
+    With this change, we now by default replace broken UTF-8/16/32 bits
+    with U+FFFD.  This can be changed by calling new API on the buffer.
+    Previously the replacement value used to be (hb_codepoint_t)-1.
+
+    Note that hb_buffer_clear_contents() does NOT reset the replacement
+    character.
+
+    See discussion here:
+
+    https://github.com/behdad/harfbuzz/commit/6f13b6d62daae4989e3cc2fe4b168e5c59650964
+
+    New API:
+
+      hb_buffer_set_replacement_codepoint()
+      hb_buffer_get_replacement_codepoint()
+
+ src/hb-buffer-private.hh |  1 +
+ src/hb-buffer.cc        | 45
+ ++++++++++++++++++++++++++++++++++++++++++---
+ src/hb-buffer.h         | 15 ++++++++++++++-
+ src/hb-utf-private.hh   | 34 ++++++++++++++++++++--------------
+ test/api/test-buffer.c   | 26 +++++++++++++++-----------
+ 5 files changed, 92 insertions(+), 29 deletions(-)
+
+commit bcba8b45024e1eca8be77ca2657de1dc44dbf8fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 14:59:04 2014 -0400
+
+    New API hb_buffer_add_codepoints()
+
+    Like hb_buffer_add_utf32, but doesn't do any Unicode validation.
+    This is like what hb_buffer_add_utf32 used to be until a couple
+    commits ago.
+
+ src/hb-buffer.cc | 32 +++++++++++++++++++++++++++-----
+ src/hb-buffer.h  |  8 ++++++++
+ 2 files changed, 35 insertions(+), 5 deletions(-)
+
+commit 625dbf141a05f1ae81a7b8cbc529996370101284
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 14:49:55 2014 -0400
+
+    [buffer] Templatize UTF-* functions
+
+ src/hb-buffer.cc      |  10 +-
+ src/hb-utf-private.hh | 307
+ ++++++++++++++++++++++++++------------------------
+ 2 files changed, 166 insertions(+), 151 deletions(-)
+
+commit e634fed4285ce440d277345727ed01757df6d779
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 14:17:26 2014 -0400
+
+    [buffer] Validate UTF-32 input
+
+    Same as what we do for UTF-8 and UTF-16.
+
+ src/hb-utf-private.hh | 13 +++++++++---
+ test/api/test-buffer.c | 55
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 65 insertions(+), 3 deletions(-)
+
+commit b98c5db32d15fcfb27ce2f6737203ce1ad124319
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 13:44:01 2014 -0400
+
+    Minor refactoring
+
+ src/hb-ot-layout-gsubgpos-private.hh | 25 ++++++-------------------
+ 1 file changed, 6 insertions(+), 19 deletions(-)
+
+commit 844f1a487d9c39724ebff20e89f6184c9a59be0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 13:32:51 2014 -0400
+
+    [tests] Add record-test.sh
+
+ test/shaping/Makefile.am    | 1 +
+ test/shaping/record-test.sh | 49
+ +++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 50 insertions(+)
+
+commit 3b861421a772f52eb232ff93bd74b5a8214801ec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 13:22:05 2014 -0400
+
+    Fix Mongolian Variation Selectors for fonts without GDEF
+
+    Originally we fixed those in 79d1007a501fd63c0ba4d51038c513e6b8b94740.
+    However, fonts like MongolianWhite don't have GDEF, but have
+    IgnoreMarks
+    in their LigatureSubstitute init/etc features.  We were synthesizing a
+    GDEF class of mark for Mongolian Variation Selectors and as such the
+    ligature lookups where not matching.  Uniscribe doesn't do that.
+
+    I tried with more sophisticated fixes, like, if there is no GDEF and
+    a lookup-flag mismatch happens, instead of rejecting a match, try
+    skipping that glyph.  That surely produces some interesting behavior,
+    but since we don't want to support fonts missing GDEF more than
+    we have
+    to, I went for this simpler fix which is to always mark
+    default-ignorables as base when synthesizing GDEF.
+
+    Micro-test added.
+
+    Fixes rest of https://bugs.freedesktop.org/show_bug.cgi?id=65258
+
+ src/hb-ot-shape.cc                                      |  13
+ +++++++++++--
+ .../sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf | Bin 0 ->
+ 2780 bytes
+ test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
+ test/shaping/tests/MANIFEST                             |   1 +
+ test/shaping/tests/mongolian-variation-selector.tests   |   1 +
+ 5 files changed, 14 insertions(+), 2 deletions(-)
+
+commit 878a25375b2fdf64cf0cc30c23fca9fcd58548e8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 13:21:26 2014 -0400
+
+    Minor
+
+ src/hb-ot-shape.cc       | 1 +
+ src/hb-unicode-private.hh | 6 +++---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit ec181e50140fc65b32d6080e2f7f73bbe0269ba9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 13:10:03 2014 -0400
+
+    Minor moving around
+
+ src/hb-ot-shape.cc | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit e7ce50d9eb6e3678f731b10dfeb308ffc478af8d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 16 12:30:39 2014 -0400
+
+    [indic] Fix access past end of array
+
+ src/hb-ot-shape-complex-indic.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 73e23b0acfd2948d500321769035c56c9e072d77
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 15 18:43:49 2014 -0400
+
+    Whitespace
+
+ src/hb-ot-layout-gsubgpos-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit f27be105afb86b337c7d940badc5a6462f0b58bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 18:15:34 2014 -0400
+
+    [Android.mk] Actually remove static library
+
+ Android.mk | 26 --------------------------
+ 1 file changed, 26 deletions(-)
+
+commit 96b80e9bcc4796eedac09d284dc8cc0439ced6ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 17:00:12 2014 -0400
+
+    [Android.mk] Remove static library, add note re how to build
+
+ Android.mk | 41 +++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 37 insertions(+), 4 deletions(-)
+
+commit b7bc0b671d2d568cb64b647dad2ca866a4e0183b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 16:20:28 2014 -0400
+
+    Simplify / speed up UTF-8 code
+
+ src/hb-utf-private.hh | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+commit af2490c0959daa0fe7f32a8b3b3a3699c7fc5f48
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 16:10:58 2014 -0400
+
+    Only accept well-formed UTF-8 sequences
+
+    Enable tests that were disabled before, and adjust one test,
+    and add more tests.
+
+ src/hb-utf-private.hh | 93
+ +++++++++++++++++++++++++++++++++-----------------
+ test/api/test-buffer.c |  9 +++--
+ 2 files changed, 68 insertions(+), 34 deletions(-)
+
+commit 7323d385cc758c06671cb38239d240eb517b28bc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 15:10:05 2014 -0400
+
+    Simplify hb_utf_prev<16> to call hb_utf_next<16>
+
+ src/hb-utf-private.hh | 23 ++++++++---------------
+ 1 file changed, 8 insertions(+), 15 deletions(-)
+
+commit c09a607a842fdd7b33e2c57e8af96d21ff091acd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 15:05:36 2014 -0400
+
+    Use hb_in_range() for arabic and indic tables
+
+    Though, looks like gcc was smart enough to produce the same code
+    before...
+
+ src/gen-arabic-table.py                |  18 +-
+ src/gen-indic-table.py                         |  10 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 420
+ ++++++++++++++++----------------
+ src/hb-ot-shape-complex-indic-table.cc  |  88 +++----
+ 4 files changed, 268 insertions(+), 268 deletions(-)
+
+commit 7627100f428ac0ec8509d961d368d2d25d8f0b6e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 14:54:42 2014 -0400
+
+    Mark unsigned integer literals with the u suffix
+
+    Simplifies hb_in_range() calls as the type can be inferred.
+    The rest is obsessiveness, I admit.
+
+ src/hb-buffer-serialize.cc                |   2 +-
+ src/hb-common.cc                          |   4 +-
+ src/hb-coretext.cc                        |  16 +--
+ src/hb-open-file-private.hh               |   4 +-
+ src/hb-open-type-private.hh               |   2 +-
+ src/hb-ot-cmap-table.hh                   |   4 +-
+ src/hb-ot-head-table.hh                   |   6 +-
+ src/hb-ot-hhea-table.hh                   |   2 +-
+ src/hb-ot-layout-common-private.hh        |  14 +--
+ src/hb-ot-layout-gdef-table.hh                    |   8 +-
+ src/hb-ot-layout-gpos-table.hh                    |  24 ++--
+ src/hb-ot-layout-gsub-table.hh                    |   6 +-
+ src/hb-ot-layout-gsubgpos-private.hh      |   2 +-
+ src/hb-ot-layout-jstf-table.hh                    |   2 +-
+ src/hb-ot-layout-private.hh               |   4 +-
+ src/hb-ot-layout.h                        |   6 +-
+ src/hb-ot-map-private.hh                  |   8 +-
+ src/hb-ot-maxp-table.hh                   |   4 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh |  2 +-
+ src/hb-ot-shape-complex-hangul.cc         |  36 +++---
+ src/hb-ot-shape-complex-hebrew.cc         | 134 ++++++++++-----------
+ src/hb-ot-shape-complex-indic.cc          | 182
+ ++++++++++++++---------------
+ src/hb-ot-shape-complex-myanmar.cc        |  56 ++++-----
+ src/hb-ot-shape-complex-sea.cc                    |   8 +-
+ src/hb-ot-shape-complex-thai.cc           |  84 ++++++-------
+ src/hb-ot-shape-fallback.cc               |  40 +++----
+ src/hb-ot-shape-normalize.cc              |   2 +-
+ src/hb-ot-shape.cc                        |   6 +-
+ src/hb-ot-tag.cc                          |  18 +--
+ src/hb-unicode-private.hh                 |  40 +++----
+ src/hb-uniscribe.cc                       |  14 +--
+ src/hb-utf-private.hh                     |  16 +--
+ 32 files changed, 378 insertions(+), 378 deletions(-)
+
+commit a8b89a09f6d3a3466282aae07fd65e143f9f8f83
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 14:18:01 2014 -0400
+
+    Simplify hb_in_range()
+
+    It's both faster and produces smaller code.  Now I feel stupid for
+    not writing it this way before.
+
+ src/hb-private.hh | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+commit db8934faa1854dafaf4c4ce34d1818e12f67ef52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 13:58:36 2014 -0400
+
+    Simplify hb_utf_prev<8> to call hb_utf_next<8>
+
+ src/hb-utf-private.hh | 24 ++++--------------------
+ 1 file changed, 4 insertions(+), 20 deletions(-)
+
+commit efe74214bbb68eaa3d7621e73869b5d58210107e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 11 11:59:48 2014 -0400
+
+    Show U+FFFD REPLACEMENT CHARACTER for invalid Unicode codepoints
+
+    Only if the font doesn't support it.  Ie, this gives the user to
+    use non-Unicode codepoints as private values and return a meaningful
+    glyph for them.  But if it's invalid and font callback doesn't
+    like it, and if font has U+FFFD, show that instead.
+
+    Font functions that do not want this automatic replacement to
+    happen should return true from get_glyph() if unicode > 0x10FFFF.
+
+    Replaces https://github.com/behdad/harfbuzz/pull/27
+
+ src/hb-ot-shape-normalize.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 6f13b6d62daae4989e3cc2fe4b168e5c59650964
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 19:31:40 2014 -0400
+
+    When parsing UTF-16, generate invalid codepoint for lonely low
+    surrogate
+
+    Test passes now.
+
+ src/hb-utf-private.hh | 42 ++++++++++++++++++++++++++++--------------
+ 1 file changed, 28 insertions(+), 14 deletions(-)
+
+commit 24b2ba9dfa7c35769cd843a07079ef88fa594bf8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 19:31:16 2014 -0400
+
+    [test-buffer] Add test for lonely low-surrogate
+
+    Currenty fails.  Ouch!
+
+ test/api/test-buffer.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 6334495ac1ee0a86228e67794b7a41ee91146f3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 19:22:07 2014 -0400
+
+    Use zh-Hans / zh-Hant when converting OT language tag to hb_language_t
+
+ src/hb-ot-tag.cc      | 15 +++------------
+ test/api/test-ot-tag.c |  6 +++---
+ 2 files changed, 6 insertions(+), 15 deletions(-)
+
+commit f381e320df795a9d73ac81499f8ed8c311bcb2f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 19:20:35 2014 -0400
+
+    Fix lang matching logic
+
+    Previous code was broken logically, but harmless.
+
+ src/hb-ot-tag.cc      | 2 +-
+ test/api/test-ot-tag.c | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit ee5350d667f3a9644667202597694581f2cf657d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 19:06:45 2014 -0400
+
+    Accept BCP 47 zh-Hans / zh-Hant language tags
+
+ src/hb-ot-tag.cc      | 27 ++++++++++++++++++---------
+ test/api/test-ot-tag.c |  3 +++
+ 2 files changed, 21 insertions(+), 9 deletions(-)
+
+commit 431540286794e023ec5eafd5eeedc008d4f31b4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 10 17:37:26 2014 -0400
+
+    [Android.mk] Add note re static library
+
+ Android.mk | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 5b4131eb1c670c20fd9a45a5617c64060a505ef5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 19:09:08 2014 -0400
+
+    [Android.mk] Update for new ICU
+
+    https://android-review.googlesource.com/#/c/100722/1/Android.mk
+
+ Android.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ab28196c9557a63971a56915aa6f98bb5803bd1b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 18:18:06 2014 -0400
+
+    [Android.mk] Re-enable ICU unicode funcs
+
+ Android.mk | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+commit ea001374b86c4f1b24246c08a3d66d2a0e95a827
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 17:28:43 2014 -0400
+
+    0.9.30
+
+ NEWS        | 17 +++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+commit 8b16ff12590200afb08e8821e3f14d2fdf8efbda
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 17:40:52 2014 -0400
+
+    [uniscribe] Fix build after recent changes to Offset
+
+ src/hb-ot-name-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 73f7f8919ea1f09b8c5b29f231ac84105cde2145
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 17:17:18 2014 -0400
+
+    Define _POSIX_C_SOURCE only if it is not defined
+
+    Fixes https://github.com/behdad/harfbuzz/pull/45
+
+ src/hb-blob.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 6bd5646f1b865a76304a67e03a6161afcfef293f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 17:07:06 2014 -0400
+
+    [tests] Remove bash'ish
+
+    Apparently on travis-ci, bash is linked to dash, which doesn't
+    understand "let".  Failing tests were not being noticed.  See eg:
+
+      https://travis-ci.org/behdad/harfbuzz/jobs/29544211
+
+    Don't rely on bash.
+
+ test/shaping/run-tests.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0afedaa96c81b63774a4a0ef9b4cb4995d24ec9e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 17:00:48 2014 -0400
+
+    [util/hb-shape] Fix crash; oops
+
+ util/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0cd94491b99aed438ad79a55cdfced8d1b657179
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 16:51:38 2014 -0400
+
+    [ucdn] Update to Unicode 7.0.0 data
+
+    From http://github.com/behdad/ucdn
+
+ src/hb-ucdn.cc                      |   23 +
+ src/hb-ucdn/README          |    1 +
+ src/hb-ucdn/ucdn.c          |    2 +-
+ src/hb-ucdn/ucdn.h          |   27 +
+ src/hb-ucdn/unicodedata_db.h | 3711
+ ++++++++++++++++++++++--------------------
+ 5 files changed, 2039 insertions(+), 1725 deletions(-)
+
+commit 9d4ede3a97fff544a5ec2a671e49a92a79645b61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 16:19:55 2014 -0400
+
+    [Android.mk] Update source list
+
+ Android.mk | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 7e1ab1f6d812a55f75d4844f7981d5604481049c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 16:13:40 2014 -0400
+
+    [Android.mk] Whitespace
+
+ Android.mk | 26 ++++++--------------------
+ 1 file changed, 6 insertions(+), 20 deletions(-)
+
+commit 5c6695c42470e0a15e9029ebe8ecbebf3fa4f95b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 9 16:07:12 2014 -0400
+
+    [Android.mk] Remove -lpthread; we build with -DHB_NO_MT
+
+ Android.mk | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 9109f1e944dd4bd4ae8057b75c8a31e9d31797aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 8 20:02:29 2014 -0400
+
+    [util/hb-shape] Accept an empty output-format that would skip output
+
+    Useful for benchmarking, to avoid buffer serialization overhead (which
+    seems to by far dominate shaping!)
+
+ util/hb-shape.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 8656408572c2685f278a3b742ee69c767c29788c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 8 18:10:20 2014 -0400
+
+    [util] Fix hb-view rendering with --font-funcs=ot
+
+ util/helper-cairo.cc | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+commit 8650def73500204b79c651f58b1be3f94a41973d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jul 5 15:50:18 2014 -0400
+
+    [util] Add option to set font function implementation to use
+
+    Supports ft and ot right now.  hb-view currently not rendering
+    with ot.
+    Will fix after some clean up.
+
+ util/options.cc | 76
+ ++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ util/options.hh | 21 ++++++++++++++++
+ 2 files changed, 88 insertions(+), 9 deletions(-)
+
+commit 2306ad46dce1c53b0b1bfabdc04d70e3b99eabb7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 4 18:09:29 2014 -0400
+
+    [util] Fix memory issue
+
+ util/options.cc | 6 ++----
+ util/options.hh | 9 +++++++++
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 14a4a9d649798d32c31f79b4045a885626dffc7f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 1 15:51:54 2014 -0400
+
+    Add Roozbeh to AUTHORS
+
+    He's been my shadow for all Indic-related changes in the last
+    few months.
+
+ AUTHORS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 68f724484b1663255ee249481624e552d2e2313f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 30 15:46:53 2014 -0400
+
+    [indic] Remove some more now-unused special-cases
+
+ src/hb-ot-shape-complex-indic.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit e79c9489802f99dc7eb8b4c2765c4c71b5f80e60
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 30 15:39:39 2014 -0400
+
+    [indic] Remove special-casing of U+1CF2,1CF3
+
+    These were introduced in a498565cedf0441ae723c5e5969f637d792a15e7,
+    but IndicSyllabicCategory has had the correct value already, so the
+    special code was never needed.
+
+ src/hb-ot-shape-complex-indic.cc | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit d743ce78e10758b7dbaf0cfd191309e5ef646881
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 30 15:24:02 2014 -0400
+
+    [indic-table] Update to Unicode 7.0 data
+
+    Touch code just enough to preserve previous syllable structure
+    and functionality as closely as possible.  Many further cleanups
+    coming later.
+
+ src/gen-indic-table.py                          |   4 +
+ src/hb-ot-shape-complex-indic-private.hh |  23 +-
+ src/hb-ot-shape-complex-indic-table.cc   | 468
+ ++++++++++++++++++++++---------
+ src/hb-ot-shape-complex-indic.cc        |  21 --
+ src/hb-ot-shape-complex-myanmar.cc      |   2 -
+ 5 files changed, 355 insertions(+), 163 deletions(-)
+
+commit 5fa21b3ab7175f55f89cb194b544d5d4bd06a481
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 30 14:30:54 2014 -0400
+
+    [indic-table] Fix category frequency counts in comments
+
+ src/gen-indic-table.py                        |  2 +-
+ src/hb-ot-shape-complex-indic-table.cc | 46
+ +++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+commit 5c4e3e9a57b6b735e7d72cbd5f4070cf024d7015
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 30 14:25:18 2014 -0400
+
+    Whitespace
+
+ src/hb-ot-shape-complex-indic-private.hh | 76
+ ++++++++++++++++----------------
+ 1 file changed, 38 insertions(+), 38 deletions(-)
+
+commit af528b6674bccac3efd13f8b33fcdc6aeb178f4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 18:07:00 2014 -0400
+
+    Fix typo; ouch!
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7d4ada66c96a748ce92f8e8edac149361c3dc829
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 17:30:59 2014 -0400
+
+    Mark unsed members with a "Z" suffix
+
+    There may be more. There are members that are by definition
+    redundant or reserved and not needed, NOT what we *currently*
+    don't use.
+
+    I'm sure there's more...
+
+ src/hb-open-file-private.hh       |  6 +++---
+ src/hb-ot-cmap-table.hh           | 24 ++++++++++++------------
+ src/hb-ot-layout-common-private.hh |  2 +-
+ 3 files changed, 16 insertions(+), 16 deletions(-)
+
+commit 23afcff1d14e57f5ce30a4100698d4f2dc530958
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 17:22:36 2014 -0400
+
+    [ot-font] Implement Unicode variation selectors
+
+ src/hb-ot-font.cc | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+commit a5a4736916b6035e6413d4619f9e7287e683d51b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 17:03:22 2014 -0400
+
+    [cmap] Implement subtable format 14
+
+ src/hb-ot-cmap-table.hh | 147
+ +++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 133 insertions(+), 14 deletions(-)
+
+commit 586b60622c33878f9ca4826b4ef07369d32bf039
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:39:47 2014 -0400
+
+    Minor: final bits of cleanup
+
+ src/hb-open-type-private.hh       | 1 +
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit 51d9ba09bc78188ec87218aef5232e80568c1712
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:27:15 2014 -0400
+
+    Minor
+
+ src/hb-open-type-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 3084767e92483c669f38319f153c498e9a6b92c7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:24:35 2014 -0400
+
+    Minor: Remove LongArrayOf
+
+ src/hb-open-file-private.hh | 2 +-
+ src/hb-open-type-private.hh | 4 ----
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+commit 41ea59495032e712fa6f801350ee00d5f00b5724
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:23:18 2014 -0400
+
+    Minor: Remove LongSortedArrayOf
+
+ src/hb-open-type-private.hh | 4 ----
+ src/hb-ot-cmap-table.hh     | 2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+commit bb6ecf2ce5c2679c298741af17836a22e1d68121
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:13:44 2014 -0400
+
+    Minor: Remove LongOffsetArrayOf and LongOffsetLongArrayOf
+
+ src/hb-open-file-private.hh   | 2 +-
+ src/hb-open-type-private.hh   | 8 --------
+ src/hb-ot-layout-gdef-table.hh | 2 +-
+ 3 files changed, 2 insertions(+), 10 deletions(-)
+
+commit 99d281712390fd54e523b2f0580d10445457ec2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:12:52 2014 -0400
+
+    Minor: Remove GenericOffset
+
+ src/hb-open-type-private.hh       | 13 +++++--------
+ src/hb-ot-layout-common-private.hh |  8 ++++----
+ 2 files changed, 9 insertions(+), 12 deletions(-)
+
+commit 9da552dcc5b89b3bbbe5a55fb7c543222382e12a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 15:09:42 2014 -0400
+
+    Minor: Remove some GenericXXX templates
+
+ src/hb-open-type-private.hh       | 32 +++++++++++---------------------
+ src/hb-ot-cmap-table.hh           |  4 ++--
+ src/hb-ot-layout-common-private.hh |  2 +-
+ 3 files changed, 14 insertions(+), 24 deletions(-)
+
+commit 36073ede5b52bd1231622cbacd1bee6b82696d81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 14:48:54 2014 -0400
+
+    Minor: Reorder template parameter order
+
+ src/hb-open-type-private.hh | 14 +++++++-------
+ src/hb-ot-cmap-table.hh     | 2 +-
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 0394ec1bfbd7806cbe9fc809b34f96f8d12ffbf2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 27 14:40:35 2014 -0400
+
+    Minor: Introduce GenericOffset
+
+ src/hb-open-type-private.hh | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+commit 0d1b3419a7bbfd18ab8fed1abd3a41dec11e8d97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 26 19:13:34 2014 -0400
+
+    Minor: Use template parameter default values for OffsetTo
+
+ src/hb-open-type-private.hh | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+commit 546b1adcdce2d3592843938b0b81ff32e67b0b83
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 26 19:10:21 2014 -0400
+
+    Minor: Use template parameter default values for hb_prealloced_array_t
+
+ src/hb-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 911ca38645bd51764e7859bc482319e8f6d2f710
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jun 24 10:20:36 2014 -0600
+
+    Add back API removed recently
+
+    Add hb_ot_layout_language_get_required_feature_index() again, which
+    is used in Pango.  This was removed in
+    da132937989acb4d8ca9bd41c79f98750e7dda30 in favor of
+    hb_ot_layout_language_get_required_feature().
+
+    API changes:
+
+      - Added hb_ot_layout_language_get_required_feature_index back.
+
+ src/hb-ot-layout.cc | 15 +++++++++++++++
+ src/hb-ot-layout.h  | 7 +++++++
+ 2 files changed, 22 insertions(+)
+
+commit 89e4946929a8cd2359c7d76fa9272d5604243002
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jun 22 11:32:13 2014 -0600
+
+    Add new IndicSyllabicCategory short forms for Unicode 7.0
+
+ src/gen-indic-table.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit dcee838e89c2863c2fda4e8f098e720637e02335
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jun 22 11:29:59 2014 -0600
+
+    Minor
+
+ src/gen-arabic-table.py | 2 +-
+ src/gen-indic-table.py  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f2ad86e6053fa87ab188c36edc3d98c92324c049
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 15:31:10 2014 -0600
+
+    [indic-table-gen] Minor
+
+ src/gen-indic-table.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 2ec62279aab8c2263f17ffbc7c6f74304674f9a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 15:25:59 2014 -0600
+
+    [indic-table] Update to Unicode 6.3.0
+
+    Was from 6.2.0.  It's a no-op.  Committing for the record.
+
+ src/hb-ot-shape-complex-indic-table.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 5d4d7384efa97a30893ad28b9ad9a994722de12c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 14:53:21 2014 -0600
+
+    Minor: format
+
+ src/hb-ot-shape-complex-arabic.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 44243ae5902cc420e6bf6ec2fca2584ba93ff2fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 14:19:34 2014 -0600
+
+    [arabic-table] Update to Unicode 7.0
+
+    Old table was from 6.2.  Remove hard-coded Mongolian and Phags-pa
+    data.
+    This completes support for new scripts Manichian and Psaltar Pahlavi.
+
+ src/hb-ot-shape-complex-arabic-table.hh | 72
+ ++++++++++++++++++++++++++++-----
+ src/hb-ot-shape-complex-arabic.cc      | 22 ----------
+ 2 files changed, 63 insertions(+), 31 deletions(-)
+
+commit cd86ab9b4f4d7bd4f563be64a83714fc8fb395d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 14:10:38 2014 -0600
+
+    [arabic-table] Add ZWJ/ZWNJ now that table is segmented
+
+ src/gen-arabic-table.py                |  2 --
+ src/hb-ot-shape-complex-arabic-table.hh | 12 +++++++++++-
+ src/hb-ot-shape-complex-arabic.cc      |  5 -----
+ 3 files changed, 11 insertions(+), 8 deletions(-)
+
+commit 2390d9b67e1dfeccd3f0850d1304c52b54817ca0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 21 14:07:00 2014 -0600
+
+    [arabic-table] Further tune
+
+    In anticipation of Unicode 7.0 data coming in the next commit.
+
+ src/gen-arabic-table.py                | 10 ++++++---
+ src/hb-ot-shape-complex-arabic-table.hh | 38
+ +++++++++++++++------------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+commit a133e6067aaebc494c0156b5fac7f4a879e12dbe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 18:01:34 2014 -0400
+
+    [indic-table] Minor
+
+ src/gen-indic-table.py | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit b900fa2c8cc088dbcbdbf90bfdf8764f9ee1c96a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 17:59:43 2014 -0400
+
+    [arabic-table] Use segmented table
+
+    No functional change.
+
+ src/gen-arabic-table.py                | 82
+ +++++++++++++++++++++++----------
+ src/hb-ot-shape-complex-arabic-table.hh | 53 ++++++++++++++-------
+ src/hb-ot-shape-complex-arabic.cc      |  8 ++--
+ 3 files changed, 97 insertions(+), 46 deletions(-)
+
+commit c2e113404640bf9b8bac469d0803ac946e77964f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 17:57:03 2014 -0400
+
+    [indic-table] Make output stable
+
+ src/gen-indic-table.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 55abfbd2ac1626af16151298a0837b837d0796df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 16:47:43 2014 -0400
+
+    [indic-table] Minor
+
+    No output change.
+
+ src/gen-indic-table.py | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit f88670749006991282bcc4e8b6218487295ca670
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 16:30:10 2014 -0400
+
+    [arabic-table] Don't write comments
+
+    No functional change.
+
+ src/gen-arabic-table.py                |  20 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 710
+ ++------------------------------
+ 2 files changed, 38 insertions(+), 692 deletions(-)
+
+commit 200dfe3eb10feda2ad25940338b08011f4757ca4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 16:20:59 2014 -0400
+
+    [arabic-table] Use short names for values
+
+    No functional change.
+
+ src/gen-arabic-table.py                |   16 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 1386
+ ++++++++++++++++---------------
+ 2 files changed, 716 insertions(+), 686 deletions(-)
+
+commit 3f5327a41efcf50f64d9498ef3dfd6875ef6a5ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 16:17:42 2014 -0400
+
+    [arabic-table] Read Blocks.txt and shuffle code around
+
+    No functional change.
+
+ src/Makefile.am                        |  2 +-
+ src/gen-arabic-table.py                | 80
+ +++++++++++++++++++--------------
+ src/hb-ot-shape-complex-arabic-table.hh | 30 ++++++++-----
+ 3 files changed, 67 insertions(+), 45 deletions(-)
+
+commit 171f970e4f72d9fe1af30eab32b96906ee4a14f5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 15:25:30 2014 -0400
+
+    [indic-table] Black-list Thai, Lao, and Tibetan
+
+    We don't need Indic table for those.
+
+ src/gen-indic-table.py                        |  3 ++
+ src/hb-ot-shape-complex-indic-table.cc | 94
+ +++++++---------------------------
+ 2 files changed, 21 insertions(+), 76 deletions(-)
+
+commit 65ac2dae4f284f563b2dc476a21e2b5a48124de8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 15:12:49 2014 -0400
+
+    [indic-table] Speed up lookup
+
+ src/gen-indic-table.py                        | 22 +++++++++---
+ src/hb-ot-shape-complex-indic-table.cc | 61
+ +++++++++++++++++++++++-----------
+ 2 files changed, 59 insertions(+), 24 deletions(-)
+
+commit 64442a3f4c5c7be08893454742cad6bfe73cb8d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 14:58:53 2014 -0400
+
+    [indic-table] Fix compiler warning
+
+ src/gen-indic-table.py                        | 4 +---
+ src/hb-ot-shape-complex-indic-table.cc | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+commit 0436e1d50527497ebe5053b51a34ce6590276249
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 14:56:22 2014 -0400
+
+    [indic-table] Make table more compact by not covering full blocks
+
+    -#define indic_offset_total 4416
+    +#define indic_offset_total 3816
+
+    -}; /* Table occupancy: 60% */
+    +}; /* Table occupancy: 69% */
+
+ src/gen-indic-table.py                        |  24 ++++--
+ src/hb-ot-shape-complex-indic-table.cc | 150
+ +++++++++------------------------
+ 2 files changed, 57 insertions(+), 117 deletions(-)
+
+commit 190a251479b3cfc68871ff1daf9a9d1abe3f86e6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 14:41:39 2014 -0400
+
+    [indic-table] Remove block range from data table
+
+    No functional change.
+
+ src/gen-indic-table.py                        |   4 +-
+ src/hb-ot-shape-complex-indic-table.cc | 102
+ ++++++++++++++++-----------------
+ 2 files changed, 54 insertions(+), 52 deletions(-)
+
+commit 2b051c6057920c564c13c5d6a3e6dca93446fa12
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 14:09:57 2014 -0400
+
+    Rename HB_VERSION_CHECK and hb_version_check to "atleast"
+
+    HB_VERSION_CHECK's comparison was originally written wrongly
+    by mistake.  When API tests were written, they were also written
+    wrongly to pass given the wrong implementation... Sigh.
+
+    Given the purpose of this API, there's no point in fixing it
+    without renaming it.  As such, rename.
+
+    API changes:
+
+      HB_VERSION_CHECK -> HB_VERSION_ATLEAST
+      hb_version_check -> hb_version_atleast
+
+ docs/reference/harfbuzz-sections.txt |  4 ++--
+ src/hb-common.cc                    | 10 +++++-----
+ src/hb-version.h.in                 | 10 +++++-----
+ test/api/test-version.c             | 29 +++++++++++++++--------------
+ 4 files changed, 27 insertions(+), 26 deletions(-)
+
+commit cabfa538ed4b1355326fa8de05f7209dda1c1c7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 20 13:51:21 2014 -0400
+
+    Adjust unused doc symbols
+
+ docs/reference/harfbuzz-sections.txt | 19 +++++++++++++++++--
+ src/hb-ot-shape.h                   | 21 ++++++++++-----------
+ 2 files changed, 27 insertions(+), 13 deletions(-)
+
+commit da132937989acb4d8ca9bd41c79f98750e7dda30
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Sun Apr 27 14:05:24 2014 +0100
+
+    Rework handling of requiredFeature to solve problem with rlig in
+    arial.ttf from winxp
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=986802
+    Fixes https://github.com/behdad/harfbuzz/pull/39
+
+    API Change:
+
+    -hb_ot_layout_language_get_required_feature_index
+    +hb_ot_layout_language_get_required_feature
+
+    New API takes an extra pointer argument.  Pass NULL in to get
+    behavior of previous API.
+
+    Reworked by behdad
+
+ src/hb-ot-layout-gsubgpos-private.hh |  4 +--
+ src/hb-ot-layout.cc                 | 29 ++++++++++++---------
+ src/hb-ot-layout.h                  | 11 ++++----
+ src/hb-ot-map.cc                    | 50
+ ++++++++++++++++++++++++++----------
+ src/main.cc                         |  4 +--
+ 5 files changed, 64 insertions(+), 34 deletions(-)
+
+commit df554af99db390e42d378983bb3fcf583477a1d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 19 15:39:18 2014 -0400
+
+    Rename search() to bsearch() and lsearch()
+
+    Such that the complexity of the algorithm used is clear at
+    call site.
+
+ src/hb-open-type-private.hh       |  4 ++--
+ src/hb-ot-cmap-table.hh           | 14 +++++++-------
+ src/hb-ot-layout-common-private.hh |  9 +++++----
+ 3 files changed, 14 insertions(+), 13 deletions(-)
+
+commit fb8cc86ff99c08064ac58a559bb66cc340693b92
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 19 15:30:18 2014 -0400
+
+    Rename sort() to qsort()
+
+    In an effort to make the algorithm used clear.
+
+ src/hb-coretext.cc  | 4 ++--
+ src/hb-ot-map.cc    | 4 ++--
+ src/hb-private.hh   | 8 ++++----
+ src/hb-uniscribe.cc | 4 ++--
+ 4 files changed, 10 insertions(+), 10 deletions(-)
+
+commit 577ca4814314c374824cac736996b9cdd4f9d11f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 18 12:29:23 2014 -0400
+
+    [unicode7] Update list of Default_Ignorable codepoints
+
+ src/hb-unicode-private.hh | 66
+ +++++++++++++++++++++--------------------------
+ 1 file changed, 30 insertions(+), 36 deletions(-)
+
+commit 7cfee3827636f0dff7df5c8975a4fadd1b4bfbd5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 15:09:30 2014 -0700
+
+    [unicode7] Route Manichaean and Psalter Pahlavi through Arabic shaper
+
+    Still needs update to joining table to fully work.
+
+ src/hb-ot-shape-complex-private.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit a4a7899cd93fb9d1bc2163a4bbabfa733ee5bd52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 15:06:42 2014 -0700
+
+    [unicode7] Mark right-to-left scripts
+
+ src/hb-common.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 62587bfc5178a447ef66d88eab7412a7efe84692
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 15:07:21 2014 -0700
+
+    [unicode7] Declare Unicode 7 scripts
+
+ src/hb-common.h | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+commit dc61294aa93d36d0c5d187d4a692560a7cb46444
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 14:58:28 2014 -0700
+
+    [unicode7] Add missing ISO 15924 tags
+
+ src/hb-common.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 7526373e70bc4c2e2072da36babf9399fcf483b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jun 17 11:45:26 2014 -0400
+
+    [coretext] Remove unused var
+
+ src/hb-coretext.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 798e4185bc71b1a63528e6b0af236d4c964ec607
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Tue Jun 10 13:10:30 2014 +0100
+
+    When zeroing mark widths for LTR, also adjust offset...
+
+    ...so that they overstrike preceding glyph.
+
+    https://github.com/behdad/harfbuzz/pull/43
+
+ src/hb-ot-shape.cc | 50
+ +++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 39 insertions(+), 11 deletions(-)
+
+commit 80f7405a5208f88b8615aa4ce4c54ffeb16f04f8
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Tue Jun 10 13:10:02 2014 +0100
+
+    [Thai] set the correct general category on Nikhahit when decomposing
+    Sara-Am.
+
+ src/hb-ot-shape-complex-thai.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 1d634cbb4b0338e1c2841127a72c5fac3a2a5ca1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 6 17:55:02 2014 -0400
+
+    Fix base-position when 'pref' is NOT formed
+
+    If pre-base reordering Ra is NOT formed (or formed and then
+    broken up), we should consider that Ra as base.  This is
+    observable when there's a left matra or dotreph that positions
+    before base.
+
+    Now, it might be that we shouldn't do this if the Ra happend
+    to form a below form.  We can't quite deduce that right now...
+
+    Micro test added.  Also at:
+
+    https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
+
+ src/hb-ot-shape-complex-indic.cc                  |  28
+ +++++++++++++++++++--
+ test/shaping/fonts/sha1sum/MANIFEST               |   5 ++++
+ .../e207635780b42f898d58654b65098763e340f5c7.ttf   | Bin 0 -> 3000 bytes
+ test/shaping/tests/indic-pref-blocking.tests      |   3 ++-
+ 4 files changed, 33 insertions(+), 3 deletions(-)
+
+commit 04dc52fa15f5b7f9eb5f448ea43e7ef1b2269e88
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 6 17:28:38 2014 -0400
+
+    [indic] Recover OT_H undergone ligation and multiplication
+
+    Sometimes font designers form half/pref/etc consonant forms
+    unconditionally and then undo that conditionally.  Try to
+    recover the OT_H classification in those cases.
+
+    No test number changes expected.
+
+ src/hb-ot-layout-private.hh     |  8 ++++++++
+ src/hb-ot-shape-complex-indic.cc | 21 +++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+commit 39c8201f8e361e8c0f23f07bf20124ccadc6086c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 6 17:19:35 2014 -0400
+
+    [indic] Improve base re-finding
+
+    No test numbers change.
+
+ src/hb-ot-shape-complex-indic.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit c04d5f0dd24d0ed9560fb9aebb5561ce946743c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 6 17:02:39 2014 -0400
+
+    [indic] Minor
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 824d00dce483d0f4030c0cac253f994810e10f32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 9 14:17:33 2014 -0400
+
+    Fix commit 3f38c1137b6219a646da141b08463ffa922d4e35
+
+    Previous commit was not compiling with clang.
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 3f38c1137b6219a646da141b08463ffa922d4e35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 6 16:03:40 2014 -0400
+
+    Don't use -mstructure-size-boundary=8 on clang arm
+
+    As in building for Android / iPhone.  Only set it if
+    struct{char} alignment is not 1.
+
+    NOT tested on an actual Arm architecture.  Guess we'll know
+    when this makes it to people's build bots.
+
+ configure.ac | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 0ff74b09d2ccf7a9ea0f0b463d8b6d819c86c837
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 5 21:55:23 2014 -0400
+
+    Add missing test file.  Oops
+
+ test/shaping/tests/indic-pref-blocking.tests | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 832a6f99b34f334b1e82b8e3a7ad137e823d203c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 16:57:42 2014 -0400
+
+    [indic] Don't reorder reph/pref if ligature was expanded
+
+    Normally if you want to, say, conditionally prevent a 'pref', you
+    would use blocking contextual matching.  Some designers instead
+    form the 'pref' form, then undo it in context.  To detect that
+    we now also remember glyphs that went through MultipleSubst.
+
+    In the only place that this is used, Uniscribe seems to only care
+    about the "last" transformation between Ligature and Multiple
+    substitions.  Ie. if you ligate, expand, and ligate again, it
+    moves the pref, but if you ligate and expand it doesn't.  That's
+    why we clear the MULTIPLIED bit when setting LIGATED.
+
+    Micro-test added.  Test: U+0D2F,0D4D,0D30 with font from:
+
+    [1]
+    https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
+
+ src/hb-ot-layout-gsub-table.hh                             |   2 +-
+ src/hb-ot-layout-gsubgpos-private.hh               |  20
+ ++++++++++++++++----
+ src/hb-ot-layout-private.hh                        |  16
+ +++++++++++++++-
+ src/hb-ot-shape-complex-indic.cc                   |   4 ++--
+ test/shaping/Makefile.am                           |   5 ++++-
+ .../226bc2deab3846f1a682085f70c67d0421014144.ttf    | Bin 0 -> 2828 bytes
+ test/shaping/tests/MANIFEST                        |   1 +
+ 7 files changed, 39 insertions(+), 9 deletions(-)
+
+commit b5be2317201774c84470167767ad83c8637cad5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 5 19:00:22 2014 -0400
+
+    [gsub] Adjust single-length ligature subst to act like single subst
+
+ src/hb-ot-layout-gsub-table.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit aae69451dfbf2e3671c555c234f788c194302818
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 5 18:54:44 2014 -0400
+
+    [gsub] Minor shuffling
+
+ src/hb-ot-layout-gsub-table.hh | 29 ++++++++++++++++-------------
+ 1 file changed, 16 insertions(+), 13 deletions(-)
+
+commit b6b304f12be917b7449b3ac9409069fcd4a27d95
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 5 17:12:54 2014 -0400
+
+    [ot] Add TODO re zero-len MultipleSubst sequences
+
+ src/hb-ot-layout-gsub-table.hh       | 9 +++++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit f1a72fe7bf863535ec09b559cc0bd878fd0799f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 19:00:29 2014 -0400
+
+    [ot-font] Fix cmap EncodingRecord cmp order
+
+ src/hb-ot-cmap-table.hh | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit ce34f0b07e5324ed52e6e2c43000c2b09ee010d4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 18:57:46 2014 -0400
+
+    [ot-font] Use binary search for format12 cmap subtable
+
+ src/hb-open-type-private.hh | 4 ++++
+ src/hb-ot-cmap-table.hh     | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 257d1adfa1b3422c511c55e641840a6e31ec6008
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 18:47:55 2014 -0400
+
+    [ot-font] Work around broken cmap subtable format 4 length
+
+    Roboto was hitting this.  FreeType also has pretty much the
+    same code for this, in ttcmap.c:tt_cmap4_validate():
+
+       /* in certain fonts, the `length' field is invalid and goes */
+       /* out of bound.  We try to correct this here...            */
+       if ( table + length > valid->limit )
+       {
+         if ( valid->level >= FT_VALIDATE_TIGHT )
+           FT_INVALID_TOO_SHORT;
+
+         length = (FT_UInt)( valid->limit - table );
+       }
+
+ src/hb-ot-cmap-table.hh | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+commit 51f563579b94e1ee23ced9bbcc7dd3341535ce72
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 18:42:32 2014 -0400
+
+    Move try_set to sanitize context
+
+ src/hb-open-type-private.hh       | 22 ++++++++++------------
+ src/hb-ot-layout-common-private.hh |  2 +-
+ 2 files changed, 11 insertions(+), 13 deletions(-)
+
+commit 500737e8e16dce5248aff394899bb3761a9c3bbf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 4 18:17:29 2014 -0400
+
+    [ot-font] Don't select a Null cmap subtable
+
+    Can happen either in broken fonts, or as a result of sanitize().
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dac86026a6bae5a8a03cfe885bf93f32e5f48614
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jun 3 17:57:00 2014 -0400
+
+    Fix some cppcheck warnings
+
+    Bug 77800 - cppcheck reports
+
+ src/hb-common.cc                  | 4 +++-
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-private.hh                 | 2 +-
+ src/hb-shape-plan.cc              | 4 ++--
+ 4 files changed, 7 insertions(+), 5 deletions(-)
+
+commit c306410cab368a27c1941a2625d3b475edeaac04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jun 3 16:59:41 2014 -0400
+
+    Bug 77732 - Fix unused typedef warning for ASSERT_STATIC with GCC 4.8
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ae2b854eab7f1c48e56751c987a714c2c18d6eb6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jun 3 16:59:09 2014 -0400
+
+    Move code around
+
+ src/hb-private.hh | 134
+ ++++++++++++++++++++++++++----------------------------
+ 1 file changed, 65 insertions(+), 69 deletions(-)
+
+commit 17c3b809f42aec34d83dba2e6229ad85804bebae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 2 15:08:18 2014 -0400
+
+    [indic] Treat U+A8E0..A8F1 as OT_A instead of OT_VD
+
+    Apparently they can intermix with other OT_A.
+
+    Test: U+0915,A8E2,1CD0
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6ae13f257c3986517c097fa666ab9f58bdc918b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 30 17:38:14 2014 -0400
+
+    [graphite2] Fix cluster mapping
+
+    Patch from Martin Hosken.  I expect this to fix the following bugs:
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=75076
+    https://bugzilla.gnome.org/show_bug.cgi?id=723582
+    https://bugzilla.redhat.com/show_bug.cgi?id=998812
+
+ src/hb-graphite2.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 5875ad9c467b39d00ad4d98fd425179c701e6fd0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 29 15:48:16 2014 -0400
+
+    0.9.29
+
+ NEWS        | 12 ++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 7977ca17aac34b9ab10622928bed8afa2177f16a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 29 15:34:26 2014 -0400
+
+    [indic] Allow decimal and Brahmi digits as placeholders
+
+    Tests: U+0967,0951 U+0031,093F
+
+ src/hb-ot-shape-complex-indic.cc                                     |
+ 4 ++++
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt  |
+ 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit e8b5d64039614ecce472eda1a7a603736da25d86
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 29 15:18:27 2014 -0400
+
+    [indic] Do NOT allow reph formation on placeholders
+
+    Only allow it on DOTTED CIRCLE.  No effect on test numbers.
+
+    Test: U+0930,094D,00A0
+
+ src/hb-ot-shape-complex-indic-machine.rl                               |
+ 2 +-
+ .../in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt  |
+ 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit 52b562a6a058131c0103aaa5404d053e6465bb23
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 18:18:23 2014 -0400
+
+    [indic] Clean up a bit
+
+    No functional change intended.
+
+ src/hb-ot-shape-complex-indic.cc | 17 +++++------------
+ 1 file changed, 5 insertions(+), 12 deletions(-)
+
+commit 3bf652b90783e8244c153739585d95dc4162efb4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 18:07:26 2014 -0400
+
+    [indic] Treat U+002D and U+2010..2014 as placeholders
+
+ src/hb-ot-shape-complex-indic.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit e0de95f40244924cb8f9f7abca7f53117044a0eb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 17:58:34 2014 -0400
+
+    [indic] Treat U+00D7 MULTIPLICATION SIGN as placeholder
+
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit cf78dd483cbe1759a8ecb731879e041a53ba9bb3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 17:53:37 2014 -0400
+
+    [indic/myanmar] Rename OT_NBSP to OT_PLACEHOLDER
+
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ src/hb-ot-shape-complex-indic-private.hh | 6 +++---
+ src/hb-ot-shape-complex-indic.cc        | 4 ++--
+ src/hb-ot-shape-complex-myanmar.cc      | 2 +-
+ 4 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 186ece94c8838e95db240d3e7c3ce415da6be81e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 17:49:45 2014 -0400
+
+    [myanmar] Use OT_NBSP instead of OT_DOTTEDCIRCLE for OT_GB
+
+    No functional change.
+
+ src/hb-ot-shape-complex-myanmar-machine.rl | 2 +-
+ src/hb-ot-shape-complex-myanmar.cc        | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit cf71d28c380819cb0f7f0f22f6ff9e4aa881a2b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 17:47:43 2014 -0400
+
+    [indic/myanmar] Refactor a few macros
+
+ src/hb-ot-shape-complex-indic-private.hh | 12 ++++++++++++
+ src/hb-ot-shape-complex-indic.cc        | 10 ----------
+ src/hb-ot-shape-complex-myanmar.cc      |  6 ------
+ 3 files changed, 12 insertions(+), 16 deletions(-)
+
+commit 2307268e01d27a999b56a2f573dfcee8b2a7949b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 27 17:39:01 2014 -0400
+
+    [indic] Treat U+0A72..0A73 like regular consonants
+
+    Unicode 6.x IndicSyllableCategory categorizes them as
+    placeholders, but they can subjoin.
+
+ src/hb-ot-shape-complex-indic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e9b2a4cfe593bdbe9288571635ba26ac42ede987
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 23 15:49:10 2014 -0400
+
+    [indic] Support U+1CED
+
+ src/hb-ot-shape-complex-indic.cc | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit d19f8e85702a1e473efe2f02027984dcc127602a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 23 15:45:50 2014 -0400
+
+    [indic] Support U+A8F2..A8F7,1CE9..1CEC,1CEE..1CF1
+
+ src/hb-ot-shape-complex-indic.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit ddbdfcbf1c10eed0a7b81b29fee99f1bd22113e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 23 15:39:55 2014 -0400
+
+    [indic] Simplify grammar
+
+    No functional change.
+
+ src/hb-ot-shape-complex-indic-machine.rl | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit 4e9b1f662b23966e67c548b86afeff2bec9b0eb7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 23 15:38:42 2014 -0400
+
+    [indic] Always start new syllable for Avagraha
+
+    In fact, the previous grammar was ambigious.  No functional
+    change.
+
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9f9bd9bf31161660214b8b39a78cdafbb79db1be
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 23 15:33:13 2014 -0400
+
+    [indic] Rename avagraha cluster to symbol cluster
+
+    In anticipation of adding more characters to that class of clusters.
+
+ src/hb-ot-shape-complex-indic-machine.rl | 10 +++++-----
+ src/hb-ot-shape-complex-indic-private.hh |  4 ++--
+ src/hb-ot-shape-complex-indic.cc        | 14 +++++++-------
+ 3 files changed, 14 insertions(+), 14 deletions(-)
+
+commit a498565cedf0441ae723c5e5969f637d792a15e7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 19:39:56 2014 -0400
+
+    [indic] Support U+1CF2,U+1CF3
+
+ src/hb-ot-shape-complex-indic.cc | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit ecb98babbaa065940b40ca8954a454f0e2cdcff0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 19:36:21 2014 -0400
+
+    [indic] Support U+1CE2..U+1CE8
+
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 37bf2c9224e32fdc99c20158c6dc0a4602ec1292
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 19:35:17 2014 -0400
+
+    Minor
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 131e17ff9ae792cafa7a500043acb373802ee872
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 19:32:51 2014 -0400
+
+    [indic] Support U+1CF5,1CF6
+
+ src/hb-ot-shape-complex-indic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 72ead0cc72dac4d1c985ead065bb820f93f14a1d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 19:12:10 2014 -0400
+
+    [indic] Treat U+1CE1 as a tone-mark too
+
+    It's spacing, but otherwise the same as the other ones.
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e848bfae7c975a6fae434daf8e3db4d69914df9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 18:50:34 2014 -0400
+
+    [indic] Recategorize U+A8E0..A8F1 as OT_VD
+
+    Up to two of them come after all OT_A characters.
+
+ src/hb-ot-shape-complex-indic-machine.rl |  2 +-
+ src/hb-ot-shape-complex-indic.cc        | 10 ++++++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+commit c519536c34c842304da558dd4a9e3844fc261b20
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 18:43:14 2014 -0400
+
+    [indic] Allow up to three tone marks
+
+    According to Roozbeh, there are valid combinations in Unicode
+    proposals for up to three. Previously we were allowing up to two.
+
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c11fc6833980fce6d70c5ae0c6623de97a3eb30a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 22 18:41:49 2014 -0400
+
+    [indic] Support more extended Devanagari tone marks
+
+    Also adjust U+0953,0954 handling.
+
+ src/hb-ot-shape-complex-indic.cc | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+commit 26c836e53d55a2e2d4c17fd9ea1884eec33ce015
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 21 18:35:48 2014 -0400
+
+    [indic] Handle "Cantillation marks for the Samaveda"
+
+ src/hb-ot-shape-complex-indic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 29531128f2f4342d537817746863705df80efe4b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 15 14:04:02 2014 -0600
+
+    [indic] Improve reph formation of Sinhala and Telugu
+
+    Sinhala and Telugu use "explicit" reph.  That is, the reph is
+    formed by
+    a Ra,H,ZWJ sequence.  Previously, upon detecting this sequence,
+    we were
+    checking checking whether the 'rphf' feature applies to the first two
+    glyphs of the sequence.  This is how the Microsoft fonts are designed.
+    However, testing with Noto shows that apparently Uniscribe also forms
+    the reph if the lookup ligates all three glyphs.  So, try both
+    sequences.
+
+    Doesn't affect test results for Sinhala or Telugu.
+
+    https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=232
+
+ src/hb-ot-shape-complex-indic.cc | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+commit 8c703f13bf8b4b276093b1c42cd3759e34b6787f
+Author: Oleg Oshmyan <chortos@inbox.lv>
+Date:  Wed May 14 22:10:09 2014 +0100
+
+    Fix build with --coretext on older OS X
+
+    Fixes https://github.com/behdad/harfbuzz/pull/40
+
+ src/hb-coretext.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 439b05867c0856a81fa8f9bea3a7465b4b4bdd91
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 14 16:44:39 2014 -0600
+
+    [myanmar] Allow MedialYa+Asat in the grammar
+
+    The grammar in the OT spec, and the existing Windows implementation
+    seem to be confused around where to allow Asat around the medial
+    consonants.
+
+    The previous grammar for medial group was allowing an Asat after
+    the medial group only if there was a medial Wa or Ha, but not if
+    there was only a medial Ya.  This doesn't make sense to me and
+    sounds reversed, as both medial Wa and Ha are below marks while
+    Asat is an above mark.  An Asat can come before the medial group
+    already (in fact, multiple ones can.  Why?!).  The medial Ya
+    however is a spacing mark and according to Roozbeh it's valid
+    to want an Asat on the medial Ya instead of the base, so it looks
+    to me like we want to allow an Asat after the medial group if
+    there *was* a Ya but not if there wasn't any.  Not wanting to
+    produce dotted-circle where Windows is not, this commit changes
+    the grammar to allow one Asat after the medial group no matter
+    what comes in the group.
+
+    Test: U+1002,103A,103B vs U+1002,103B,103A
+
+ src/hb-ot-shape-complex-myanmar-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0a017ce169d791c9aea56671fe5837961e0a3c09
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 14 16:44:16 2014 -0600
+
+    Add tests for Myanmar Asat+MedialYa and MedialYa+Asat sequences
+
+    One of them currently produces dotted-circle.  Fix and detailed
+    message coming.
+
+ test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt |
+ 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit c95587618c88d187be64f923033dae151cf820be
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 14 00:42:18 2014 -0400
+
+    [ot] Minor note re cmap subtable format 2 and 8
+
+ src/hb-ot-cmap-table.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit b7878cd58ea9a67236e1e0228c35b5b03ec4ff9c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 13 21:47:51 2014 -0400
+
+    [ot] Implement cmap subtable format 0
+
+ src/hb-open-type-private.hh | 3 ++-
+ src/hb-ot-cmap-table.hh     | 32 ++++++++++++++++++++++++++++++++
+ 2 files changed, 34 insertions(+), 1 deletion(-)
+
+commit ca7b77431d1e0aaa803722be8be85a368a385f47
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 13 21:26:34 2014 -0400
+
+    [ot] Factor out code between cmap sutable format 12 and 13
+
+ src/hb-ot-cmap-table.hh | 43 +++++++++++++------------------------------
+ 1 file changed, 13 insertions(+), 30 deletions(-)
+
+commit 94759e8219ed08392573bae948a8135e16b8e0d0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 13 21:17:28 2014 -0400
+
+    [ot] Factor out code between cmap subtable format 6 and 10
+
+ src/hb-ot-cmap-table.hh | 49
+ ++++++++++---------------------------------------
+ 1 file changed, 10 insertions(+), 39 deletions(-)
+
+commit 1a8ffc512987c1ff1b4896549f80b145c85454a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 13 21:06:39 2014 -0400
+
+    Minor
+
+ src/hb-blob.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 91bbfca87527fa14d6ebec86b087f2a989381872
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 12 18:19:29 2014 -0400
+
+    [ot] Implement cmap subtable formats 6 and 10
+
+ src/hb-ot-cmap-table.hh | 77
+ +++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 74 insertions(+), 3 deletions(-)
+
+commit d294a2cb165c4f20daa5624969067c51eb9aef58
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 12 17:58:31 2014 -0400
+
+    [ot] Implement cmap subtable format 13
+
+ src/hb-ot-cmap-table.hh | 47
+ +++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 41 insertions(+), 6 deletions(-)
+
+commit 0d75793fae95ed9f6b8522ae3af4fcdf397d8c36
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 12 17:51:15 2014 -0400
+
+    [ot] Implement cmap subtable format 12
+
+ src/hb-ot-cmap-table.hh | 63
+ +++++++++++++++++++++++++++++++++++++++++++++++--
+ src/hb-ot-font.cc      |  5 ++++
+ 2 files changed, 66 insertions(+), 2 deletions(-)
+
+commit 3608a6847e7b7eb4206df049158513a085810afd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 12 13:46:29 2014 -0400
+
+    [ot] Hook up cmap table to hb_ot_font_funcs()
+
+ src/hb-ot-cmap-table.hh | 10 +++++++---
+ src/hb-ot-font.cc      | 33 +++++++++++++++++++--------------
+ 2 files changed, 26 insertions(+), 17 deletions(-)
+
+commit c8a47452993b9dee6854bfc866aca4a20142696f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 9 19:55:51 2014 -0400
+
+    [ot] Implement cmap subtable format 4
+
+ src/hb-ot-cmap-table.hh | 52
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 52 insertions(+)
+
+commit 4719621f20dfd6a0377c650a7b4df223c18dc143
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 9 16:09:11 2014 -0400
+
+    Minor
+
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 41ca1fbebf61cf26e1e0e4b11f4a5b52fb7d88a9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 9 15:35:56 2014 -0400
+
+    [ot] Start implementing cmap table
+
+ src/Makefile.am        |   1 +
+ src/hb-ot-cmap-table.hh | 171
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-font.cc      |   1 +
+ 3 files changed, 173 insertions(+)
+
+commit c7074b8798048324cb8850c55908ce77fc33d11e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 8 18:24:31 2014 -0400
+
+    [otlayout] Add GenericArrayOf::search()
+
+ src/hb-open-type-private.hh | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit 40a479797add42fa42b78d4267920ef75bfb6b9a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 8 18:21:04 2014 -0400
+
+    [otlayout] Add GenericSortedArrayOf
+
+ src/hb-open-type-private.hh | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+commit 0ddecabc6de205b121bec31fbf670f37cc9454ef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 1 16:01:40 2014 -0700
+
+    [main] Minor improvement to output
+
+ src/main.cc | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+commit 79ecdc3f9525212053d2bc88a5541c41697159da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 14:24:23 2014 -0700
+
+    0.9.28
+
+ NEWS        | 13 +++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit 6faff8e4132197ba06f0e685b82efe35b546cf64
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 14:29:39 2014 -0700
+
+    Add static storage classifier to inline functions
+
+    Before we were just relying on the compiler inlining them and not
+    leaving a trace in our public API. Try to fix.  Hopefully not
+    breaking anyone's build.
+
+ src/hb-open-type-private.hh   | 22 +++++++++++-----------
+ src/hb-ot-layout-gpos-table.hh |  4 ++--
+ src/hb-ot-layout-gsub-table.hh |  6 +++---
+ src/hb-ot-layout-private.hh   | 36 ++++++++++++++++++------------------
+ src/hb-ot-map-private.hh      | 10 +++++-----
+ src/hb-private.hh             |  2 +-
+ 6 files changed, 40 insertions(+), 40 deletions(-)
+
+commit 9c9411839bb89d0a1a83120af0982c60e0e393d9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 12:38:25 2014 -0700
+
+    [tibetan] Reorder PADMA sign to occur after other below marks
+
+    Based on suggestion from Andrew Glass.
+
+    Test: U+0F40,0FC6,0F83
+
+ src/hb-unicode-private.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 659cd3c5b470ff9724ce5e53fedd1fea3e7512c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 12:43:42 2014 -0700
+
+    [test] Add test case for Tibetan sign PADMA
+
+    Currently fails.
+
+ test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt |
+ 1 +
+ 1 file changed, 1 insertion(+)
+
+commit ee703bc3ef740c300718fca7a12c050c322dce19
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 28 12:43:18 2014 -0700
+
+    Reshuffle test data
+
+ test/shaping/texts/in-tree/MANIFEST                     |  3 +++
+ test/shaping/texts/in-tree/shaper-default/MANIFEST      |  3 ---
+ .../texts/in-tree/shaper-default/script-hangul/MANIFEST  |  1 -
+ .../in-tree/shaper-default/script-hangul/misc/MANIFEST   |  1 -
+ .../in-tree/shaper-default/script-hangul/misc/misc.txt   |  4 ----
+ .../texts/in-tree/shaper-default/script-hebrew/MANIFEST  |  1 -
+ .../in-tree/shaper-default/script-hebrew/misc/MANIFEST   |  1 -
+ .../shaper-default/script-hebrew/misc/diacritics.txt    | 16
+ ----------------
+ .../texts/in-tree/shaper-default/script-tibetan/MANIFEST |  1 -
+ .../in-tree/shaper-default/script-tibetan/misc/MANIFEST  |  1 -
+ .../in-tree/shaper-default/script-tibetan/misc/misc.txt  |  1 -
+ .../texts/in-tree/shaper-hangul/script-hangul/MANIFEST   |  1 +
+ .../in-tree/shaper-hangul/script-hangul/misc/MANIFEST   |  1 +
+ .../in-tree/shaper-hangul/script-hangul/misc/misc.txt   |  4 ++++
+ .../texts/in-tree/shaper-hebrew/script-hebrew/MANIFEST   |  1 +
+ .../in-tree/shaper-hebrew/script-hebrew/misc/MANIFEST   |  1 +
+ .../shaper-hebrew/script-hebrew/misc/diacritics.txt     | 16
+ ++++++++++++++++
+ .../texts/in-tree/shaper-tibetan/script-tibetan/MANIFEST |  1 +
+ .../in-tree/shaper-tibetan/script-tibetan/misc/MANIFEST  |  1 +
+ .../in-tree/shaper-tibetan/script-tibetan/misc/misc.txt  |  1 +
+ 20 files changed, 30 insertions(+), 30 deletions(-)
+
+commit b082ef373cefb35dd98b5f2f0b677ccc7806f51e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 25 11:48:10 2014 -0700
+
+    Typo
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 828e109c7aac3389cc3b89ea1f13388aefb63804
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 18 16:53:34 2014 -0700
+
+    [indic] Fix-up zero-context matching
+
+    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.
+
+    The *intention* was to change zero-context from true to false for
+    scripts that
+    don't have old-vs-new specs.  However, checking the code, looks
+    like we
+    essentially change zero-context to always be true; ie. we only
+    changed things
+    for old-spec, and we broke them.  That's what causes this bug:
+
+      https://bugs.freedesktop.org/show_bug.cgi?id=76705
+
+    The root of the bug is here:
+
+      /* 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;
+
+    Note that is_old_spec itself is:
+
+      indic_plan->is_old_spec = indic_plan->config->has_old_spec &&
+      ((plan->map.chosen_script[0] & 0x000000FF) != '2');
+
+    It's easy to show that zero_context is now always true.  What we
+    really meant was:
+
+      bool zero_context = indic_plan->config->has_old_spec &&
+      !indic_plan->is_old_spec;
+
+    Ie, "&&" instead of "||".  We made this change supposedly to make
+    Javanese
+    work.  But apparently we got it working regardless!  So I'm going
+    to fix this
+    to only change the logic for old-spec and not touch other cases.
+
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 66c6a48b6ce9dab6375ba1a23d7e450d6974852a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 14 15:55:42 2014 -0700
+
+    Add HB_NO_MERGE_CLUSTERS
+
+    Disables any cluster-merging.  Added for testing purposes while
+    we investigate what kind of API to add for this.
+
+ src/hb-buffer.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 897c7b804d6817470a364ba31b1719555b12f751
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 10 16:27:13 2014 -0700
+
+    Add Khmer test for U+17DD
+
+ .../shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 50a00535ccac538bbf93358fd2d2442e4c12542f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 10 16:03:29 2014 -0700
+
+    Require gobject-introspection 1.34.0
+
+    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=75384
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5fd996c4a4049a75c6d9e964f1a81c00ff191893
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 9 16:38:26 2014 -0700
+
+    Further adjust check-defs and check-symbols for mipsel
+
+    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=74491
+
+ src/check-defs.sh    | 2 +-
+ src/check-symbols.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 75ec6d0bc5ca0170c73e4d1099a898d38d8f85c0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 9 16:33:32 2014 -0700
+
+    Tighten up check-static-inits.sh check
+
+    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=74490
+
+ src/check-static-inits.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 110ec0714a11b9417eed82f7d25b85c9dc7b6df4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 8 17:32:08 2014 -0700
+
+    Typo
+
+ src/hb-blob.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0682ddd05c22a400ff5ce97d4ea4b52a18b845ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 8 16:03:35 2014 -0700
+
+    [indic] Support U+17DD KHMER SIGN ATTHACAN
+
+    As requested by Martin Hosken on the list.
+
+ src/hb-ot-shape-complex-indic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 05870ed62edd8728d6d732f60d6b7e149d45e6f4
+Author: Primiano Tucci <primiano@chromium.org>
+Date:  Wed Apr 2 11:35:27 2014 +0100
+
+    Use __aarch64__ for 64-bit ARM detection, not __arm64__
+
+    Many GCC versions don't define __arm64__
+
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 04d894e89795041b2055dc172744a018644f2bca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 25 12:11:32 2014 -0700
+
+    Minor
+
+ src/hb-ot-layout-gsubgpos-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 903648437c180c7b039801cdb0672e0f8e14afd4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 24 14:26:36 2014 -0700
+
+    Start fleshing out builtin font functions
+
+ src/Makefile.am        |   3 +-
+ src/hb-glib.cc                 |   2 +-
+ src/hb-icu.cc          |   2 +-
+ src/hb-ot-font.cc      | 260
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-font.h       |  41 ++++++++
+ src/hb-ot-hhea-table.hh |   2 +-
+ src/hb-ot-hmtx-table.hh |   2 +-
+ src/hb-ot.h            |   1 +
+ src/hb-tt-font.cc      |  77 --------------
+ util/Makefile.am       |   4 +-
+ util/options.cc        |   4 +
+ 11 files changed, 314 insertions(+), 84 deletions(-)
+
+commit 343a0e4e747d93eeeb724c5d585f5ba036a0df84
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 21 14:37:27 2014 -0700
+
+    Add "make built-sources"
+
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e9853f33d1f53d4d69ee0fa340ce9225a5ed17ca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 21 12:53:08 2014 -0700
+
+    One more fix for build without gtk-doc
+
+    Fixes https://github.com/behdad/harfbuzz/pull/35
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b96af03c20e46105982b3608b608614403540661
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date:  Thu Mar 20 16:01:30 2014 +0200
+
+    Fix build with --coretext on iOS
+
+    On iOS CoreText and CoreGraphics are stand-alone frameworks
+
+ configure.ac     | 23 +++++++++++++++++++----
+ src/hb-coretext.h |  8 +++++++-
+ 2 files changed, 26 insertions(+), 5 deletions(-)
+
+commit ea5e8a02eb83ad19f3009b0008893f77ce113118
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 19 15:38:02 2014 -0700
+
+    [util] Plug minor leak
+
+ util/hb-shape.cc     |  6 +++---
+ util/helper-cairo.cc | 21 ++++++++++++---------
+ util/helper-cairo.hh |  2 +-
+ util/options.cc      |  6 +++++-
+ util/options.hh      |  6 +++---
+ 5 files changed, 24 insertions(+), 17 deletions(-)
+
+commit 09732cc6695b8e41ba6cdcd4058a4f7cad90167a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 19 12:00:17 2014 -0700
+
+    Remove dead warning
+
+ src/hb-unicode.cc |  9 +++++++--
+ src/hb-warning.cc | 11 -----------
+ 2 files changed, 7 insertions(+), 13 deletions(-)
+
+commit b934b0f9d1b39fc7a06c812bea3d79ca5424e278
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 19 11:52:40 2014 -0700
+
+    Yet another try to make build without gtk-doc succeed
+
+ autogen.sh                | 1 +
+ docs/reference/Makefile.am | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit a7a5be090dd9cc39605853e8994eb417550939d4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 19 11:39:23 2014 -0700
+
+    Another try to make gtk-doc optional
+
+ docs/reference/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ba8c9d92935ea351970a80d0d3441858ad4cf33f
+Author: Dominik Röttsches <dominik.rottsches@intel.com>
+Date:  Tue Mar 18 14:39:03 2014 +0200
+
+    0.9.27
+
+ NEWS        | 16 ++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+commit a949cd329e49d2c0ad6f1e023f324790d886dafe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 16 20:22:42 2014 -0700
+
+    Don't use "register" storage class specifier
+
+    Fixes warnings.
+    https://bugzilla.mozilla.org/show_bug.cgi?id=984081
+
+ src/hb-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 0082dbeae6c25a7859960b7e791a540ad04246d9
+Author: jfkthame <jfkthame@gmail.com>
+Date:  Sun Mar 16 08:25:17 2014 +0000
+
+    wrap definition of free_langs() with HAVE_ATEXIT
+
+    ...to avoid an unused function warning; see mozilla bug
+    https://bugzilla.mozilla.org/show_bug.cgi?id=984081.
+
+ src/hb-common.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit a9e25e90a4ca05746fda4a598ad698db1d2c5c1a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 14 19:55:46 2014 -0700
+
+    [coretext] Add hb_coretext_face_create()
+
+    Not tested.
+
+ src/hb-coretext.cc | 57
+ +++++++++++++++++++++++++++++++++++++++++++++---------
+ src/hb-coretext.h  |  4 ++++
+ 2 files changed, 52 insertions(+), 9 deletions(-)
+
+commit c79865f90f62309dc64c8d3f2f503ec2aa4b7ec1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 14 19:37:55 2014 -0400
+
+    [coretext] Add coretext_aat shaper
+
+    This is a higher-priority shaper than default shaper ("ot"), but
+    only picks up fonts that have AAT "morx"/"mort" table.
+
+    Note that for this to work the font face's get_table() implementation
+    should know how to return the full font blob.
+
+    Based on patch from Konstantin Ritt.
+
+ src/hb-coretext.cc    | 94
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-coretext.h     |  4 +++
+ src/hb-shaper-list.hh |  4 +++
+ 3 files changed, 102 insertions(+)
+
+commit af1aa362cacc652ab8ffda05a5d98a3ff5430439
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 14 15:52:47 2014 -0700
+
+    If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
+
+    Useful for Android / Chrome / etc when ICU is built in the same
+    library as harfbuzz itself.
+
+ src/hb-unicode.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 853daf857f231c9ce0277a78abff1241150ea903
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Mar 14 15:49:18 2014 -0700
+
+    Remove old cruft
+
+ src/hb-shaper-list.hh | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 2a473338da1538efa4ff14ae9e4aba8dd50f9b0f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 10 15:04:46 2014 -0700
+
+    Add Myanmar test case from OpenType Myanmar spec
+
+ test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/MANIFEST  |
+ 1 +
+ .../shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt |
+ 2 ++
+ 2 files changed, 3 insertions(+)
+
+commit 158985908981189a2fd4d15275a641286fc770fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 10 14:57:55 2014 -0700
+
+    Minor
+
+ .../shaper-myanmar/script-myanmar/misc/MANIFEST    |  1 -
+ .../shaper-myanmar/script-myanmar/misc/torture.txt | 23
+ ----------------------
+ .../shaper-sea/script-tai-tham/misc/MANIFEST      |  1 +
+ .../shaper-sea/script-tai-tham/misc/torture.txt    | 23
+ ++++++++++++++++++++++
+ 4 files changed, 24 insertions(+), 24 deletions(-)
+
+commit bb8ffb581b89cf27fb8e0743b81bbda21654233e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 4 13:03:51 2014 -0800
+
+    Use AM_MISSING_PROG for ragel and git
+
+ Makefile.am    | 4 ++--
+ configure.ac   | 2 ++
+ src/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+commit a82165248cddb720576464b8e59a986491d3f2e9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 18 15:53:56 2014 -0500
+
+    Only do fallback Hebrew composition if no GPOS 'mark' available
+
+    Apparently some modern fonts have proper GPOS mark positioning
+    tables, but undesirable precomposed forms! See thread
+    "Hebrew composition to presentation forms" and:
+
+      http://tex.stackexchange.com/questions/156775/having-trouble-with-vowel-positioning-in-ezra-sil-xelatex
+
+    Test case: U+fb1d,05d9,05b4
+
+ src/hb-ot-shape-complex-hebrew.cc | 2 +-
+ src/hb-ot-shape-private.hh       | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit b456d42bf68c4374f71f09867e375a51c7f2b3ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 11 17:29:40 2014 -0500
+
+    Allow bootstrapping without gtk-doc
+
+    Seems like configure.ac is already able to handle it.
+
+ autogen.sh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 1eacde00cc8c57a08fb74276e3530844ef463d67
+Author: Luis de Bethencourt <luis@debethencourt.com>
+Date:  Thu Feb 6 23:20:47 2014 -0500
+
+    check hb_set_is_emtpy in test-set.c
+
+ test/api/test-set.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit db068d81cda180a91638e5539984f8139aff49c6
+Author: Werner Lemberg <wl@gnu.org>
+Date:  Mon Feb 10 10:38:56 2014 -0500
+
+    typo in ucdn's Makefile.am
+
+ src/hb-ucdn/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fbb2847f541389f40718af71c4945024ae177ab2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 5 08:22:06 2014 -0500
+
+    Improve MemoryBarrier() implementation
+
+    See thread "[HarfBuzz] compilation error of 0.9.26 with MinGW"
+    started by Werner.
+
+ src/hb-atomic-private.hh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit 189bf23bfc90405d8bdc70bf3d6d3ffec38b470c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 30 15:14:58 2014 -0500
+
+    0.9.26
+
+ NEWS        | 20 ++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+commit 7691a154e50f8c8c77bbd94787686262955bf5d4
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Wed Jan 29 14:07:58 2014 +0000
+
+    Ensure hb_script_t can safely hold any hb_tag_t value it's given.
+
+    Fixes https://github.com/behdad/harfbuzz/pull/21
+
+ src/hb-common.h | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit c29993a181c2139eaec97b5f6225824040ca3ac9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jan 28 17:29:42 2014 -0500
+
+    [coretext] Handle surrogate pairs when generating notdef glyphs
+
+    Fixes github.com/behdad/harfbuzz/pull/19
+
+ src/hb-coretext.cc | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+commit 748b2782e4898420003a3bbc041dcccbe9e3edc2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jan 28 17:10:05 2014 -0500
+
+    [coretext] Minor optimization
+
+ src/hb-coretext.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 24e6b11f12788500182715a64d4771a22c5b7525
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date:  Tue Jan 28 18:16:01 2014 +0200
+
+    Fix double destruction in case of OOM
+
+ src/hb-graphite2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 083225916a19f6d67017523af87386933bd9ecdc
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date:  Wed Jan 22 20:31:30 2014 +0200
+
+    Micro optimizations
+
+ src/hb-ot-layout-gpos-table.hh | 28 +++++++++++++++++-----------
+ 1 file changed, 17 insertions(+), 11 deletions(-)
+
+commit c9522de2335e4ef5fe65a72745c10943827a8da2
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date:  Wed Jan 22 21:07:13 2014 +0200
+
+    Make it possible to disable the fallback shaper at configure time
+
+    The OT shaper supersedes the fallback shaper in every case
+    and the latter become an extra weight for 99.9% of users.
+
+ configure.ac         | 6 ++++++
+ src/Makefile.am       | 5 ++++-
+ src/hb-shaper-list.hh | 2 ++
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 6775da3a7c07db6c032cf429dc199d471948db56
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 23 14:18:49 2014 -0500
+
+    Fix clang warning 'private field 'xxx' is not used
+
+    Fixes https://github.com/behdad/harfbuzz/pull/16
+
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 62299826f4905e080b9497bce335e093b287494e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 23 14:11:03 2014 -0500
+
+    Fix typo in _hb_buffer_serialize_glyphs_text()
+
+    Fixes https://github.com/behdad/harfbuzz/pull/17
+
+ src/hb-buffer-serialize.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ae23c24c32f474a34484ee78bc177ad31fa5e6d0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 22 11:03:02 2014 -0500
+
+    [arabic] Disable 'cswh' by default
+
+    I believe Windows 8 disables it, and spec update dated
+    Jan 2014 also clearly says it's disabled by default:
+
+      http://www.microsoft.com/typography/OpenTypeDev/arabic/intro.htm#features
+
+ src/hb-ot-shape-complex-arabic.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 08cf5d75ef0c75095173dec822ccb07defaaa6c2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 22 07:53:55 2014 -0500
+
+    [ot] Don't try to compose if normalization is off
+
+ src/hb-ot-shape-normalize.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 0596343bfeb80ad6b19d459654edf7dfded6affe
+Merge: 62cb28d 83d7e79
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 22 04:43:51 2014 -0800
+
+    Merge pull request #13 from jfkthame/hangul-shaper
+
+    Tone-mark reordering and improved Old Hangul support
+
+commit 62cb28dfc668cae9cbff826229bde2271e157927
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 14:23:08 2014 +0000
+
+    fixup for 64-bit windows build
+
+ src/hb-uniscribe.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 83d7e7915a5eaa8ff4c7014c319844e7dffd8225
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 19:49:47 2014 +0000
+
+    [hangul] Fix ordering of dotted circle with Hangul tone mark (reported
+    by Dohyun Kim).
+
+ src/hb-ot-shape-complex-hangul.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit deef1862657d55b7ae8d45f4eecbe45c80785c4e
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 10:38:27 2014 +0000
+
+    [hangul] Don't force zero-width for marks - this is not wanted for
+    the Jamo Filler glyphs.
+
+ src/hb-ot-shape-complex-hangul.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 391934db0a171aeb2057ebcd4a38ed81621e7393
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 10:37:32 2014 +0000
+
+    [unicode] Exclude the Jamo Filler characters from Default_Ignorable,
+    as some fonts want these to be visible/spacing glyphs.
+
+ src/hb-unicode-private.hh | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+commit 7244b3fc3bf9757dd094709d36bea68682264e20
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 10:35:51 2014 +0000
+
+    [hangul] Reorder Hangul tone mark to beginning of syllable, unless
+    font implements it using a zero-width glyph.
+
+ src/hb-ot-shape-complex-hangul.cc | 59
+ ++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 58 insertions(+), 1 deletion(-)
+
+commit 103436838df3a77552d3d33fc4bd80f09d9bf079
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Jan 20 10:35:07 2014 +0000
+
+    [hangul] Apply the appropriate *jmo features to decomposed
+    syllables, including Old Hangul sequences that don't have Unicode
+    compositions. Merge clusters in decomposed syllables.
+
+ src/hb-ot-shape-complex-hangul.cc | 197
+ +++++++++++++++++++++++++++++++-------
+ 1 file changed, 165 insertions(+), 32 deletions(-)
+
+commit 8fc1f7fe74a25bf8549f5edd79c7da6b720eb064
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 17:04:04 2014 +0800
+
+    [ot/hangul] Don't decompose Hangul even when combining marks present
+
+    As discussed on
+    https://github.com/behdad/harfbuzz/pull/10#issuecomment-31442030
+
+ src/hb-ot-shape-complex-hangul.cc    |  2 +-
+ src/hb-ot-shape-normalize-private.hh |  1 +
+ src/hb-ot-shape-normalize.cc        | 24 +++++++++++++-----------
+ 3 files changed, 15 insertions(+), 12 deletions(-)
+
+commit 64426ec73a987bfe1e71a293ee195f268897e8d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:33:10 2014 +0800
+
+    [ot] Simplify composing
+
+    Not tested.  Ouch.
+
+ src/hb-ot-shape-normalize.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 8de20b1e8a1c4d2081f64e695045e6e4da7ce144
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:30:45 2014 +0800
+
+    Add font->has_glyph()
+
+ src/hb-font-private.hh                   |  6 ++++++
+ src/hb-ot-shape-complex-hangul.cc | 14 ++++++--------
+ src/hb-ot-shape.cc               |  3 +--
+ 3 files changed, 13 insertions(+), 10 deletions(-)
+
+commit f6298e55ae0f0f23f66935226f78afb98320ea78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:23:56 2014 +0800
+
+    [fallback] Minor
+
+ src/hb-fallback-shape.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 29ea403d67e29c2d531c1f613ce3d69e60f078f6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:20:00 2014 +0800
+
+    [hangul] Fix decomposition logic
+
+    Seems to be working now.
+
+ src/hb-ot-shape-complex-hangul.cc | 19 ++++++++-----------
+ 1 file changed, 8 insertions(+), 11 deletions(-)
+
+commit bdb20dafc3f737923da3dca0c832fdf4ab8daabc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:04:30 2014 +0800
+
+    [hangul] Fix decomposition
+
+    Part of https://github.com/behdad/harfbuzz/pull/10
+
+ src/hb-ot-shape-complex-hangul.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 32478656ce6e7926c3ad481511f02187ca743af6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 2 14:01:56 2014 +0800
+
+    [hangul] Tighten up character categories
+
+    I had tried to expand to fill the blocks, but that sounds wrong in
+    retrospect.
+
+ src/hb-ot-shape-complex-hangul.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit f14bb7de631b20e2868fb62e5311cd0d9e24bb49
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 31 16:49:15 2013 +0800
+
+    [ot] Separate out hebrew and tibetan shapers from default
+
+    Now default shaper is truly no-op.
+
+ src/Makefile.am                   |   2 +
+ src/hb-ot-shape-complex-default.cc | 161
+ +---------------------------------
+ src/hb-ot-shape-complex-hebrew.cc  | 172
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh |  17 +++-
+ src/hb-ot-shape-complex-tibetan.cc |  61 +++++++++++++
+ 5 files changed, 251 insertions(+), 162 deletions(-)
+
+commit 6300cd72539284ca294ee8286bbbb7f9c72af320
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 31 16:38:47 2013 +0800
+
+    [ot] Define HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT
+
+ src/hb-ot-shape-complex-default.cc | 2 +-
+ src/hb-ot-shape-complex-hangul.cc  | 2 +-
+ src/hb-ot-shape-complex-private.hh | 4 +++-
+ src/hb-ot-shape-complex-thai.cc    | 2 +-
+ 4 files changed, 6 insertions(+), 4 deletions(-)
+
+commit 3d6ca0d32e5c6597acfcf59301cb1905586ddb52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 31 16:04:35 2013 +0800
+
+    [ot] Simplify normalization_preference again
+
+    No shaper has more than one behavior re this, so no need for
+    a callback.
+
+ src/hb-ot-shape-complex-arabic.cc  | 2 +-
+ src/hb-ot-shape-complex-default.cc | 8 +-------
+ src/hb-ot-shape-complex-hangul.cc  | 2 +-
+ src/hb-ot-shape-complex-indic.cc   | 8 +-------
+ src/hb-ot-shape-complex-myanmar.cc | 9 +--------
+ src/hb-ot-shape-complex-private.hh | 7 +------
+ src/hb-ot-shape-complex-sea.cc     | 9 +--------
+ src/hb-ot-shape-complex-thai.cc    | 2 +-
+ src/hb-ot-shape-normalize.cc      | 4 +---
+ 9 files changed, 9 insertions(+), 42 deletions(-)
+
+commit c98b7183f7dc453d5bac1f2503017cded317a495
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 31 15:55:40 2013 +0800
+
+    [ot] Add Hangul shaper
+
+    Not exhaustively tested, but I think I got the intended logic
+    right.
+
+    The logic can perhaps be simplified.  Maybe we should disabled
+    normalization with this shaper.  Then again, for now focusing on
+    correctness.
+
+ src/Makefile.am                   |   1 +
+ src/hb-ot-shape-complex-default.cc |  13 ---
+ src/hb-ot-shape-complex-hangul.cc  | 232
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh |  10 +-
+ src/hb-private.hh                 |   6 +
+ 5 files changed, 240 insertions(+), 22 deletions(-)
+
+commit 15f67048e45853ad4069fd4334e132bc3db4d2c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 27 19:33:28 2013 -0500
+
+    Reorder Tai Tham SAKOT to ensure it comes after any tone marks
+
+ src/hb-unicode-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 3216e44feb7b97f44620b51e197425a80a41cdb7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 23 14:39:23 2013 -0500
+
+    [uniscribe] Fix scratch-buffer accounting
+
+ src/hb-uniscribe.cc | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+commit beeb12c9af4e0e66378cd36cf3dbb1560763a8e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 22:53:27 2013 -0500
+
+    Add TODO item
+
+ src/hb-ot-shape.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit fbd4acc58a4bb501625b482bd318be9764ff8e02
+Author: Luis de Bethencourt <luis@debethencourt.com>
+Date:  Sun Dec 22 08:02:11 2013 -0500
+
+    Clean ht-ob headers
+
+ src/Makefile.am    |  1 +
+ src/hb-ot-layout.h |  5 -----
+ src/hb-ot-shape.h  | 53
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot.h       |  9 +--------
+ 4 files changed, 55 insertions(+), 13 deletions(-)
+
+commit 5497a8a274a7066c0230c850baadef681785c8bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 20:48:53 2013 -0500
+
+    Cache various masks on the shape plan
+
+ src/hb-ot-shape-fallback.cc | 6 ++----
+ src/hb-ot-shape-private.hh  | 15 +++++++++++++++
+ src/hb-ot-shape.cc         | 26 +++++++-------------------
+ 3 files changed, 24 insertions(+), 23 deletions(-)
+
+commit 02f909664fa24a7ccf7cf73d75d1d3426aaaae7d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 19:35:27 2013 -0500
+
+    Minor correction to kern mask checking
+
+ src/hb-ot-shape-fallback.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit a7e8bbb080aef318b16750ca1771d0d3af3d0ae9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 19:33:35 2013 -0500
+
+    Minor fraction mask setting improvement
+
+ src/hb-ot-map-private.hh | 2 --
+ src/hb-ot-shape.cc      | 8 +++++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 76fff252a96b4357b5e71694d5201daef822aa60
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 17:55:59 2013 -0500
+
+    Don't form fractions if only one of numr/dnom exist
+
+ src/hb-ot-shape.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 3aeee519f0b82df5263974945ae852badc4dbded
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 16:17:54 2013 -0500
+
+    Bug 72698 - Automatically support frac / numr / dnom
+
+    When seeing U+2044 FRACTION SLASH in the text, find decimal
+    digits (Unicode General Category Decimal_Number) around it,
+    and mark the pre-slash digits with 'numr' feature, the post-slash
+    digits with 'dnom' feature, and the whole sequence with 'frac'
+    feature.
+
+    This beautifully renders fractions with major Windows fonts,
+    and any other font that implements those features (numr/dnom is
+    enough for most fonts.)
+
+    Not the fastest way to do this, but good enough for a start.
+
+ src/hb-ot-shape.cc | 51
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 51 insertions(+)
+
+commit 014f369ec98fdbb3e7a2ef68aea2c4e017e7b680
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 22 16:15:30 2013 -0500
+
+    Add XXX note
+
+ src/hb-ot-map-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 739325178aba00ea5526c6a54ce588a79e5d45e2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Dec 21 00:18:18 2013 -0500
+
+    Initialize masks before mirroring
+
+    We were throwing away the rtlm feature mask set during
+    mirroring...
+
+ src/hb-ot-shape.cc | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+commit d507f6b5b7a052f4d0eb9ba4ec88fd2e3d6f64b4
+Author: Luis de Bethencourt <luis@debethencourt.com>
+Date:  Mon Dec 16 15:48:44 2013 -0500
+
+    Have Gtk-Doc ignore UCDN files
+
+ docs/reference/Makefile.am | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit d688475ea9cd236bc9b9e0153489fac0025f07f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Dec 12 13:21:57 2013 -0500
+
+    Minor
+
+ util/options.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 2a8c49ade07a0bd4f2c9543f4bd129da82083ea0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 11 20:22:28 2013 -0500
+
+    Remove unnecessary includes
+
+ src/hb-blob.cc                              | 1 -
+ src/hb-buffer-private.hh            | 1 -
+ src/hb-common.cc                    | 2 --
+ src/hb-face-private.hh                      | 1 -
+ src/hb-face.cc                              | 1 -
+ src/hb-font-private.hh                      | 1 -
+ src/hb-font.cc                              | 1 -
+ src/hb-graphite2.cc                 | 2 --
+ src/hb-open-type-private.hh         | 2 --
+ src/hb-ot-layout-private.hh         | 2 --
+ src/hb-ot-shape-normalize-private.hh | 2 --
+ src/hb-ot-tag.cc                    | 1 -
+ src/hb-set-private.hh               | 1 -
+ src/hb-shape-plan-private.hh        | 1 -
+ src/hb-tt-font.cc                   | 2 --
+ src/hb-unicode-private.hh           | 2 --
+ 16 files changed, 23 deletions(-)
+
+commit 2646aec1e67cd6e09f5f7859c9d5898917acc2d5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Dec 5 18:19:35 2013 -0500
+
+    Drop required automake version back to 1.11.3
+
+    Work around broken automake-1.13 changes.
+
+ configure.ac            | 3 ++-
+ test/shaping/Makefile.am | 7 +++++++
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 860fc9aa7b4c49a1d50e64cfdf4d4dffadb7aa8f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 4 20:06:59 2013 -0500
+
+    0.9.25
+
+ NEWS        | 12 ++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit adb039554de0c98a4121f26423bec8df09a62e61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 4 20:10:02 2013 -0500
+
+    Minor
+
+ util/view-cairo.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 95d18a7cab480712d8c95a587ac2a8fdcbec5e71
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 4 20:01:22 2013 -0500
+
+    [git.mk] Update
+
+ git.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d913f98d88098fc0f4163dfbc54d8ca9ebe9dd81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 4 19:59:48 2013 -0500
+
+    Require automake 1.13
+
+    Fix tests build.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=71353
+
+ configure.ac            |  2 +-
+ test/shaping/Makefile.am | 19 ++++++++++++++-----
+ 2 files changed, 15 insertions(+), 6 deletions(-)
+
+commit 205bf834d80f81471f0c3da4f400e60ce3a533dc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 2 20:41:41 2013 -0500
+
+    Revert "Karen" language mapping back to what it was before
+
+    https://bugzilla.mozilla.org/show_bug.cgi?id=941470
+
+ src/hb-ot-tag.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit f47b9219546edcfdeb3991ee27f6d9ba455c3e08
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 2 05:57:27 2013 -0500
+
+    Fix unsafe shape_plan->face dependency
+
+ src/hb-ot-shape-private.hh   |  2 +-
+ src/hb-shape-plan-private.hh |  2 +-
+ src/hb-shape-plan.cc        | 12 +++---------
+ 3 files changed, 5 insertions(+), 11 deletions(-)
+
+commit c704a8700e169885f1d9cbab93544d85aa4358e9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 2 05:42:04 2013 -0500
+
+    [util] Fix uninitialized memory access
+
+ util/view-cairo.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 260a3198f44a4ece60864b6f6caab2ee756ad762
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 2 05:39:39 2013 -0500
+
+    [util] Plug leak
+
+ util/options.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit ca8d96c8ba33ce581684cbc07936a3696b6c83d9
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Mon Dec 2 05:22:00 2013 -0500
+
+    cache shape plans even if (global) user features are set
+
+ src/hb-shape-plan-private.hh |  3 +++
+ src/hb-shape-plan.cc        | 59
+ ++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 57 insertions(+), 5 deletions(-)
+
+commit 8ffa528f28a24ae85952ad1c1b0206e736bcfeab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 2 05:17:14 2013 -0500
+
+    Add note about unsafe shape_plan->face
+
+    Will fix by removing shape_plan->face completely.
+
+ src/hb-shape-plan.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit aec468f01e866c99e65a8f764a792c74c96840d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 29 19:21:58 2013 -0500
+
+    [coretext] Add TODO
+
+ src/hb-coretext.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 58cc233e8b5fdc9dce603acc1b968540a2dea3e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 29 19:17:42 2013 -0500
+
+    [coretext] Cleanup
+
+ src/hb-coretext.cc | 27 ++++++++++++++++-----------
+ 1 file changed, 16 insertions(+), 11 deletions(-)
+
+commit c8213c6198abff97822e29a6d565722cfbb43832
+Author: Khaled Hosny <khaledhosny.eglug.org>
+Date:  Fri Nov 29 19:01:56 2013 -0500
+
+    [coretext] Avoid font fallback with CoreText shaper
+
+    CoreText does automatic font fallback (AKA "cascading") for
+    characters
+    not supported by the requested font, and provides no way to turn
+    it off,
+    so detect if the returned run uses a font other than the requested one
+    and fill in the buffer with .notdef glyphs instead of random indices
+    glyph from a different font.
+
+ src/hb-coretext.cc | 35 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 35 insertions(+)
+
+commit 63bae73aefb0e5988ef6975f1ed38e040e50e91d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 26 22:57:24 2013 -0500
+
+    [fallback] Add TODO note
+
+ src/hb-fallback-shape.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit e1ebf01d0cf3df55bb9137136e2d0c9630e7bd78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 26 18:00:35 2013 -0500
+
+    Minor
+
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a182dbc9e4e51fa7990c4aea3eaa425a061b29c7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 26 17:53:41 2013 -0500
+
+    Minor
+
+ src/hb-ot-layout-common-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9174a9db5c4e01284143ed8bd318ce9454535987
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 25 18:10:38 2013 -0500
+
+    [myanmar] Allow punctuation clusters
+
+    The spec and Uniscribe don't allow these, but UTN#11
+    specifically says the sequence U+104B,U+1038 is valid.
+    As such, allow all "P V" sequences.  There's about
+    eight sequences that match that structure, but Roozbeh
+    thinks it's fine to allow all of them.
+
+    Test case: U+104B, U+1038
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=71947
+
+ src/hb-ot-shape-complex-myanmar-machine.rl |  3 +++
+ src/hb-ot-shape-complex-myanmar.cc        | 19 ++++++++++++++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+commit 096b71e8ef0c1443f3f86069d5416b887af6e9e7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 25 18:03:34 2013 -0500
+
+    [myanmar] Mark U+104E MYANMAR SYMBOL AFOREMENTIONED as Consonant
+
+    The spec and Uniscribe treat it as consonant in the grammar, but
+    it's not in IndicSyllableCategory.txt, so fix up.
+
+    Test sequence: U+1004,U+103A,U+1039,U+104E
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=71948
+
+ src/hb-ot-shape-complex-myanmar.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit d2da5e0b4b4ffc1722403ffb90b8777cfa1cd174
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 25 17:50:07 2013 -0500
+
+    [myanmar] Relax pwo-tone group a bit
+
+    This is broken sequence according to OpenType spec, Uniscribe,
+    and current HarfBuzz implementation.  But Roozbeh says this
+    is a valid sequence, so allow it.  There are multiple
+    "(DB As?)?" constructs in the grammar, but Roozbeh thinks only
+    this one needs changing.
+
+    Test case: 1014,1063,103A
+
+    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=71949
+
+ src/hb-ot-shape-complex-myanmar-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9af91ca8ffee4a8d2804eff5d380b4f9749414d1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 25 17:47:19 2013 -0500
+
+    Add more Myanmar test cases
+
+    All three are broken right now according to Roozbeh.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=71947
+    https://bugs.freedesktop.org/show_bug.cgi?id=71948
+    https://bugs.freedesktop.org/show_bug.cgi?id=71949
+
+ .../shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt |
+ 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 08c2d27d35093e07142168665139274ac99395e8
+Author: Roozbeh Pournader <roozbeh@google.com>
+Date:  Sat Nov 23 21:39:31 2013 -0800
+
+    Added support for several new languages
+
+    Based on research into latest SIL and Windows fonts, pulling in
+    the latest OpenType language tag proposal from Microsoft, and updating
+    to latest language tags and names from ISO 639.
+
+ src/hb-ot-tag.cc | 314
+ +++++++++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 247 insertions(+), 67 deletions(-)
+
+commit 05511acd198d0c2157cdb41e1d36eac0b8075357
+Author: Roozbeh Pournader <roozbeh@google.com>
+Date:  Sat Nov 23 15:19:07 2013 -0800
+
+    Added language tags for S'gaw Karen and Khamti
+
+    Tags based on support in Windows 8.1's 'Myanmar Text' font.
+
+ src/hb-ot-tag.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 0bb31e4497523442fbb26bbd55b194ab70205ca4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 20 14:21:07 2013 -0500
+
+    Bug 71845 - Use 64-bit cmpexch on ARM64 iOS
+
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 02c6c8cd6e8c93b63c75b25de6bf76bb45755bb4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 15 13:05:38 2013 -0500
+
+    Set buffer content type to INVALID in hb_buffer_set_length(0)
+
+    Previously we were only setting this in hb_buffer_clear_contents(),
+    but set_length(0) is a valid way to reinitialize buffer to use with
+    new text.
+
+ src/hb-buffer-private.hh | 2 +-
+ src/hb-buffer.cc        | 3 +++
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 6300694f6e531593e7e932000f9540b0367940b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 13 14:54:07 2013 -0500
+
+    0.9.24
+
+ NEWS        | 8 ++++++++
+ configure.ac | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 061cb4649342b005fb1de93abae25e889cc560bd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 13 14:50:25 2013 -0500
+
+    Use long alignment for scratch buffer
+
+    Fixes last of scratch alignment warnings in hb-coretext.
+
+ src/hb-buffer-private.hh | 2 +-
+ src/hb-buffer.cc        | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 68c372ed2eac76a6d347811293fe2ba2fd6a1eed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 13 14:44:01 2013 -0500
+
+    More scratch-buffer cleanup
+
+ src/hb-buffer-private.hh |  3 ++-
+ src/hb-buffer.cc        | 10 +++++-----
+ src/hb-coretext.cc      |  5 ++---
+ src/hb-graphite2.cc     |  2 +-
+ src/hb-uniscribe.cc     | 30 ++++++++++++++----------------
+ 5 files changed, 24 insertions(+), 26 deletions(-)
+
+commit 8fcadb9cf9418345610e3f4e38c28c12b768b589
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 13 14:33:57 2013 -0500
+
+    [coretext] More scratch buffer fixes
+
+ src/hb-coretext.cc | 25 +++++++++++++------------
+ 1 file changed, 13 insertions(+), 12 deletions(-)
+
+commit 16f175cb2e081e605fe7f9cd01bbe8c24380278a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 12 17:22:49 2013 -0500
+
+    Fix scratch-buffer alignment warnings
+
+ src/hb-buffer-private.hh |  2 +-
+ src/hb-buffer.cc        |  9 +++++----
+ src/hb-coretext.cc      | 17 ++++++++++-------
+ src/hb-graphite2.cc     | 28 +++++++++++++++++-----------
+ src/hb-private.hh       |  3 +++
+ src/hb-uniscribe.cc     | 29 +++++++++++++++++------------
+ 6 files changed, 53 insertions(+), 35 deletions(-)
+
+commit c7c4ccf8a1e784b6f8798388a219dda9a26fbd93
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Nov 12 15:41:22 2013 -0500
+
+    [travis] Enable graphite2
+
+ .travis.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 83408cf804a6908873c41b70bb7c43448e66ddd2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 6 14:46:04 2013 -0500
+
+    Fix llvm warnings on Mac
+
+    Patch from Scott Fleischman.  Warnings were:
+
+    harfbuzz/src/hb-font-private.hh:121:42: Implicit conversion loses
+    integer precision: 'long long' to 'hb_position_t' (aka 'int')
+    harfbuzz/src/hb-font-private.hh:126:42: Implicit conversion loses
+    integer precision: 'long long' to 'hb_position_t' (aka 'int')
+    harfbuzz/src/hb-font-private.hh:400:85: Implicit conversion loses
+    integer precision: 'long long' to 'hb_position_t' (aka 'int')
+    harfbuzz/src/hb-ot-layout-common-private.hh:1115:37: Implicit
+    conversion
+    loses integer precision: 'long long' to 'int'
+    harfbuzz/src/hb-ft.cc:421:97: Implicit conversion loses integer
+    precision: 'unsigned long long' to 'int'
+    harfbuzz/src/hb-ft.cc:422:97: Implicit conversion loses integer
+    precision: 'unsigned long long' to 'int'
+
+ src/hb-font-private.hh                    | 6 +++---
+ src/hb-ft.cc                      | 4 ++--
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 333cc6e2d11831bcd2370723456e678574d570ec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Oct 30 17:30:11 2013 +0000
+
+    [otlayout] Remove unused is_inplace()
+
+    Patch from Jonathan Kew.
+
+ src/hb-ot-layout-gpos-table.hh       |   6 --
+ src/hb-ot-layout-gsub-table.hh       |  56 ------------
+ src/hb-ot-layout-gsubgpos-private.hh | 159
+ -----------------------------------
+ 3 files changed, 221 deletions(-)
+
+commit 176fd17d02ac183af32a0e710ec32d25c9322021
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Oct 30 17:27:24 2013 +0000
+
+    Bug 70971 - Signed/unsigned compiler warnings on windows
+
+    Patch from Emil Eklund.
+
+ src/hb-buffer-serialize.cc | 8 ++++----
+ src/hb-ot-map.cc          | 2 +-
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 3d436d325edccc0f3dd820e06e3d529cc8f3eca4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 28 21:00:37 2013 +0100
+
+    [otlayout] Reset ccc when marking glyph as letter
+
+ src/hb-ot-layout-gsubgpos-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit b9d0077ac1a8e8a62ee15c64ad302f7976e23bdd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Oct 28 20:44:03 2013 +0100
+
+    Fix win32 testing
+
+ test/shaping/Makefile.am  | 1 +
+ test/shaping/run-tests.sh | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+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
+
+    [OTLayout] Protect against out-of-range lookup indices
+
+    Filter them out when compiling map.
+
+ src/hb-ot-layout.cc | 17 +++++++++++++++++
+ src/hb-ot-layout.h  | 5 +++++
+ src/hb-ot-map.cc    | 8 +++++++-
+ 3 files changed, 29 insertions(+), 1 deletion(-)
+
+commit 6b4fdded94b7efb96c6e41cca4350878ed859ff1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 30 13:48:19 2013 -0400
+
+    Update git.mk
+
+ git.mk | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+commit 2a2b5b89ef3a606ba2996bc89fd1c577a6c98f40
+Author: M1cha <sigmaepsilon92@gmail.com>
+Date:  Mon Sep 30 08:55:52 2013 +0000
+
+    Cleanup Android.mk
+    - use common src files for both static and shared libs
+    - remove empty LOCAL_SHARED_LIBRARIES
+
+ Android.mk | 58
+ +++++++++++++++++-----------------------------------------
+ 1 file changed, 17 insertions(+), 41 deletions(-)
+
+commit 622bc3d829cab84c3a4148b88f2c91fee491ef39
+Merge: 3d2c4f0 d583df1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Sep 29 13:31:58 2013 -0700
+
+    Merge pull request #4 from amarullz/master
+
+    Add build static library on Android.mk
+
+commit 3d2c4f0c2ff8fab4262988aad65b170e5b479b20
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 27 17:06:29 2013 -0400
+
+    Fix hiding of default_ignorables if font doesn't have space glyph
+
+    Based on patch from Jonathan Kew.  See discussion on the list.
+
+ src/hb-ot-shape.cc | 40 ++++++++++++++++++++++++++++++----------
+ 1 file changed, 30 insertions(+), 10 deletions(-)
+
+commit d583df1e78003f8f1039ad72331bf877b13d1ae5
+Author: Ahmad Amarullah <support@amarullz.com>
+Date:  Fri Sep 27 19:04:32 2013 +0700
+
+    Add build static library on Android.mk
+
+    Use UCDN instead ICU
+    HAVE Freetype
+
+ Android.mk | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 50 insertions(+)
+
+commit 078de49ca10285f6cd1452abd40f831a17af5d1a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 26 18:26:43 2013 -0400
+
+    [util] Don't use g_array_unref()
+
+    Was introduced in glib 2.22.
+
+ util/view-cairo.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 48360ec03b225dfec5f90bc5cb93122203d2dd6b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 26 16:48:42 2013 -0400
+
+    Bug 68990 - test-common fails on i686-linux
+
+    Fix use-after-end-of-scope.
+
+ src/hb-common.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit b61f97d544ce43d85f5fe93e682c324e042c0770
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 16 22:07:22 2013 -0400
+
+    0.9.21
+
+ NEWS        | 12 ++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 2af826296315d89f3a433952903c5968e56044ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 16 21:49:56 2013 -0400
+
+    Improve library checks
+
+ src/Makefile.am      |  1 +
+ src/check-defs.sh    | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ src/check-symbols.sh | 37 ++++++++++++-------------------------
+ 3 files changed, 57 insertions(+), 25 deletions(-)
+
+commit 882edce48e507a1c76c908ec2db04aac218b67d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 13 20:36:43 2013 -0400
+
+    [graphite2] Fix include
+
+ src/hb-graphite2.cc | 5 ++---
+ src/hb-graphite2.h  | 2 ++
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit ace5c7eb4c2302a6a7eb3576e6dbc3bc026e569c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 13 20:34:42 2013 -0400
+
+    [introspection] hb-ft annotations
+
+ src/hb-face.cc |  2 +-
+ src/hb-ft.cc  | 30 +++++++++++++++++++++++++++++-
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+commit a8949df48780e680e03b9afbbafb3628a0acef52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 13 20:23:51 2013 -0400
+
+    [introspection] Annotate Unicode / font callbacks
+
+    Should move these out of the public header...
+
+    We're "clean" of introspection warnings now.  Remaining ones are about
+    graphite2 / freetype types not being introspectable.
+
+ src/hb-blob.cc   |   4 +-
+ src/hb-face.cc   |   2 +-
+ src/hb-font.cc   |   4 +-
+ src/hb-font.h   | 132
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ src/hb-unicode.h | 106 ++++++++++++++++++++++++++++++++++++++++----
+ 5 files changed, 231 insertions(+), 17 deletions(-)
+
+commit 4b011094d5e90cf93df2891e47aeab1bffad5bbf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 13 20:17:42 2013 -0400
+
+    Move code around
+
+    I believe I didn't break anything...
+
+ src/hb-ot-shape.cc | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+commit 4878db218202ed804c9f76edb7e4aa220de8a8d8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 12 20:56:32 2013 -0400
+
+    Remove contrib/ Python hand-coded binding stuff
+
+    gobject-introspection coming together.
+
+ contrib/README                           |   2 -
+ contrib/python/README            |  10 --
+ contrib/python/lib/fontconfig.pyx |  47 ---------
+ contrib/python/lib/harfbuzz.pyx   | 213
+ --------------------------------------
+ contrib/python/scripts/hbtestfont | 116 ---------------------
+ contrib/python/setup.py          |  39 -------
+ 6 files changed, 427 deletions(-)
+
+commit e478ebe4d3f74dc271ffe88680fd29f6b1924c93
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 12 20:53:07 2013 -0400
+
+    [introspection] Add sample.py
+
+ src/sample.py | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit dfdbe7f932daffcf73911ff4e4a36f749164d960
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 12 20:52:20 2013 -0400
+
+    [introspection] Make hb_blob_create() introspectable
+
+ src/Makefile.am | 2 ++
+ src/hb-blob.cc  | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 085d4291a9f253a4b8e2eec8003ac11d02a9394f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 12 17:14:33 2013 -0400
+
+    [introspection] Disable constructors for now
+
+    Since our types are not associated with their methods, marking
+    constructors makes them inaccessible from bindings.  Undo for now.
+
+ src/hb-blob.cc       | 2 +-
+ src/hb-buffer.cc     | 2 +-
+ src/hb-face.cc       | 2 +-
+ src/hb-font.cc       | 4 ++--
+ src/hb-set.cc       | 2 +-
+ src/hb-shape-plan.cc | 2 +-
+ src/hb-unicode.cc    | 2 +-
+ 7 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 6c48f20eea22c6e686416ab4ec8388be3e8cd0b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Sep 9 15:43:10 2013 -0400
+
+    [otlayout] Add structs for JSTF table
+
+ src/Makefile.am               |   1 +
+ src/hb-ot-head-table.hh       |   2 +-
+ src/hb-ot-hhea-table.hh       |   2 +-
+ src/hb-ot-hmtx-table.hh       |   2 +-
+ src/hb-ot-layout-gdef-table.hh |   2 +-
+ src/hb-ot-layout-gpos-table.hh |   2 +-
+ src/hb-ot-layout-gsub-table.hh |   2 +-
+ src/hb-ot-layout-jstf-table.hh | 229
+ +++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.cc           |   1 +
+ src/hb-ot-layout.h            |   1 +
+ src/hb-ot-maxp-table.hh       |   2 +-
+ src/hb-ot-name-table.hh       |   2 +-
+ src/main.cc                   |   2 +-
+ 13 files changed, 241 insertions(+), 9 deletions(-)
+
+commit 70303cf23b22647bf641be22c8650310128322a9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 17:35:57 2013 -0400
+
+    [docs/introspection] Some more annotations
+
+ src/hb-common.cc    | 151
+ ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ src/hb-font.cc      | 16 +++---
+ src/hb-version.h.in | 19 -------
+ 3 files changed, 155 insertions(+), 31 deletions(-)
+
+commit 288f2899979bcc9e68f8115cb76e3271ed0e17bc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 15:40:22 2013 -0400
+
+    [docs/introspection] More annotations
+
+ src/hb-blob.cc                    |  63 +++---
+ src/hb-buffer-serialize.cc |  63 ++++++
+ src/hb-buffer.cc          | 307 ++++++++++++++++++++++++++-
+ src/hb-face.cc                    | 171 +++++++++++++++
+ src/hb-font-private.hh     |  4 +-
+ src/hb-font.cc                    | 504
+ ++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-set.cc             |   2 +-
+ src/hb-shape-plan.cc      | 104 ++++++++++
+ src/hb-shape.cc           |  56 +++++
+ src/hb-unicode.cc         | 128 ++++++++++++
+ 10 files changed, 1355 insertions(+), 47 deletions(-)
+
+commit 17905c54f1bab9e6dfe13f59f5ec208de12832f7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 16:57:01 2013 -0400
+
+    [introspection] Work around g-i limitation with hb_language_t
+
+ src/hb-gobject-structs.cc | 15 +++++++++++----
+ src/hb-gobject-structs.h  |  8 ++++++++
+ 2 files changed, 19 insertions(+), 4 deletions(-)
+
+commit cd361c3cbe4a288e3019b9a029f44e4c5f24436c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 16:20:21 2013 -0400
+
+    Minor change to hb_language_t
+
+    Let me know if this breaks anyone's anything.
+
+ src/hb-common.cc | 2 +-
+ src/hb-common.h  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 20cbc1f8eb0811e6cefa3be3550e80df9c372782
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 15:29:22 2013 -0400
+
+    Annotate hb-set a bit; add HB_SET_VALUE_INVALID
+
+ src/hb-set-private.hh |  20 +++--
+ src/hb-set.cc        | 244
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-set.h         |   2 +
+ src/hb-version.h.in   |   6 +-
+ test/api/test-set.c   |  26 +++---
+ 5 files changed, 276 insertions(+), 22 deletions(-)
+
+commit c44b81833d5bfb9a926d348a76463314c3ec2018
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Sep 6 15:13:16 2013 -0400
+
+    Whitespace
+
+ src/hb-buffer.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit ae9dc717d37d58efdd3fabbe4a9c3c2bf9dc3568
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 5 16:40:37 2013 -0400
+
+    [gtk-doc] Pass source files to gtk-doc
+
+ docs/reference/Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 5f512017ba615ba6ac8e5da2ea0c57a72db2c26b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Sep 4 18:28:39 2013 -0400
+
+    [docs] Document a few symbols
+
+ src/hb-blob.cc      | 160
+ +++++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-buffer.cc    | 78 ++++++++++++++++++++++++-
+ src/hb-version.h.in | 17 ++++++
+ 3 files changed, 251 insertions(+), 4 deletions(-)
+
+commit e0dbf99b4497be305d689a528282fd37214e7f1c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Sep 5 16:00:47 2013 -0400
+
+    [introspection] Pass source files to scanner
+
+ src/Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 5a5350b39b81e0128d36ebc81307a6d698a4dc50
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 3 20:11:01 2013 -0400
+
+    Revert "Round when scaling values"
+
+    This reverts commit 10f964623f003c70f6bdd33423420abda3820ce0.
+
+    See discussion with Khaled Hosny on mailing list.  In short, since
+    integers here can be negative, and int division is "round towards
+    zero", proper rounding should take sign into account.  Just skip
+    doing it again, has been serving us well before.
+
+ TODO                  | 2 ++
+ src/hb-font-private.hh | 6 +-----
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+commit 74ff41c3a573bdf74b60623065eb92a49f055893
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 3 20:09:14 2013 -0400
+
+    Minor
+
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 63dd4b0ac2076fe9cc3dfe5d31ef3616d4ed01e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 3 20:01:40 2013 -0400
+
+    [gtk-doc] Remove hack for deleting tmpl/
+
+    This was introduced in 029f46bde7e39094d3decb46525e91a97c5cc02c
+    and was in fact a bug in gtk-doc master:
+
+      https://bugzilla.gnome.org/show_bug.cgi?id=707426
+
+ docs/reference/Makefile.am | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit 213001aa99003422199245e96878f9fe348c55b4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 3 20:00:16 2013 -0400
+
+    [build] Fix EXTRA_DIST
+
+    I was under the impression that EXTRA_DISTs will happen regardless of
+    automake conditionals.  Apparently I was wrong.
+
+ src/Makefile.am | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 1e994a8fcc94dfea42a6cbfe23a401142d79a1a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Sep 3 18:11:47 2013 -0400
+
+    [gtk-doc] Copy makefile
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 81a007ffad683e53f12093a0c9e30112106f415d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 30 19:45:13 2013 -0400
+
+    [TODO] Update
+
+ TODO | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit a2a28235e8131a1e1d4b8c3d0933df5cf056bbc6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 30 19:38:47 2013 -0400
+
+    [gtk-doc] Generate version.xml from configure
+
+    Even though this is not what autoconf recommends, it reduces doc
+    rebuilds when version doesn't change but configure changes.
+
+ configure.ac                 |  1 +
+ docs/reference/Makefile.am    | 11 +++--------
+ docs/reference/version.xml.in |  1 +
+ 3 files changed, 5 insertions(+), 8 deletions(-)
+
+commit ac1b723917d9b8f247a350f8d3e1bc5d1e472073
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 30 19:32:10 2013 -0400
+
+    Remove hb-old and hb-icu-le test shapers
+
+    They've been disabled for a while and no one cared.  We're past
+    the point to need them for testing, and if we ever need to
+    resurrect them again, well, they're in git graveyard somewhere.
+
+ configure.ac                          |   23 +-
+ src/Makefile.am                       |   28 +-
+ src/hb-icu-le.cc                      |  265 --
+ src/hb-icu-le/COPYING                 |    2 -
+ src/hb-icu-le/FontTableCache.cpp      |   91 -
+ src/hb-icu-le/FontTableCache.h                |   48 -
+ src/hb-icu-le/Makefile.am             |   25 -
+ src/hb-icu-le/PortableFontInstance.cpp |  275 --
+ src/hb-icu-le/PortableFontInstance.h  |  119 -
+ src/hb-icu-le/README                  |    3 -
+ src/hb-icu-le/cmaps.cpp               |  200 --
+ src/hb-icu-le/cmaps.h                 |   87 -
+ src/hb-icu-le/letest.h                        |   63 -
+ src/hb-icu-le/license.html            |   51 -
+ src/hb-icu-le/sfnt.h                  |  453 ---
+ src/hb-old.cc                         |  410 ---
+ src/hb-old/COPYING                    |   24 -
+ src/hb-old/Makefile.am                        |   56 -
+ src/hb-old/README                     |    7 -
+ src/hb-old/harfbuzz-arabic.c          | 1150 ------
+ src/hb-old/harfbuzz-buffer-private.h  |  107 -
+ src/hb-old/harfbuzz-buffer.c          |  383 --
+ src/hb-old/harfbuzz-buffer.h          |  102 -
+ src/hb-old/harfbuzz-external.h                |  106 -
+ src/hb-old/harfbuzz-gdef-private.h    |  135 -
+ src/hb-old/harfbuzz-gdef.c            | 1163 ------
+ src/hb-old/harfbuzz-gdef.h            |  140 -
+ src/hb-old/harfbuzz-global.h          |  125 -
+ src/hb-old/harfbuzz-gpos-private.h    |  729 ----
+ src/hb-old/harfbuzz-gpos.c            | 6094
+ --------------------------------
+ src/hb-old/harfbuzz-gpos.h            |  155 -
+ src/hb-old/harfbuzz-greek.c           |  447 ---
+ src/hb-old/harfbuzz-gsub-private.h    |  483 ---
+ src/hb-old/harfbuzz-gsub.c            | 4329 -----------------------
+ src/hb-old/harfbuzz-gsub.h            |  148 -
+ src/hb-old/harfbuzz-hangul.c          |  268 --
+ src/hb-old/harfbuzz-hebrew.c          |  187 -
+ src/hb-old/harfbuzz-impl.c            |   84 -
+ src/hb-old/harfbuzz-impl.h            |  135 -
+ src/hb-old/harfbuzz-indic.cpp         | 1868 ----------
+ src/hb-old/harfbuzz-khmer.c           |  642 ----
+ src/hb-old/harfbuzz-myanmar.c         |  511 ---
+ src/hb-old/harfbuzz-open-private.h    |  102 -
+ src/hb-old/harfbuzz-open.c            | 1433 --------
+ src/hb-old/harfbuzz-open.h            |  288 --
+ src/hb-old/harfbuzz-shaper-all.cpp    |   37 -
+ src/hb-old/harfbuzz-shaper-private.h  |  159 -
+ src/hb-old/harfbuzz-shaper.cpp                |  996 ------
+ src/hb-old/harfbuzz-shaper.h          |  265 --
+ src/hb-old/harfbuzz-stream-private.h  |   81 -
+ src/hb-old/harfbuzz-stream.c          |  114 -
+ src/hb-old/harfbuzz-stream.h          |   51 -
+ src/hb-old/harfbuzz-tibetan.c         |  249 --
+ src/hb-old/harfbuzz.h                 |   38 -
+ 54 files changed, 2 insertions(+), 25532 deletions(-)
+
+commit b94243d6a9457864ad8ef3ad47ad01985b138862
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 30 18:41:33 2013 -0400
+
+    [g-i] Rename library from harfbuzz to HarfBuzz
+
+ src/Makefile.am | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit f730b5d1e2369762952481f1a2d3db26a2b48015
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 29 15:53:33 2013 -0400
+
+    0.9.20
+
+ NEWS        | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 49 insertions(+), 1 deletion(-)
+
+commit b0e03508bad04d7dcf2c50ac81f6261425b34c5f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 29 15:56:32 2013 -0400
+
+    Dist with gobject and introspection enabled
+
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit e4ce6745e15eab33ed693874e7a56981f4d6f79a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 29 15:56:16 2013 -0400
+
+    [gtk-doc] Fix build without gobject
+
+ docs/reference/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 263372f15ffdf4c0e4386133f64ff389ba73de33
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 28 13:43:54 2013 -0400
+
+    Remove gtk-doc.make
+
+    It's copied by gtk-docize.
+
+ gtk-doc.make | 302
+ -----------------------------------------------------------
+ 1 file changed, 302 deletions(-)
+
+commit 79d754efeef89543d51775b110e8bd49cf7e699b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 28 13:43:35 2013 -0400
+
+    Fix build
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 71ef22b04d466803076af1da6763fecab95ce5bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 28 12:52:55 2013 -0400
+
+    Turn hb-gobject, and introspection off by default
+
+    Also enable bootstrapping without them.
+
+ configure.ac   | 39 ++++++++++++++++++++++++++++++++++-----
+ src/Makefile.am |  5 +++--
+ 2 files changed, 37 insertions(+), 7 deletions(-)
+
+commit d8f507099b9ae5f0c643fb8dddbb069df6f62a94
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 21:26:24 2013 -0400
+
+    Hookup harfbuzz-gobject to introspection
+
+ src/Makefile.am | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+commit 71439a8c7ae9df25193bc3ad0f203117d2884a19
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 20:56:58 2013 -0400
+
+    [gobject] Flesh out hb-gobject
+
+    Move it to new harfbuzz-gobject library.  Implement enums and
+    boxed types for object-types.  Still have to do boxed types for
+    value types.
+
+ configure.ac                        | 12 ++++-
+ docs/reference/Makefile.am          | 12 ++++-
+ docs/reference/harfbuzz-docs.xml     |  3 ++
+ docs/reference/harfbuzz-sections.txt | 48 +++++++++++++++++++-
+ src/Makefile.am                     | 48 +++++++++++++-------
+ src/harfbuzz-gobject.pc.in          | 12 +++++
+ src/hb-gobject-enums.cc.tmpl        | 11 +++--
+ src/hb-gobject-enums.h.tmpl         | 55 +++++++++++++++++++++++
+ src/hb-gobject-structs.cc           | 84
+ +++++++++++++++++++++++++++-------
+ src/hb-gobject-structs.h            | 87
+ ++++++++++++++++++++++++++++++++++++
+ src/hb-gobject.h                    | 38 ++--------------
+ 11 files changed, 333 insertions(+), 77 deletions(-)
+
+commit 23027f7611b53b594e4b4008e916e42b5154f6ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Aug 22 19:03:21 2013 -0400
+
+    [introspection] Enable gobject-introspection again
+
+ configure.ac   |  7 ++++---
+ src/Makefile.am | 49 ++++++++++++++++++++++++++++---------------------
+ 2 files changed, 32 insertions(+), 24 deletions(-)
+
+commit 757a7a9018577dcc399be03dc45a59589585d2fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 28 12:35:13 2013 -0400
+
+    [uniscribe] Fixed build with wide chars
+
+    https://github.com/blinkseb/harfbuzz/commit/f65dafa4138e1fb4395bf646fa33bb01a86a7e9a
+
+ src/hb-uniscribe.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4dc798de19c767b91fd3025c85593fa6809d1340
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 20:39:00 2013 -0400
+
+    Add hb-deprecated.h, and rename a couple enum values
+
+    Add deprecated alias for old name.
+
+ src/Makefile.am             |  1 +
+ src/hb-buffer.cc            |  4 ++--
+ src/hb-buffer.h             |  8 +++----
+ src/hb-common.h             |  5 -----
+ src/hb-deprecated.h         | 51
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb.h                    |  1 +
+ src/test-buffer-serialize.cc |  2 +-
+ test/api/test-buffer.c       |  2 +-
+ util/Makefile.am            |  1 +
+ util/hb-shape.cc            |  2 +-
+ util/options.hh             |  2 +-
+ 11 files changed, 64 insertions(+), 15 deletions(-)
+
+commit 2e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 18:49:07 2013 -0400
+
+    Separate face source code from font
+
+    Makes documentation / introspection easier.
+
+ Android.mk                          |   1 +
+ docs/reference/harfbuzz-docs.xml     |   1 +
+ docs/reference/harfbuzz-sections.txt |   6 +-
+ src/Makefile.am                     |   3 +
+ src/hb-face-private.hh                      | 108 ++++++++++++
+ src/hb-face.cc                              | 311
+ +++++++++++++++++++++++++++++++++++
+ src/hb-face.h                       | 117 +++++++++++++
+ src/hb-font-private.hh                      |  67 +-------
+ src/hb-font.cc                              | 269 ------------------------------
+ src/hb-font.h                       |  75 +--------
+ src/hb.h                            |   1 +
+ 11 files changed, 549 insertions(+), 410 deletions(-)
+
+commit d3490761e11ae308fbd8aaf02059653f579035c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 21:15:29 2013 -0400
+
+    Improve check-includes.sh
+
+ src/check-includes.sh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit 381f2fb5e664715d67ffc9a234b0fd8aa540fada
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 19:20:38 2013 -0400
+
+    Minor
+
+ docs/reference/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ac1f09b53e2c5d14c874e4d9f1b25b03ea1d1c44
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 18:50:12 2013 -0400
+
+    [gtk-doc] Fix maintainer-clean rule
+
+ docs/reference/Makefile.am | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 38b8b40526a85f33521542e24d1e0c82588efc85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 27 11:44:09 2013 -0400
+
+    Fix possible snprintf OOM
+
+    https://bugzilla.redhat.com/show_bug.cgi?id=1001645
+
+ src/hb-buffer-serialize.cc | 14 +++++++-------
+ src/hb-font-private.hh     |  3 ++-
+ src/hb-shape.cc           |  6 +++---
+ 3 files changed, 12 insertions(+), 11 deletions(-)
+
+commit d22548c0e362cc9447557440af9ecbb11badfa78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 18:46:21 2013 -0400
+
+    [check-*] Minor
+
+ src/check-c-linkage-decls.sh | 4 ++--
+ src/check-header-guards.sh   | 4 ++--
+ src/check-includes.sh       | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 029f46bde7e39094d3decb46525e91a97c5cc02c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 18:11:07 2013 -0400
+
+    [gtk-doc] Remove tmpl in make maintainer-clean
+
+ docs/reference/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit dddf990c3687a47297eafc82b54fa96842e68003
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 17:58:25 2013 -0400
+
+    [git.mk] Update
+
+ git.mk | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+commit 700a15fe4b80da9c67befd85ae10a166f5b65962
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 17:49:36 2013 -0400
+
+    Add HB_DISABLE_DEPRECATED
+
+    That moment that you have to accept that you made API mistakes...
+
+ docs/reference/Makefile.am          | 2 +-
+ docs/reference/harfbuzz-sections.txt | 8 +++++---
+ src/hb-common.h                     | 4 +++-
+ 3 files changed, 9 insertions(+), 5 deletions(-)
+
+commit ddc456a519a9a59e96f9d7fcad988369e0a8842b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 26 17:34:18 2013 -0400
+
+    [travis] Add graphite2
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f7c72b42efb8d42859023659fd2e3d589523436d
+Author: Anthony Carrico <acarrico@memebeam.org>
+Date:  Sun Feb 24 13:00:33 2013 -0500
+
+    [gtk-doc] Initial setup
+
+    Initial setup of gtk-doc. Straight forward setup following the gtk-doc
+    instructions. Ignore some troublesome types in src/hb-gobject.h. To
+    build use "./autogen.sh --enable-gtk-doc" then "make". Docs are in
+    harfbuzz/docs/reference/html/index.html.
+
+ .travis.yml                          |  10 +-
+ Makefile.am                          |   7 +-
+ autogen.sh                           |   7 +
+ configure.ac                         |   7 +-
+ docs/Makefile.am                     |   1 +
+ docs/reference/Makefile.am           | 109 +++++++++
+ docs/reference/harfbuzz-docs.xml      |  61 +++++
+ docs/reference/harfbuzz-overrides.txt |   0
+ docs/reference/harfbuzz-sections.txt  | 431
+ ++++++++++++++++++++++++++++++++++
+ gtk-doc.make                         | 302 ++++++++++++++++++++++++
+ src/Makefile.am                      |   2 +-
+ src/hb-gobject.h                     |   3 +-
+ 12 files changed, 931 insertions(+), 9 deletions(-)
+
+commit 3409fb1c767118067cf7edfb97068936b6f4b717
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 21 17:22:21 2013 -0400
+
+    [uniscribe] Ask Uniscribe to return shaping results in logical order
+
+    See discussion on the list in the thread "Arabic presentation forms
+    and the uniscribe backend".
+
+    Based on patch from Jonathan Kew.
+
+ src/hb-uniscribe.cc | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+commit 1d05fdd09fa271b641f30a2138171e6fafcd8db7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 20 13:22:21 2013 -0400
+
+    [uniscribe] Print run info
+
+ src/hb-uniscribe.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 3613696b57225111507a3f4263f5fa6937d0bc72
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 12 00:33:28 2013 -0400
+
+    [coretext] Fully support user features
+
+    Based on patch from Jonathan Kew and data from Apple.
+
+    It's not working correctly though, and I suspect I'm hitting a bug in
+    CoreText.  When I do this:
+
+    hb-shape /Library/Fonts/Zapfino.ttf ZapfinoZapfino --shaper coretext \
+    --features=-liga
+
+    I expect both ligatures to turn off, but only the second one does:
+
+    [Z_a_p_f_i_n_o=0+2333|Z=7+395|a=8+285|p_f=9+433|i=11+181|n=12+261|o=13+250]
+
+    whereas if I disable 'dlig' instead of 'liga', both are turned off.
+    Smells...
+
+    Doesn't resolve conflicting feature settings.
+
+ src/hb-coretext.cc  | 446
+ +++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/hb-uniscribe.cc |  2 +-
+ 2 files changed, 404 insertions(+), 44 deletions(-)
+
+commit 54e6f6c588a164f7de62ff88b3eff4f25adb8f17
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 14:34:54 2013 -0400
+
+    Clean up list of Unicode scripts
+
+    Rename HB_SCRIPT_CANADIAN_ABORIGINAL to HB_SCRIPT_CANADIAN_SYLLABICS
+    and a macro for the old name.
+
+ src/hb-common.h                   | 277
+ ++++++++++++++++++++-----------------
+ src/hb-glib.cc                            |   2 +-
+ src/hb-ot-shape-complex-private.hh |  2 +
+ src/hb-ucdn.cc                            |   2 +-
+ test/api/test-unicode.c           |   2 +-
+ 5 files changed, 153 insertions(+), 132 deletions(-)
+
+commit 7cd4a715848c44be9aec6b6b622cfc2a60b1a5a9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:41:48 2013 -0400
+
+    Update TODO
+
+ TODO | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 515a0ac81e531c95b1bb7f1a3c5df73a9e64b14f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:40:59 2013 -0400
+
+    Fix compiler warning
+
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 10f964623f003c70f6bdd33423420abda3820ce0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:40:01 2013 -0400
+
+    Round when scaling values
+
+    Doesn't matter for most users since they should be working in a
+    fixed sub-pixel scale anyway (ie. 22.10, 26.6, 16.16, etc).
+
+ TODO                  | 2 --
+ src/hb-font-private.hh | 6 +++++-
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit df8f70ae5de6181d56efa3f076f14e4d52119a5e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:35:10 2013 -0400
+
+    Minor
+
+ src/hb-font-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ce8badf1808f9fbdd9a22e9215c7475d3afde5ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:31:06 2013 -0400
+
+    Minor
+
+ src/hb-font-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d71c0df2d17f4590d5611239577a6cb532c26528
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Aug 9 09:28:32 2013 -0400
+
+    Remove vrt2, vkrn, vpal, and valt from default vertical features
+
+    See thread by John Dagget on the list.
+
+ TODO              | 2 --
+ src/hb-ot-shape.cc | 9 ---------
+ 2 files changed, 11 deletions(-)
+
+commit a782a5e9a37c8733ac2830410a514d38635b543a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 7 21:08:54 2013 -0400
+
+    [coretext] Start adding support for features
+
+    Unlike AAT, looks like with CoreText very few OT features can
+    be mapped.
+    :(
+
+ src/hb-coretext.cc | 65
+ +++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 54 insertions(+), 11 deletions(-)
+
+commit bdd8873fd8ae5c794018f6edac242b0a8b62ff31
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 7 17:58:25 2013 -0400
+
+    Revert "[Indic] don't apply 'calt' by default in Indic shaper"
+
+    This reverts commit 952121007c6f6f374e4cf1734ebcfe2d2d71c71c.
+
+    In light of discussion on the mailing list...
+
+ src/hb-ot-shape-complex-indic.cc | 4 ----
+ 1 file changed, 4 deletions(-)
+
+commit 9a175914d72187d0c3f50ddad50c9569649c3072
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Aug 7 17:26:13 2013 -0400
+
+    [uniscribe] Support feature ranges
+
+    As Khaled pointed out, right now setting any features, turns kern
+    and possibly other features off.
+
+ src/hb-uniscribe.cc | 232
+ ++++++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 199 insertions(+), 33 deletions(-)
+
+commit 627af695e48ef10b6e634c34b723f7e7013467f6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 6 16:53:56 2013 -0400
+
+    More git.mk updates
+
+ git.mk | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 722252743d59e4cd53cb71720d823ea00b708ad8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 6 15:19:23 2013 -0400
+
+    Update git.mk
+
+ git.mk | 37 +++++++++++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 14 deletions(-)
+
+commit 38d5c58d23fce38221689cda98cea1c3e42ed615
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 6 14:45:36 2013 -0400
+
+    [uniscribe] Half-support user features
+
+    Turning features on globally works now.
+
+ src/hb-uniscribe.cc | 54
+ ++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 43 insertions(+), 11 deletions(-)
+
+commit 639afdc690c681a302080239a1967ce735ba5be5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Aug 6 14:28:12 2013 -0400
+
+    Minor
+
+ src/hb-private.hh | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+commit 952121007c6f6f374e4cf1734ebcfe2d2d71c71c
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date:  Tue Aug 6 10:36:14 2013 -0400
+
+    [Indic] don't apply 'calt' by default in Indic shaper
+
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 625678436c29100eef82d87e635b251030a18f60
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Aug 5 22:44:18 2013 -0400
+
+    Fix glyph closure with class==0
+
+    As reported by cibu.  Untested.
+
+ src/hb-ot-layout-common-private.hh | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+commit 580d5eb93af5bbbc64994b626d5e011e2c256d74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Aug 4 16:55:21 2013 -0400
+
+    Don't apply 'dlig' by default
+
+    Windows 8 doesn't, and the spec will be fixed.
+
+ src/hb-ot-shape-complex-arabic.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 48382e2f41499a91181bea0acc5792989d2485bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 30 18:25:39 2013 -0400
+
+    Minor
+
+ src/hb-ot-layout-common-private.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit c461371419d186811d4bfc768e26535f48a807f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 30 14:48:23 2013 -0400
+
+    [CoreText] Don't leak the CTLine object (and everything that hangs
+    off it)
+
+    Patch from Jonathan Kew.
+
+ src/hb-coretext.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 5fbc952524ac8840f007dc0136823a4ab6e25f70
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 29 14:34:40 2013 -0400
+
+    Fix glyph name printing in hb-ot-shape-closure
+
+ util/hb-ot-shape-closure.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6fadd9dd7cc220f131c29946285831635afc8044
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 26 10:33:06 2013 -0400
+
+    Apply 'mark' to Myanmar
+
+    According to Andrew Glass: "The issue with Myanmar <mark> feature was
+    fixed via a servicing patch as soon as Windows 8 became available."
+
+ src/hb-ot-shape-complex-myanmar.cc | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+commit 86522e493d071f395b5abf64289232bf8867ac29
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 22 19:07:53 2013 -0400
+
+    Fix glyph closure recursion!
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 74439d0aa10184451adc6c6469f5119be352ecbb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 22 19:02:29 2013 -0400
+
+    Minor
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8b427c78efa988ed27a2a394146d73f59688707b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 22 10:57:05 2013 -0400
+
+    [uniscribe] Sanitize font file
+
+ src/hb-uniscribe.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 12ff69df21ac91ae21860db7000d9f9973d3da1a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 22 10:52:12 2013 -0400
+
+    [uniscribe] Handle TTC when renaming font
+
+ src/hb-uniscribe.cc | 31 ++++++++++++++++++-------------
+ 1 file changed, 18 insertions(+), 13 deletions(-)
+
+commit 05bad3b8c25a89bc0f20f99f9215e492f48f03fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jul 21 17:05:02 2013 -0400
+
+    [uniscribe] Use OT::* types
+
+ src/hb-open-type-private.hh | 10 ++++-
+ src/hb-ot-name-table.hh     |  4 +-
+ src/hb-uniscribe.cc        | 107
+ +++++++++++++++++++++++---------------------
+ 3 files changed, 66 insertions(+), 55 deletions(-)
+
+commit bdeea605fe597bff4430eaae3317189bb81ec76e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jul 21 16:22:10 2013 -0400
+
+    [uniscribe] Move name generation into separate function
+
+ src/hb-uniscribe.cc | 34 ++++++++++++++++++++++------------
+ 1 file changed, 22 insertions(+), 12 deletions(-)
+
+commit 73f947e2a7bc5b29d731da2e9d1fafe958be839e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jul 21 16:16:35 2013 -0400
+
+    [uniscribe] Use blob to pass data around
+
+ src/hb-uniscribe.cc | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+commit 8ac2e88deff3d069c19fd59d0fbbfb88a762b113
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Jul 21 16:06:49 2013 -0400
+
+    [uniscribe] Use unique font name
+
+    When installing per-process fonts using AddFontMemResourceEx(),
+    if a font with the same family name is already installed, sometimes
+    that one gets used.  Which is problematic for us.  As such, we
+    now mangle the font to install a new 'name' table with a unique
+    name, which we then use to choose the font.
+
+    Patch from Jonathan Kew.
+
+ configure.ac       |   2 +-
+ src/hb-uniscribe.cc | 136
+ ++++++++++++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 116 insertions(+), 22 deletions(-)
+
+commit 8751de50831338ce550601c34c17d152ad89c1fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 18 16:29:50 2013 -0400
+
+    Followup fix for 3f9e2dced298c3d00f31b2dfc38685bb071a3a22
+
+    During GSUB, if a ligation happens, subsequence context input matching
+    matches the new indexing.  During GPOS however, the indices never
+    change.  So just go one by one.
+
+    Fixes 'dist' positioning with mmrtext.ttf and the following sequence:
+
+      U+1014,U+1039,U+1011,U+1014,U+1039,U+1011,U+1014,U+1039,U+1011
+
+    Reported by Jonathan Kew.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 2b78d67e9f38f77086fbd9c3fd6f1c8c73927a51
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jul 16 16:06:27 2013 -0400
+
+    0.9.19
+
+ NEWS        | 11 +++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit e509d35cf1160f1449bc736b9445cdf61ab81d06
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jul 11 14:56:45 2013 -0400
+
+    [ft] hb_ft_get_glyph_from_name fails for the name of glyph id 0
+
+    Based on patch from Jonathan Kew, as reported on the mailing list.
+
+ src/hb-ft.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 29b596ac67806c44441e65f3ece227df0fe2bb63
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 8 08:37:15 2013 -0600
+
+    [uniscribe] Fix buffer allocation
+
+    Email from Jonathan Kew:
+
+    My cygwin build kept aborting on certain test words when run with the
+    uniscribe backend. Turned out this was caused by a bug in the
+    allocation
+    of scratch buffers in hb-uniscribe.cc.
+
+    Commit 2a17f9568d9724e045d2c1d660e007f3acd747d9 introduced a new line
+
+      ALLOCATE_ARRAY (SCRIPT_VISATTR, vis_attr, glyphs_size);
+
+    but it failed to account for this in the computation of glyphs_size
+    (the number of glyphs for which scratch buffer space is available),
+    with the result that the vis_clusters array ends up overrunning the
+    end of the scratch buffer and clobbering the beginning of the buffer's
+    info[].
+
+    AFAICS, the vis_attr array is not actually used, so the simple fix is
+    to remove the line that allocates it. (If/when we -do- need to use
+    vis_attr for something, we'll need to add another term to the earlier
+    calculation of glyphs_size.)
+
+    With this patch, the uniscribe backend runs reliably again.
+
+    JK
+
+ src/hb-uniscribe.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 9245e98742667dfffe06523e8051beda1bc04811
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 26 20:57:58 2013 -0400
+
+    [Indic] Add Javanese config
+
+    We should add for other scripts too, send me the virama codepoint
+    and script name...
+
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5f85c80a07dd2d18348824866bf4e984ac711a24
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 26 20:14:18 2013 -0400
+
+    [OT] Collect requiredFeature only if features are not provided
+
+    As per Werner's report on the list.
+
+ src/hb-ot-layout.cc | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+commit 3f9e2dced298c3d00f31b2dfc38685bb071a3a22
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 26 19:46:55 2013 -0400
+
+    Fix contextual lookup recursion indexing
+
+    See email thread "Skipping Control for Attaching Marks using OpenType"
+    from earlier this month.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+commit f5da11e0fa5adf8f782883dc5c30d8faaafc9c27
+Merge: 79d1007 89312b7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Jun 22 08:04:05 2013 -0700
+
+    Merge pull request #3 from LogosBible/master
+
+    Destroy lookups before blobs.
+
+commit 89312b7417c0198a0635ca6b7e8ea11f6af2a4f8
+Author: Bradley Grainger <bgrainger@gmail.com>
+Date:  Fri Jun 21 15:02:18 2013 -0700
+
+    Destroy lookups before blobs.
+
+    'layout->gsub' may depend on data owned by 'layout->gsub_blob',
+    so it must
+    be deinitialized before the blob is destroyed.
+
+ src/hb-ot-layout.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 79d1007a501fd63c0ba4d51038c513e6b8b94740
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 13 19:01:07 2013 -0400
+
+    If variation selector is not consumed by cmap, pass it on to GSUB
+
+    This changes the semantics of get_glyph() callback and expect that
+    callbacks return false if the requested variant is not available, and
+    then we will call them back with variation_selector=0 and will retain
+    the glyph for the selector in the glyph stream.
+
+    Apparently most Mongolian fonts implement the Mongolian Variation
+    Selectors using GSUB, not cmap.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=65258
+
+    Note that this doesn't fix the Mongolian shaping yet, because the way
+    that's implemented is that the, say, 'init' feature ligates the letter
+    and the variation-selector.  However, since currently the variation
+    selector doesn't have the 'init' mask on, it will not be matched...
+
+ src/hb-ft.cc                |  3 +--
+ src/hb-ot-shape-normalize.cc | 14 ++++++++++++--
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+commit c7a84917208528040aaf9ad0a9a0b26aabeabc9c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 6 20:17:32 2013 -0400
+
+    Skip over multiple variation selectors in a row
+
+ src/hb-ot-shape-normalize.cc | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 7235f33f9e5e031622a00a84f4b2e98f16803579
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 10 14:39:51 2013 -0400
+
+    Fix misc warnings reported by cppcheck
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=65544
+
+ src/hb-common.cc           |  2 +-
+ src/hb-coretext.cc         |  3 ---
+ src/hb-font-private.hh      | 17 +++++++++++------
+ src/hb-private.hh          |  2 +-
+ src/hb-shape.cc            |  2 +-
+ test/api/test-font.c       |  1 -
+ util/ansi-print.cc         |  1 +
+ util/hb-ot-shape-closure.cc | 5 +++--
+ util/hb-shape.cc           |  5 ++++-
+ util/shape-consumer.hh      | 6 ++++--
+ util/view-cairo.hh         |  6 ++++--
+ 11 files changed, 30 insertions(+), 20 deletions(-)
+
+commit 570bcccd3f41b9aecd51765a401299833a6d8ebd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 10 13:56:51 2013 -0400
+
+    Fix PKG_CHECK_MODULES usage
+
+    Oops.
+
+    Bug 65246 - Fix build without graphite2
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 270cfd7a9c01dfb1b1789929f020943ad63aca99
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 6 18:57:15 2013 -0400
+
+    Fix PKG_CHECK_MODULES usage
+
+    Bug 65246 - Fix build without graphite2
+
+    If we don't provide ACTION-IF-NOT-FOUND, configure aborts if it can't
+    find the libraries.  We handle that ourselves so we don't want the
+    macro to abort.
+
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 2fd0e02706857bcaf61bf5151657eac96cfa73b9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jun 6 17:16:01 2013 -0400
+
+    Minor
+
+ src/Makefile.am | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit b4c5c52944a44ba863a22a53035ff561af7318ca
+Author: Chun-wei Fan <fanchunwei@src.gnome.org>
+Date:  Mon Jun 3 17:55:29 2013 +0800
+
+    util/ansi-print.cc: Use fallback implementation for lround on MSVC
+
+    Unfortuately Visual Studio (still) does not support the C99 function
+    lround, so provide a fallback implementation for it.
+
+ util/ansi-print.cc | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit a4446b10bfe0a9e7236bf941fa69a96697939e11
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 3 18:39:14 2013 -0400
+
+    Fix build for C89 compilers
+
+ test/api/test-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4ddf937242048c4a044ada4559e26664a0c09b48
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 3 18:36:26 2013 -0400
+
+    Remove unnecessary stdint.h include
+
+ src/hb-ucdn/ucdn.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 93a04b8b5e6d8067cb925fdf532aadc24c1d4861
+Author: Chun-wei Fan <fanchunwei@src.gnome.org>
+Date:  Mon Jun 3 17:49:37 2013 +0800
+
+    hb-uniscribe.cc: Re-enable build under Visual Studio
+
+    -Declare hinstLib at the top of block
+    -Fix the definitions of the typedefs of ScriptItemizeOpenType,
+     ScriptShapeOpenType and ScriptPlaceOpenType
+
+ src/hb-uniscribe.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 280e52ae95df0cbee0bb305f5354381bc1d563f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 30 18:04:24 2013 -0400
+
+    Fix ChangeLog regen
+
+ Makefile.am | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit c1824daefa1253507636e4bfdf46374f835f10b3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 29 15:30:54 2013 -0400
+
+    Update TODO
+
+ TODO | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit 2966d3603259430800cb5880491d28a1c5ea2314
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 17:34:37 2013 -0400
+
+    Fix test build
+
+ test/api/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 6873f6cc42aa1405e71be903bd0f39a7a15320ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 17:33:16 2013 -0400
+
+    Minor
+
+ TODO | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 4014aa4e53bddb29d939a168bd733942d3683732
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 17:28:59 2013 -0400
+
+    0.9.18
+
+ NEWS        | 28 ++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 29 insertions(+), 1 deletion(-)
+
+commit d70be29831bb99e34fe18744129088f45d5b2023
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 17:23:56 2013 -0400
+
+    Fix dist
+
+ src/Makefile.am | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 22ce0961742df0a213f2cc86ca3d5a72453c00b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 17:18:30 2013 -0400
+
+    Generate harfbuzz-icu.pc
+
+    Currently it only works with ICU that has .pc files.  I'll
+    wait till someone complains before fixing it for icu-config
+    systems.
+
+ Makefile.am           |  3 ---
+ configure.ac          |  5 ++---
+ harfbuzz.pc.in                | 11 -----------
+ src/Makefile.am       | 13 +++++++++++++
+ src/harfbuzz-icu.pc.in | 13 +++++++++++++
+ src/harfbuzz.pc.in    | 11 +++++++++++
+ 6 files changed, 39 insertions(+), 17 deletions(-)
+
+commit d9afa111330771461b6182ada9f4edd68bcfce77
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 15:27:40 2013 -0400
+
+    Build hb-icu into libharfbuzz-icu.so
+
+ src/Makefile.am      | 29 +++++++++++++++--------------
+ src/hb-unicode.cc    |  2 +-
+ test/api/Makefile.am |  1 +
+ 3 files changed, 17 insertions(+), 15 deletions(-)
+
+commit 7d395c2a255a44fd0d65365ea9b525dba70c062c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 15:25:06 2013 -0400
+
+    Minor
+
+ test/api/test-c.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 2a17f9568d9724e045d2c1d660e007f3acd747d9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 28 13:10:51 2013 -0400
+
+    Bug 55494 - ScriptItemizeOpenType doesn't exists under Windows XP
+
+    Fallback to older API if OpenType variants are not available.
+
+ configure.ac       |  14 +--
+ src/hb-uniscribe.cc | 322
+ +++++++++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 271 insertions(+), 65 deletions(-)
+
+commit f8087ffbadc83a15d59367ba82976eae675736a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:43:48 2013 -0400
+
+    Add --with-cairo
+
+ configure.ac | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+commit 82eddfe5d658ef791d6ef6a566401c50601dfb1c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:33:36 2013 -0400
+
+    Add --with-freetype
+
+    Defaults to auto.
+
+ configure.ac | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+commit 5e25eb77a49e7f95b6a6d540b26d60d430f89d4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:30:48 2013 -0400
+
+    Default glib to auto again
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit eb63e786f37468867c81707504128cf8a4016e5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:29:09 2013 -0400
+
+    Add --with-coretext
+
+    Defaults to no.
+
+ configure.ac | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+commit ab2af17bc6faa8394656e6e82948dc3e9f437626
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:27:43 2013 -0400
+
+    Add --with-uniscribe
+
+    Defaults to no.
+
+ configure.ac | 55 +++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 39 insertions(+), 16 deletions(-)
+
+commit 58db2c2542717858acbdf480b3f19a8aef4918cd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:10:33 2013 -0400
+
+    Disable UCDN if glib is available
+
+    We only want UCDN if we don't have any other Unicode provider.
+    I'm going to remove ICU from the list of default Unicode providers
+    as part of moving hb-icu into its own library.  As such, the only
+    providers will be UCDN and glib.
+
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit ca65326cbd49b48792c4e3125af6c5006364f194
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:09:50 2013 -0400
+
+    Minor
+
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 7ae14973ecb4614a83769d2bbd01f33d8474ffc0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:06:50 2013 -0400
+
+    Disable icu_le shaper
+
+    Will add a way to enable it later.
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7e6ebf76236cc5ea69302e68186bdf8166d04a98
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:05:23 2013 -0400
+
+    Remove icu-config fallback for icu_le shaper
+
+    Bug 64878 - compile error with ICU but not ICU
+
+ configure.ac | 18 ------------------
+ 1 file changed, 18 deletions(-)
+
+commit 932b7471479c639244051b4dbae678e7d47ae99f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 19:04:40 2013 -0400
+
+    Bug 65053 - Add configure option to enable/disable ICU support
+
+ configure.ac | 46 ++++++++++++++++++++++++++++------------------
+ 1 file changed, 28 insertions(+), 18 deletions(-)
+
+commit cf2c1c7eb81b54a344ed5cf36d5fbd3cd297eed1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 18:54:30 2013 -0400
+
+    Disable hb-old shaper
+
+    Will add proper way to enable it later.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5a78d23f255a649353044af8e5df315f62907b7f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 18:47:58 2013 -0400
+
+    Bug 65054 - Add configure option to enable/disable Graphite2
+
+    Add --with-graphite2.  Defaults to off.
+
+ configure.ac | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+commit 61e7775fa75c7c1bdc29a6992c8c215897364600
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 18:24:56 2013 -0400
+
+    Remove hb-icu dependency from hb-icu-le shaper
+
+ src/hb-icu-le.cc | 33 +++++++++++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 4 deletions(-)
+
+commit 7e08f1258da229dfaf7e1c4b5c41e5bb83906cb0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 27 14:48:34 2013 -0400
+
+    Don't zero advance of mark-non-mark ligatures
+
+    If there's a mark ligating forward with non-mark, they were
+    inheriting the GC of the mark and later get advance-zeroed.
+    Don't do that if there's any non-mark glyph in the ligature.
+
+    Sample test: U+1780,U+17D2,U+179F with Kh-Metal-Chrieng.ttf
+
+    Also:
+    Bug 58922 - Issue with mark advance zeroing in generic shaper
+
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++++
+ src/hb-ot-layout-private.hh         | 6 ++++++
+ 2 files changed, 10 insertions(+)
+
+commit cf059ac69d10d9eb09f0d2a29b1bd989647bd800
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 24 15:28:11 2013 -0400
+
+    [icu_le] Support non-BMP text
+
+ src/hb-icu-le.cc | 35 ++++++++++++++++++++++++++++-------
+ 1 file changed, 28 insertions(+), 7 deletions(-)
+
+commit a447c528e68cabc9ca6e24e2c436f3d605ef9aaa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 23 17:05:39 2013 -0400
+
+    [icu_le] A bit better scaling
+
+ src/hb-icu-le.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit fb502a22787f4110472771ef771619342e64577a
+Merge: b9408d2 9d9e72e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 23 15:54:52 2013 -0400
+
+    Merge commit '9d9e72e94e7914f82ce62a304e7242f79c13edaf'
+
+commit b9408d24f3029f5287b17779235b1c750ff5158a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 23 15:43:02 2013 -0400
+
+    [icu_le] Fix scaling
+
+    Seems to work...
+
+ src/hb-icu-le.cc                      |  2 ++
+ src/hb-icu-le/PortableFontInstance.cpp | 23 +++++++++++++++--------
+ src/hb-icu-le/PortableFontInstance.h  |  9 ++++++++-
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
+commit 601526392dec5d8432f147c91658ba50ed6a4322
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 21 17:22:13 2013 -0400
+
+    Copy stdint.h boilerplate to ucdn
+
+ src/hb-ucdn/ucdn.h | 24 +++++++++++++++++++++++-
+ 1 file changed, 23 insertions(+), 1 deletion(-)
+
+commit f1b02f4f3c0db9fbfa6747188429df828b000010
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 20 09:23:58 2013 -0400
+
+    0.9.17
+
+ NEWS        | 8 ++++++++
+ configure.ac | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit d785fa0c45f7f25f5e5f352b933a5f6fa29be5c0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 20 09:18:52 2013 -0400
+
+    Minor refactoring
+
+ src/hb-ot-shape.cc | 54
+ ++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 28 insertions(+), 26 deletions(-)
+
+commit 127daf15e0b2f509ebd29a104236c8b38884efb0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 20 09:11:35 2013 -0400
+
+    Arabic mark width-zeroing regression
+
+    Mozilla Bug 873902 - Display Arabic text with diacritics is bad
+    https://bugzilla.mozilla.org/show_bug.cgi?id=873902
+
+ src/hb-ot-shape-complex-arabic.cc  |  2 +-
+ src/hb-ot-shape-complex-default.cc |  2 +-
+ src/hb-ot-shape-complex-myanmar.cc |  2 +-
+ src/hb-ot-shape-complex-private.hh |  6 ++++--
+ src/hb-ot-shape-complex-thai.cc    |  2 +-
+ src/hb-ot-shape.cc                | 36
+ ++++++++++++++++++++++++++++--------
+ 6 files changed, 36 insertions(+), 14 deletions(-)
+
+commit fa3d0a0ce60a9fcf2b7f906dec916463b1319eda
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 14 15:30:55 2013 -0400
+
+    Bug 64476 - Typo in hb_set_t.get_min()
+
+    Fixes previous commit's test.
+
+ src/hb-set-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dfbd115e6c1a86a5f1b8d15200672f1e9410b5de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 14 15:30:17 2013 -0400
+
+    [test] Add test for hb_set_get_min() bug
+
+    Failing now.
+
+    Bug 64476 - Typo in hb_set_t.get_min()
+
+ test/api/test-set.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 9d9e72e94e7914f82ce62a304e7242f79c13edaf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 3 18:10:10 2013 -0400
+
+    [OTLayout] Use is_inplace() when flipping buffers
+
+ src/hb-ot-layout.cc | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 45f3d980c9503bd94e64f6e3f67f97688347d00c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 3 17:49:44 2013 -0400
+
+    [OTLayout] Merge / templateize apply_string()
+
+ src/hb-ot-layout-gpos-table.hh | 25 ---------------
+ src/hb-ot-layout-gsub-table.hh | 48 ----------------------------
+ src/hb-ot-layout.cc           | 72
+ ++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 69 insertions(+), 76 deletions(-)
+
+commit e015b8f2187d1102b9c34d1a63504e7b05ee20ee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 3 17:34:29 2013 -0400
+
+    [OTLayout] Minor
+
+ src/hb-ot-layout-gpos-table.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 780cd930a974165d76dbf7a87701d11b7f15db06
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 3 17:33:16 2013 -0400
+
+    [OTLayout] Minor
+
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ src/hb-ot-layout.cc           | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 2e0c44f4bedd3e24c731c0e9e23358e9a4891a35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 24 16:42:05 2013 -0400
+
+    [OTLayout] Add is_inplace() method to GSUB
+
+ src/hb-ot-layout-gpos-table.hh       |   8 +-
+ src/hb-ot-layout-gsub-table.hh       |  58 ++++++++++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 158
+ +++++++++++++++++++++++++++++++++++
+ 3 files changed, 222 insertions(+), 2 deletions(-)
+
+commit bac1dd6a0ff4d4fae4254506d38ae662b7e9dda7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 18:52:24 2013 -0400
+
+    [OTLayout] Refactor a bit more
+
+ src/hb-ot-layout-gsubgpos-private.hh      |  10 +--
+ src/hb-ot-layout-private.hh               |  26 ++++----
+ src/hb-ot-layout.cc                       | 100
+ ++++++++++++++---------------
+ src/hb-ot-map-private.hh                  |   7 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh |  7 +-
+ src/hb-ot-shape-fallback.cc               |   3 +-
+ 6 files changed, 78 insertions(+), 75 deletions(-)
+
+commit d2c96819de9a7428b65ef0adf794416224221f36
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 18:18:24 2013 -0400
+
+    Move code around
+
+ src/hb-ot-layout.cc | 52
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-map.cc    | 43 -------------------------------------------
+ 2 files changed, 52 insertions(+), 43 deletions(-)
+
+commit 45fd9424c723f115ca98995b8f8a25185a6fc71d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 18:06:51 2013 -0400
+
+    [OTLayout] Add hb_ot_layout_lookup_accelerator_t
+
+ src/hb-ot-layout-private.hh               | 21 +++++++++++++++++--
+ src/hb-ot-layout.cc                       | 33
+ +++++++++++++++---------------
+ src/hb-ot-shape-complex-arabic-fallback.hh | 10 +++++----
+ 3 files changed, 41 insertions(+), 23 deletions(-)
+
+commit 76ea563673d24ae1673a5aa3a21da6014479d433
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 4 16:01:20 2013 -0400
+
+    [OTLayout] Add note about collect_glyphs() and recursive lookups
+
+ src/hb-ot-layout-gsubgpos-private.hh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit a8bf0e91f18341e1e20f4e3341fc7dcdd0c990e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 3 14:45:04 2013 -0400
+
+    Add U+061C ARABIC LETTER MARK to Default_Ignorable
+
+ src/hb-unicode-private.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 5d59f999204aedfc433ab4989664d875f96b0364
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 14:44:45 2013 -0400
+
+    [OTLayout] Make MultipleSubst in-place for sequences of len=1
+
+ src/hb-ot-layout-gsub-table.hh | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+commit 54f84a6b8571ac7aaaa66f3eff562d23d69d7552
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 15:27:53 2013 -0400
+
+    [OTLayout] Whitespace
+
+ src/hb-ot-layout-gsub-table.hh | 56
+ +++++++++++++++++++++---------------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
+
+commit 3276c354daaff3acabecff11f8e4b5c54d53fc25
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 15:16:59 2013 -0400
+
+    [OTLayout] Minor refactoring
+
+ src/hb-ot-map-private.hh |  4 ++++
+ src/hb-ot-map.cc        | 46
+ +++++++++++++++++++++++++---------------------
+ 2 files changed, 29 insertions(+), 21 deletions(-)
+
+commit ea86efa486a5076e9bf844239bccf86d67577f88
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 14:41:39 2013 -0400
+
+    Minor
+
+ src/hb-ot-map-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 8b63efb6f80b2e9b2de5ec6ab24d6e15826565cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 14:29:32 2013 -0400
+
+    Minor
+
+ src/hb-buffer-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 2265be0a620bc76ab65f12fedde67791beb51314
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 14:25:09 2013 -0400
+
+    Minor
+
+ src/hb-ot-map-private.hh   | 17 ++++++++++-------
+ src/hb-ot-map.cc          |  2 ++
+ src/hb-ot-shape-private.hh |  3 +--
+ 3 files changed, 13 insertions(+), 9 deletions(-)
+
+commit e6f19af08717a6a63ad0b5bf4bf368778edc63f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 2 13:59:46 2013 -0400
+
+    Minor
+
+ src/hb-set-private.hh | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit 6c15ddfe2b45383824b64058ae69939d002183a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 30 11:34:00 2013 -0400
+
+    Renamed DEBUG to something else
+
+    Some infrastructures use DEBUG as a generic symbol.
+
+ src/hb-buffer.cc  | 6 +++---
+ src/hb-private.hh | 4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 00b93f6610f36d8d14ca65fb99864be6d5bdb1ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 29 13:48:49 2013 -0400
+
+    Fix icu linking by requesting the library searchpath from icu-config
+
+    This is not ideal as we don't like -L/usr/lib in our linker line.
+    But this is only relevant to environments that don't have pkgconfig
+    files for ICU...
+
+    https://github.com/behdad/harfbuzz/pull/2
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 03adf38b22a37216dffac50d075ea9c881f1a22d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 29 13:40:52 2013 -0400
+
+    Make both old autoconf and new automake happy
+
+    Sigh..
+
+    Bug 64039 - undefined macro AM_PROG_AR
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ed79dff517bacfc87279079d5d42d079c21a0373
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 21 15:39:25 2013 -0400
+
+    Minor
+
+ src/hb-ot-layout-gpos-table.hh | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit 893f57b32f01da3411b5596d59170bc340e9fa39
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 21 15:21:49 2013 -0400
+
+    Minor renaming
+
+ src/hb-ot-map-private.hh | 10 +++++-----
+ src/hb-ot-map.cc        | 22 +++++++++++-----------
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+commit 8ac3c9c0b6b8e76bce282825b9bb706c0c78c2a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 21 15:19:38 2013 -0400
+
+    Rename "pause" to "stage"
+
+    The compile() function is starting to become illegible...
+
+ src/hb-ot-map-private.hh | 24 ++++++++++++------------
+ src/hb-ot-map.cc        | 38 +++++++++++++++++++-------------------
+ 2 files changed, 31 insertions(+), 31 deletions(-)
+
+commit dd0641a432691f9b6186b081c38053858c8bc5c1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 21 15:13:57 2013 -0400
+
+    Minor
+
+ src/hb-ot-map.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 06a44e859328f5f1e2f6034e711b474116d22e22
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 21 15:13:08 2013 -0400
+
+    Remove unneeded code
+
+    We always push a pause at the end such that each lookup falls
+    in exactly
+    one pause_map_t.  Now, only if I can find a better name for that...
+
+ src/hb-ot-map-private.hh |  2 +-
+ src/hb-ot-map.cc        | 12 +-----------
+ 2 files changed, 2 insertions(+), 12 deletions(-)
+
+commit a408d2375aa2ad96b58e56aef18e5000daf2516b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 19 16:32:06 2013 -0400
+
+    0.9.16
+
+ NEWS        | 13 ++++++++++++-
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 8659c636087e433f56da458351e8b4d85fdb347c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 19 14:33:17 2013 -0400
+
+    Hand-code bsearch in the hot inner loop.
+
+    Saves another 3 / 4 percent with Amiri.
+
+ src/hb-open-type-private.hh | 29 +++++++++++++++--------------
+ 1 file changed, 15 insertions(+), 14 deletions(-)
+
+commit 797d76d07f80d796a825d850772087104e5a2575
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 18 19:04:12 2013 -0400
+
+    Minor
+
+ src/hb-ot-layout-common-private.hh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit e4046080c5d785c8dbf9ec9e3478ab9acc83e479
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 23:49:54 2013 -0400
+
+    [util] Unbreak --show-text / --show-unicode
+
+ util/shape-consumer.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0dc3a4e0349d28f387a3b4c60a2f51962742738e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 23:04:03 2013 -0400
+
+    Obssesive optimization
+
+    Not measurable by any means, but conceptually this is faster since
+    the mask matches more often than the digest.
+
+ src/hb-ot-layout-gpos-table.hh | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 8 ++++----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit f9a611026785a80baa4cbff31ad0847beb70ca9a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 19:01:49 2013 -0400
+
+    Remove HB_DEBUG_SET_DIGESTS
+
+    Wasn't correct with the new combiner.  I should add it back somehow,
+    but for now the digests seem to be working very well...
+
+ src/hb-set-private.hh | 16 +---------------
+ src/hb-set.cc        | 14 --------------
+ 2 files changed, 1 insertion(+), 29 deletions(-)
+
+commit f7466ee76f2bd3812209426e2c39fe517227406d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 18:20:44 2013 -0400
+
+    Remove hb_set_digest_common_bits_t
+
+    Was unused.
+
+ src/hb-set-private.hh | 38 --------------------------------------
+ 1 file changed, 38 deletions(-)
+
+commit 0d5798a137b52d9be7ef88c79e59f9bf01d54f3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 18:19:21 2013 -0400
+
+    Improve hb_set_digest_t
+
+    Make Amiri rendering faster a whopping 45% again!  Speends up pretty
+    much anything I tested.
+
+ src/hb-set-private.hh | 28 +++++++++++++++++++++++-----
+ 1 file changed, 23 insertions(+), 5 deletions(-)
+
+commit c7851efcd3a1e5317ab4ea57535cb755bace0848
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 17:45:39 2013 -0400
+
+    Templatize hb_set_digest_lowest_bits_t filter
+
+ src/hb-set-private.hh | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+commit 0edd0fd255790471118fae1fd7a1309a2b77cf62
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 17 17:26:56 2013 -0400
+
+    Add comment
+
+ src/hb-set-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit b40f2c0372acbc51b13be5cda7dd013e74e3e11a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 23:21:38 2013 -0400
+
+    Add hb_set_digest_combiner_t
+
+ src/hb-set-private.hh | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
+
+commit 02e5e583688999c4dc04f11b3924da65f99af7e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 23:13:10 2013 -0400
+
+    Speed up Speed up hb_set_digest_common_bits_t calcs
+
+    Correctly this time.
+
+ src/hb-set-private.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 893991fc9d2d3a57c4c148f3a9c3b98263cf3aed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 21:50:33 2013 -0400
+
+    Initialize set digests
+
+    We were not initializing the digests properly and as a result
+    they were
+    being initialized to zero, making digest1 to never do any useful work.
+
+    Speeds up Amiri shaping significantly.
+
+ src/hb-ot-layout.cc                       | 6 ++++++
+ src/hb-ot-shape-complex-arabic-fallback.hh | 4 +++-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 4d2813d3e980c8e6150caafa604a78cc44bf62a2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 21:57:21 2013 -0400
+
+    Print set-digest hit ratio with HB_DEBUG_SET_DIGESTS
+
+ src/hb-set-private.hh | 13 +++++++++++++
+ src/hb-set.cc        | 13 +++++++++++++
+ 2 files changed, 26 insertions(+)
+
+commit 1357c2dd120d005ceecfa83ed328d05dc634d7bc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 21:47:40 2013 -0400
+
+    Revert "Speed up hb_set_digest_common_bits_t calcs"
+
+    This reverts commit 3d1b66a35e1ab3be19335705f310b278d76d66d2.
+
+    The calculations were buggy.  It's not worth optimizing right now.
+
+ src/hb-set-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 2b712bba3f7c459653737dfa2f7d26f17f3b9f64
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 16 16:11:09 2013 -0400
+
+    Fix typo in unused macro
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 50067e280f381918b8e90b26df9e7bf20f98f0bd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 11 16:31:01 2013 -0400
+
+    [util] Add --num-iterations
+
+    Useful for profiling shapers.
+
+ util/options.cc       |  1 +
+ util/options.hh       |  2 ++
+ util/shape-consumer.hh | 15 +++++++++------
+ 3 files changed, 12 insertions(+), 6 deletions(-)
+
+commit 08677c250767bfc2c0dd1fc934dea92984741291
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 11 14:45:58 2013 -0400
+
+    [old] Speed up Unicode properties access in hb-old shaper
+
+    Just to be sure it's not punishing the old shaper performance
+    numbers.  Doesn't seem to have a measurable effect.
+
+ src/hb-old/harfbuzz-arabic.c  | 44
+ +++++++++++++++++++++---------------------
+ src/hb-old/harfbuzz-external.h | 18 ++++++++---------
+ src/hb-old/harfbuzz-greek.c   |  2 +-
+ src/hb-old/harfbuzz-hebrew.c  |  2 +-
+ src/hb-old/harfbuzz-indic.cpp | 10 +++++-----
+ src/hb-old/harfbuzz-shaper.cpp |  6 ++++--
+ src/hb-old/harfbuzz-shaper.h  |  1 +
+ 7 files changed, 43 insertions(+), 40 deletions(-)
+
+commit 36a661c0a03d958b95c9ea64a435b55bcd99c3d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 11 13:38:37 2013 -0400
+
+    [git.mk] Update
+
+ git.mk | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
+
+commit ef9e02eddfc9a37d50723e96839635d79191d849
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 9 14:06:54 2013 -0400
+
+    Minor
+
+ src/test.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 22e47456154ca0b8173268486e56ef3a0e1e7150
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 5 18:02:43 2013 -0400
+
+    0.9.15
+
+ NEWS        | 10 ++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+commit 4d4fc920496c95621d5bb4800282ea8c028cdde3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 5 17:58:25 2013 -0400
+
+    [git.mk] Ignore ar-lib
+
+ git.mk | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 587e5753e088b4d0b82c74ddbde790a8369a7517
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 5 12:38:58 2013 -0400
+
+    Add note re Hangul shaping
+
+ src/hb-ot-shape-complex-private.hh | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 269de14dda7a86a20917fa9ea6a5864929c41364
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 4 23:06:54 2013 -0400
+
+    Don't compose Hangul jamo
+
+    See thread "an issue regarding discrepancy between Korean and Unicode
+    standards" on the mailing list for the rationale.  In short: Uniscribe
+    doesn't, so fonts are designed to work without it.
+
+ src/hb-ot-shape-complex-default.cc   |  6 ------
+ src/hb-ot-shape-normalize-private.hh |  1 -
+ src/hb-ot-shape-normalize.cc        | 11 +++++------
+ 3 files changed, 5 insertions(+), 13 deletions(-)
+
+commit 1f970609850bb4999b94e1e11b764ab4279cbd38
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 4 15:02:03 2013 -0400
+
+    Put back MemoryBarrier fallback implementation on MINGW32
+
+    This almost reverts 2761e8a632c14353f286708898be8df6ebad7407,
+    but only if under MINGW32, so it doesn't affect MSVC.
+
+ src/hb-atomic-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit f368ba4a9edec4e297616698097546e8e6c89e53
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 4 14:25:36 2013 -0400
+
+    [Arabic] Zero marks by GDEF, not Unicode category
+
+    Testing shows that this is closer to what Uniscribe does.
+
+    Reported by Khaled Hosny:
+
+    """
+    commit 568000274c8edb5f41bc4f876ce21fcc8bdaeed8
+    ...
+    This commit is causing a regression with Amiri, the string
+    “هَٰذ” with
+    Uniscribe and HarfBuzz before this commit, gives:
+
+       [uni0630.fina=3+965|uni0670.medi=0+600|uni064E=0@-256,0+0|uni0647.init=0+926]
+
+    But now it gives:
+
+       [uni0630.fina=3+965|uni0670.medi=0+0|uni064E=0@-256,0+0|uni0647.init=0+926]
+
+    i.e. uni0670.medi is zeroed though it has a base glyph GDEF class.
+    """
+
+    The test case is U+0647,U+064E,U+0670,U+0630 with Amiri.
+
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3b80674c50b8c3133848a4034f7106b2b9bfe224
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 4 12:06:46 2013 -0400
+
+    Bug 63107 - FTBFS on ppc64: symbols marked with 'D' on powerpc64
+    instead
+
+ src/check-symbols.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7148dc1a978610af25b4f490691a62d709c8c463
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 2 14:08:53 2013 -0400
+
+    [graphite2] Don't crash if language is not set
+
+    https://bugs.webkit.org/show_bug.cgi?id=113796
+
+ src/hb-graphite2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a88a62f70f87563725d47b9b6824565e5d6b78ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 21 21:02:16 2013 -0400
+
+    Minor
+
+ src/hb-ot-shape-normalize.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 0a2b2a505b647f6b4802750c87cd9c5f0baaadef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 21 16:26:39 2013 -0400
+
+    Remove gthread leftovers
+
+    We don't use gthread anymore, remove leftovers.
+
+ configure.ac        | 6 ------
+ test/api/Makefile.am | 4 ++--
+ test/api/hb-test.h   | 3 ---
+ 3 files changed, 2 insertions(+), 11 deletions(-)
+
+commit b93de1ea085bfc0661ce3ad0e21fb5eba722c951
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 21 16:25:20 2013 -0400
+
+    Minor
+
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit f872a17462a75a3493623747bf3a3fbe54556c7b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 21 13:38:06 2013 -0400
+
+    0.9.14
+
+ NEWS        | 14 ++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+commit cc50bf5b13bfe88137fa7a42782872c40fb9aefb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 19 06:59:40 2013 -0400
+
+    Remove Hangul filler characters from Default_Ignorable chars
+
+    See discussion on mailing list.
+
+ src/hb-unicode-private.hh                                     |
+ 10 +++++++---
+ .../texts/in-tree/shaper-default/script-hangul/misc/misc.txt  |  1 +
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit a8cf7b43fa795150ae3d42d64424bb6e0373d0b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 19 05:53:26 2013 -0400
+
+    [Indic] Futher adjust ZWJ handling in Indic-like shapers
+
+    After the Ngapi hackfest work, we were assuming that fonts
+    won't use presentation features to choose specific forms
+    (eg. conjuncts).  As such, we were using auto-joiner behavior
+    for such features. It proved to be troublesome as many fonts
+    used presentation forms ('pres') for example to form conjuncts,
+    which need to be disabled when a ZWJ is inserted.
+
+    Two examples:
+
+       U+0D2F,U+200D,U+0D4D,U+0D2F with kartika.ttf
+       U+0995,U+09CD,U+200D,U+09B7 with vrinda.ttf
+
+    What we do now is to never do magic to ZWJ during GSUB's main input
+    match for Indic-style shapers.  Note that backtrack/lookahead
+    are still
+    matched liberally, as is GPOS.  This seems to be an acceptable
+    compromise.
+
+    As to the bug that initially started this work, that one needs to
+    be fixed differently:
+
+      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
+
+    New numbers:
+
+    BENGALI: 353689 out of 354188 tests passed. 499 failed (0.140886%)
+    DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
+    GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
+    GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
+    KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%)
+    KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048102 out of 1048334 tests passed. 232 failed
+    (0.0221304%)
+    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%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-layout-gsubgpos-private.hh              | 30
+ ++++++++--------------
+ src/hb-ot-layout-private.hh                       |  4 +--
+ src/hb-ot-layout.cc                               |  8 +++---
+ src/hb-ot-map-private.hh                          |  8 +++---
+ src/hb-ot-map.cc                                  | 18 ++++++-------
+ src/hb-ot-shape-complex-arabic-fallback.hh        |  2 +-
+ src/hb-ot-shape-complex-indic.cc                  | 30
+ +++++++++++-----------
+ src/hb-ot-shape-complex-myanmar.cc                |  4 +--
+ src/hb-ot-shape-complex-sea.cc                            |  4 +--
+ src/hb-ot-shape-fallback.cc                       |  2 +-
+ .../indic/script-bengali/misc/misc.txt                    |  1 +
+ .../indic/script-malayalam/misc/misc.txt          |  1 +
+ 12 files changed, 53 insertions(+), 59 deletions(-)
+
+commit 8226fb56f131362db877dc4be6857c684b8fd022
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 19 05:22:27 2013 -0400
+
+    Allow disabling ICU by using a fake icu-config script
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit a1f3e8ccbfad0d1148b905ae008ba63a26090cb9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 11 20:18:49 2013 -0400
+
+    [travis] Install libicu
+
+ .travis.yml | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 14cfab52daa8d22b843110f32ca09af5bbc855a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 11 19:53:44 2013 -0400
+
+    Add build system fallback to icu-config
+
+    Ubuntu doesn't (or didn't until recently?) ship icu pkg-config
+    files.  That's quite unfortunate.  Work around it.
+
+    Bug 57608 - ICU Detection fallback for non-pkgconfig systems
+
+ configure.ac | 37 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+commit 190e19e6842875c7a487c66235300ee6b42fb5da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 9 20:30:22 2013 -0500
+
+    [ft] Remove TODO items that I'm not going to fix
+
+ src/hb-ft.cc | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit 392ee97431b368ee74e1b521fd539b69d2efadfb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 9 20:27:55 2013 -0500
+
+    [ft] Remove TODO item re FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
+
+    That flag is redundant, deprecated, and ignored since April 2011.
+    From FreeType git log:
+
+    commit 8c82ec5b17d0cfc9b0876a2d848acc207a62a25a
+    Author: Behdad Esfahbod <behdad@behdad.org>
+    Date:   Thu Apr 21 08:21:37 2011 +0200
+
+       Always ignore global advance.
+
+       This makes FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH redundant,
+       deprecated, and ignored.  The new behavior is what every
+       major user
+       of FreeType has been requesting.  Global advance is broken in many
+       CJK fonts.  Just ignoring it by default makes most sense.
+
+       * src/truetype/ttdriver.c (tt_get_advances),
+       src/truetype/ttgload.c (TT_Get_HMetrics, TT_Get_VMetrics,
+       tt_get_metrics, compute_glyph_metrics, TT_Load_Glyph),
+       src/truetype/ttgload.h: Implement it.
+
+       * docs/CHANGES: Updated.
+
+ src/hb-ft.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit c5d91f39802078fc6f6de71940739ec4d04eca07
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 9 04:34:21 2013 -0500
+
+    Add hb_auto_array_t
+
+ src/hb-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit ee5464d17fa4c59f5adaaa13dde70dd5264dbc64
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 9 01:59:30 2013 -0500
+
+    [OTLayout] Move code around
+
+ src/hb-ot-layout-gpos-table.hh |  33 ++++++------
+ src/hb-ot-layout-gsub-table.hh | 115
+ +++++++++++++++++++++--------------------
+ 2 files changed, 75 insertions(+), 73 deletions(-)
+
+commit 9c5a9ee967120c8a968a1160c420e03620d46c24
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 9 01:55:04 2013 -0500
+
+    [OTLayout] Rename process() to dispatch()
+
+ src/hb-open-type-private.hh         |  2 +-
+ src/hb-ot-layout-gpos-table.hh       | 80
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-table.hh       | 78
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 36 ++++++++--------
+ 4 files changed, 98 insertions(+), 98 deletions(-)
+
+commit 2761e8a632c14353f286708898be8df6ebad7407
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 7 20:51:30 2013 -0500
+
+    [win32] Remove MemoryBarrier() fallback implementation
+
+    I added these because the older mingw32 toolchain didn't have
+    MemoryBarrier().  The newer mingw-w64 toolchain however has.
+    As reported by John Emmas this was causing build failure with
+    MSVC (on glib) because of inline issues.  But that reminded me
+    that we may be taking this path even if the system implements
+    MemoryBarrier as a function, which is a waste.  So, just remove
+    it.
+
+ src/hb-atomic-private.hh | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+commit ea11abfc5de8bc5cf651b37c9570593eed6a8f9b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 6 20:21:11 2013 -0500
+
+    [build] Port to newer automake recommended syntax
+
+ test/api/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c39def9bc71559d59325a2c3282c1cec4286b2ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 6 20:20:45 2013 -0500
+
+    Move valgrind suppressions to the correct directory
+
+ test/.valgrind-suppressions    | 0
+ test/api/.valgrind-suppressions | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+commit a8ac1d33c731f6200ee472ab6c37a80b72770564
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 6 20:05:34 2013 -0500
+
+    [build] Add AM_PROG_AR
+
+    Newer automake / libtools warns otherwise.
+
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5594c2d112c295147ee69215a2ce9dfd99984aa0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 6 19:37:31 2013 -0500
+
+    [FT] Just return if glyph name not found
+
+    The fallback happens in higher level already.  No need to do here.
+
+ src/hb-ft.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit fb7c182bf92142540bff1ad7fb82de0d115fb2b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 6 00:53:24 2013 -0500
+
+    [Indic] Minor
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8144936d072f94104242edf9e7aaa31d315b4094
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 5 20:08:59 2013 -0500
+
+    [Indic] Work around fonts with broken new-spec tables
+
+    See comments, and this thread:
+
+    http://lists.freedesktop.org/archives/harfbuzz/2013-March/002990.html
+
+    Originally reported here:
+
+    https://code.google.com/p/chromium/issues/detail?id=96143
+
+    Doesn't change test suite numbers.
+
+ src/hb-ot-shape-complex-indic.cc | 42
+ +++++++++++++++++++++++++++-------------
+ 1 file changed, 29 insertions(+), 13 deletions(-)
+
+commit dfb799f57572e8123035a42a30f93c7fc4d37692
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 5 17:23:33 2013 -0500
+
+    [travis] Oops.  Run make check, not make test!
+
+ .travis.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8bdce1cac1be9e79344c1f9a9811d98ed2e5c5fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 5 02:35:31 2013 -0500
+
+    Run autogen.sh, not configure, in travis-ci
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5f705b437cb116275a8c20366e694d740bce715c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 5 01:37:44 2013 -0500
+
+    Add .travis.yml for continuous building with travis-ci.org
+
+    Notifications sent to IRC channel and mailing list.
+
+ .travis.yml | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit cd54d505d1a2467a67e5ff96fe0eb101b953b265
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 4 21:29:38 2013 -0500
+
+    Fix distcheck
+
+ src/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 22c625a490bbaac52ead2cd29ee49b170e6e9845
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 4 20:56:15 2013 -0500
+
+    [git.mk] Update to commit efc928222179576270c5910416d8055dd7a97896
+
+       Move reusable list of files into variable definitions modules can
+       reuse
+
+ Makefile.am | 22 ++++------------------
+ git.mk      | 59
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 2 files changed, 60 insertions(+), 21 deletions(-)
+
+commit 66f7b3509a121b8f3289ad4c4aed2b5b10a6de2e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 4 18:52:12 2013 -0500
+
+    Add libtool m4 macros to MAINTAINERCLEANFILES
+
+ Makefile.am | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 41732f1fe3ce856d8bb95850635034537b6ba047
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 20:40:54 2013 -0500
+
+    [Indic] Help compiler put indic_features table in .rodata
+
+    The overridden "or" operator was preventing the flag expression from
+    being const, and putting the table in .data instead or .rodata.
+
+ src/hb-ot-map-private.hh        |  2 ++
+ src/hb-ot-shape-complex-indic.cc | 24 ++++++++++++------------
+ 2 files changed, 14 insertions(+), 12 deletions(-)
+
+commit 778d7f844cb330289830c95431269db06ba1c969
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 18:47:26 2013 -0500
+
+    [buffer] Better parse glyph names
+
+ src/hb-buffer-deserialize-json.rl | 9 ++++++---
+ src/hb-buffer-deserialize-text.rl | 5 ++++-
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+commit 20b817ac21147e0a8edbf23ef071c2f4ce6c2b95
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 18:39:37 2013 -0500
+
+    [buffer] Implement buffer deserialization for format=json
+
+    Using a ragel machine.
+
+ src/Makefile.am                  |   2 +
+ src/hb-buffer-deserialize-json.rl | 129
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer-deserialize-text.rl |  52 +--------------
+ src/hb-buffer-serialize.cc       |  45 +++++++++++--
+ src/hb-private.hh                |   6 +-
+ src/hb-shape.cc                  |   2 -
+ src/test-buffer-serialize.cc     |   4 +-
+ 7 files changed, 179 insertions(+), 61 deletions(-)
+
+commit 847794e929831750e97525137ab5e285ccd1064e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 17:59:28 2013 -0500
+
+    [buffer] Implement buffer deserialization for format=text
+
+    Using a ragel machine.
+
+ src/Makefile.am                  |   2 +
+ src/hb-buffer-deserialize-text.rl | 169
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer-private.hh         |   3 +-
+ src/hb-buffer-serialize.cc       |  36 +++-----
+ src/hb-buffer.cc                 |  13 ++-
+ src/hb-buffer.h                  |   2 +-
+ src/hb-private.hh                |   5 +-
+ src/hb-shape.cc                  |   9 +-
+ src/test-buffer-serialize.cc     |  16 +++-
+ 9 files changed, 221 insertions(+), 34 deletions(-)
+
+commit 4ee803b42a3baae4b0f295a07cb7ad591a538e4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 16:09:55 2013 -0500
+
+    [buffer] Fix serializing of buffer with invalid direction
+
+ src/hb-buffer-serialize.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e54dd26300f50eb19907a9d39269a363279b3e07
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 13:01:02 2013 -0500
+
+    [buffer] Start implementing buffer deserialization
+
+ src/Makefile.am             |  12 ++++-
+ src/hb-buffer-serialize.cc   |  64 ++++++++++++++++++++++--
+ src/hb-buffer.h             |   2 +-
+ src/test-buffer-serialize.cc | 114
+ +++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 187 insertions(+), 5 deletions(-)
+
+commit bcc8f32b4c46cd73f591924c64a6f63df6eaf9e7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 12:02:42 2013 -0500
+
+    [buffer] Minor
+
+ src/hb-buffer-serialize.cc | 10 +++++++---
+ src/hb-buffer.h           |  4 ++--
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+commit d3e14aafff60e1314d0ef66e42cdde6bf949bb66
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 11:06:36 2013 -0500
+
+    [buffer] Move buffer serialization code to a new file
+
+ Android.mk                |   1 +
+ src/Makefile.am           |   1 +
+ src/hb-buffer-serialize.cc | 251
+ +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.cc          | 228 ----------------------------------------
+ 4 files changed, 253 insertions(+), 228 deletions(-)
+
+commit 8da51112696ec8641d7dd9184b7ab1dd48458813
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 27 17:48:31 2013 -0500
+
+    Minor
+
+ src/hb-shape.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 94789fd6012125acc8426dd88df97f03b0948ea5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 26 21:22:37 2013 -0500
+
+    [Indic] Sort pre-base reordering consonants with post-forms
+
+    Before, we were marking them as below-form for initial reordering.
+    However, there is a rule that says "post consonants should follow
+    below consonsnts" for base determination purposes. Malayalam has
+    port-form YA/VA, and RA is pre-base.  As such, for a sequence like
+    YA,Virama,YA,Virama,RA, the correct base is at index 0.  But
+    because the code was seeing RA as a below-base, it was stopping at
+    the second YA as base, instead of jumping it as a post-base.
+
+    By treating prebase-reordering consonants like post-forms, this
+    is fixed.
+
+    MALAYALAM went down from 351 to 265.  Other numbers didn't change:
+
+    BENGALI: 353686 out of 354188 tests passed. 502 failed (0.141733%)
+    DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
+    GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
+    GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
+    KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
+    KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1048069 out of 1048334 tests passed. 265 failed
+    (0.0252782%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
+    TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
+    TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6d69a2cec158061ef097c488d08813c9503824b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 26 19:35:50 2013 -0500
+
+    [tests] Add Malayalam tests frim cibu
+
+ .../indic/script-malayalam/misc/MANIFEST          |   1 +
+ .../indic/script-malayalam/misc/cibu.txt          | 188
+ +++++++++++++++++++++
+ 2 files changed, 189 insertions(+)
+
+commit 1edc6b97b67363d55cfb5914c991ae54d42a6440
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 26 15:01:45 2013 -0500
+
+    Update Android.mk
+
+ Android.mk | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 05d5d3cd63ba2fadfdb62190dd24ef80ee3df40c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 23:57:51 2013 -0500
+
+    Fix "comparison between signed and unsigned" warnings
+
+    Patch from Jonathan Kew.
+
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 07a52b62115f10caea5c2d174a4272eb9ddb2284
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 19:09:57 2013 -0500
+
+    Give up sanitizing after 100 edit requests
+
+    Such fonts are *definitely* really broken. Give up.
+    Limits time spent in sanitize for extremely / deliberately broken
+    fonts.  For example, two fonts with these md5sum / names:
+
+      9343f0a1b8c84b8123e7d201cae62ffd.ttf
+      eb8c978547f09d368fc204194fb34688.ttf
+
+    were spending over a second in sanitize!  Not anymore.
+
+ src/hb-open-type-private.hh | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 29ff25481584e20a2fa39195f295c8eb4bf3bad0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 19:04:56 2013 -0500
+
+    Add HB_DEBUG_VERBOSE
+
+    Only affects the verbosity of function name printing right now.
+
+ src/hb-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 05686b5f697ed40dd21b330d044c3c286461fb26
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 18:19:20 2013 -0500
+
+    0.9.13
+
+ NEWS        | 29 +++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 30 insertions(+), 1 deletion(-)
+
+commit 9e5ac7b8c02c86a4f28c79173a5237503eaa7115
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 17:54:10 2013 -0500
+
+    Fix blob test to match c3ba49b6fa1865e8318926eaa6c0f2063d1053bb
+
+ test/api/test-blob.c | 57
+ ++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 51 insertions(+), 6 deletions(-)
+
+commit c3ba49b6fa1865e8318926eaa6c0f2063d1053bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 25 17:06:35 2013 -0500
+
+    Always create sub-blobs in MEMORY_MODE_READONLY
+
+    This fixes a design bug with sanitize and sub-blobs that can
+    cause crashes.  Jonathan and I found and debugged this issue
+    when we tested a corrupt font with the md5sum / filename:
+    ea395483d37af0cb933f40689ff7b60a.  Two hours of intense
+    debugging we found out that the font has overlapping GSUB/GPOS
+    tables, and as such, sanitizing the second table can modify
+    the first one, which can cause all kinds of undefined behavior.
+
+    The correct way to fix this is to make sure sub-blobs are
+    always created readonly, since we consider the parent blob
+    to be a shared resource and can't modify it, even if it *is*
+    writable.
+
+    This essentially makes the READONLY_MAY_MAKE_WRITABLE mode
+    unused...  Maybe we should simply remove / deprecate it.
+
+ src/hb-blob.cc |  2 +-
+ src/hb-blob.h | 26 ++++++++++++++++++++++++++
+ 2 files changed, 27 insertions(+), 1 deletion(-)
+
+commit 57542d7f411c71d9b8110ce6f64090b2c0f6a925
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 15:54:05 2013 -0500
+
+    Minor
+
+ src/hb-ot-layout-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit d46606e119b48dcca375d6313abd0f93ba5d09c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 15:39:57 2013 -0500
+
+    Port TrueType-kerning to use skippy iterator
+
+    It skips joiners and default ignorables now.  Skips marks too,
+    but only
+    if there is proper GDEF classes for marks.
+
+ src/hb-ot-shape-fallback.cc | 50
+ +++++++++++++++++++++++++--------------------
+ 1 file changed, 28 insertions(+), 22 deletions(-)
+
+commit 722e8b857eafc52e07dee5d9b253b88ed5c5c8ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 15:37:51 2013 -0500
+
+    Fixup previous commit
+
+    Was not decreasing num_items.  Ouch!
+
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit ba87b8fc89bf745068ccd19264a2631ea0904846
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 15:23:39 2013 -0500
+
+    Move code around
+
+ src/hb-ot-shape-fallback-private.hh | 5 +++++
+ src/hb-ot-shape-fallback.cc        | 40
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc                 | 38
+ +----------------------------------
+ 3 files changed, 46 insertions(+), 37 deletions(-)
+
+commit 2b2a6e8944144755ab641f2842e36d9a847719f3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 15:07:03 2013 -0500
+
+    [OTLayout] Correctly skip Default_Ignorable when match_func not set
+
+    When a match_func was not set on the matcher_t object (ie. from GPOS),
+    then the Default_Ignorables (including joiners) were never skipped.
+    This meant that they were not skipped as they should during GPOS
+    matching.  Fix that.
+
+    A few Indic numbers have "regressed": BENGALI and DEVANAGARI went
+    up from 290 and 58 respectively, but in both cases new results are
+    superior to Uniscribe, as they apply GPOS when we weren't (and
+    Uniscribe isn't) before.
+    BENGALI: 353686 out of 354188 tests passed. 502 failed (0.141733%)
+    DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
+    GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
+    GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
+    KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
+    KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1047983 out of 1048334 tests passed. 351 failed
+    (0.0334817%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
+    TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
+    TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-layout-gsubgpos-private.hh | 32
+ ++++++++++++++++++++++----------
+ 1 file changed, 22 insertions(+), 10 deletions(-)
+
+commit ff93ac8cb24cbc3d9dc1a2bfb0faa88950f4a507
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 21 14:51:40 2013 -0500
+
+    Minor
+
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit e0486fc1affd3796fb8f664e2e7fc208f1d2106c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 19 00:58:10 2013 -0500
+
+    [tests] Add Myanmar torture tests from Martin Hosken
+
+ .../shaper-myanmar/script-myanmar/misc/MANIFEST    |  1 +
+ .../shaper-myanmar/script-myanmar/misc/torture.txt | 23
+ ++++++++++++++++++++++
+ 2 files changed, 24 insertions(+)
+
+commit a3df9a7bf87aeba7a3d6110cd5e01a65bd0b16d0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 19 00:50:46 2013 -0500
+
+    Minor
+
+    Moving files around
+
+ test/shaping/texts/in-tree/MANIFEST                                   |
+ 2 --
+ test/shaping/texts/in-tree/script-default/MANIFEST                    |
+ 1 -
+ test/shaping/texts/in-tree/script-default/misc/MANIFEST               |
+ 1 -
+ test/shaping/texts/in-tree/script-default/misc/misc.txt               |
+ 1 -
+ test/shaping/texts/in-tree/shaper-default/MANIFEST                    |
+ 2 ++
+ test/shaping/texts/in-tree/shaper-default/script-hangul/MANIFEST      |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/MANIFEST |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/misc.txt |
+ 3 +++
+ test/shaping/texts/in-tree/shaper-default/script-tibetan/MANIFEST     |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-tibetan/misc/MANIFEST |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-tibetan/misc/misc.txt |
+ 1 +
+ test/shaping/texts/in-tree/shaper-hangul/MANIFEST                     |
+ 1 -
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/MANIFEST       |
+ 1 -
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/MANIFEST  |
+ 1 -
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt  |
+ 3 ---
+ 15 files changed, 10 insertions(+), 11 deletions(-)
+
+commit b1f440759161cb5a54e1b1b910f3a8383b8e8472
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Feb 17 12:12:37 2013 -0500
+
+    [SEA] Fix order of pre-base reordering Ra and left matras
+
+    The code was confused because it was expecting left matra to have
+    POS_PRE_M, like we do in the Myanmar shaper, but that is not what
+    we were doing in this shaper.  Rewrite to rely on category only.
+
+    Test case: U+AA06,U+AA34,U+AA2F
+
+ src/hb-ot-shape-complex-sea.cc                                     | 13
+ +++++++------
+ .../texts/in-tree/shaper-sea/script-cham/misc/misc.txt      | 1 +
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit 99fa9ea020f26ed2697f38a7690ee1e1b5d946c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 11:47:24 2013 -0500
+
+    Minor
+
+ src/hb-ot-layout-gsub-table.hh | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 27589620ba2dcf356fd7fa21cd80221a07803202
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 11:47:09 2013 -0500
+
+    [OTLayout] Remove unused code
+
+ src/hb-open-type-private.hh | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit ebb77b9c5e357ff7c9badb0f4bf1c3a965c3e91d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 09:33:10 2013 -0500
+
+    Remove TODO items that don't make sense
+
+    The spec says those features need to be disabled by default.
+
+ TODO | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit c2a1cdc4c4cc51f4680ebc4ec2c462cb660f9492
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 09:27:02 2013 -0500
+
+    [Arabic] Fix shaping of left-joining 'Phags-Pa U+A872
+
+    This is the first character in Unicode to have Arabic left-joining
+    behavior.  Update the machine to recognize that.
+
+    Test case: U+A840,U+A872,U+A840.
+
+ src/hb-ot-shape-complex-arabic.cc | 40
+ +++++++++++++++++++--------------------
+ 1 file changed, 19 insertions(+), 21 deletions(-)
+
+commit 05ac87813d17d9ebbfa315eee3f80f25b53135c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 09:26:41 2013 -0500
+
+    [tests] Add Syriac Alaph shaping test cases
+
+ .../shaper-arabic/script-syriac/misc/MANIFEST     |  1 +
+ .../shaper-arabic/script-syriac/misc/alaph.txt     | 98
+ ++++++++++++++++++++++
+ 2 files changed, 99 insertions(+)
+
+commit c462b32dcb883a7aca066af24c4d28c7a2b7fa28
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 07:51:47 2013 -0500
+
+    Disable automatic segment properties guessing
+
+    Before, if one called hb_shape() without setting script, language, and
+    direction on the buffer, hb_shape() was calling
+    hb_buffer_guess_segment_properties() on the user's behalf to guess
+    these.
+
+    This is very dangerous, since any serious user of HarfBuzz must set
+    these properly (specially important is direction). So now, we don't
+    guess properties by default.  People not setting direction will get
+    an abort() now.  If the old behavior is desired (fragile, good for
+    simple testing only), users can call
+    hb_buffer_guess_segment_properties() on the buffer just before calling
+    hb_shape().
+
+ src/hb-fallback-shape.cc | 1 -
+ src/hb-ot-shape.cc      | 2 --
+ src/hb-shape.cc         | 2 --
+ util/options.hh         | 1 +
+ 4 files changed, 1 insertion(+), 5 deletions(-)
+
+commit 7abddbb47a489aaac8e76ac6e700cd815739b1d2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 07:46:57 2013 -0500
+
+    Add assertions for a couple programmer errors
+
+ src/hb-shape-plan.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 038c98f6866fe1177b04bd2ae3bb461b2f0fd1ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 07:41:07 2013 -0500
+
+    Allow disabling of TrueType kerning
+
+    Responds to the same feature tag that GPOS kerning does:
+    'kern' for horizontal and 'vkrn' for vertical.
+
+ TODO              |  2 --
+ src/hb-ot-shape.cc | 55
+ ++++++++++++++++++++++++++++++++++--------------------
+ 2 files changed, 35 insertions(+), 22 deletions(-)
+
+commit 398238a2526d322eb79e255c24634a275473920f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 07:40:10 2013 -0500
+
+    Fix partial disabling of default-on features
+
+    Surprisingly, if user ever tried to turn a default feature off
+    partially
+    (say, disable liga for a range), the feature was being turned off
+    globally!  Fixed now.
+
+ src/hb-ot-map.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit cb90b1bbe6d27ca6968b70d2dbfea7ab7fb73293
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 07:02:08 2013 -0500
+
+    [OTLayout] Respect syllable boundaries for backtrack/lookahead
+    matching
+
+    Originally we meant to match backtrack/lookahead across syllable
+    boundaries.  But a bug in the code meant that this was NOT done for
+    backtrack. We "fixed" that in
+    2c7d0b6b80d412de3fddd443ed1a485ea1cbb03c,
+    but that broke Myanmar shaping.
+
+    We now believe that for Indic-like shapers (which is where syllables
+    are
+    used), all basic shaping forms should be fully contained within their
+    syllables, so now we limit backtrack/lookahead matching to the
+    syllable
+    too.  Unbreaks Myanmar.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit ee9c3a17d0bf263c5eee479fd778db97cff8e189
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 15 06:22:26 2013 -0500
+
+    Minor refactoring
+
+ src/hb-ot-shape-complex-myanmar.cc | 36
+ ++++++++++--------------------------
+ src/hb-ot-shape-complex-sea.cc     | 37
+ ++++++++++---------------------------
+ src/hb-ot-shape.cc                | 17 ++++++-----------
+ 3 files changed, 26 insertions(+), 64 deletions(-)
+
+commit cfc507c5432e6327e8484b07b9e091212653bc92
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 10:40:12 2013 -0500
+
+    [Indic-like] Disable automatic joiner handling for basic shaping
+    features
+
+    Not for Arabic, but for Indic-like scripts.  ZWJ/ZWNJ have special
+    meanings in those scripts, so let font lookups take full control.
+
+    This undoes the regression caused by automatic-joiners handling
+    introduced two commits ago.
+
+    We only disable automatic joiner handling for the "basic shaping
+    features" of Indic, Myanmar, and SEAsian shapers.  The "presentation
+    forms" and other features are still applied with automatic-joiner
+    handling.
+
+    This change also changes the test suite failure statistics, such that
+    a few scripts show more "failures".  The most affected is Kannada.
+    However, upon inspection, we believe that in most, if not all, of the
+    new failures, we are producing results superior to Uniscribe.  Hard to
+    count those!
+
+    Here's an example of what is fixed by the recent joiner-handling
+    changes:
+
+      https://bugs.freedesktop.org/show_bug.cgi?id=58714
+
+    New numbers, for future reference:
+
+    BENGALI: 353892 out of 354188 tests passed. 296 failed (0.0835714%)
+    DEVANAGARI: 707336 out of 707394 tests passed. 58 failed (0.00819911%)
+    GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
+    GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
+    KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
+    KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
+    LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
+    MALAYALAM: 1047983 out of 1048334 tests passed. 351 failed
+    (0.0334817%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
+    TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
+    TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
+    TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
+
+ src/hb-ot-layout-gsubgpos-private.hh      | 35
+ +++++++++++++++++++-----------
+ src/hb-ot-layout-private.hh               |  6 +++--
+ src/hb-ot-layout.cc                       | 10 +++++----
+ src/hb-ot-map-private.hh                  | 12 ++++++----
+ src/hb-ot-map.cc                          | 32
+ +++++++++++++++++++++------
+ src/hb-ot-shape-complex-arabic-fallback.hh |  2 +-
+ src/hb-ot-shape-complex-indic.cc          | 29 +++++++++++++------------
+ src/hb-ot-shape-complex-myanmar.cc        |  4 ++--
+ src/hb-ot-shape-complex-sea.cc                    |  4 ++--
+ 9 files changed, 85 insertions(+), 49 deletions(-)
+
+commit 0b45479198d61d5135dad771e9c68408eb13f930
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 10:46:52 2013 -0500
+
+    [OTLayout] Add fine-grained control over ZWJ matching
+
+    Not used yet.  Next commit...
+
+ src/hb-ot-layout-gsubgpos-private.hh | 10 ++++++++--
+ src/hb-ot-layout-private.hh         | 11 +++++++++--
+ 2 files changed, 17 insertions(+), 4 deletions(-)
+
+commit 607feb7cff0e50f8738d2e49ca463fc9d7d494de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 07:43:13 2013 -0500
+
+    [OTLayout] Ignore default-ignorables when matching GSUB/GPOS
+
+    When matching lookups, be smart about default-ignorable characters.
+    In particular:
+
+    Do nothing specific about ZWNJ, but for the other default-ignorables:
+
+    If the lookup in question uses the ignorable character in a sequence,
+    then match it as we used to do.  However, if the sequence match will
+    fail because the default-ignorable blocked it, try skipping the
+    ignorable character and continue.
+
+    The most immediate thing it means is that if Lam-Alef forms a
+    ligature,
+    then Lam-ZWJ-Alef will do to.  Finally!
+
+    One exception: when matching for GPOS, or for backtrack/lookahead of
+    GSUB, we ignore ZWNJ too.  That's the right thing to do.
+
+    It certainly is possible to build fonts that this feature will result
+    in undesirable glyphs, but it's hard to think of a real-world case
+    that that would happen.
+
+    This *does* break Indic shaping right now, since Indic Unicode has
+    specific rules for what ZWJ/ZWNJ mean, and skipping ZWJ is breaking
+    those rules.  That will be fixed in upcoming commits.
+
+ src/hb-ot-layout-gpos-table.hh       |   1 +
+ src/hb-ot-layout-gsub-table.hh       |   2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 279
+ ++++++++++++++++++++++++-----------
+ src/hb-ot-layout-private.hh         |  45 ++++++
+ src/hb-ot-shape-private.hh          |  44 ------
+ 5 files changed, 237 insertions(+), 134 deletions(-)
+
+commit ec5448667b30ad662401c2b4f5fc0da524c013fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 11:25:10 2013 -0500
+
+    Add hb_ot_map_feature_flags_t
+
+    Code cleanup.  No (intended) functional change.
+
+ src/hb-ot-map-private.hh          | 29 +++++++++++++++++---
+ src/hb-ot-map.cc                  | 24 ++++++++---------
+ src/hb-ot-shape-complex-arabic.cc  |  4 +--
+ src/hb-ot-shape-complex-indic.cc   | 55
+ +++++++++++++++++++-------------------
+ src/hb-ot-shape-complex-myanmar.cc |  4 +--
+ src/hb-ot-shape-complex-sea.cc     |  2 +-
+ src/hb-ot-shape.cc                |  6 +++--
+ 7 files changed, 74 insertions(+), 50 deletions(-)
+
+commit e7ffcfafb1108801ac504f18f820e497226bf07f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 11:05:56 2013 -0500
+
+    Clean-up add_bool_feature
+
+ src/hb-ot-map-private.hh          |  4 ++--
+ src/hb-ot-shape-complex-arabic.cc  | 16 ++++++++--------
+ src/hb-ot-shape-complex-default.cc |  2 +-
+ src/hb-ot-shape-complex-indic.cc   |  8 ++++----
+ src/hb-ot-shape-complex-myanmar.cc |  8 ++++----
+ src/hb-ot-shape-complex-sea.cc     |  8 ++++----
+ src/hb-ot-shape.cc                | 10 +++++-----
+ 7 files changed, 28 insertions(+), 28 deletions(-)
+
+commit e7562f53fe6a506d2c6d59d6688e4fa468bba462
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 11:05:36 2013 -0500
+
+    Fix compile warnings for ragel-generated machines
+
+ src/hb-ot-shape-complex-indic-machine.rl   | 2 +-
+ src/hb-ot-shape-complex-myanmar-machine.rl | 2 +-
+ src/hb-ot-shape-complex-sea-machine.rl     | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 4e51df73a337f7232a7dfa85df78a4f19b24771b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 07:42:42 2013 -0500
+
+    [OTLayout] Remove unused function
+
+ src/hb-ot-layout-gsubgpos-private.hh | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit 8820bb235b1f63e4d93c8a2f5c08b44d89e06b78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 07:41:03 2013 -0500
+
+    [OTLayout] Port apply_lookup to skippy_iter
+
+ src/hb-ot-layout-gsubgpos-private.hh | 50
+ +++++++++++++++++++++++++-----------
+ 1 file changed, 35 insertions(+), 15 deletions(-)
+
+commit dfca269f069dae2f99990dac24da15d316eccb9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 07:20:52 2013 -0500
+
+    [OTLayout] Port ligate_input to skippy_iter
+
+ src/hb-ot-layout-gsubgpos-private.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 7e53415c2d8859e8b5948a2edb38c39a8f78b825
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Feb 14 06:24:30 2013 -0500
+
+    [OTLayout] Minor fix for apply_lookup()
+
+    Should NOT change behavior, since first glyph is a match.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit 6880f7e19d44c50e45ecb86d26381aad956d9acb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 12:17:25 2013 -0500
+
+    [OTLayout] Make table type known to apply context
+
+ src/hb-ot-layout-gsubgpos-private.hh      | 5 ++++-
+ src/hb-ot-layout.cc                       | 4 ++--
+ src/hb-ot-shape-complex-arabic-fallback.hh | 2 +-
+ 3 files changed, 7 insertions(+), 4 deletions(-)
+
+commit 2c7d0b6b80d412de3fddd443ed1a485ea1cbb03c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 12:10:08 2013 -0500
+
+    [OTLayou] Unbreak backtrack matching
+
+    Was introduced by 28b9d502bb69a8045818d5f6113ded9c59a56bd7.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit c074ebc466dcc9bcc0d8a5dd7e942dea974ff718
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 11:22:42 2013 -0500
+
+    [OTLayout] Minor refactoring
+
+ src/hb-ot-layout-gpos-table.hh       |  9 ++++++---
+ src/hb-ot-layout-gsubgpos-private.hh | 30 +++++++++++++++++-------------
+ 2 files changed, 23 insertions(+), 16 deletions(-)
+
+commit 407fc12466ef460d0edf11b89f0d04c4d724875f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 11:13:06 2013 -0500
+
+    [OTLayout] Remove bogus caching of glyph property
+
+ src/hb-ot-layout-gpos-table.hh       | 21 ++++++++-----------
+ src/hb-ot-layout-gsub-table.hh       |  7 +++----
+ src/hb-ot-layout-gsubgpos-private.hh | 40
+ ++++++++++++++----------------------
+ 3 files changed, 26 insertions(+), 42 deletions(-)
+
+commit 6b1e3502e23c110dd810f854ba021f83baab1548
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 11:02:54 2013 -0500
+
+    Remember ZWNJ
+
+    To be used in upcoming changes.
+
+ src/hb-ot-shape-private.hh | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit 1f91c39677f840a1f630696d16d083060069abf5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 09:38:40 2013 -0500
+
+    Indent
+
+ src/hb-ot-shape-complex-indic.cc | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit a0cb9f33ee064628debe8e848094dfd661334640
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 09:26:55 2013 -0500
+
+    [Indic] Improve base finding in final_reordering
+
+    Fixes 5 Malayalam failures!
+
+    MALAYALAM: 1048016 out of 1048334 tests passed. 318 failed
+    (0.0303338%)
+
+ src/hb-ot-shape-complex-indic.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 126f39cd16cea87b2696f66467c83a585bd4c2cf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 08:29:21 2013 -0500
+
+    Add more dot-reph tests
+
+ .../shaper-indic/indic/script-malayalam/misc/dot-reph.txt     |
+ 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit f22b7e77783fa2f44365e0fe6413c4474c07048d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 07:32:46 2013 -0500
+
+    [Indic] Track base position when reordering things
+
+    Ouch, how did things ever work without this?!  The added test that
+    has a
+    dot-reph as well as a pre-base reordering Ra perfectly demonstrates
+    the
+    bug (tested with Nirmala font from Win8 for example).  Testing
+    suggests
+    that Win8 shaper has the *exact* same bug / behavior that we used to
+    have.  Odd.
+
+ src/hb-ot-shape-complex-indic.cc                                   |
+ 6 ++++++
+ .../in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt   | 1 +
+ 2 files changed, 7 insertions(+)
+
+commit bc11de144c0a7a95fa0945aa7f053d8117af282a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 05:59:06 2013 -0500
+
+    [SEA] Don't zero any mark advances
+
+    Keep the logic simple, easier to explain to font developers.
+
+ src/hb-ot-shape-complex-sea.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0291a6528685f1f593707655943fb2360579cb9e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 13 05:57:24 2013 -0500
+
+    Further adjust mark advance zeroing
+
+    This is a followup to 568000274c8edb5f41bc4f876ce21fcc8bdaeed8.
+    Looks like in the Latin shaper, Uniscribe zeroes all Unicode NSM
+    advances *after* GPOS, not before. Match that.
+
+    Can be tested using DejaVu Sans Mono, since that font has GPOS
+    rules to zero the mark advances on its own.
+
+ src/hb-ot-shape.cc | 33 +++++++++++++++++++++++----------
+ 1 file changed, 23 insertions(+), 10 deletions(-)
+
+commit 85c51ec2e1d518019e32801ae38659c74fc20d80
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 18:17:39 2013 -0500
+
+    [Indic] Fix Eyelash Ra with old Devanagari spec
+
+ src/hb-ot-shape-complex-indic.cc | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+commit cc5f24cde079b451799562b3af7ce06d932cbe6b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 18:17:12 2013 -0500
+
+    [tests] Add tests for Devanagary Eyelash Ra
+
+    Currently broken with Sanskrit 2003 font.
+
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST  |
+ 1 +
+ .../in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt     |
+ 3 +++
+ 2 files changed, 4 insertions(+)
+
+commit 63e48bc33b68f940c351af623a55a4cf650db102
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 17:57:49 2013 -0500
+
+    [Indic] Apply 'blwf' before 'half'
+
+    This reverts 167b625d988b74572d6b2f646c285b666b650d49.  It didn't
+    matter before, but that's going to change with next commit.
+
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 70d656571194d2bd32671244530edbe159722cec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 18:01:21 2013 -0500
+
+    [Indic] Apply 'vatu' before 'cjct'
+
+    This essentially reverts 1d6846db9ebf84561bb30a4e48c6c43184914099,
+    but that commit is from way back when.  We should be better
+    following the spec order now again.
+
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 64bb2ae857cfda35dd71c7f1e962722069674ec6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 16:29:25 2013 -0500
+
+    Didn't mean to push this out
+
+    Ouch!
+
+ test/shaping/hb_test_tools.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit f9b660534c269d2257d6b5e8ec2173ee71668f2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 16:13:56 2013 -0500
+
+    [Myanmar] Use master Indic table for syllable data
+
+ src/hb-ot-shape-complex-myanmar.cc | 144
+ +++++++++----------------------------
+ test/shaping/hb_test_tools.py     |   1 +
+ 2 files changed, 35 insertions(+), 110 deletions(-)
+
+commit f60793e854393c32337a483c5d1700bf17d767fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 15:45:59 2013 -0500
+
+    [tests] Add Cham sample
+
+ test/shaping/texts/in-tree/shaper-sea/script-cham/misc/misc.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit e2aab4b5db88c368c11cee81368b9ad41399e585
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 15:35:32 2013 -0500
+
+    Improve checks for setmode()
+
+    As reported by Jonathan, OS X has setmode() that is something other
+    than what setmode() is on Win32.  So, limit invocation to Windows
+    platforms only.
+
+ configure.ac   | 4 ++--
+ util/options.cc | 4 ++--
+ util/options.hh | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+commit a6c1e040e594faeefd61b456ef995c7886cdea78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 15:31:58 2013 -0500
+
+    Improve check for Windows platforms
+
+    Instead of checking for compiler, check for platform.
+
+ src/hb-atomic-private.hh | 2 +-
+ src/hb-mutex-private.hh  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 9e1f80ab3eea4a74cdaa6a390e4925a479ece1c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 15:28:21 2013 -0500
+
+    [SEA] Treat Consonant_Final like Consonant_Medial
+
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bab02d339f39ed5168daaef9461227f78e596a2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 15:26:45 2013 -0500
+
+    Rename HB_OT_INDIC_OPTIONS env var to HB_OPTIONS
+
+    The Myanmar shaper now respects the uniscribe-bug-compatibility
+    option too.
+
+ src/hb-common.cc                  | 20 ++++++++++++--
+ src/hb-ot-shape-complex-indic.cc   | 53
+ ++++----------------------------------
+ src/hb-ot-shape-complex-myanmar.cc |  7 ++---
+ src/hb-private.hh                 | 29 +++++++++++++++++++++
+ 4 files changed, 54 insertions(+), 55 deletions(-)
+
+commit 3a83d33ec0b1be6f5992816ff5ebb0f43c8dff00
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 12:14:10 2013 -0500
+
+    Add South-East Asian shaper
+
+    Handles Tai Tham, Cham, and New Tai Lue for now.
+
+ src/Makefile.am                                   |  12 +-
+ src/gen-indic-table.py                                    |   9 +-
+ src/hb-ot-shape-complex-indic-private.hh          | 241 +-----
+ src/hb-ot-shape-complex-indic-table.cc                    | 869
+ ++++++++++++++++++++
+ src/hb-ot-shape-complex-indic-table.hh                    | 872
+ ---------------------
+ src/hb-ot-shape-complex-indic.cc                  | 239 ++++++
+ src/hb-ot-shape-complex-myanmar.cc                |   2 +-
+ src/hb-ot-shape-complex-private.hh                |  28 +-
+ src/hb-ot-shape-complex-sea-machine.rl                    | 102 +++
+ src/hb-ot-shape-complex-sea.cc                            | 400 ++++++++++
+ test/shaping/texts/in-tree/MANIFEST               |   1 +
+ .../in-tree/shaper-indic/south-east-asian/MANIFEST |  1 -
+ .../south-east-asian/script-new-tai-lue/MANIFEST   |  1 -
+ .../script-new-tai-lue/misc/MANIFEST              |   1 -
+ .../script-new-tai-lue/misc/misc.txt              |   1 -
+ test/shaping/texts/in-tree/shaper-myanmar/MANIFEST |  1 +
+ test/shaping/texts/in-tree/shaper-sea/MANIFEST     |  3 +
+ .../texts/in-tree/shaper-sea/script-cham/MANIFEST  |  1 +
+ .../in-tree/shaper-sea/script-cham/misc/MANIFEST   |  1 +
+ .../in-tree/shaper-sea/script-cham/misc/misc.txt   |  1 +
+ .../in-tree/shaper-sea/script-new-tai-lue/MANIFEST |  1 +
+ .../shaper-sea/script-new-tai-lue/misc/MANIFEST    |  1 +
+ .../shaper-sea/script-new-tai-lue/misc/misc.txt    |  1 +
+ .../in-tree/shaper-sea/script-tai-tham/MANIFEST    |  1 +
+ .../shaper-sea/script-tai-tham/misc/MANIFEST      |   1 +
+ .../shaper-sea/script-tai-tham/misc/misc.txt      |   2 +
+ 26 files changed, 1661 insertions(+), 1132 deletions(-)
+
+commit fb960212063016656dfaba83f072c81d1efc3202
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 10:33:58 2013 -0500
+
+    Minor test reshufflings
+
+ test/shaping/texts/in-tree/MANIFEST
+ | 1 +
+ test/shaping/texts/in-tree/script-default/MANIFEST
+ | 1 +
+ test/shaping/texts/in-tree/script-default/misc/MANIFEST
+ | 1 +
+ test/shaping/texts/in-tree/script-default/misc/misc.txt
+ | 1 +
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST
+ | 1 -
+ test/shaping/texts/in-tree/shaper-indic/south-asian/MANIFEST
+ | 1 -
+ .../texts/in-tree/shaper-indic/south-asian/script-tibetan/MANIFEST
+ | 1 -
+ .../texts/in-tree/shaper-indic/south-asian/script-tibetan/misc/MANIFEST
+ | 1 -
+ .../texts/in-tree/shaper-indic/south-asian/script-tibetan/misc/misc.txt
+ | 1 -
+ test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST
+ | 1 -
+ .../texts/in-tree/shaper-indic/south-east-asian/script-thai/MANIFEST
+ | 1 -
+ .../in-tree/shaper-indic/south-east-asian/script-thai/misc/MANIFEST
+ | 0
+ 12 files changed, 4 insertions(+), 7 deletions(-)
+
+commit 5676d5d52784e16068ae483103d59111a8081854
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 10:31:14 2013 -0500
+
+    [Indic] Make sure New Tai Lue works!
+
+ src/hb-ot-shape-complex-private.hh                          | 12
+ ++++++++----
+ .../texts/in-tree/shaper-indic/south-east-asian/MANIFEST     |  1 +
+ .../south-east-asian/script-new-tai-lue/MANIFEST            |  1 +
+ .../south-east-asian/script-new-tai-lue/misc/MANIFEST       |  1 +
+ .../south-east-asian/script-new-tai-lue/misc/misc.txt       |  1 +
+ 5 files changed, 12 insertions(+), 4 deletions(-)
+
+commit 568000274c8edb5f41bc4f876ce21fcc8bdaeed8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 09:44:57 2013 -0500
+
+    Adjust mark advance-width zeroing logic for Myanmar
+
+    Before, we were zeroing advance width of attached marks for
+    non-Indic scripts, and not doing it for Indic.
+
+    We have now three different behaviors, which seem to better
+    reflect what Uniscribe is doing:
+
+      - For Indic, no explicit zeroing happens whatsoever, which
+       is the same as before,
+
+      - For Myanmar, zero advance width of glyphs marked as marks
+       *in GDEF*, and do that *before* applying GPOS.  This seems
+       to be what the new Win8 Myanmar shaper does,
+
+      - For everything else, zero advance width of glyphs that are
+       from General_Category=Mn Unicode characters, and do so
+       before applying GPOS.  This seems to be what Uniscribe does
+       for Latin at least.
+
+    With these changes, positioning of all tests matches for Myanmar,
+    except for the glitch in Uniscribe not applying 'mark'.  See preivous
+    commit.
+
+ src/hb-ot-layout-gpos-table.hh     | 12 ++++--------
+ src/hb-ot-layout-private.hh       |  3 +--
+ src/hb-ot-layout.cc               |  4 ++--
+ src/hb-ot-shape-complex-arabic.cc  |  2 +-
+ src/hb-ot-shape-complex-default.cc |  2 +-
+ src/hb-ot-shape-complex-indic.cc   |  2 +-
+ src/hb-ot-shape-complex-myanmar.cc |  2 +-
+ src/hb-ot-shape-complex-private.hh |  9 ++++++++-
+ src/hb-ot-shape-complex-thai.cc    |  2 +-
+ src/hb-ot-shape.cc                | 31 +++++++++++++++++++++++++++++--
+ 10 files changed, 49 insertions(+), 20 deletions(-)
+
+commit 99749ca8e0c4c8dbea4620f07c4d0e6d1515cc65
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Feb 12 09:44:35 2013 -0500
+
+    [Myanmar] Add note re Uniscribe NOT applying 'mark'
+
+ src/hb-ot-shape-complex-myanmar.cc | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit b8427801381180da9611b2e3e0f0b3514274de81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 17:02:17 2013 -0500
+
+    Minor
+
+ src/hb-atomic-private.hh | 2 +-
+ src/hb-mutex-private.hh  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 419c933ed1b5d97c7561546536ef5810a7b0ebd0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 16:16:16 2013 -0500
+
+    [Myanmar] Fix handling of Punctuation and Symbol types
+
+    Testing with "clusters" now on par with testing without them.  15
+    failures both.
+
+ src/hb-ot-shape-complex-myanmar.cc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 0572c1410a9cb0ac5dd5dc84a8034698cc5c4892
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 16:06:02 2013 -0500
+
+    [Myanmar] Fixup handling of joiners and GB characters
+
+ src/hb-ot-shape-complex-myanmar-machine.rl |  6 ++----
+ src/hb-ot-shape-complex-myanmar.cc        | 19 +++++++++++++++++--
+ 2 files changed, 19 insertions(+), 6 deletions(-)
+
+commit 1c8654ead41ca746d577549c92d2a41c594ab639
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 14:27:02 2013 -0500
+
+    [Myanmar] Prevent reordering between Asat and Dot below
+
+    Implemented as a hack for now.  Myanmar failures down from 23 to 15.
+
+    MYANMAR: 1123868 out of 1123883 tests passed. 15 failed (0.00133466%)
+
+    The remaining 15 cases are all where the syllable is wrong according
+    to
+    the OpenType spec. We insert dottedcircle.  Uniscribe fails to
+    do that,
+    but it also fails to reorder the prebase-reordering medial-Ra.  So it
+    gets it wrong.
+
+ src/hb-unicode-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit bed687f886b8def06642ad986648e9149a935add
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 14:24:03 2013 -0500
+
+    Shuffle test data around
+
+ test/shaping/texts/in-tree/MANIFEST               |  1 +
+ .../in-tree/shaper-indic/south-east-asian/MANIFEST |  1 -
+ .../south-east-asian/script-myanmar/MANIFEST      |  1 -
+ .../south-east-asian/script-myanmar/misc/MANIFEST  |  2 --
+ .../south-east-asian/script-myanmar/misc/misc.txt  |  1 -
+ .../south-east-asian/script-myanmar/misc/utn11.txt | 34
+ ----------------------
+ .../south-east-asian/script-thai/misc/MANIFEST     |  1 -
+ .../south-east-asian/script-thai/misc/misc.txt     | 11 -------
+ .../in-tree/shaper-myanmar/script-myanmar/MANIFEST |  1 +
+ .../shaper-myanmar/script-myanmar/misc/MANIFEST    |  2 ++
+ .../shaper-myanmar/script-myanmar/misc/misc.txt    |  1 +
+ .../shaper-myanmar/script-myanmar/misc/utn11.txt   | 34
+ ++++++++++++++++++++++
+ .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |  1 +
+ .../in-tree/shaper-thai/script-thai/misc/misc.txt  | 11 +++++++
+ 14 files changed, 51 insertions(+), 51 deletions(-)
+
+commit 98628cac9f733f2674d6409954cddb7d0634c233
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 13:36:23 2013 -0500
+
+    Add Win8-style Myanmar shaper
+
+    Myanmar failures down from 51% to 0.00204648%!
+
+    MYANMAR: 1123860 out of 1123883 tests passed. 23 failed (0.00204648%)
+
+ src/Makefile.am                           |  14 +-
+ src/hb-ot-shape-complex-indic.cc          |   2 -
+ src/hb-ot-shape-complex-myanmar-machine.rl | 127 ++++++
+ src/hb-ot-shape-complex-myanmar.cc        | 599
+ +++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh        |   5 +-
+ 5 files changed, 740 insertions(+), 7 deletions(-)
+
+commit 1df56449586bd32275a6fa69dcadd5fb77a84f82
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 14:17:54 2013 -0500
+
+    Minor
+
+ src/hb-ot-shape-complex-indic.cc | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 54f7b4d9ec13f8454aa298534da318c023fa3c63
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 13:27:17 2013 -0500
+
+    [OTLayout] Respect lookup-flags skipping over non-mark glyphs
+
+    Before, when matching ligatures, we never skipping over base / liga
+    glyphs even if that was what the LookupFlags asked for.
+
+    Fixed now. We carefully reviewed all instances of this, and
+    tested with
+    Amiri as well as some Indic scripts, and are confident that this
+    should
+    NOT break anyone's fonts.  It's also how Uniscribe does it, from what
+    we can tell.
+
+ src/hb-ot-layout-gpos-table.hh       |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 25 ++++++++++---------------
+ 2 files changed, 11 insertions(+), 16 deletions(-)
+
+commit 9082efc4aacb34de8574d6a4a3c037987df58bd8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 13:14:15 2013 -0500
+
+    [OTLayout] s/mark_skipping/skipping/
+
+    In aticipation of upcoming changes.
+
+ src/hb-ot-layout-gpos-table.hh       | 12 ++++++------
+ src/hb-ot-layout-gsubgpos-private.hh | 28 ++++++++++++++--------------
+ 2 files changed, 20 insertions(+), 20 deletions(-)
+
+commit 9621e0ba294c9cc6d458bbf632e63e92fda71e10
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 06:58:27 2013 -0500
+
+    [Indic] Fix bug introduced in 8b217f5ac54aa0dcbba2dd6d59aa89dde33e56c2
+
+    Was breaking reph formation logic when the Ra is the only consonant.
+    Devanagari regression fixed.  Down to 57 failures again.  Ouch.
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6e74c64211b6aaac48bae8c87f9420d8dc03fd93
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 11 06:50:17 2013 -0500
+
+    Improve normalization heuristic
+
+    Before, for most scripts, we were not trying to recompose two
+    characters
+    if the second one had ccc=0.  That fails for Myanmar where U+1026
+    decomposes to U+1025,U+102E, both of which have ccc=0.  However, we do
+    want to try to recompose those.  We now check whether the second is a
+    mark, using general category instead.
+
+    At the same time, remove optimization that was conflicting with this.
+
+    [Let the Ngapi hackfest begin!]
+
+ src/hb-ot-shape-normalize.cc | 39 +++++++++++++--------------------------
+ 1 file changed, 13 insertions(+), 26 deletions(-)
+
+commit 614242efb043f2ed78916377138d456279a20a54
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 6 23:45:27 2013 -0500
+
+    Revert "Include config.h.in in tree"
+
+    This reverts commit 01013a0f5c58d5d54a37e5b4d6692e0bbd4baf80.
+
+    Conflicts:
+       config.h.in
+
+    Same argument as previous commit.
+
+ Makefile.am |  1 +
+ config.h.in | 153
+ ------------------------------------------------------------
+ 2 files changed, 1 insertion(+), 153 deletions(-)
+
+commit adff3778155facb7b149ce66ab7d573368e048de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 6 23:43:27 2013 -0500
+
+    Revert "[Indic] Import ragel-generated Indic machine in git"
+
+    This reverts commit fab7a71f110ed646745d54b23284537c50058c21.
+
+    Conflicts:
+       src/hb-ot-shape-complex-indic-machine.hh
+
+    Keeping that generated file in-tree causes problems with processes
+    like
+    tinderbox  that automatically fetch and build harfbuzz.  It's harder
+    to
+    bootstrap harfbuzz now (as was previously), but I'm willing to
+    give this
+    another chance and see how it goes.
+
+ autogen.sh                              |    6 +
+ src/Makefile.am                         |    1 +
+ src/hb-ot-shape-complex-indic-machine.hh | 1443
+ ------------------------------
+ 3 files changed, 7 insertions(+), 1443 deletions(-)
+
+commit 5898fa94d12b19686f649104bd6efe8daa1ba0c9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Feb 6 15:29:07 2013 -0500
+
+    Don't use $(ENV)
+
+    As reported by Peter Breitenlohner:
+
+    I think this is a very bad idea because ENV is used to specify
+    a startup
+    file to be read by some/all shells.
+
+ test/api/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 52d66c26a2102bd1a49463b8e8f04612598f8ac1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 4 23:31:24 2013 -0500
+
+    Add color-tests automake option
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9de5f98f363d96f308adc33f1c2286e5c33117de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 4 23:28:22 2013 -0500
+
+    Bug 60035 - intermittent make install failure on hb-version.h
+
+ src/Makefile.am | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+commit 6c1e8b614cfd6ed016fba6bf20af1e422e79eb71
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 4 23:24:16 2013 -0500
+
+    Bug 59637 - check-exported-symbols.sh & check-internal-symbols.sh
+    fail on mips/mipsel
+
+ src/check-symbols.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bafdf3d983dcc277d6e7e322277c0bb25b41a173
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Feb 4 23:06:50 2013 -0500
+
+    Merge check-internal-symbols.sh and check-exported-symbols.sh
+
+ src/Makefile.am              |  3 +--
+ src/check-exported-symbols.sh | 40 ----------------------------------
+ src/check-internal-symbols.sh | 34 -----------------------------
+ src/check-symbols.sh         | 50
+ +++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 51 insertions(+), 76 deletions(-)
+
+commit ceeae30f47b9d628484ae398bc38f3f60ee8eab4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 31 19:27:36 2013 -0500
+
+    Really fix setmode this time
+
+    Thanks to Khaled for spotting it.
+
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7cba8a673b4b436a737fc4ffe85dc84ddd2bf41f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 31 18:37:10 2013 -0500
+
+    Fixup previous commit
+
+    Now, it looks like this breaks Cygwin again.  Have to figure out
+    what's
+    going on.
+
+ util/options.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit bc76449f51f20491a4540b4f240f5a3e0dcb20fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 31 18:18:05 2013 -0500
+
+    Use setmode() instead of _setmode()
+
+    Looks like Cygwin / MSVC declare it that way, and it still works on
+    MinGW32 cross.
+
+ config.h.in    | 6 +++---
+ configure.ac   | 2 +-
+ util/options.cc | 2 +-
+ util/options.hh | 2 +-
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+commit e9171af55cc6a402eb20db4ea74c86a0b1e70e85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jan 29 22:45:00 2013 -0500
+
+    Bug 60053 - hb-common.cc:181:6: warning: ‘void free_langs()’
+    defined but not used
+
+ src/hb-common.cc | 2 +-
+ src/hb-ft.cc    | 2 +-
+ src/hb-shape.cc  | 2 +-
+ src/hb-shaper.cc | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 09b5393874e56fcfd63a92d28e6c1c2ddeee0942
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jan 18 17:10:47 2013 -0600
+
+    0.9.12
+
+ NEWS        | 7 +++++++
+ configure.ac | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit eb45c0a2fbaeeb34e77a2935934e8d1302728ec8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 16 22:07:50 2013 -0600
+
+    Minor
+
+ src/hb-ot-layout.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 52c8d1226f3509276b11a1fadbd29e5363c0ecd7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 14 13:51:46 2013 -0600
+
+    Minor
+
+ src/hb-blob.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f88d3bd7e407d332bb04688344c54756d24128c9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 14 00:33:58 2013 -0600
+
+    Fix build with Sun compiler
+
+ src/hb-blob.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 08b29c08094097f1c23ec53b10084bc390cea833
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 14 00:32:12 2013 -0600
+
+    Revert "Minor"
+
+    This reverts commit 0a492357016bc9a614d2a726f2006c10af68ca58.
+
+    Enables code on more compilers.
+
+ src/hb-warning.cc | 33 ++++++++++++++++++++++++++++++---
+ 1 file changed, 30 insertions(+), 3 deletions(-)
+
+commit e78463211e7d85f237bd55afab7e8e5dae42346c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 14 00:27:21 2013 -0600
+
+    Fix linking with non-gcc compilers
+
+ configure.ac   | 2 ++
+ src/Makefile.am | 6 +++++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit de649f07f1f8fdeb998a0b049759f4f7363e25d2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 14 00:26:43 2013 -0600
+
+    Fix residuals from fontconfig changes
+
+ src/hb-atomic-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit cf81fb3624466b9df2250b58b27a92187c5b5b5c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 10 09:06:34 2013 -0600
+
+    0.9.11
+
+ NEWS        | 14 ++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+commit 2dcb333f52492018816f0d5d67a47634a612e49c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 10 01:17:59 2013 -0600
+
+    Add atomic ops for Solaris
+
+    Based on fontconfig patch from Raimund Steger.
+
+ config.h.in             |  5 ++++-
+ configure.ac            | 27 +++++++++++++++++++++++++--
+ src/hb-atomic-private.hh | 12 ++++++++++++
+ 3 files changed, 41 insertions(+), 3 deletions(-)
+
+commit 69fd6e157c7ec83a5d5d8731fc14675ce4509b09
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 10 00:03:36 2013 -0600
+
+    Fix crasher during multi-thread shaper data creation
+
+    Sample crash:
+
+    0  _hb_graphite2_shaper_face_data_destroy (data=0xffffffffffffffff)
+       at ../../src/hb-graphite2.cc:129
+    1  0x00007ffff4271d7d in hb_graphite2_shaper_face_data_ensure (
+       face=<optimized out>) at ../../src/hb-shaper-list.hh:35
+    2  hb_shape_plan_plan (shaper_list=<optimized out>,
+    num_user_features=0,
+       user_features=0x0, shape_plan=0xf7b490) at
+       ../../src/hb-shaper-list.hh:35
+    3  hb_shape_plan_create (face=<optimized out>, props=<optimized out>,
+       user_features=0x0, num_user_features=0, shaper_list=<optimized
+       out>)
+       at ../../src/hb-shape-plan.cc:108
+    4  0x00007ffff4272c93 in hb_shape_plan_create_cached (face=0x10cf2b0,
+       props=0x11980d8, user_features=0x0, num_user_features=<optimized
+       out>,
+       shaper_list=0x0) at ../../src/hb-shape-plan.cc:283
+
+ src/hb-shaper-private.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit ecd454b3cd75050e0c95e1d2aa55744559338ec8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jan 8 18:09:46 2013 -0600
+
+    [Indic] In old-spec shaping, don't move viramas around if seq ends
+    with one
+
+    For example: u0c9a u0ccd u0c9a u0ccd with Lohit.  See:
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=59118
+
+ src/hb-ot-shape-complex-indic.cc                                  |
+ 7 ++++---
+ .../texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt  | 1 +
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit e95e031b5682809488cc965883e15404cb9cfb6a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Jan 8 16:15:46 2013 -0600
+
+    [GPOS] If an Anchor offset is NULL, return false
+
+    If in a MarkPos table, a base has no anchor for a particular mark
+    class,
+    return NULL such that the subsequent subtables get a chance at it.
+
+    Test case:
+    hb-shape ./EBGaramond12-Regular.otf ἂ --features="ss20","smcp"
+
+ src/hb-open-type-private.hh   | 14 ++++++++++++--
+ src/hb-ot-layout-gpos-table.hh | 10 ++++++++--
+ 2 files changed, 20 insertions(+), 4 deletions(-)
+
+commit e5dbf39900fa63051f64cc447a6742665cbee339
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 7 17:34:24 2013 -0600
+
+    Bug 58638 - Building fails with ICU due to not passing required flags
+
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 1172dc736280566426eb6dade1a886b2a0ca9aa4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jan 7 16:46:37 2013 -0600
+
+    Rename hb_buffer_clear() to hb_buffer_clear_contents()
+
+    The previous name was clashing with harfbuzz.old.  There are systems
+    that need to link both...
+
+    Clash-free now again.
+
+ src/hb-buffer.cc      | 2 +-
+ src/hb-buffer.h       | 2 +-
+ test/api/test-buffer.c | 2 +-
+ util/options.hh       | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 7b912c1936c3e8a7df27a30782ca127d0a83822d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jan 4 01:25:27 2013 -0600
+
+    Remove a few unnecessary const's
+
+    Apparently helps with MSVC compilation.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 34e6c3e3e452bdf6f93df565a70453a6e74d4c6e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 3 00:14:24 2013 -0600
+
+    0.9.10
+
+ NEWS        | 24 ++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+commit f0c82410dbe800cb6429ba4aa7cfd9f5a11cc70c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 3 00:07:16 2013 -0600
+
+    [OTLayout] Always collect default language system in collect_lookups
+
+    Not sure if this is the most desired behavior.  It's the most easily
+    defined though.
+
+ src/hb-ot-layout.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 15e9e4e1ddaad655988144e7a56a765e8adf8782
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 3 00:04:40 2013 -0600
+
+    [OTLayout] Fix feature iteration in collect_lookups
+
+    Previous logic was just wrong.
+
+ src/hb-ot-layout.cc | 46 ++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 32 insertions(+), 14 deletions(-)
+
+commit 733e8c0d7bf0765884f2cc953c8edcd7ab7fb49b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Jan 3 00:00:23 2013 -0600
+
+    [OTLayout] Whitespace
+
+ src/hb-ot-layout.cc | 82
+ ++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 68 insertions(+), 14 deletions(-)
+
+commit d37ae38047bee12639741af9bb083b857fab950d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 23:57:36 2013 -0600
+
+    [OTLayout] Handle required_feature_index in collect_lookups
+
+ src/hb-ot-layout.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 11fba79ee9383eb995ddf7eb924dd64c67e2df63
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 23:36:37 2013 -0600
+
+    [OTLayout] Fix various introspection issues with ClassDef's
+
+    As reported by Jonathan Kew.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+commit e81aff9ef785be28751aab1fcd484af550656181
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 23:22:54 2013 -0600
+
+    [tests] Finish test-set.c
+
+    All passing now.
+
+ test/api/test-set.c | 373
+ +++++++++++++++++++++-------------------------------
+ 1 file changed, 149 insertions(+), 224 deletions(-)
+
+commit 7b1b720a8da69b68b775ce17104a40d55401b7ef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 23:02:59 2013 -0600
+
+    Protect sets in-error from further modication
+
+    Fixes test-set.c
+
+ src/hb-set-private.hh | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 8165f2765b93e99577ecc79b7956ae38c614bc78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 22:50:36 2013 -0600
+
+    [tests] Start adding tests for hb-set.h
+
+    Fails now. Fixing.
+
+ TODO                 |   2 -
+ src/hb-set-private.hh |   6 +
+ src/hb-set.cc        |   9 +-
+ src/hb-set.h         |   3 +
+ test/api/Makefile.am  |   1 +
+ test/api/test-set.c   | 312
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 6 files changed, 330 insertions(+), 3 deletions(-)
+
+commit b9d28f696c433b94c5ffbad8d7c87cf3acff4056
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 22:49:58 2013 -0600
+
+    [tests] Add set object to test-object.c
+
+ test/api/test-object.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 11d2956553f0d4a0086166a04ffc352fcfacf56e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jan 2 17:41:27 2013 -0600
+
+    Minor
+
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 596740db04e7c1dadae0d8be6e401089fcaffc2d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 19:41:04 2012 -0500
+
+    [Indic] Insert dottedcircle after a lone Malayalam dot-reph
+
+ src/hb-ot-shape-complex-indic-machine.hh | 1617
+ ++++++++++++++++--------------
+ src/hb-ot-shape-complex-indic-machine.rl |    2 +-
+ src/hb-ot-shape-complex-indic.cc        |   13 +-
+ 3 files changed, 881 insertions(+), 751 deletions(-)
+
+commit 3cdce6497b2b9aeb2841bf077daa9dd9b196429d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:54:22 2012 -0500
+
+    Remove TODO that I don't intend to fix
+
+ TODO | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 6f69fa283e0a488da811df78bc83c41ed248b688
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:51:15 2012 -0500
+
+    Minor
+
+ src/hb-shape.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f4abcbfc628718bb276363746440df06e7658f6e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:48:51 2012 -0500
+
+    Minor
+
+ src/hb-buffer.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 4a765f092d71bb4adeb468c004987a9121d39db5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:48:47 2012 -0500
+
+    Minor
+
+ util/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9815a88111072aa51e78e258c5f660993b47d4df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:46:53 2012 -0500
+
+    [util] List supported output formats in --help output
+
+ util/hb-shape.cc     | 6 +++---
+ util/helper-cairo.cc | 2 +-
+ util/helper-cairo.hh | 1 +
+ util/options.cc      | 9 ++++++++-
+ util/options.hh      | 5 ++++-
+ util/view-cairo.hh   | 2 +-
+ 6 files changed, 18 insertions(+), 7 deletions(-)
+
+commit f95a87b7b813f588c7910ad4785ee68bb452e864
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:35:28 2012 -0500
+
+    [util] List supported output formats in hb-view
+
+ TODO                |  1 -
+ util/helper-cairo.cc | 30 +++++++++++++++++++++++++++++-
+ 2 files changed, 29 insertions(+), 2 deletions(-)
+
+commit 6bad092aa87bc3e6bbf0b9faf07693e6ebbe55f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 16:01:52 2012 -0500
+
+    [util] Default to "text" output format in hb-shape
+
+    If you say:
+
+      hb-shape font.ttf text --output-file out.txt
+
+    This was previously failing:
+
+      Unknown output format `txt'; supported formats are: TEXT / JSON
+
+    Now we simply fallback to TEXT if no explicit format was requested.
+
+ util/hb-shape.cc | 11 ++++++++---
+ util/options.hh  |  5 +++++
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+commit 8b217f5ac54aa0dcbba2dd6d59aa89dde33e56c2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 15:48:32 2012 -0500
+
+    [Indic] Reorder Malayalam dot-reph to after base
+
+    Test sequence is simple: U+0D4E,U+0D15.  The doth-reph should be
+    reordered to after the Ka.
+
+    https://bugzilla.redhat.com/show_bug.cgi?id=799565
+
+ src/hb-ot-shape-complex-indic.cc                           | 13
+ ++++++++++---
+ .../shaper-indic/indic/script-malayalam/misc/MANIFEST      |  1 +
+ .../shaper-indic/indic/script-malayalam/misc/dot-reph.txt   | 1 +
+ 3 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 742c4ee97e1311e000ebcdf9f33361c4dc6400a4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 15:35:03 2012 -0500
+
+    Minor
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 94afeb6ebe27534fc80d7173cc6f67375c3aaca6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 21 11:54:50 2012 -0500
+
+    Add Android.mk
+
+ Android.mk  | 74
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Makefile.am | 1 +
+ 2 files changed, 75 insertions(+)
+
+commit d16ddbcbbee39b07a028776995c635119fe3cd98
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Dec 20 01:02:36 2012 -0500
+
+    Add build confirmation notice to configure
+
+ configure.ac | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+commit e24d8dab749a1a796e7484e18572da5f7a733bd4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 19 15:23:02 2012 -0500
+
+    [TODO] Remove done items
+
+ TODO | 7 -------
+ 1 file changed, 7 deletions(-)
+
+commit 044d38527664d933c18c751c38fcf6fb4b5f888e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 19 13:00:16 2012 -0500
+
+    Bug 58498 - Tests fail with gold linker on ARM
+
+ src/check-exported-symbols.sh | 2 +-
+ src/check-internal-symbols.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit b68b86daf1a8478b86aeae44a8c39a606ed873cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 18 20:39:40 2012 -0500
+
+    Use C++ linker if ICU is disabled
+
+    Bug 54948 - Undefined symbols: "operator delete(void*)" "operator
+    new(unsigned long)" "___cxa_pure_virtual"
+
+ src/Makefile.am | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 1ffd23cb47a61465d52a7aeebb9c1b676e7c9a7e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 17 23:29:15 2012 -0500
+
+    [OTLayout] Limit alternate-location FeatureParams to 'size' feature
+
+ src/hb-ot-layout-common-private.hh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit efe252e6000558f78075adadb2a3dba25ab67c04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 17 23:21:05 2012 -0500
+
+    [OTLayout] Fix 'size' featureParams implementation
+
+    Looks at alternate location now.
+
+ src/hb-ot-layout-common-private.hh | 133
+ ++++++++++++++++++++++++++++---------
+ src/hb-ot-layout.cc               |  93 ++++----------------------
+ 2 files changed, 117 insertions(+), 109 deletions(-)
+
+commit e77b4425746ac9eb407ca4e742d962f1955971b4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 17 18:42:59 2012 -0500
+
+    [OTLayout] Fix tracing
+
+ src/hb-open-type-private.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 9b54562d63f1a9e0e5b33d71c32bd1588759ebf1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 17 13:55:36 2012 -0500
+
+    [OTLayout] Towards correct FeatureParams handling
+
+ src/hb-open-type-private.hh       |  8 +++++++-
+ src/hb-ot-layout-common-private.hh | 25 +++++++++++++++++++++++--
+ 2 files changed, 30 insertions(+), 3 deletions(-)
+
+commit 87e43b7f2be25840748f920ca33ff553833da45f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Dec 14 17:48:23 2012 -0500
+
+    [OTLayout] Wire tag and list start all the way to Feature
+
+    To fix FeatureParam issues.  No actual fix yet, just plumbing.
+
+ src/hb-ot-layout-common-private.hh | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+commit 85bc44b90a19c6a669ed567a9cd8513448600afe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 12 11:38:49 2012 -0500
+
+    [OTLayout] More 'size' feature sanity checking
+
+    We still don't look for the old incorrect place of the featureParams.
+    I'll wait till someone actually complains about it...
+
+ src/hb-ot-layout.cc | 99
+ ++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 79 insertions(+), 20 deletions(-)
+
+commit 0bae50a36f3022f9bb6b2c001c191eeaaa4ef954
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 11 16:01:31 2012 -0500
+
+    [OTLayout] Add FeatureParamsCharacterVariants struct
+
+    No API yet.
+
+ src/hb-ot-layout-common-private.hh | 52
+ +++++++++++++++++++++++++++++++++++---
+ 1 file changed, 49 insertions(+), 3 deletions(-)
+
+commit bd61bc13ea8ff350ada5449b2cfeb612e66ecafa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 11 16:00:43 2012 -0500
+
+    [OTLayout] Add UINT24 type
+
+ src/hb-open-type-private.hh | 33 ++++++++++++++++++++++-----------
+ src/hb-private.hh          |  4 ++++
+ 2 files changed, 26 insertions(+), 11 deletions(-)
+
+commit 9cf7f9d4f61741932570afbefdee5edf61f79ae4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 11 14:31:13 2012 -0500
+
+    Make test-size-params write size in points
+
+ src/test-size-params.cc | 18 ++++--------------
+ 1 file changed, 4 insertions(+), 14 deletions(-)
+
+commit 372fe2b67b1757e809bf33e1e9055a00c5bed304
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 11 14:30:57 2012 -0500
+
+    [OTLayout] Make hb_ot_layout_get_size_params() do some checks
+
+ src/hb-ot-layout.cc | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+commit 875a5cbc9c37f4264241c43b80afad2628eab749
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 11 14:17:01 2012 -0500
+
+    [OTLayout] Change hb_ot_layout_get_params() API
+
+    And add implementation for StylisticSet UINameID.  No API yet.
+
+ src/hb-ot-layout-common-private.hh | 85
+ ++++++++++++++++++++++++++++++++++++--
+ src/hb-ot-layout.cc               | 28 +++++++++----
+ src/hb-ot-layout.h                |  8 +++-
+ src/test-size-params.cc           |  9 +++-
+ 4 files changed, 115 insertions(+), 15 deletions(-)
+
+commit 5e7e52ddf2b0c4fbc9d933d24336100368d39a5c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 10 17:44:22 2012 -0500
+
+    [uniscribe] Enable Uniscribe backend only if it has
+    ScriptShapeOpenType()
+
+    Bug 55494 - ScriptItemizeOpenType doesn't exists under Windows XP
+
+ config.h.in  |  6 ------
+ configure.ac | 14 +++++++++++++-
+ 2 files changed, 13 insertions(+), 7 deletions(-)
+
+commit d41c0c955b8ad9b52191ca47e1f3b1bfe606deb1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 10 16:41:20 2012 -0500
+
+    Update config template
+
+ config.h.in | 4 ----
+ 1 file changed, 4 deletions(-)
+
+commit c48a04e5ea899b82465a0f3f2cfdcffb3bf38f61
+Author: John Ralls <jralls@ceridwen.fremont.ca.us>
+Date:  Mon Dec 10 16:24:24 2012 -0500
+
+    [coretext] Better test for CoreText
+
+    Instead of checking for ApplicationServices.h, which is present in all
+    versions of MacOSX, check for CTFontRef, a CoreText basic type.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0e9f0f3e5f16a45951423a1229af42dc2fd798c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 10 15:25:21 2012 -0500
+
+    Fix atomic ops on iOS
+
+    Patch from John Ralls.
+
+ src/hb-atomic-private.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 5f9569c1391c65d7addff363ad6e5ec9b087f01a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 10 13:38:42 2012 -0500
+
+    Make older MSVC happy
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 071d5b831e6de5f3b24160dc77b139cb040ab886
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Dec 10 00:57:00 2012 -0500
+
+    Work around missing OSAtomicCompareAndSwapPtrBarrier() on OS X 10.4
+
+    Not sure how to handle iOS.
+
+ src/hb-atomic-private.hh | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit e923e6487b25ab86f6f629af480b291e8e5407b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 19:39:40 2012 -0500
+
+    [coretext] Fixed typo
+
+    Oops.  Thanks Khaled for catching this.
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9a8395824bf51c2ff2cfe0887ecad52b3d2c02e2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:47:36 2012 -0500
+
+    [coretext] Add hb_coretext_face_get_cg_font()
+
+    Not sure if it's useful, but it was missing.
+
+ src/hb-coretext.cc | 20 ++++++++++++++------
+ src/hb-coretext.h  |  3 +++
+ 2 files changed, 17 insertions(+), 6 deletions(-)
+
+commit 86112356885fde32163882b6c9dd19a494304f7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:47:09 2012 -0500
+
+    [coretext] Remove hack around GlyphID
+
+    We not namespace our types, so the hack is not needed anymore.
+
+ src/hb-coretext.cc | 4 ----
+ 1 file changed, 4 deletions(-)
+
+commit 8e58459aeb949591bb5bca340ef9bdd5cfd54e47
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:45:47 2012 -0500
+
+    [graphite2] "Update to new API"
+
+    Part of patch from Martin Hosken.  I believe he knows what he's doing
+    :).
+
+ src/hb-graphite2.cc | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+commit a5a4ab3846ef06769784e6469d76eace35e68805
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:44:41 2012 -0500
+
+    [graphite2] Add hb_graphite2_face_get_gr_face and
+    hb_graphite2_font_get_gr_font
+
+    Based on patch from Martin Hosken. I believe it returns NULL if the
+    font doesn't have graphite tables, but have not tested.
+
+ src/hb-graphite2.cc | 14 ++++++++++++++
+ src/hb-graphite2.h  | 8 +++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+commit 737ba156442f723d126c7c58c73729786b67c17a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:43:03 2012 -0500
+
+    [graphite2] Preload all tables
+
+    Part of patch from Martin Hosken.
+
+ src/hb-graphite2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0ae6dbf1b4de8a0326b8a2f201597427cecfb6db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:37:38 2012 -0500
+
+    Minor
+
+ src/hb-uniscribe.cc | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+commit 3fe5c159d3532f8ce8a85d217a00681225dd8ed1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 9 18:20:19 2012 -0500
+
+    Remove excess return
+
+    Oops!
+
+ src/hb-uniscribe.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit ba2d543004573e8e4e56df70b7fe2a66a42bc83f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Dec 8 19:28:41 2012 -0500
+
+    Update OT language tags
+
+    Patch from Roozbeh Pournader.
+
+ src/hb-ot-tag.cc | 212
+ +++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 110 insertions(+), 102 deletions(-)
+
+commit aba38173c6b464c2884b73ef6cd4577d4efcebbc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 19:54:48 2012 -0500
+
+    Minor
+
+ src/hb-ot-tag.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 61865745e35eb60aeb59968e7826e37059090780
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 19:42:10 2012 -0500
+
+    Fix test with gold linker
+
+    Bug 57633 - Symbol tests should ignore __bss_start, _edata, _end
+
+ src/check-exported-symbols.sh | 2 +-
+ src/check-internal-symbols.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit b71b0bd9ee64feadd7289e195bc58f6361ce707a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 19:20:31 2012 -0500
+
+    [Indic] Add link to Sinhala split matra section of the Sinhala spec
+
+ src/hb-ot-shape-complex-indic.cc | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 9a34a50daac3563464e0031f377e85f0c704f2d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 19:18:18 2012 -0500
+
+    Fix build with C++11
+
+ util/options.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 0beb66e3a61ae8bb1fa66e54b1ff1abb2f8711e9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 18:46:04 2012 -0500
+
+    Fix warnings
+
+ src/hb-fallback-shape.cc                  | 10 +++++-----
+ src/hb-glib.cc                                    |  2 +-
+ src/hb-icu-le.cc                          |  6 +++---
+ src/hb-old.cc                             | 14 +++++++-------
+ src/hb-open-type-private.hh               |  4 +---
+ src/hb-ot-layout-gsubgpos-private.hh      | 24 ++++++++++++------------
+ src/hb-ot-shape-complex-arabic-fallback.hh |  4 ++--
+ src/hb-ot-shape-complex-arabic.cc         |  2 +-
+ src/hb-ot-shape-complex-indic-machine.hh   |  2 +-
+ src/hb-ot-shape-complex-indic-machine.rl   |  2 +-
+ src/hb-ot-shape-complex-indic.cc          |  6 +++---
+ src/hb-ot-shape-complex-thai.cc           |  2 +-
+ src/hb-ot-shape-fallback.cc               |  4 ++--
+ src/hb-private.hh                         |  8 ++++----
+ src/hb-ucdn.cc                                    | 27
+ +++++++++++++++------------
+ src/hb-utf-private.hh                     |  4 ++--
+ 16 files changed, 61 insertions(+), 60 deletions(-)
+
+commit c6408a1009d2370fbdcfa694898819d99d53c3df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 17:36:52 2012 -0500
+
+    0.9.9
+
+ NEWS        | 8 ++++++++
+ configure.ac | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 130bb3f6144afe5c88bb5b4e4c98e7cba03b1e26
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Dec 5 16:49:47 2012 -0500
+
+    Rename VOID and void_t to have HarfBuzz prefix
+
+    Fixes build on Windows.  Ouch!
+
+ src/hb-ot-layout-gsubgpos-private.hh | 22 +++++++++++-----------
+ src/hb-private.hh                   | 12 ++++++------
+ 2 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 4a350d0eb25db60d95638664c892d4c8dacf050b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 17:13:09 2012 -0500
+
+    [OTLayout] Reuse context in collect_glyphs() recursion
+
+ src/hb-ot-layout-gsubgpos-private.hh | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+commit 8303593ba1db06e402eab52df47f21f13049112d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 17:08:41 2012 -0500
+
+    Minor
+
+    Use pointers instead of references, in preparation for upcoming
+    change.
+
+ src/hb-ot-layout-gpos-table.hh       | 28 +++++++++++++-------------
+ src/hb-ot-layout-gsub-table.hh       | 30 ++++++++++++++--------------
+ src/hb-ot-layout-gsubgpos-private.hh | 38
+ ++++++++++++++++++------------------
+ 3 files changed, 48 insertions(+), 48 deletions(-)
+
+commit 1bcfa06d1173f219809542a7380ce77f1c907bec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 16:58:09 2012 -0500
+
+    [OTLayout] Don't recurse in collect_glyphs() for GPOS
+
+ src/hb-ot-layout-gpos-table.hh       | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit b5e04c7dc6b78e311d1a14f1f808fac76a64c889
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 15:57:02 2012 -0500
+
+    [ucdn] Match upstream changes
+
+ src/hb-ucdn/ucdn.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit a52f51b21635c626f6e5ccdba505c4df19bcff2c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 15:43:38 2012 -0500
+
+    0.9.8
+
+ NEWS        | 16 ++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+commit 7babfe5a7904c26060c5b8441ca1bf23e1444f35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 00:35:54 2012 +0200
+
+    Move object mutext into the user-data array
+
+    We are not using it for anything lse it seems.
+
+ src/hb-common.cc        | 12 ++----------
+ src/hb-object-private.hh | 24 ++++++++++--------------
+ 2 files changed, 12 insertions(+), 24 deletions(-)
+
+commit a1900114770952778563dd6f3bc79334b0ca8df5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Dec 4 00:29:35 2012 +0200
+
+    Remove unused functions
+
+ src/hb-object-private.hh | 20 --------------------
+ 1 file changed, 20 deletions(-)
+
+commit 88b7564183ae1cf59500b13c7e48756fe200c7cd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Dec 2 19:14:29 2012 +0200
+
+    "Update" to Unicode 6.2.0 tables
+
+    Nothing changed...
+
+ src/hb-ot-shape-complex-arabic-table.hh |  4 ++--
+ src/hb-ot-shape-complex-indic-table.hh  | 12 ++++++------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 4ab99fb8c363cfc6a4f5952e69a19757f0cab344
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 15:02:04 2012 +0200
+
+    Minor
+
+ src/hb-ot-layout.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6748b96d27477b35dd69129e55d861259d66bf9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 12:02:21 2012 +0200
+
+    Minor
+
+ src/hb-ot-layout.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 624933f67642997ee0a46d5acea285362e837142
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 11:46:35 2012 +0200
+
+    Add Persian test cases from Mehran Mehr
+
+ test/shaping/texts/in-tree/shaper-arabic/script-arabic/MANIFEST   | 1 +
+ .../in-tree/shaper-arabic/script-arabic/language-persian/MANIFEST | 1 +
+ .../shaper-arabic/script-arabic/language-persian/mehran.txt      |
+ 8 ++++++++
+ 3 files changed, 10 insertions(+)
+
+commit 0f3f5299047e3cfc4d1202fee83d484b871279ad
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 09:06:59 2012 +0200
+
+    Add test-size-params
+
+    Eventually this will become part of a yet-to-be-written hb-ot cmdline
+    tool.
+
+ src/Makefile.am        | 10 ++++-
+ src/test-size-params.cc | 98
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 107 insertions(+), 1 deletion(-)
+
+commit 8465a05a89742295d4b009a9b4442eb0a899fd80
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:46:43 2012 +0200
+
+    Fix hb_buffer_guess_segment_properties() for empty buffer
+
+    Was causing assertion failure in shape_plan().
+
+ src/hb-buffer.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e75943de803f571b7ad2cf2f777119753a209656
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:38:24 2012 +0200
+
+    [OTLayout] Fix collect_glyphs() recursion in ContextFormat3
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3038ae6adbb61e55d6c665dea0c5271e0c9f0ed8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:24:13 2012 +0200
+
+    [OTLayout] Minor
+
+ src/hb-ot-layout-gpos-table.hh | 4 ----
+ src/hb-ot-layout-gsub-table.hh | 4 ----
+ src/hb-ot-layout.cc           | 4 ++--
+ 3 files changed, 2 insertions(+), 10 deletions(-)
+
+commit 0dff11f6bfbda444a153ca75ff2b947f94e9b3c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:14:20 2012 +0200
+
+    [OTLayout] Look for any 'size' feature, not only in DFLT script
+
+    The old code doesn't work with all fonts, as Khaled has reported.
+
+ src/hb-ot-layout.cc | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+commit e9ad71dee845407da74ccacfbb53ad7ededf07fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:10:26 2012 +0200
+
+    [OTLayout] Rename hb_ot_layout_position_get_size() to
+    hb_ot_layout_get_size_params()
+
+ src/hb-ot-layout.cc | 4 ++--
+ src/hb-ot-layout.h  | 7 ++++---
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+commit f18ff5a84d9fe859c40a7a0c9a207cb40df0e84a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 30 08:07:06 2012 +0200
+
+    [OTLayout] Return correct value from recursion
+
+    Commit 4c4e8f0e754b79ac6190d21878eaaf0b790c7579 broke contextual
+    lookups
+    by making the recurse() function always return false.
+
+    Reported by Khaled.  Test case: لا in Amiri.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit f54cce3c6a0432268ce159dbe6c5c6b7f583b87a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Nov 26 14:02:31 2012 +0200
+
+    [OTLayout] Implement 'size' feature
+
+ src/hb-ot-layout-common-private.hh | 36
+ ++++++++++++++++++++++++++++++++++--
+ src/hb-ot-layout.cc               | 31 +++++++++++++++++++++++++++++++
+ src/hb-ot-layout.h                |  5 +++++
+ 3 files changed, 70 insertions(+), 2 deletions(-)
+
+commit 2dc1141d7d0a9f5818862b09d6b9cfe0a27f1fc1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 19:16:34 2012 -0500
+
+    [OTLayout] Remove operator() from ClassDef
+
+ src/hb-ot-layout-common-private.hh   | 2 --
+ src/hb-ot-layout-gpos-table.hh       | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 3 files changed, 6 insertions(+), 8 deletions(-)
+
+commit b67881b171a7cf865af58df146da52fc1e27b160
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 19:13:55 2012 -0500
+
+    [OTLayout] Remove operator() from Coverage
+
+ src/hb-ot-layout-common-private.hh   |  2 --
+ src/hb-ot-layout-gdef-table.hh       |  4 ++--
+ src/hb-ot-layout-gpos-table.hh       | 24 ++++++++++++------------
+ src/hb-ot-layout-gsub-table.hh       | 24 ++++++++++++------------
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++--------
+ 5 files changed, 34 insertions(+), 36 deletions(-)
+
+commit a88e7160217b9f44e4e5b4b814d0ca98c457ee40
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 02:31:02 2012 -0500
+
+    [OTLayout] Implement hb_ot_layout_collect_lookups()
+
+    Untested.
+
+ src/hb-ot-layout.cc | 97
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.h  | 4 +--
+ 2 files changed, 98 insertions(+), 3 deletions(-)
+
+commit 1ea375da446bf68f705a70ce4a480db9fb9d13f3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 02:05:52 2012 -0500
+
+    [OTLayout] Only collect output glyphs during recursion in
+    collect_glyphs()
+
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit f1b12781d279a73b5754afee31e930b5cd87aac6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 01:55:34 2012 -0500
+
+    [OTLayout] Implement ChainContext collect_glyphs()
+
+    All of collect_glyphs() complete and untested now.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 103
+ ++++++++++++++++++++++++++++++++---
+ 1 file changed, 96 insertions(+), 7 deletions(-)
+
+commit cdd756b9f40665a201f5c4e65a87b9a27c390601
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 01:38:41 2012 -0500
+
+    [OTLayout] Implement GPOS collect_glyphs()
+
+ src/hb-ot-layout-gpos-table.hh | 95
+ +++++++++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout.cc           |  9 ++--
+ 2 files changed, 99 insertions(+), 5 deletions(-)
+
+commit 4c4e8f0e754b79ac6190d21878eaaf0b790c7579
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 01:13:20 2012 -0500
+
+    [OTLayout] Reuse apply context for recursion
+
+ src/hb-ot-layout-gpos-table.hh       | 7 ++++++-
+ src/hb-ot-layout-gsub-table.hh       | 7 ++++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 3 files changed, 16 insertions(+), 6 deletions(-)
+
+commit 53a69f49e58ef4c4226958e0496fc22455ee6c87
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Nov 24 01:03:05 2012 -0500
+
+    [OTLayout] Remove unused members
+
+ src/hb-ot-layout-gsubgpos-private.hh | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit d0a5233785eb327c4080432f597fe470a1046af3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 18:54:59 2012 -0500
+
+    [OTLayout] Implement Context::collect_glyphs()
+
+ src/hb-ot-layout-gsubgpos-private.hh | 122
+ +++++++++++++++++++++++++++++++----
+ 1 file changed, 111 insertions(+), 11 deletions(-)
+
+commit 26514d51b6669f092d9ccb7523443a5ece74169a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 18:13:48 2012 -0500
+
+    [OTLayout] More collect_glyphs()
+
+ src/hb-ot-layout-gpos-table.hh       |  6 ++---
+ src/hb-ot-layout-gsub-table.hh       | 32 +++++++++++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 51
+ ++++++++++++++++++++++++++++++++----
+ 3 files changed, 71 insertions(+), 18 deletions(-)
+
+commit c6fb843f2a1c26322c6f4c85d1589f01a9e7a2ef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 18:04:08 2012 -0500
+
+    [OTLayout] Templatize process_recurse_func
+
+ src/hb-ot-layout-gpos-table.hh | 10 ++++++++++
+ src/hb-ot-layout-gsub-table.hh |  8 +++++---
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+commit 9b34677f362fb0ef5a7cb8a284a9e06d1a4cc03b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:55:40 2012 -0500
+
+    [OTLayout] Clean up closure() a bit
+
+ src/hb-ot-layout-gsub-table.hh       | 29 ++++++++++++++---------------
+ src/hb-ot-layout-gsubgpos-private.hh |  7 ++++---
+ src/hb-ot-layout.cc                 |  6 +++++-
+ 3 files changed, 23 insertions(+), 19 deletions(-)
+
+commit adf7758a27a11fb1a8a14a2673867589437d22a3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:32:00 2012 -0500
+
+    Improve debug log format in presence of templates
+
+ src/hb-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 2c53bd3c3ec4f81eff126c5bf84b7f2ddf2f0fef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:29:05 2012 -0500
+
+    [OTLayout] Start porting sanitize() to process()
+
+ src/hb-open-type-private.hh         | 12 +++++++++++-
+ src/hb-ot-layout-gsubgpos-private.hh |  8 ++++----
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+commit f48ec0e83432c038b50d9715a38ba1469e82e1e4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:23:41 2012 -0500
+
+    [OTLayout] Add process() tracing
+
+ src/hb-ot-layout-gpos-table.hh       | 60
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout-gsub-table.hh       | 51 +++++++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh | 17 +++++-----
+ 3 files changed, 72 insertions(+), 56 deletions(-)
+
+commit ed2e13594479c6ed7909401509962ea2f03f9a6e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:10:40 2012 -0500
+
+    [OTLayout] More Extension templatizing
+
+ src/hb-ot-layout-gpos-table.hh       | 11 -----------
+ src/hb-ot-layout-gsub-table.hh       | 11 -----------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++++++--
+ 3 files changed, 10 insertions(+), 24 deletions(-)
+
+commit 7dddd4e72bc35be962d93dc1b76c7e26c63aaa6d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 17:04:55 2012 -0500
+
+    [OTLayout] More templatizing Extension
+
+ src/hb-ot-layout-gpos-table.hh       |  7 +------
+ src/hb-ot-layout-gsub-table.hh       |  9 ++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 10 +++++++++-
+ 3 files changed, 12 insertions(+), 14 deletions(-)
+
+commit 653eeb26450053b731b46346606931f5ae88db72
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 16:57:36 2012 -0500
+
+    Make Extension a template
+
+ src/hb-ot-layout-gpos-table.hh       | 11 +----------
+ src/hb-ot-layout-gsub-table.hh       | 11 +----------
+ src/hb-ot-layout-gsubgpos-private.hh |  7 +++++++
+ 3 files changed, 9 insertions(+), 20 deletions(-)
+
+commit 08f1eede1bbc01ece2adf89847614a0670e50443
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 16:51:43 2012 -0500
+
+    Minor
+
+ src/hb-ot-layout-gpos-table.hh | 19 ++-----------------
+ src/hb-ot-layout-gsub-table.hh | 19 ++-----------------
+ 2 files changed, 4 insertions(+), 34 deletions(-)
+
+commit 2c9d6485a1f89c11f84e720d3c7978dc11a5039a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 16:49:19 2012 -0500
+
+    More tracing fixup
+
+ src/hb-private.hh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit a1733db1c6ff40aae71fa142a12b1fea7b53dd37
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 16:40:04 2012 -0500
+
+    [OTLayout] Start adding process() tracing
+
+ src/hb-ot-layout-gsubgpos-private.hh | 44
+ +++++++++++++++++++++++++++---------
+ src/hb-private.hh                   |  6 +++--
+ 2 files changed, 37 insertions(+), 13 deletions(-)
+
+commit 73c18ae1b982a4e65086afe5177afa79e721e2c0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 15:34:11 2012 -0500
+
+    Cleanup
+
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+commit be218c688cbb037a99c8c64bb835f3c980040c0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 15:32:14 2012 -0500
+
+    Pass this object to trace macros
+
+ src/hb-open-file-private.hh         |  10 +--
+ src/hb-open-type-private.hh         |  34 +++++-----
+ src/hb-ot-head-table.hh             |   2 +-
+ src/hb-ot-hhea-table.hh             |   2 +-
+ src/hb-ot-hmtx-table.hh             |   2 +-
+ src/hb-ot-layout-common-private.hh   |  36 +++++------
+ src/hb-ot-layout-gdef-table.hh       |  20 +++---
+ src/hb-ot-layout-gpos-table.hh       |  80 +++++++++++------------
+ src/hb-ot-layout-gsub-table.hh       | 122
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 100 ++++++++++++++--------------
+ src/hb-ot-maxp-table.hh             |   2 +-
+ src/hb-ot-name-table.hh             |   6 +-
+ 12 files changed, 208 insertions(+), 208 deletions(-)
+
+commit 902cc8aca0b3ff25eeee50b3a84d729e31731ef3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 15:06:59 2012 -0500
+
+    [OTLayout] Start unbreaking tracing
+
+ src/hb-open-type-private.hh         | 37
+ +++++++++++++++++++++---------------
+ src/hb-ot-layout-gsubgpos-private.hh | 37
+ +++++++++++++++++++++++++-----------
+ src/hb-private.hh                   | 30 +++++++++++++++++++----------
+ 3 files changed, 68 insertions(+), 36 deletions(-)
+
+commit dabe698fcbeb02911128b17aa8e3b2d864795960
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 14:21:35 2012 -0500
+
+    Minor
+
+ src/hb-open-type-private.hh         |  5 -----
+ src/hb-ot-layout-gsubgpos-private.hh | 10 ++++------
+ src/hb-private.hh                   | 27 +++++++++++++++++++++++++--
+ 3 files changed, 29 insertions(+), 13 deletions(-)
+
+commit c779d82b2fc801eec0d349a106c0e860448fcf4e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 14:07:24 2012 -0500
+
+    Fix warnings
+
+ src/hb-ot-layout-gpos-table.hh       | 2 --
+ src/hb-ot-layout-gsub-table.hh       | 8 +++-----
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ src/hb-private.hh                   | 2 +-
+ 4 files changed, 5 insertions(+), 9 deletions(-)
+
+commit 81822528efc63d867cb2343a8ff7af64fac1c70d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Nov 23 13:27:16 2012 -0500
+
+    Minor
+
+ src/hb-open-type-private.hh         | 6 ++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 3 ---
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 1d67ef980f35ae30d4f8975f65ee07b8cc5deeea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 22 16:47:53 2012 -0500
+
+    Move code around
+
+ src/hb-ot-layout-gsubgpos-private.hh | 44
+ ++++++++++++++++++------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+commit ec35a72a44301934b8f123ab2833f59d8c875a09
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 22 16:05:59 2012 -0500
+
+    [OTLayout] Port apply() operator to process() template
+
+ src/hb-ot-layout-gpos-table.hh       | 117
+ ++++-------------------------------
+ src/hb-ot-layout-gsub-table.hh       | 108
+ +++-----------------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  99 +++++++++++++----------------
+ src/hb-ot-layout.cc                 |   2 +-
+ 4 files changed, 65 insertions(+), 261 deletions(-)
+
+commit 2005fa5340fc528c32dc2af945ad2431964a47d2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 22 14:38:10 2012 -0500
+
+    [OTLayout] Port would_apply() and get_coverage() to process()
+    templates
+
+ src/hb-ot-layout-gpos-table.hh       | 175
+ +++++++++++--------------------
+ src/hb-ot-layout-gsub-table.hh       | 198
+ ++++++++++++-----------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  76 +++++---------
+ 3 files changed, 156 insertions(+), 293 deletions(-)
+
+commit 44fc237b53ebfbaf8a539de16ad735d2c6afc52b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 21 23:33:13 2012 -0500
+
+    [OTLayout] Port closure() to process() template
+
+ src/hb-ot-layout-gsub-table.hh       | 297
+ ++++++++---------------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 209 ++++++++++++------------
+ src/hb-ot-layout.cc                 |  10 +-
+ 3 files changed, 171 insertions(+), 345 deletions(-)
+
+commit 5be86b1bb4fbb37b50a1e2798df0c9a3a528b6b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 22 16:26:22 2012 -0500
+
+    [ucdn] Make data tables const!
+
+ src/hb-ucdn/ucdn.c          | 16 ++++++++--------
+ src/hb-ucdn/unicodedata_db.h | 28 ++++++++++++++--------------
+ 2 files changed, 22 insertions(+), 22 deletions(-)
+
+commit 7c5b7fe686c9163afe2f31fbeac6f8c8512f5516
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Nov 22 14:15:08 2012 -0500
+
+    Fix hb_shape_plan_get_shaper()
+
+ src/hb-shape-plan.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 4c8963576573483269b327c6465f6ec99f489e05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Nov 21 01:20:56 2012 -0500
+
+    0.9.7
+
+ NEWS        | 86
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 87 insertions(+), 1 deletion(-)
+
 commit ac064a2db2b7a010d99527e183145286215aea81
 Author: Behdad Esfahbod <behdad@behdad.org>
 commit ac064a2db2b7a010d99527e183145286215aea81
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Nov 21 01:14:19 2012 -0500
+Date:  Wed Nov 21 01:14:19 2012 -0500
 
     Rename hb_set_population() to hb_set_get_population()
 
 
     Rename hb_set_population() to hb_set_get_population()
 
- src/hb-set.cc |    2 +-
- src/hb-set.h  |    2 +-
+ src/hb-set.cc | 2 +-
+ src/hb-set.h  | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 16c914c2a6efeb6999054333985b1f711e33cf94
 Author: Behdad Esfahbod <behdad@behdad.org>
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 16c914c2a6efeb6999054333985b1f711e33cf94
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Nov 21 01:04:15 2012 -0500
+Date:  Wed Nov 21 01:04:15 2012 -0500
 
     [Indic] One more try at unbreaking Khmer fonts
 
     See comments and discussion on the list.
 
 
     [Indic] One more try at unbreaking Khmer fonts
 
     See comments and discussion on the list.
 
- src/hb-ot-shape-complex-private.hh |   16 ++++++++++------
- 1 files changed, 10 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
 
 commit e8cfdd7fa8d0fb66e0a261f3547e5824897e5131
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e8cfdd7fa8d0fb66e0a261f3547e5824897e5131
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 19:07:06 2012 -0800
+Date:  Fri Nov 16 19:07:06 2012 -0800
 
     Start implementing collect_glyphs() operation
 
     Not functional yet.
 
 
     Start implementing collect_glyphs() operation
 
     Not functional yet.
 
- src/hb-ot-layout-gsub-table.hh       |  185
- ++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gsubgpos-private.hh |   57 +++++++++++
- src/hb-ot-layout.cc                  |   29 ++++++
- src/hb-ot-layout.h                   |    4 +-
+ src/hb-ot-layout-gsub-table.hh       | 185
+ +++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.hh |  57 +++++++++++
+ src/hb-ot-layout.cc                 |  29 ++++++
+ src/hb-ot-layout.h                  |   4 +-
  4 files changed, 272 insertions(+), 3 deletions(-)
 
 commit 7d52e6601f0e695690cd168a288466746cf25300
 Author: Behdad Esfahbod <behdad@behdad.org>
  4 files changed, 272 insertions(+), 3 deletions(-)
 
 commit 7d52e6601f0e695690cd168a288466746cf25300
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 18:49:54 2012 -0800
+Date:  Fri Nov 16 18:49:54 2012 -0800
 
     Whitespace
 
 
     Whitespace
 
- src/hb-coretext.cc                   |   32 ++++------
- src/hb-icu-le.cc                     |    2 +-
- src/hb-old.cc                        |   10 ++--
- src/hb-open-file-private.hh          |    2 +-
- src/hb-open-type-private.hh          |    2 +-
- src/hb-ot-head-table.hh              |    2 +-
- src/hb-ot-hhea-table.hh              |    2 +-
- src/hb-ot-hmtx-table.hh              |    2 +-
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gdef-table.hh       |    2 +-
- src/hb-ot-layout-gpos-table.hh       |    2 +-
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-ot-maxp-table.hh              |    2 +-
- src/hb-ot-name-table.hh              |    2 +-
- src/hb-ot-shape-complex-default.cc   |  109
- +++++++++++++++++-----------------
- src/hb-tt-font.cc                    |    2 +-
+ src/hb-coretext.cc                  |  32 +++++-----
+ src/hb-icu-le.cc                    |   2 +-
+ src/hb-old.cc                       |  10 ++--
+ src/hb-open-file-private.hh         |   2 +-
+ src/hb-open-type-private.hh         |   2 +-
+ src/hb-ot-head-table.hh             |   2 +-
+ src/hb-ot-hhea-table.hh             |   2 +-
+ src/hb-ot-hmtx-table.hh             |   2 +-
+ src/hb-ot-layout-common-private.hh   |   2 +-
+ src/hb-ot-layout-gdef-table.hh       |   2 +-
+ src/hb-ot-layout-gpos-table.hh       |   2 +-
+ src/hb-ot-layout-gsub-table.hh       |   2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |   2 +-
+ src/hb-ot-maxp-table.hh             |   2 +-
+ src/hb-ot-name-table.hh             |   2 +-
+ src/hb-ot-shape-complex-default.cc   | 109
+ ++++++++++++++++++-----------------
+ src/hb-tt-font.cc                   |   2 +-
  17 files changed, 87 insertions(+), 92 deletions(-)
 
 commit 51bb498b7b07bff4a447405b72f09b68d07a3e95
 Author: Behdad Esfahbod <behdad@behdad.org>
  17 files changed, 87 insertions(+), 92 deletions(-)
 
 commit 51bb498b7b07bff4a447405b72f09b68d07a3e95
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 14:08:05 2012 -0800
+Date:  Fri Nov 16 14:08:05 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 89ca8eeb83fedde06727d386369a0a39d410f12b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 89ca8eeb83fedde06727d386369a0a39d410f12b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 13:53:40 2012 -0800
+Date:  Fri Nov 16 13:53:40 2012 -0800
 
     Implement hb_ot_layout_get_glyphs_in_class()
 
 
     Implement hb_ot_layout_get_glyphs_in_class()
 
- src/hb-ot-layout-common-private.hh |   24 ++++++++++++++++++++++++
- src/hb-ot-layout-gdef-table.hh     |    2 ++
- src/hb-ot-layout.cc                |    8 ++++++++
- src/hb-ot-layout.h                 |    5 ++---
+ src/hb-ot-layout-common-private.hh | 24 ++++++++++++++++++++++++
+ src/hb-ot-layout-gdef-table.hh     |  2 ++
+ src/hb-ot-layout.cc               |  8 ++++++++
+ src/hb-ot-layout.h                |  5 ++---
  4 files changed, 36 insertions(+), 3 deletions(-)
 
 commit 5a08ecf9200a6ac9b4ebb7ec5c13dcb42d8820ce
 Author: Behdad Esfahbod <behdad@behdad.org>
  4 files changed, 36 insertions(+), 3 deletions(-)
 
 commit 5a08ecf9200a6ac9b4ebb7ec5c13dcb42d8820ce
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 13:34:29 2012 -0800
+Date:  Fri Nov 16 13:34:29 2012 -0800
 
     Implement hb_ot_layout_get_glyph_class()
 
 
     Implement hb_ot_layout_get_glyph_class()
 
- src/hb-ot-layout-gdef-table.hh       |   10 +++++-----
- src/hb-ot-layout-gpos-table.hh       |    8 ++++----
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |   10 +++++-----
- src/hb-ot-layout-private.hh          |   10 +++++++++-
- src/hb-ot-layout.cc                  |    6 ++++++
- src/hb-ot-layout.h                   |   14 ++++++--------
- src/hb-ot-shape.cc                   |    4 ++--
+ src/hb-ot-layout-gdef-table.hh       | 10 +++++-----
+ src/hb-ot-layout-gpos-table.hh       |  8 ++++----
+ src/hb-ot-layout-gsub-table.hh       |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 10 +++++-----
+ src/hb-ot-layout-private.hh         | 10 +++++++++-
+ src/hb-ot-layout.cc                 |  6 ++++++
+ src/hb-ot-layout.h                  | 14 ++++++--------
+ src/hb-ot-shape.cc                  |  4 ++--
  8 files changed, 38 insertions(+), 26 deletions(-)
 
 commit f9edd5d56bd219625f5b16b23eac53b4c4a8b194
 Author: Behdad Esfahbod <behdad@behdad.org>
  8 files changed, 38 insertions(+), 26 deletions(-)
 
 commit f9edd5d56bd219625f5b16b23eac53b4c4a8b194
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 13:23:37 2012 -0800
+Date:  Fri Nov 16 13:23:37 2012 -0800
 
     Implement hb_shape_plan_get_shaper()
 
     Untested.
 
 
     Implement hb_shape_plan_get_shaper()
 
     Untested.
 
- src/hb-shape-plan-private.hh |    1 +
- src/hb-shape-plan.cc         |    7 +++++++
- src/hb-shape-plan.h          |    4 +---
+ src/hb-shape-plan-private.hh | 1 +
+ src/hb-shape-plan.cc        | 7 +++++++
+ src/hb-shape-plan.h         | 4 +---
  3 files changed, 9 insertions(+), 3 deletions(-)
 
 commit 43b653150081a2f9dc6b7481229ac4cd952575dc
 Author: Behdad Esfahbod <behdad@behdad.org>
  3 files changed, 9 insertions(+), 3 deletions(-)
 
 commit 43b653150081a2f9dc6b7481229ac4cd952575dc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 13:12:35 2012 -0800
+Date:  Fri Nov 16 13:12:35 2012 -0800
 
     [Indic] Another try to unbreak Sinhala split matras
 
     Just read the comments...
 
 
     [Indic] Another try to unbreak Sinhala split matras
 
     Just read the comments...
 
- src/hb-ot-shape-complex-indic.cc                   |   43
- ++++++++++++++++----
- .../indic/script-sinhala/misc/MANIFEST             |    1 +
- .../indic/script-sinhala/misc/split-matras.txt     |    4 ++
+ src/hb-ot-shape-complex-indic.cc                  | 43
+ ++++++++++++++++++----
+ .../indic/script-sinhala/misc/MANIFEST                    |  1 +
+ .../indic/script-sinhala/misc/split-matras.txt     |  4 ++
  3 files changed, 40 insertions(+), 8 deletions(-)
 
 commit 977f1740ace730dcdff8221a17f2a592c2ec7c74
 Author: Behdad Esfahbod <behdad@behdad.org>
  3 files changed, 40 insertions(+), 8 deletions(-)
 
 commit 977f1740ace730dcdff8221a17f2a592c2ec7c74
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 13:10:07 2012 -0800
+Date:  Fri Nov 16 13:10:07 2012 -0800
 
     Unbreak tests
 
 
     Unbreak tests
 
- src/hb-ot-layout.h  |   14 +++++++-------
- src/hb-shape-plan.h |    2 +-
+ src/hb-ot-layout.h  | 14 +++++++-------
+ src/hb-shape-plan.h | 2 +-
  2 files changed, 8 insertions(+), 8 deletions(-)
 
 commit eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4
 Author: Behdad Esfahbod <behdad@behdad.org>
  2 files changed, 8 insertions(+), 8 deletions(-)
 
 commit eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Nov 16 12:39:23 2012 -0800
+Date:  Fri Nov 16 12:39:23 2012 -0800
 
     Plumbing to get shape plan and font into complex decompose function
 
     So we can handle Sinhala split matras smartly...  Coming soon.
 
 
     Plumbing to get shape plan and font into complex decompose function
 
     So we can handle Sinhala split matras smartly...  Coming soon.
 
- src/hb-ot-shape-complex-default.cc   |    6 ++--
- src/hb-ot-shape-complex-indic.cc     |   14 ++++----
- src/hb-ot-shape-complex-private.hh   |   16 +++++-----
- src/hb-ot-shape-normalize-private.hh |   22 ++++++++++++-
- src/hb-ot-shape-normalize.cc         |   56
- +++++++++++++--------------------
- src/hb-ot-shape.cc                   |    2 +-
+ src/hb-ot-shape-complex-default.cc   |  6 ++--
+ src/hb-ot-shape-complex-indic.cc     | 14 ++++-----
+ src/hb-ot-shape-complex-private.hh   | 16 +++++------
+ src/hb-ot-shape-normalize-private.hh | 22 ++++++++++++--
+ src/hb-ot-shape-normalize.cc        | 56
+ ++++++++++++++----------------------
+ src/hb-ot-shape.cc                  |  2 +-
  6 files changed, 61 insertions(+), 55 deletions(-)
 
 commit 3f82f8ff07a9d16a7c047129658c1bbedfdb5436
 Author: Behdad Esfahbod <behdad@behdad.org>
  6 files changed, 61 insertions(+), 55 deletions(-)
 
 commit 3f82f8ff07a9d16a7c047129658c1bbedfdb5436
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Nov 15 18:45:31 2012 -0800
+Date:  Thu Nov 15 18:45:31 2012 -0800
 
     Rename hb_buffer_guess_properties() to
     hb_buffer_guess_segment_properties()
 
 
     Rename hb_buffer_guess_properties() to
     hb_buffer_guess_segment_properties()
 
- src/hb-buffer-private.hh |    2 +-
- src/hb-buffer.cc         |    6 +++---
- src/hb-buffer.h          |    2 +-
- src/hb-fallback-shape.cc |    2 +-
- src/hb-ot-shape.cc       |    2 +-
- src/hb-shape.cc          |    2 +-
+ src/hb-buffer-private.hh | 2 +-
+ src/hb-buffer.cc        | 6 +++---
+ src/hb-buffer.h         | 2 +-
+ src/hb-fallback-shape.cc | 2 +-
+ src/hb-ot-shape.cc      | 2 +-
+ src/hb-shape.cc         | 2 +-
  6 files changed, 8 insertions(+), 8 deletions(-)
 
 commit f30641038ba96e83950729b1bd9d86d2e98e46c5
 Author: Behdad Esfahbod <behdad@behdad.org>
  6 files changed, 8 insertions(+), 8 deletions(-)
 
 commit f30641038ba96e83950729b1bd9d86d2e98e46c5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Nov 15 18:39:46 2012 -0800
+Date:  Thu Nov 15 18:39:46 2012 -0800
 
     Bunch of independent changes (ouch)
 
 
     Bunch of independent changes (ouch)
 
@@ -208,25 +11641,25 @@ Date:   Thu Nov 15 18:39:46 2012 -0800
     And a bunch of prototyped but not implemented stuff.  Coming soon.
     (Tests fail because of the prototypes right now.)
 
     And a bunch of prototyped but not implemented stuff.  Coming soon.
     (Tests fail because of the prototypes right now.)
 
- src/Makefile.am             |    2 +-
- src/hb-buffer-private.hh     |   37 --------------
- src/hb-buffer.cc            |   45 +++++++++++++++++-
- src/hb-buffer.h             |   47 ++++++++++++++++--
- src/hb-ot-layout-private.hh  |    8 ---
- src/hb-ot-layout.cc         |   12 ++--
- src/hb-ot-layout.h          |  108
- +++++++++++++++++++++++++++++++++++++++--
- src/hb-ot-map-private.hh     |    2 +-
- src/hb-ot-map.cc            |   15 +++---
- src/hb-ot-shape-private.hh   |   11 ++++-
- src/hb-ot-shape.cc          |   52 ++++++++++++++------
- src/hb-ot.h                 |    1 +
- src/hb-shape-plan-private.hh |    3 +-
- src/hb-shape-plan.cc        |   23 +++++++--
- src/hb-shape-plan.h         |   50 +++++++++++++-------
- src/hb-shaper-private.hh     |    2 -
- src/hb-shaper.cc            |    2 +-
- src/hb.h                    |    1 +
+ src/Makefile.am             |   2 +-
+ src/hb-buffer-private.hh     |  37 ---------------
+ src/hb-buffer.cc            |  45 +++++++++++++++++-
+ src/hb-buffer.h             |  47 +++++++++++++++++--
+ src/hb-ot-layout-private.hh  |   8 ----
+ src/hb-ot-layout.cc         |  12 ++---
+ src/hb-ot-layout.h          | 108
+ ++++++++++++++++++++++++++++++++++++++++---
+ src/hb-ot-map-private.hh     |   2 +-
+ src/hb-ot-map.cc            |  15 +++---
+ src/hb-ot-shape-private.hh   |  11 ++++-
+ src/hb-ot-shape.cc          |  52 ++++++++++++++-------
+ src/hb-ot.h                 |   1 +
+ src/hb-shape-plan-private.hh |   3 +-
+ src/hb-shape-plan.cc        |  23 +++++++--
+ src/hb-shape-plan.h         |  50 +++++++++++++-------
+ src/hb-shaper-private.hh     |   2 -
+ src/hb-shaper.cc            |   2 +-
+ src/hb.h                    |   1 +
  18 files changed, 304 insertions(+), 117 deletions(-)
 
 commit 75da37dcb17aacc0be6bb006683a84aa31155938
  18 files changed, 304 insertions(+), 117 deletions(-)
 
 commit 75da37dcb17aacc0be6bb006683a84aa31155938
@@ -235,8 +11668,8 @@ Date:     Thu Nov 15 18:39:23 2012 -0800
 
     Minor
 
 
     Minor
 
- util/hb-ot-shape-closure.cc |  24 ++++++++++++------------
- 1 files changed, 12 insertions(+), 12 deletions(-)
+ util/hb-ot-shape-closure.cc | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
 commit e05a999495e6575f7cebd7f35db087d964f11ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e05a999495e6575f7cebd7f35db087d964f11ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -244,10 +11677,10 @@ Date:   Thu Nov 15 16:23:21 2012 -0800
 
     Add hb_face_[sg]et_glyph_count()
 
 
     Add hb_face_[sg]et_glyph_count()
 
- src/hb-font-private.hh |    9 +++++++++
- src/hb-font.cc                |   29 ++++++++++++++++++++++++++++-
- src/hb-font.h         |    7 +++++++
- 3 files changed, 44 insertions(+), 1 deletions(-)
+ src/hb-font-private.hh |  9 +++++++++
+ src/hb-font.cc                | 29 ++++++++++++++++++++++++++++-
+ src/hb-font.h         |  7 +++++++
+ 3 files changed, 44 insertions(+), 1 deletion(-)
 
 commit aec89de5641fbe1c3031d63dd5f40ec99bf2a538
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aec89de5641fbe1c3031d63dd5f40ec99bf2a538
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -255,12 +11688,12 @@ Date:   Thu Nov 15 16:15:42 2012 -0800
 
     Add / modify set API a bit
 
 
     Add / modify set API a bit
 
- src/hb-ot-shape.cc         |    2 +-
- src/hb-set-private.hh      |   35 ++++++++++++++++-
- src/hb-set.cc              |   86
- +++++++++++++++++++++++++++++--------------
- src/hb-set.h               |   55 ++++++++++++++++++---------
- util/hb-ot-shape-closure.cc |   2 +-
+ src/hb-ot-shape.cc         |  2 +-
+ src/hb-set-private.hh      | 35 ++++++++++++++++--
+ src/hb-set.cc              | 86
+ ++++++++++++++++++++++++++++++---------------
+ src/hb-set.h               | 55 +++++++++++++++++++----------
+ util/hb-ot-shape-closure.cc | 2 +-
  5 files changed, 128 insertions(+), 52 deletions(-)
 
 commit c54599ad269380c7aa28d885fcfd660fc2c10a7b
  5 files changed, 128 insertions(+), 52 deletions(-)
 
 commit c54599ad269380c7aa28d885fcfd660fc2c10a7b
@@ -269,8 +11702,8 @@ Date:     Thu Nov 15 16:14:23 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-buffer.cc |    2 +-
- src/hb-buffer.h  |    8 +++-----
+ src/hb-buffer.cc | 2 +-
+ src/hb-buffer.h  | 8 +++-----
  2 files changed, 4 insertions(+), 6 deletions(-)
 
 commit d1aa143ca434fe272de21d2002768c83387b583b
  2 files changed, 4 insertions(+), 6 deletions(-)
 
 commit d1aa143ca434fe272de21d2002768c83387b583b
@@ -281,8 +11714,8 @@ Date:     Thu Nov 15 15:38:08 2012 -0800
 
     WinXP doesn't include it.
 
 
     WinXP doesn't include it.
 
- src/hb-ot-shape-complex-thai.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-thai.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 362a990b2246f5448ecb9d600761f710aea7d42d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 362a990b2246f5448ecb9d600761f710aea7d42d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -293,12 +11726,12 @@ Date:   Thu Nov 15 14:57:31 2012 -0800
 
     To match upcoming API.
 
 
     To match upcoming API.
 
- src/hb-ot-layout-private.hh     |    2 +-
- src/hb-ot-layout.cc             |    8 ++++----
- src/hb-ot-layout.h              |    4 ++--
- src/hb-ot-map.cc                |    2 +-
- src/hb-ot-shape-complex-indic.cc |    2 +-
- src/test-would-substitute.cc    |    2 +-
+ src/hb-ot-layout-private.hh     | 2 +-
+ src/hb-ot-layout.cc             | 8 ++++----
+ src/hb-ot-layout.h              | 4 ++--
+ src/hb-ot-map.cc                | 2 +-
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ src/test-would-substitute.cc    | 2 +-
  6 files changed, 10 insertions(+), 10 deletions(-)
 
 commit a4bef84e375b090c1bc7e4221b8e0ee435dfcbba
  6 files changed, 10 insertions(+), 10 deletions(-)
 
 commit a4bef84e375b090c1bc7e4221b8e0ee435dfcbba
@@ -309,8 +11742,8 @@ Date:     Thu Nov 15 13:29:51 2012 -0800
 
     And list supported formats.
 
 
     And list supported formats.
 
- util/hb-shape.cc |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ util/hb-shape.cc | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 3cec819d39e45470d03085bb6fa132882cc85943
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3cec819d39e45470d03085bb6fa132882cc85943
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -318,8 +11751,8 @@ Date:     Thu Nov 15 13:15:39 2012 -0800
 
     Make the OT shaper default, even if CoreText or Uniscribe is enabled
 
 
     Make the OT shaper default, even if CoreText or Uniscribe is enabled
 
- src/hb-shaper-list.hh |   15 ++++++++-------
- 1 files changed, 8 insertions(+), 7 deletions(-)
+ src/hb-shaper-list.hh | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
 
 commit 072ae7a982bf640804eee0b41525e7c328806bf5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 072ae7a982bf640804eee0b41525e7c328806bf5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -327,9 +11760,9 @@ Date:     Thu Nov 15 13:14:12 2012 -0800
 
     Add hb_buffer_serialize_list_formats()
 
 
     Add hb_buffer_serialize_list_formats()
 
- src/hb-buffer.cc |    6 ++++++
- src/hb-buffer.h  |    3 +++
- 2 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 6 ++++++
+ src/hb-buffer.h  | 3 +++
+ 2 files changed, 9 insertions(+)
 
 commit f9edf1672511c3bcc3796cc79578ffea43b2bda1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f9edf1672511c3bcc3796cc79578ffea43b2bda1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -343,12 +11776,12 @@ Date:   Thu Nov 15 12:14:09 2012 -0800
 
     Deserialization API is added, but not implemented yet.
 
 
     Deserialization API is added, but not implemented yet.
 
- src/hb-buffer.cc |  222
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-buffer.h  |   42 ++++++++++
- util/hb-shape.cc |   21 +++++-
- util/options.cc  |   57 ++++----------
- util/options.hh  |    7 +-
+ src/hb-buffer.cc | 222
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h  |  42 +++++++++++
+ util/hb-shape.cc |  21 +++++-
+ util/options.cc  |  57 +++++---------
+ util/options.hh  |   7 +-
  5 files changed, 304 insertions(+), 45 deletions(-)
 
 commit fd0de881f4fc004da6f36d50a91d0e62f8eb4d8c
  5 files changed, 304 insertions(+), 45 deletions(-)
 
 commit fd0de881f4fc004da6f36d50a91d0e62f8eb4d8c
@@ -359,8 +11792,8 @@ Date:     Thu Nov 15 10:47:14 2012 -0800
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=810823
 
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=810823
 
- src/hb-open-type-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit f41dc2d35b23220d59d38990bb66f1cbd66a55b3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f41dc2d35b23220d59d38990bb66f1cbd66a55b3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -371,8 +11804,8 @@ Date:     Thu Nov 15 10:36:43 2012 -0800
     Chromium Issue 158998:     Conditional jump in harfbuzz-ng
     http://code.google.com/p/chromium/issues/detail?id=158998
 
     Chromium Issue 158998:     Conditional jump in harfbuzz-ng
     http://code.google.com/p/chromium/issues/detail?id=158998
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1eb3e94fe99a072ce422e60ac4d4d89ef489b08a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1eb3e94fe99a072ce422e60ac4d4d89ef489b08a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -387,9 +11820,9 @@ Date:     Wed Nov 14 17:25:03 2012 -0800
     Our output now matches Uniscribe for old fonts (eg. XP Tahoma) with no
     Thai GSUB table.
 
     Our output now matches Uniscribe for old fonts (eg. XP Tahoma) with no
     Thai GSUB table.
 
- src/hb-ot-shape-complex-thai.cc |  217
- +++++++++++++++++++++++++++++++++++++++
- 1 files changed, 217 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-thai.cc | 217
+ ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 217 insertions(+)
 
 commit 851784f8372004e0a40b698c0cdc2d7db8629aa2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 851784f8372004e0a40b698c0cdc2d7db8629aa2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -397,11 +11830,11 @@ Date:   Wed Nov 14 16:24:05 2012 -0800
 
     Improve shaper selection
 
 
     Improve shaper selection
 
- src/hb-ot-map-private.hh          |    8 ++++----
- src/hb-ot-map.cc                  |    6 ++++--
- src/hb-ot-shape-complex-indic.cc   |   2 +-
- src/hb-ot-shape-complex-private.hh |  13 ++++++++-----
- src/hb-ot-shape-complex-thai.cc    |  24 ++++++++++++++++++++++--
+ src/hb-ot-map-private.hh          |  8 ++++----
+ src/hb-ot-map.cc                  |  6 ++++--
+ src/hb-ot-shape-complex-indic.cc   |  2 +-
+ src/hb-ot-shape-complex-private.hh | 13 ++++++++-----
+ src/hb-ot-shape-complex-thai.cc    | 24 ++++++++++++++++++++++--
  5 files changed, 39 insertions(+), 14 deletions(-)
 
 commit f3584d3a3a627e38dfd7769975a670db340d2a48
  5 files changed, 39 insertions(+), 14 deletions(-)
 
 commit f3584d3a3a627e38dfd7769975a670db340d2a48
@@ -410,9 +11843,10 @@ Date:    Wed Nov 14 15:55:17 2012 -0800
 
     Add test cases for Thai PUA shaping
 
 
     Add test cases for Thai PUA shaping
 
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
- .../shaper-thai/script-thai/misc/pua-shaping.txt   |  11 +++++++++++
- 2 files changed, 12 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-thai/script-thai/misc/MANIFEST       |  1 +
+ .../in-tree/shaper-thai/script-thai/misc/pua-shaping.txt      |
+ 11 +++++++++++
+ 2 files changed, 12 insertions(+)
 
 commit 43f04a7456419153cb03e610a825056a47824780
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 43f04a7456419153cb03e610a825056a47824780
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -420,11 +11854,11 @@ Date:   Wed Nov 14 15:51:54 2012 -0800
 
     Move Thai shaper into a separate file
 
 
     Move Thai shaper into a separate file
 
- src/Makefile.am                   |    3 +-
- src/hb-ot-shape-complex-default.cc |  225 ++++++++++++++++++++++++
- src/hb-ot-shape-complex-misc.cc    |  339
- ------------------------------------
- src/hb-ot-shape-complex-thai.cc    |  141 +++++++++++++++
+ src/Makefile.am                   |   3 +-
+ src/hb-ot-shape-complex-default.cc | 225 ++++++++++++++++++++++++
+ src/hb-ot-shape-complex-misc.cc    | 339
+ -------------------------------------
+ src/hb-ot-shape-complex-thai.cc    | 141 +++++++++++++++
  4 files changed, 368 insertions(+), 340 deletions(-)
 
 commit ba82325b7a6311b787ae47f41a56964e2f2cba9f
  4 files changed, 368 insertions(+), 340 deletions(-)
 
 commit ba82325b7a6311b787ae47f41a56964e2f2cba9f
@@ -433,8 +11867,8 @@ Date:     Wed Nov 14 15:36:53 2012 -0800
 
     Add note re 'Phags-pa letter U+A872, which is Joining_Type=L
 
 
     Add note re 'Phags-pa letter U+A872, which is Joining_Type=L
 
- src/hb-ot-shape-complex-arabic.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit d469fadce8290c7dda559c5927dd19df65f91c1a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d469fadce8290c7dda559c5927dd19df65f91c1a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -442,8 +11876,8 @@ Date:     Wed Nov 14 15:07:36 2012 -0800
 
     [Indic] Exchange abort() for assert()
 
 
     [Indic] Exchange abort() for assert()
 
- src/hb-ot-shape-complex-indic.cc |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 0f80a89de99293ddbf0b8b815fe360677d057e38
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0f80a89de99293ddbf0b8b815fe360677d057e38
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -453,8 +11887,8 @@ Date:     Wed Nov 14 15:05:19 2012 -0800
 
     It's a simple, right-to-left, script.
 
 
     It's a simple, right-to-left, script.
 
- src/hb-ot-shape-complex-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e67072bb179a5c17db04075de74215597fb43c82
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e67072bb179a5c17db04075de74215597fb43c82
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -462,8 +11896,8 @@ Date:     Wed Nov 14 15:00:53 2012 -0800
 
     [Indic] Handle overstruck matra position
 
 
     [Indic] Handle overstruck matra position
 
- src/hb-ot-shape-complex-indic-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 7e99e4f0740e47efda5882604954cb7d12700a4b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7e99e4f0740e47efda5882604954cb7d12700a4b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -473,8 +11907,8 @@ Date:     Wed Nov 14 14:09:46 2012 -0800
 
     Lao marks are center-aligned, unlike Thai ones.
 
 
     Lao marks are center-aligned, unlike Thai ones.
 
- src/hb-ot-shape-fallback.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-fallback.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 865745b5b87236651f5663cae3461db9cb505eed
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 865745b5b87236651f5663cae3461db9cb505eed
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -482,11 +11916,11 @@ Date:   Wed Nov 14 13:48:26 2012 -0800
 
     Don't do fallback positioning for Indic and Thai shapers
 
 
     Don't do fallback positioning for Indic and Thai shapers
 
- src/hb-ot-shape-complex-arabic.cc  |   1 +
- src/hb-ot-shape-complex-indic.cc   |   1 +
- src/hb-ot-shape-complex-misc.cc    |   2 ++
- src/hb-ot-shape-complex-private.hh |   1 +
- src/hb-ot-shape.cc                |   20 +++++---------------
+ src/hb-ot-shape-complex-arabic.cc  |  1 +
+ src/hb-ot-shape-complex-indic.cc   |  1 +
+ src/hb-ot-shape-complex-misc.cc    |  2 ++
+ src/hb-ot-shape-complex-private.hh |  1 +
+ src/hb-ot-shape.cc                | 20 +++++---------------
  5 files changed, 10 insertions(+), 15 deletions(-)
 
 commit 981748cb2e9b48b77177b19ec1f972cab7afda89
  5 files changed, 10 insertions(+), 15 deletions(-)
 
 commit 981748cb2e9b48b77177b19ec1f972cab7afda89
@@ -498,8 +11932,8 @@ Date:     Wed Nov 14 13:38:16 2012 -0800
     Seems to produce more coherent results than trying the Indic shaper on
     them.  I'm looking at you, Kh-* fonts...
 
     Seems to produce more coherent results than trying the Indic shaper on
     them.  I'm looking at you, Kh-* fonts...
 
- src/hb-ot-shape-complex-private.hh |  21 +++++++++++++++++----
- 1 files changed, 17 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
 
 commit 6b19fa48621dbf36d471d5005f6ae20df350954f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b19fa48621dbf36d471d5005f6ae20df350954f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -507,8 +11941,8 @@ Date:     Wed Nov 14 11:38:50 2012 -0800
 
     Adjust diff rule for the new hb-shape output format
 
 
     Adjust diff rule for the new hb-shape output format
 
- test/shaping/hb_test_tools.py |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/shaping/hb_test_tools.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit dde5506fd963e3cec27c3389bb1fc092f86d1e06
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dde5506fd963e3cec27c3389bb1fc092f86d1e06
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -527,8 +11961,8 @@ Date:     Wed Nov 14 11:37:04 2012 -0800
     compatibility
     mode.  We now do it all the time.
 
     compatibility
     mode.  We now do it all the time.
 
- src/hb-ot-shape-complex-indic.cc |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 82c4d9880a2cd321f6426888511c5f0318f96ad5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 82c4d9880a2cd321f6426888511c5f0318f96ad5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -536,8 +11970,9 @@ Date:     Wed Nov 14 10:56:02 2012 -0800
 
     Add Sinhala test case for split matra U+0DDA
 
 
     Add Sinhala test case for split matra U+0DDA
 
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit d04b12853167d756a8cccaf4154f0fd894bce6de
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d04b12853167d756a8cccaf4154f0fd894bce6de
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -545,8 +11980,8 @@ Date:     Wed Nov 14 10:53:10 2012 -0800
 
     Fix test
 
 
     Fix test
 
- test/api/test-buffer.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/api/test-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 92f9bfed42f720c1fd78e795845542661aaf4f8a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 92f9bfed42f720c1fd78e795845542661aaf4f8a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -554,8 +11989,8 @@ Date:     Tue Nov 13 16:50:45 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-buffer.h |   26 ++++++++++++++------------
- 1 files changed, 14 insertions(+), 12 deletions(-)
+ src/hb-buffer.h | 26 ++++++++++++++------------
+ 1 file changed, 14 insertions(+), 12 deletions(-)
 
 commit 66ac2ff32e24f0d5658ca172147613081a133847
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 66ac2ff32e24f0d5658ca172147613081a133847
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -566,9 +12001,9 @@ Date:     Tue Nov 13 16:26:32 2012 -0800
     I don't expect anybody using hb_buffer_add(), so this shouldn't break
     anyone's code.
 
     I don't expect anybody using hb_buffer_add(), so this shouldn't break
     anyone's code.
 
- src/hb-buffer-private.hh |    1 -
- src/hb-buffer.cc        |    8 +++-----
- src/hb-buffer.h         |    1 -
+ src/hb-buffer-private.hh | 1 -
+ src/hb-buffer.cc        | 8 +++-----
+ src/hb-buffer.h         | 1 -
  3 files changed, 3 insertions(+), 7 deletions(-)
 
 commit 407f80d62589774f845ef1a6a0a7d841b09d57c6
  3 files changed, 3 insertions(+), 7 deletions(-)
 
 commit 407f80d62589774f845ef1a6a0a7d841b09d57c6
@@ -577,9 +12012,9 @@ Date:     Tue Nov 13 15:33:27 2012 -0800
 
     [util] Add --bot / --eot / --preserve-default-ignorables
 
 
     [util] Add --bot / --eot / --preserve-default-ignorables
 
- util/options.cc |    3 +++
- util/options.hh |   12 ++++++++++++
- 2 files changed, 15 insertions(+), 0 deletions(-)
+ util/options.cc |  3 +++
+ util/options.hh | 12 ++++++++++++
+ 2 files changed, 15 insertions(+)
 
 commit 78d41d8d69142ae95928b51215c0c0c5e3f5b3f0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 78d41d8d69142ae95928b51215c0c0c5e3f5b3f0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -587,8 +12022,8 @@ Date:     Tue Nov 13 15:15:09 2012 -0800
 
     Minor
 
 
     Minor
 
- util/options.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 321f73c16efa0730c96e001d65268f4927a0f735
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 321f73c16efa0730c96e001d65268f4927a0f735
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -598,11 +12033,11 @@ Date:   Tue Nov 13 15:12:24 2012 -0800
 
     Use with Arabic, for example, to see the effect on joining.
 
 
     Use with Arabic, for example, to see the effect on joining.
 
- util/hb-ot-shape-closure.cc |   4 +++-
- util/main-font-text.hh      |   2 +-
- util/options.cc            |    2 ++
- util/options.hh            |   18 ++++++++++++++++--
- util/shape-consumer.hh      |   6 ++++--
+ util/hb-ot-shape-closure.cc | 4 +++-
+ util/main-font-text.hh      | 2 +-
+ util/options.cc            |  2 ++
+ util/options.hh            | 18 ++++++++++++++++--
+ util/shape-consumer.hh      | 6 ++++--
  5 files changed, 26 insertions(+), 6 deletions(-)
 
 commit e13f8d280bafc6a6b6e31e2eee587660b8333c56
  5 files changed, 26 insertions(+), 6 deletions(-)
 
 commit e13f8d280bafc6a6b6e31e2eee587660b8333c56
@@ -613,8 +12048,8 @@ Date:     Tue Nov 13 15:12:06 2012 -0800
 
     Ouch!
 
 
     Ouch!
 
- src/hb-utf-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-utf-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 5669a6cf418f3a8b9281c36e9d662d843be80433
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5669a6cf418f3a8b9281c36e9d662d843be80433
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -624,8 +12059,8 @@ Date:     Tue Nov 13 15:11:51 2012 -0800
 
     Ouch!
 
 
     Ouch!
 
- src/hb-ot-shape-complex-arabic.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0c7df2222862122ebbdc8665a21d6771ef5e0252
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0c7df2222862122ebbdc8665a21d6771ef5e0252
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -652,13 +12087,13 @@ Date:   Tue Nov 13 14:42:35 2012 -0800
     like
     ZWNJ/ZWJ/...
 
     like
     ZWNJ/ZWJ/...
 
- src/hb-buffer-private.hh         |    1 +
- src/hb-buffer.cc                 |   18 ++++++++++++++++
- src/hb-buffer.h                  |   13 ++++++++++++
- src/hb-ot-shape-complex-arabic.cc |   40
- +++++++++++++++++++-----------------
- src/hb-ot-shape.cc               |    9 +++++--
- test/api/test-buffer.c                   |    9 ++++++++
+ src/hb-buffer-private.hh         |  1 +
+ src/hb-buffer.cc                 | 18 ++++++++++++++++++
+ src/hb-buffer.h                  | 13 +++++++++++++
+ src/hb-ot-shape-complex-arabic.cc | 40
+ ++++++++++++++++++++-------------------
+ src/hb-ot-shape.cc               |  9 ++++++---
+ test/api/test-buffer.c                   |  9 +++++++++
  6 files changed, 68 insertions(+), 22 deletions(-)
 
 commit 1c7e55511a870f2689680ca8f977e00879f3b3e3
  6 files changed, 68 insertions(+), 22 deletions(-)
 
 commit 1c7e55511a870f2689680ca8f977e00879f3b3e3
@@ -669,8 +12104,8 @@ Date:     Tue Nov 13 14:42:22 2012 -0800
 
     Ouch
 
 
     Ouch
 
- src/hb-shape.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c8d4f8b0fe56ce909e3ca07f8a30cb4fb940868b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c8d4f8b0fe56ce909e3ca07f8a30cb4fb940868b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -678,8 +12113,8 @@ Date:     Tue Nov 13 14:10:19 2012 -0800
 
     Minor
 
 
     Minor
 
- test/api/test-object.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/api/test-object.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 82ecaff736e245e117d70b6ec1497508c6eb08d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 82ecaff736e245e117d70b6ec1497508c6eb08d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -689,11 +12124,11 @@ Date:   Tue Nov 13 13:57:52 2012 -0800
 
     Which is like _reset(), but does NOT clear unicode-funcs.
 
 
     Which is like _reset(), but does NOT clear unicode-funcs.
 
- src/hb-buffer-private.hh |    1 +
- src/hb-buffer.cc        |   15 +++++++++++++++
- src/hb-buffer.h         |    4 ++++
- test/api/test-buffer.c   |   22 +++++++++++++++++++++-
- 4 files changed, 41 insertions(+), 1 deletions(-)
+ src/hb-buffer-private.hh |  1 +
+ src/hb-buffer.cc        | 15 +++++++++++++++
+ src/hb-buffer.h         |  4 ++++
+ test/api/test-buffer.c   | 22 +++++++++++++++++++++-
+ 4 files changed, 41 insertions(+), 1 deletion(-)
 
 commit da43a92b04929e93356ae393803ef101154d2267
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da43a92b04929e93356ae393803ef101154d2267
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -701,9 +12136,9 @@ Date:     Tue Nov 13 13:48:26 2012 -0800
 
     0.9.6
 
 
     0.9.6
 
- NEWS        |   28 ++++++++++++++++++++++++++++
- configure.ac |    2 +-
- 2 files changed, 29 insertions(+), 1 deletions(-)
+ NEWS        | 28 ++++++++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 29 insertions(+), 1 deletion(-)
 
 commit 0736915b8ed789a209205fec762997af3a8af89c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0736915b8ed789a209205fec762997af3a8af89c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -720,14 +12155,14 @@ Date:   Tue Nov 13 12:35:35 2012 -0800
     harm doing this the Unicode way.  This change makes that happen, and
     unbreaks free Sinhala fonts.
 
     harm doing this the Unicode way.  This change makes that happen, and
     unbreaks free Sinhala fonts.
 
- src/hb-ot-shape-complex-arabic.cc    |    2 +
- src/hb-ot-shape-complex-indic.cc     |   74 +++++++++-
- src/hb-ot-shape-complex-misc.cc      |  133 ++++++++++++++++-
- src/hb-ot-shape-complex-private.hh   |   28 +++-
- src/hb-ot-shape-normalize-private.hh |    6 +-
- src/hb-ot-shape-normalize.cc        |  278
- +++++++++-------------------------
- src/hb-ot-shape.cc                  |    5 +-
+ src/hb-ot-shape-complex-arabic.cc    |   2 +
+ src/hb-ot-shape-complex-indic.cc     |  74 +++++++++-
+ src/hb-ot-shape-complex-misc.cc      | 133 ++++++++++++++++-
+ src/hb-ot-shape-complex-private.hh   |  28 +++-
+ src/hb-ot-shape-normalize-private.hh |   6 +-
+ src/hb-ot-shape-normalize.cc        | 278
+ ++++++++++-------------------------
+ src/hb-ot-shape.cc                  |   5 +-
  7 files changed, 312 insertions(+), 214 deletions(-)
 
 commit c8149ca85ed97112778590bc9f090f3ee0254100
  7 files changed, 312 insertions(+), 214 deletions(-)
 
 commit c8149ca85ed97112778590bc9f090f3ee0254100
@@ -742,8 +12177,8 @@ Date:     Tue Nov 13 11:07:20 2012 -0800
     Ie. even for zero-advance glyphs, print a "+0".  This is more
     intuitive.
 
     Ie. even for zero-advance glyphs, print a "+0".  This is more
     intuitive.
 
- util/options.cc |   13 +++++++------
- 1 files changed, 7 insertions(+), 6 deletions(-)
+ util/options.cc | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
 
 commit 6fd5335622087e87739684f581aa9f88635ff970
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6fd5335622087e87739684f581aa9f88635ff970
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -753,7 +12188,7 @@ Date:     Mon Nov 12 18:42:18 2012 -0800
 
  src/hb-ot-shape-complex-indic-machine.hh | 1126
  +++++++++++++++---------------
 
  src/hb-ot-shape-complex-indic-machine.hh | 1126
  +++++++++++++++---------------
- 1 files changed, 567 insertions(+), 559 deletions(-)
+ 1 file changed, 567 insertions(+), 559 deletions(-)
 
 commit 9cac1338c4bc3e9034cbfa104291ed0329debefe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9cac1338c4bc3e9034cbfa104291ed0329debefe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -764,8 +12199,8 @@ Date:     Mon Nov 12 18:41:22 2012 -0800
     Mostly affects Myanmar, but also Tai Tham, Javanese, and Cham.  The
     latter three are untested (no fonts!).
 
     Mostly affects Myanmar, but also Tai Tham, Javanese, and Cham.  The
     latter three are untested (no fonts!).
 
- src/hb-ot-shape-complex-indic-machine.rl |    3 ++-
- src/hb-ot-shape-complex-indic-private.hh |    7 ++++---
+ src/hb-ot-shape-complex-indic-machine.rl | 3 ++-
+ src/hb-ot-shape-complex-indic-private.hh | 7 ++++---
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit d187099cbab8e75f870a2bc9c23b6a1cf226905e
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit d187099cbab8e75f870a2bc9c23b6a1cf226905e
@@ -774,8 +12209,8 @@ Date:     Mon Nov 12 18:38:06 2012 -0800
 
     [Indic] Categorize Myanmar "tone marks" as nuktas
 
 
     [Indic] Categorize Myanmar "tone marks" as nuktas
 
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8173f23f3f16972c2e8e0a120724533100acfda2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8173f23f3f16972c2e8e0a120724533100acfda2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -783,8 +12218,8 @@ Date:     Mon Nov 12 18:37:20 2012 -0800
 
     [Indic] Add config for Myanmar
 
 
     [Indic] Add config for Myanmar
 
- src/hb-ot-shape-complex-indic.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 9e92978c8aa3d3cdab4d20c81698c56adbb3dbdd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9e92978c8aa3d3cdab4d20c81698c56adbb3dbdd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -796,8 +12231,8 @@ Date:     Mon Nov 12 18:36:10 2012 -0800
     through the Indic shaper.  It's still very broken, but at least this
     does NOT break old-style Myanmar shaping using the generic shaper.
 
     through the Indic shaper.  It's still very broken, but at least this
     does NOT break old-style Myanmar shaping using the generic shaper.
 
- src/hb-ot-shape-complex-private.hh |  14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 5ab3855f8106158ee7e68797e8c35e63e9216e5d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5ab3855f8106158ee7e68797e8c35e63e9216e5d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -811,8 +12246,8 @@ Date:     Mon Nov 12 18:27:42 2012 -0800
     Make an exception for Arabic script since we have fallback logic for
     that one.
 
     Make an exception for Arabic script since we have fallback logic for
     that one.
 
- src/hb-ot-map-private.hh          |    4 ++++
- src/hb-ot-shape-complex-private.hh |  11 +++++++++--
+ src/hb-ot-map-private.hh          |  4 ++++
+ src/hb-ot-shape-complex-private.hh | 11 +++++++++--
  2 files changed, 13 insertions(+), 2 deletions(-)
 
 commit 9b37b4c5800b158f61602d2aba8a01349e24d251
  2 files changed, 13 insertions(+), 2 deletions(-)
 
 commit 9b37b4c5800b158f61602d2aba8a01349e24d251
@@ -821,8 +12256,8 @@ Date:     Mon Nov 12 18:23:38 2012 -0800
 
     Make planner available to complex shaper choosing logic
 
 
     Make planner available to complex shaper choosing logic
 
- src/hb-ot-shape-complex-private.hh |   4 ++--
- src/hb-ot-shape.cc                |    2 +-
+ src/hb-ot-shape-complex-private.hh | 4 ++--
+ src/hb-ot-shape.cc                | 2 +-
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 6fddf2d7397411bba8a23ac535e8b851495d3105
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 6fddf2d7397411bba8a23ac535e8b851495d3105
@@ -831,10 +12266,10 @@ Date:   Mon Nov 12 17:57:24 2012 -0800
 
     Refactoring ot-map building to make chosen script available earlier
 
 
     Refactoring ot-map building to make chosen script available earlier
 
- src/hb-ot-map-private.hh   |  13 +++++++---
- src/hb-ot-map.cc          |   51
- +++++++++++++++++++++++++-------------------
- src/hb-ot-shape-private.hh |   4 +-
+ src/hb-ot-map-private.hh   | 13 ++++++++----
+ src/hb-ot-map.cc          | 51
+ ++++++++++++++++++++++++++--------------------
+ src/hb-ot-shape-private.hh |  4 ++--
  3 files changed, 40 insertions(+), 28 deletions(-)
 
 commit f17ed8116e7b6429af3fa60bb43d5f4fac66eae3
  3 files changed, 40 insertions(+), 28 deletions(-)
 
 commit f17ed8116e7b6429af3fa60bb43d5f4fac66eae3
@@ -843,8 +12278,8 @@ Date:     Mon Nov 12 17:48:26 2012 -0800
 
     Minor TODO
 
 
     Minor TODO
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit de796a6fb98f4deda276caa82266b7c830978e0b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit de796a6fb98f4deda276caa82266b7c830978e0b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -856,9 +12291,9 @@ Date:     Mon Nov 12 17:27:51 2012 -0800
     script tag,
     even though Windows never supported the old "mymr" tag.
 
     script tag,
     even though Windows never supported the old "mymr" tag.
 
- src/hb-ot-tag.cc      |    2 ++
- test/api/test-ot-tag.c |    1 +
- 2 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-tag.cc      | 2 ++
+ test/api/test-ot-tag.c | 1 +
+ 2 files changed, 3 insertions(+)
 
 commit 27f52dc3f6bbb97594a44f27b180aed73d9e5608
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 27f52dc3f6bbb97594a44f27b180aed73d9e5608
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -866,10 +12301,10 @@ Date:   Mon Nov 12 16:54:03 2012 -0800
 
     Add Myanmar tests from UTN#11
 
 
     Add Myanmar tests from UTN#11
 
- .../south-east-asian/script-myanmar/misc/MANIFEST  |   1 +
- .../south-east-asian/script-myanmar/misc/utn11.txt |  34
- ++++++++++++++++++++
- 2 files changed, 35 insertions(+), 0 deletions(-)
+ .../south-east-asian/script-myanmar/misc/MANIFEST  |  1 +
+ .../south-east-asian/script-myanmar/misc/utn11.txt | 34
+ ++++++++++++++++++++++
+ 2 files changed, 35 insertions(+)
 
 commit e9334ce97bb7f1de87fb211bb5a8168033629b14
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e9334ce97bb7f1de87fb211bb5a8168033629b14
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -877,8 +12312,8 @@ Date:     Mon Nov 12 14:57:02 2012 -0800
 
     Break build when ragel is needed and missing
 
 
     Break build when ragel is needed and missing
 
- src/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit dba186711e3f5e723f917b7104e849c4c525d3b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dba186711e3f5e723f917b7104e849c4c525d3b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -888,8 +12323,8 @@ Date:     Mon Nov 12 14:48:33 2012 -0800
 
     To be used in upcoming commits.
 
 
     To be used in upcoming commits.
 
- src/hb-ot-shape-complex-indic-private.hh |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit c4be9917438c45b972ec76dc68409014110f0837
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c4be9917438c45b972ec76dc68409014110f0837
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -897,8 +12332,8 @@ Date:     Mon Nov 12 14:27:33 2012 -0800
 
     Typo
 
 
     Typo
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 56be677781736bbedc80df6f6aaa2b5f0bc4041c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 56be677781736bbedc80df6f6aaa2b5f0bc4041c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -908,8 +12343,8 @@ Date:     Mon Nov 12 14:09:40 2012 -0800
 
     ...instead of using a hardcoded list of Ra characters.
 
 
     ...instead of using a hardcoded list of Ra characters.
 
- src/hb-ot-shape-complex-indic.cc |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit f2c0f59043c93c225274fc0c8177077d16c89d61
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f2c0f59043c93c225274fc0c8177077d16c89d61
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -919,9 +12354,9 @@ Date:     Mon Nov 12 14:02:02 2012 -0800
 
     ...instead of using a hardcoded list of Ra characters.
 
 
     ...instead of using a hardcoded list of Ra characters.
 
- src/hb-ot-shape-complex-indic.cc |   48
- +++++++++++++++++++++++--------------
- 1 files changed, 30 insertions(+), 18 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 48
+ +++++++++++++++++++++++++---------------
+ 1 file changed, 30 insertions(+), 18 deletions(-)
 
 commit 43149afbc0007ea075a7017c0e56056c3c0f3614
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 43149afbc0007ea075a7017c0e56056c3c0f3614
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -931,8 +12366,8 @@ Date:     Mon Nov 12 13:34:17 2012 -0800
 
     Since it has a couple of left-"matras".
 
 
     Since it has a couple of left-"matras".
 
- src/hb-ot-shape-complex-private.hh |   5 ++---
- 1 files changed, 2 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
 
 commit d0905c3400085f9c0901c558ba1b81b5039510e4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d0905c3400085f9c0901c558ba1b81b5039510e4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -940,8 +12375,8 @@ Date:     Mon Nov 12 13:02:20 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-ot-head-table.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-head-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 365f27ab5ba025bf1be6a882ed213c695cbfed7e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 365f27ab5ba025bf1be6a882ed213c695cbfed7e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -964,8 +12399,8 @@ Date:     Mon Nov 12 11:16:57 2012 -0800
 
     Also reported as happening with MSVC 2005.
 
 
     Also reported as happening with MSVC 2005.
 
- src/hb-ot-layout-common-private.hh |   6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-common-private.hh | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 6b389ddc3623d042ded4731f4d62dc354002fdd0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b389ddc3623d042ded4731f4d62dc354002fdd0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -993,8 +12428,8 @@ Date:     Mon Nov 12 11:02:56 2012 -0800
     TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-shape-complex-indic.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit d05ac7dc3f2949e85f1fe996315b31b7aae370fe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d05ac7dc3f2949e85f1fe996315b31b7aae370fe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1002,8 +12437,8 @@ Date:    Mon Nov 12 10:26:50 2012 -0800
 
     Fix hb-ft glyph name for broken fonts that return empty glyph names
 
 
     Fix hb-ft glyph name for broken fonts that return empty glyph names
 
- src/hb-ft.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ft.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3bc22eb7b843c77706bb13fc332009097f247813
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3bc22eb7b843c77706bb13fc332009097f247813
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1011,8 +12446,8 @@ Date:    Mon Nov 12 10:07:28 2012 -0800
 
     Minor
 
 
     Minor
 
- util/options.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4899801155cc0fef7a8aa58c33ac2d30ba34bcc3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4899801155cc0fef7a8aa58c33ac2d30ba34bcc3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1020,8 +12455,8 @@ Date:    Thu Nov 8 15:08:26 2012 -0800
 
     U+A872 PHAGS-PA SUPERFIXED LETTER RA is "Right"-Joining
 
 
     U+A872 PHAGS-PA SUPERFIXED LETTER RA is "Right"-Joining
 
- src/hb-ot-shape-complex-arabic.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 22a685836a59d1c02914761c02d3852810b83ec5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 22a685836a59d1c02914761c02d3852810b83ec5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1033,8 +12468,8 @@ Date:    Mon Nov 5 15:20:10 2012 -0800
     For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
     For now, match Uniscribe.
 
     For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
     For now, match Uniscribe.
 
- src/hb-ot-shape-complex-arabic.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit e6b86c8519f894bf7fe18d5c143276521fcacece
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6b86c8519f894bf7fe18d5c143276521fcacece
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1045,9 +12480,10 @@ Date:   Mon Nov 5 15:18:49 2012 -0800
     For U+1880..U+1886 Uniscribe thinks they are non-joining.
     For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
 
     For U+1880..U+1886 Uniscribe thinks they are non-joining.
     For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
 
- .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
- .../script-mongolian/misc/non-joining.txt         |    8 ++++++++
- 2 files changed, 9 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST    | 1 +
+ .../in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt   |
+ 8 ++++++++
+ 2 files changed, 9 insertions(+)
 
 commit c26a52fbe62e5ba4d0e1e2ba13bfb6ceb3f773dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c26a52fbe62e5ba4d0e1e2ba13bfb6ceb3f773dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1055,8 +12491,8 @@ Date:    Sun Nov 4 16:48:45 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-fallback.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-fallback.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f60d3ed35d94f1adcfd73ca05d03d7e81fb5de03
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f60d3ed35d94f1adcfd73ca05d03d7e81fb5de03
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1064,8 +12500,8 @@ Date:    Sun Nov 4 16:44:47 2012 -0800
 
     Minor
 
 
     Minor
 
- src/hb-set-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-set-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f5e55754f962184d2fb7dcab837cdba56e8c7731
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f5e55754f962184d2fb7dcab837cdba56e8c7731
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1073,11 +12509,12 @@ Date:  Fri Nov 2 13:53:18 2012 -0700
 
     Add Tifinagh test data
 
 
     Add Tifinagh test data
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   2 ++
- .../shaper-default/script-tifinagh/MANIFEST       |    1 +
- .../shaper-default/script-tifinagh/misc/MANIFEST   |   1 +
- .../shaper-default/script-tifinagh/misc/misc.txt   |  11 +++++++++++
- 4 files changed, 15 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-default/MANIFEST           |  2 ++
+ .../texts/in-tree/shaper-default/script-tifinagh/MANIFEST     |  1 +
+ .../in-tree/shaper-default/script-tifinagh/misc/MANIFEST      |  1 +
+ .../in-tree/shaper-default/script-tifinagh/misc/misc.txt      |
+ 11 +++++++++++
+ 4 files changed, 15 insertions(+)
 
 commit 10a33296e674ee84b9ed2df25cf373de7d020b8d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 10a33296e674ee84b9ed2df25cf373de7d020b8d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1085,8 +12522,8 @@ Date:    Fri Nov 2 13:38:55 2012 -0700
 
     Minor
 
 
     Minor
 
- src/hb-ot-tag.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-tag.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit c21498afd857e78230f761ee5c9e73adece89dd0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c21498afd857e78230f761ee5c9e73adece89dd0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1094,12 +12531,13 @@ Date:  Fri Nov 2 10:21:26 2012 -0700
 
     Add Mongolian and 'Phags-pa joining test cases
 
 
     Add Mongolian and 'Phags-pa joining test cases
 
- test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |   1 +
- .../shaper-arabic/script-mongolian/misc/misc.txt   |   3 +++
- .../in-tree/shaper-arabic/script-phags-pa/MANIFEST |   1 +
- .../shaper-arabic/script-phags-pa/misc/MANIFEST    |   1 +
- .../shaper-arabic/script-phags-pa/misc/misc.txt    |  14 ++++++++++++++
- 5 files changed, 20 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-arabic/MANIFEST         |  1 +
+ .../in-tree/shaper-arabic/script-mongolian/misc/misc.txt   |  3 +++
+ .../texts/in-tree/shaper-arabic/script-phags-pa/MANIFEST   |  1 +
+ .../in-tree/shaper-arabic/script-phags-pa/misc/MANIFEST    |  1 +
+ .../in-tree/shaper-arabic/script-phags-pa/misc/misc.txt    | 14
+ ++++++++++++++
+ 5 files changed, 20 insertions(+)
 
 commit 3ba7bc14ea652d27639f34109e51a497a678a54a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ba7bc14ea652d27639f34109e51a497a678a54a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1109,8 +12547,8 @@ Date:    Thu Nov 1 20:05:04 2012 -0700
 
     Through the Arabic shaper. It's similar to Mongolian.
 
 
     Through the Arabic shaper. It's similar to Mongolian.
 
- src/hb-ot-shape-complex-arabic.cc  |  15 ++++++++++++---
- src/hb-ot-shape-complex-private.hh |   4 +---
+ src/hb-ot-shape-complex-arabic.cc  | 15 ++++++++++++---
+ src/hb-ot-shape-complex-private.hh |  4 +---
  2 files changed, 13 insertions(+), 6 deletions(-)
 
 commit 431bef2e16c7888ca3960f5797432d3a20903550
  2 files changed, 13 insertions(+), 6 deletions(-)
 
 commit 431bef2e16c7888ca3960f5797432d3a20903550
@@ -1119,8 +12557,8 @@ Date:    Thu Nov 1 16:26:01 2012 -0700
 
     Minor build fix
 
 
     Minor build fix
 
- test/api/Makefile.am |   10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
+ test/api/Makefile.am | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
 
 commit da70111ab234e8b740ce6fb1789a1809fbec0c44
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da70111ab234e8b740ce6fb1789a1809fbec0c44
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1137,8 +12575,8 @@ Date:    Wed Oct 31 13:45:30 2012 -0700
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=801410
 
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=801410
 
- src/hb-buffer.cc |    9 ++++++++-
- 1 files changed, 8 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
 
 commit 0bc7a38463bfb37f12efeb1b8cb2024cf4a347bc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0bc7a38463bfb37f12efeb1b8cb2024cf4a347bc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1149,10 +12587,10 @@ Date:  Mon Oct 29 22:02:45 2012 -0700
     We should make it clear that we don't want output buffer in this case,
     otherwise buffer->backtrack_len() would be wrong.
 
     We should make it clear that we don't want output buffer in this case,
     otherwise buffer->backtrack_len() would be wrong.
 
- src/hb-buffer-private.hh      |    1 +
- src/hb-buffer.cc              |   13 +++++++++++++
- src/hb-ot-layout-gsub-table.hh |    1 +
- 3 files changed, 15 insertions(+), 0 deletions(-)
+ src/hb-buffer-private.hh      |  1 +
+ src/hb-buffer.cc              | 13 +++++++++++++
+ src/hb-ot-layout-gsub-table.hh |  1 +
+ 3 files changed, 15 insertions(+)
 
 commit 2616689d159024d2b1cb1e68f9936b2129bf9be6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2616689d159024d2b1cb1e68f9936b2129bf9be6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1160,8 +12598,8 @@ Date:    Mon Oct 29 21:51:56 2012 -0700
 
     More tracing fixups
 
 
     More tracing fixups
 
- src/hb-ot-layout-gsubgpos-private.hh |   13 +++++++------
- 1 files changed, 7 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
 
 commit 937f8d3871863b8b1ed1d8900cf41999d92ba30f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 937f8d3871863b8b1ed1d8900cf41999d92ba30f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1171,8 +12609,8 @@ Date:    Mon Oct 29 21:49:33 2012 -0700
 
     That's what the spec says, and what Uniscribe does.
 
 
     That's what the spec says, and what Uniscribe does.
 
- src/hb-ot-shape-complex-arabic.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 911ed096980630fd4a37bf2024036daae13a6056
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 911ed096980630fd4a37bf2024036daae13a6056
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1180,8 +12618,8 @@ Date:    Mon Oct 29 19:42:19 2012 -0700
 
     Ignore gid0 in test results
 
 
     Ignore gid0 in test results
 
- test/shaping/hb_test_tools.py |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ test/shaping/hb_test_tools.py | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit bc513add7999baf32f126ceebbd318105ee66985
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bc513add7999baf32f126ceebbd318105ee66985
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1189,8 +12627,8 @@ Date:    Mon Oct 29 19:03:55 2012 -0700
 
     Add missing TRACE_RETURN
 
 
     Add missing TRACE_RETURN
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 10b88d89ef1efcfddbbfabd3669399b472c8a900
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 10b88d89ef1efcfddbbfabd3669399b472c8a900
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1207,10 +12645,13 @@ Date:  Mon Oct 29 18:18:24 2012 -0700
 
     ETHIOPIC: 118900 out of 118901 tests passed. 1 failed (0.000841036%)
 
 
     ETHIOPIC: 118900 out of 118901 tests passed. 1 failed (0.000841036%)
 
- .../shaper-default/script-ethiopic/MANIFEST       |    1 +
- .../shaper-default/script-ethiopic/misc/MANIFEST   |   1 +
- .../shaper-default/script-ethiopic/misc/misc.txt   |   1 +
- 3 files changed, 3 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-default/script-ethiopic/MANIFEST     |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/MANIFEST |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt |
+ 1 +
+ 3 files changed, 3 insertions(+)
 
 commit 88d3c98e309e14c3115825d1d8d40d0b3eec2d97
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 88d3c98e309e14c3115825d1d8d40d0b3eec2d97
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1240,9 +12681,8 @@ Date:    Mon Oct 29 16:27:02 2012 -0700
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-shape-complex-indic.cc |   35
- +++++++++++++++++++++--------------
- 1 files changed, 21 insertions(+), 14 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 35 +++++++++++++++++++++--------------
+ 1 file changed, 21 insertions(+), 14 deletions(-)
 
 commit 21bf796954678d02f136709cade43adef6f8f42b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 21bf796954678d02f136709cade43adef6f8f42b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1250,8 +12690,8 @@ Date:    Mon Oct 29 14:21:09 2012 -0700
 
     Add missed file
 
 
     Add missed file
 
- src/hb-ucdn/COPYING |  13 +++++++++++++
- 1 files changed, 13 insertions(+), 0 deletions(-)
+ src/hb-ucdn/COPYING | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
 
 commit 01013a0f5c58d5d54a37e5b4d6692e0bbd4baf80
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 01013a0f5c58d5d54a37e5b4d6692e0bbd4baf80
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1265,10 +12705,10 @@ Date:  Mon Oct 29 10:56:04 2012 -0700
     options one would need to go through when building with alternative
     build systems.
 
     options one would need to go through when building with alternative
     build systems.
 
- Makefile.am |   1 -
- config.h.in | 160
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 160 insertions(+), 1 deletions(-)
+ Makefile.am |  1 -
+ config.h.in | 160
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 160 insertions(+), 1 deletion(-)
 
 commit 02ed52169ad3bb48f4989f721b0c6572e064a712
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 02ed52169ad3bb48f4989f721b0c6572e064a712
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1276,11 +12716,11 @@ Date:  Sun Oct 28 21:26:19 2012 -0700
 
     Improve license information
 
 
     Improve license information
 
- COPYING                  |    2 ++
- src/hb-icu-le/COPYING    |    2 ++
- src/hb-icu-le/Makefile.am |   2 +-
- src/hb-ucdn/Makefile.am   |   2 +-
- src/hb-ucdn/README       |    7 +++++++
+ COPYING                  | 2 ++
+ src/hb-icu-le/COPYING    | 2 ++
+ src/hb-icu-le/Makefile.am | 2 +-
+ src/hb-ucdn/Makefile.am   | 2 +-
+ src/hb-ucdn/README       | 7 +++++++
  5 files changed, 13 insertions(+), 2 deletions(-)
 
 commit 4c1d9244617e472464722e64d2cdbc1f9e8827f6
  5 files changed, 13 insertions(+), 2 deletions(-)
 
 commit 4c1d9244617e472464722e64d2cdbc1f9e8827f6
@@ -1289,8 +12729,8 @@ Date:    Sun Oct 28 20:27:25 2012 -0700
 
     Minor
 
 
     Minor
 
- src/hb-icu-le.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-icu-le.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 38b015e57ffa75d3b078a368c23685beb7c3f946
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 38b015e57ffa75d3b078a368c23685beb7c3f946
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1300,8 +12740,8 @@ Date:    Sun Oct 28 20:11:47 2012 -0700
 
     Was causing invalid realloc()s.
 
 
     Was causing invalid realloc()s.
 
- src/hb-buffer.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b7115b63be72e109b51f538ba581aed1017b2d55
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b7115b63be72e109b51f538ba581aed1017b2d55
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1309,8 +12749,8 @@ Date:    Sun Oct 28 20:11:42 2012 -0700
 
     Add XXX
 
 
     Add XXX
 
- src/hb-icu-le.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-icu-le.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 71ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71ee1f24503cd066ffc1a36cc5dd9a3c1d1a6dfd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1322,8 +12762,8 @@ Date:    Sun Oct 28 19:18:11 2012 -0700
     I'm not smart / stupid enough to spend two more days debugging C++
     linking issues, and this is ABI-stable at least.
 
     I'm not smart / stupid enough to spend two more days debugging C++
     linking issues, and this is ABI-stable at least.
 
- src/hb-icu-le.cc |   31 ++++++++++++++++---------------
- 1 files changed, 16 insertions(+), 15 deletions(-)
+ src/hb-icu-le.cc | 31 ++++++++++++++++---------------
+ 1 file changed, 16 insertions(+), 15 deletions(-)
 
 commit 0144f05e57088b30ac894cdae8b04b265d4dfbe7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0144f05e57088b30ac894cdae8b04b265d4dfbe7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1331,8 +12771,8 @@ Date:    Fri Oct 26 13:48:06 2012 -0700
 
     Remove unused members
 
 
     Remove unused members
 
- src/hb-icu-le/PortableFontInstance.h |    3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-icu-le/PortableFontInstance.h | 3 ---
+ 1 file changed, 3 deletions(-)
 
 commit cf3afd8979b1db76d437f428cbd51cb363e0d18e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cf3afd8979b1db76d437f428cbd51cb363e0d18e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1347,11 +12787,11 @@ Date:  Thu Oct 25 16:32:54 2012 -0700
 
     Based on suggestion from Konstantin Ritt.
 
 
     Based on suggestion from Konstantin Ritt.
 
- src/hb-fallback-shape.cc   |   2 +-
- src/hb-ot-shape-private.hh |   4 +-
- src/hb-ot-shape.cc        |    2 +-
- src/hb-unicode-private.hh  |  90
- ++++++++++++++++++++++++++++---------------
+ src/hb-fallback-shape.cc   |  2 +-
+ src/hb-ot-shape-private.hh |  4 +--
+ src/hb-ot-shape.cc        |  2 +-
+ src/hb-unicode-private.hh  | 90
+ +++++++++++++++++++++++++++++-----------------
  4 files changed, 62 insertions(+), 36 deletions(-)
 
 commit a724139e641bf1592b1ff786a75a9de2ea8163cf
  4 files changed, 62 insertions(+), 36 deletions(-)
 
 commit a724139e641bf1592b1ff786a75a9de2ea8163cf
@@ -1360,8 +12800,8 @@ Date:    Wed Oct 24 14:02:15 2012 -0700
 
     Update TODO
 
 
     Update TODO
 
- TODO |   14 ++++++++++----
- 1 files changed, 10 insertions(+), 4 deletions(-)
+ TODO | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
 
 commit 13c058472913b7b6d689f9022226079da65420b0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13c058472913b7b6d689f9022226079da65420b0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1369,9 +12809,9 @@ Date:    Sun Oct 14 18:37:09 2012 -0500
 
     0.9.5
 
 
     0.9.5
 
- NEWS        |   23 +++++++++++++++++++++++
- configure.ac |    2 +-
- 2 files changed, 24 insertions(+), 1 deletions(-)
+ NEWS        | 23 +++++++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 24 insertions(+), 1 deletion(-)
 
 commit fecdfa95daf4916695f23e7dab89ab363be11b89
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fecdfa95daf4916695f23e7dab89ab363be11b89
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1381,8 +12821,8 @@ Date:    Sun Oct 7 17:19:58 2012 -0400
 
     Broke it when merged cmap mapping and normalizer.  Ouch!
 
 
     Broke it when merged cmap mapping and normalizer.  Ouch!
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2d1dcb3ce3354c2d5e2b4d1d291beb8d23cdea22
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2d1dcb3ce3354c2d5e2b4d1d291beb8d23cdea22
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1390,8 +12830,8 @@ Date:    Sun Oct 7 17:13:46 2012 -0400
 
     Mark debug message functions static
 
 
     Mark debug message functions static
 
- src/hb-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 9947bd6daffb5ec76b67536575e7617ba4f10b1e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9947bd6daffb5ec76b67536575e7617ba4f10b1e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1406,7 +12846,7 @@ Date:    Tue Oct 2 20:44:43 2012 -0400
 
  src/hb-ucdn/unicodedata_db.h | 1966
  ++++++++++++++++++++++--------------------
 
  src/hb-ucdn/unicodedata_db.h | 1966
  ++++++++++++++++++++++--------------------
- 1 files changed, 1036 insertions(+), 930 deletions(-)
+ 1 file changed, 1036 insertions(+), 930 deletions(-)
 
 commit 32dbfcf763d1ae497d3c95de986a83441331678f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 32dbfcf763d1ae497d3c95de986a83441331678f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1414,8 +12854,8 @@ Date:    Tue Oct 2 17:42:13 2012 -0400
 
     Fix visibility of UCDN symbols
 
 
     Fix visibility of UCDN symbols
 
- src/hb-ucdn.cc     |   2 --
- src/hb-ucdn/ucdn.h |  19 +++++++++++++++++++
+ src/hb-ucdn.cc     |  2 --
+ src/hb-ucdn/ucdn.h | 19 +++++++++++++++++++
  2 files changed, 19 insertions(+), 2 deletions(-)
 
 commit 3f33f0d1f2603f22e86adffe3c3836136ba5e5fd
  2 files changed, 19 insertions(+), 2 deletions(-)
 
 commit 3f33f0d1f2603f22e86adffe3c3836136ba5e5fd
@@ -1436,7 +12876,7 @@ Date:    Tue Oct 2 16:03:18 2012 -0400
  src/hb-ucdn/unicodedata_db.h | 4648
  ++++++++++++++++++++++++++++++++++++++++++
  src/hb-unicode.cc           |    3 +
  src/hb-ucdn/unicodedata_db.h | 4648
  ++++++++++++++++++++++++++++++++++++++++++
  src/hb-unicode.cc           |    3 +
- 9 files changed, 5498 insertions(+), 1 deletions(-)
+ 9 files changed, 5498 insertions(+), 1 deletion(-)
 
 commit 0e292eb2a2abbac152eeea2060e58b7a66449745
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e292eb2a2abbac152eeea2060e58b7a66449745
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1447,9 +12887,9 @@ Date:    Tue Oct 2 14:59:00 2012 -0400
     Now that we have pthread detection in configure, we don't need Glib
     anymore.  Glib will only be a Unicode data provider.
 
     Now that we have pthread detection in configure, we don't need Glib
     anymore.  Glib will only be a Unicode data provider.
 
- configure.ac            |    8 ++++----
- src/hb-atomic-private.hh |   13 -------------
- src/hb-mutex-private.hh  |   20 --------------------
+ configure.ac            |  8 ++++----
+ src/hb-atomic-private.hh | 13 -------------
+ src/hb-mutex-private.hh  | 20 --------------------
  3 files changed, 4 insertions(+), 37 deletions(-)
 
 commit 66efe896483c58f3ef9bd218c02bb7ea604f68ee
  3 files changed, 4 insertions(+), 37 deletions(-)
 
 commit 66efe896483c58f3ef9bd218c02bb7ea604f68ee
@@ -1458,9 +12898,9 @@ Date:    Tue Oct 2 14:55:32 2012 -0400
 
     Check for pthreads
 
 
     Check for pthreads
 
- configure.ac   |    7 +++++++
- src/Makefile.am |    5 +++++
- 2 files changed, 12 insertions(+), 0 deletions(-)
+ configure.ac   | 7 +++++++
+ src/Makefile.am | 5 +++++
+ 2 files changed, 12 insertions(+)
 
 commit 10a8162dddb8b39ae130fe5bb7d1819471fa7e06
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 10a8162dddb8b39ae130fe5bb7d1819471fa7e06
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1468,9 +12908,9 @@ Date:    Tue Oct 2 14:46:34 2012 -0400
 
     Add ax_pthread.m4
 
 
     Add ax_pthread.m4
 
- m4/ax_pthread.m4 |  309
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 309 insertions(+), 0 deletions(-)
+ m4/ax_pthread.m4 | 309
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 309 insertions(+)
 
 commit 8ac34bc6ff1d0646503a45659b1846d8cf9c0603
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8ac34bc6ff1d0646503a45659b1846d8cf9c0603
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1478,9 +12918,9 @@ Date:    Tue Oct 2 14:46:04 2012 -0400
 
     Add pkg.m4 to git repo
 
 
     Add pkg.m4 to git repo
 
- m4/pkg.m4 |  157
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 157 insertions(+), 0 deletions(-)
+ m4/pkg.m4 | 157
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 157 insertions(+)
 
 commit c7afac0aa6e51e6a49ebf13f72537398698c9e49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c7afac0aa6e51e6a49ebf13f72537398698c9e49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1488,9 +12928,9 @@ Date:    Tue Oct 2 14:44:47 2012 -0400
 
     Add AC_CONFIG_MACRODIR
 
 
     Add AC_CONFIG_MACRODIR
 
- Makefile.am  |    2 ++
- configure.ac |    2 ++
- 2 files changed, 4 insertions(+), 0 deletions(-)
+ Makefile.am  | 2 ++
+ configure.ac | 2 ++
+ 2 files changed, 4 insertions(+)
 
 commit f2eb3fa9dca8d21fae20c9b9dddad3245df74a05
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f2eb3fa9dca8d21fae20c9b9dddad3245df74a05
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1504,8 +12944,8 @@ Date:    Tue Sep 25 21:35:35 2012 -0400
     Part of addressing:
     https://bugzilla.redhat.com/show_bug.cgi?id=858736
 
     Part of addressing:
     https://bugzilla.redhat.com/show_bug.cgi?id=858736
 
- src/hb-ot-shape.cc |   6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 commit bdc2fc8294da7f374701aafe9f5a82d60633946f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bdc2fc8294da7f374701aafe9f5a82d60633946f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1515,8 +12955,8 @@ Date:    Tue Sep 25 21:32:35 2012 -0400
 
     Now we respect Arabic joining across runs.
 
 
     Now we respect Arabic joining across runs.
 
- src/hb-ot-shape-complex-arabic.cc |   31 +++++++++++++++++++++++++++++--
- 1 files changed, 29 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 31 +++++++++++++++++++++++++++++--
+ 1 file changed, 29 insertions(+), 2 deletions(-)
 
 commit 05207a79e0ae1769c5feaebe3fd99bdf9cfcf834
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 05207a79e0ae1769c5feaebe3fd99bdf9cfcf834
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1533,10 +12973,10 @@ Date:  Tue Sep 25 17:44:53 2012 -0400
     Various operations (hb_buffer_reset, hb_buffer_set_length,
     hb_buffer_add*) automatically reset the relevant contexts.
 
     Various operations (hb_buffer_reset, hb_buffer_set_length,
     hb_buffer_add*) automatically reset the relevant contexts.
 
- src/hb-buffer-private.hh |   13 ++++++++++++-
- src/hb-buffer.cc        |   44
+ src/hb-buffer-private.hh | 13 ++++++++++++-
+ src/hb-buffer.cc        | 44
  ++++++++++++++++++++++++++++++++++++++++----
  ++++++++++++++++++++++++++++++++++++++++----
- src/hb-buffer.h         |    2 +-
+ src/hb-buffer.h         |  2 +-
  3 files changed, 53 insertions(+), 6 deletions(-)
 
 commit 89ac39dbbe028e6379f64392f2e590e3f1fdd847
  3 files changed, 53 insertions(+), 6 deletions(-)
 
 commit 89ac39dbbe028e6379f64392f2e590e3f1fdd847
@@ -1545,9 +12985,9 @@ Date:    Tue Sep 25 13:59:24 2012 -0400
 
     Add hb_utf_prev()
 
 
     Add hb_utf_prev()
 
- src/hb-utf-private.hh |   71
- +++++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 69 insertions(+), 2 deletions(-)
+ src/hb-utf-private.hh | 71
+ +++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 69 insertions(+), 2 deletions(-)
 
 commit 70ea4ac6887c7057113d714a98e55738b6196562
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 70ea4ac6887c7057113d714a98e55738b6196562
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1555,8 +12995,8 @@ Date:    Tue Sep 25 12:30:16 2012 -0400
 
     Slightly optimize UTF-8 parsing
 
 
     Slightly optimize UTF-8 parsing
 
- src/hb-utf-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-utf-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 4445e5e2ecc257a5d0fa2f2715bb7181a47346da
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4445e5e2ecc257a5d0fa2f2715bb7181a47346da
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1564,8 +13004,8 @@ Date:    Tue Sep 25 12:26:12 2012 -0400
 
     [buffer] Cleanup / optimize UTF-16 parsing a bit
 
 
     [buffer] Cleanup / optimize UTF-16 parsing a bit
 
- src/hb-utf-private.hh |   12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-utf-private.hh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit 1f66c3c1a0eb869c0d85a015235313177e0cec62
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1f66c3c1a0eb869c0d85a015235313177e0cec62
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1575,8 +13015,8 @@ Date:    Tue Sep 25 11:42:16 2012 -0400
 
     Speeds up UTF-8 parsing by calling strlen().
 
 
     Speeds up UTF-8 parsing by calling strlen().
 
- src/hb-buffer.cc      |   13 ++-----------
- src/hb-utf-private.hh |   22 ++++++++++++++++++++++
+ src/hb-buffer.cc      | 13 ++-----------
+ src/hb-utf-private.hh | 22 ++++++++++++++++++++++
  2 files changed, 24 insertions(+), 11 deletions(-)
 
 commit 7f19ae7b9f806a2e35206b2ad41651c5f80b2537
  2 files changed, 24 insertions(+), 11 deletions(-)
 
 commit 7f19ae7b9f806a2e35206b2ad41651c5f80b2537
@@ -1588,10 +13028,10 @@ Date:  Tue Sep 25 11:22:28 2012 -0400
     Also move UTF routines into a separate file, to be reused from shapers
     that need it.
 
     Also move UTF routines into a separate file, to be reused from shapers
     that need it.
 
- src/Makefile.am       |    1 +
- src/hb-buffer.cc      |  157
- +++++++++++++------------------------------------
- src/hb-utf-private.hh |  113 +++++++++++++++++++++++++++++++++++
+ src/Makefile.am       |   1 +
+ src/hb-buffer.cc      | 157
+ +++++++++++++-------------------------------------
+ src/hb-utf-private.hh | 113 ++++++++++++++++++++++++++++++++++++
  3 files changed, 155 insertions(+), 116 deletions(-)
 
 commit 0e0a4da9b7677a09e00d27313236e1f333864dd6
  3 files changed, 155 insertions(+), 116 deletions(-)
 
 commit 0e0a4da9b7677a09e00d27313236e1f333864dd6
@@ -1600,8 +13040,8 @@ Date:    Tue Sep 25 11:09:04 2012 -0400
 
     [buffer] Towards template'izing different UTF adders
 
 
     [buffer] Towards template'izing different UTF adders
 
- src/hb-buffer.cc |   11 ++++++++++-
- 1 files changed, 10 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
 
 commit 7d37280600c157f3c4eae8746e99511702a58e8f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7d37280600c157f3c4eae8746e99511702a58e8f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1609,8 +13049,8 @@ Date:    Tue Sep 25 11:04:41 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-buffer.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 54d5da4ee9d902ff36473cec558137eef8f23825
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 54d5da4ee9d902ff36473cec558137eef8f23825
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1618,10 +13058,9 @@ Date:   Tue Sep 25 10:50:41 2012 -0400
 
     Remove unused indic.cc
 
 
     Remove unused indic.cc
 
- src/Makefile.am |    6 +-----
- src/indic.cc   |   51
- ---------------------------------------------------
- 2 files changed, 1 insertions(+), 56 deletions(-)
+ src/Makefile.am |  6 +-----
+ src/indic.cc   | 51 ---------------------------------------------------
+ 2 files changed, 1 insertion(+), 56 deletions(-)
 
 commit fab7a71f110ed646745d54b23284537c50058c21
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fab7a71f110ed646745d54b23284537c50058c21
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1648,8 +13087,8 @@ Date:    Mon Sep 24 20:23:00 2012 -0400
     On Windows we don't care whether or not we link to libstdc++.
     Seems to fix build with mingw32 on msys, as reported by Werner.
 
     On Windows we don't care whether or not we link to libstdc++.
     Seems to fix build with mingw32 on msys, as reported by Werner.
 
- src/Makefile.am |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/Makefile.am | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit eb7669a38072b66eef3bd905a93c4815bef3f0e5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eb7669a38072b66eef3bd905a93c4815bef3f0e5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1657,8 +13096,8 @@ Date:    Tue Sep 18 19:42:06 2012 -0400
 
     Better autofoo
 
 
     Better autofoo
 
- src/Makefile.am |    5 +----
- 1 files changed, 1 insertions(+), 4 deletions(-)
+ src/Makefile.am | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
 
 commit d00f7d83750258eff915a3826700c4819e63e481
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d00f7d83750258eff915a3826700c4819e63e481
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1666,8 +13105,8 @@ Date:    Mon Sep 17 20:59:09 2012 -0400
 
     Fix dependencies
 
 
     Fix dependencies
 
- src/Makefile.am |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/Makefile.am | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 811eefe225d20b20f1de20c6e62a0ebd6d89102a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 811eefe225d20b20f1de20c6e62a0ebd6d89102a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1677,8 +13116,8 @@ Date:    Mon Sep 10 09:56:27 2012 -0400
 
     Oh well...
 
 
     Oh well...
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 166b5cf7ec2d37fb54a909c437ccdec1edaf37aa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 166b5cf7ec2d37fb54a909c437ccdec1edaf37aa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1693,10 +13132,10 @@ Date:  Fri Sep 7 14:55:07 2012 -0400
 
     Test sequence: U+0D9A,U+0DCA,U+200D,U+0DBB,U+0DCF
 
 
     Test sequence: U+0D9A,U+0DCA,U+200D,U+0DBB,U+0DCF
 
- src/hb-ot-shape-complex-indic-machine.rl          |    4 +-
- src/hb-ot-shape-complex-indic.cc                  |   56
- ++++++++++++++------
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl          |  4 +-
+ src/hb-ot-shape-complex-indic.cc                  | 56
+ +++++++++++++++-------
+ .../indic/script-sinhala/misc/misc.txt                    |  1 +
  3 files changed, 43 insertions(+), 18 deletions(-)
 
 commit 96fdc04e5c6daafce3d45e7508418e4db94df44c
  3 files changed, 43 insertions(+), 18 deletions(-)
 
 commit 96fdc04e5c6daafce3d45e7508418e4db94df44c
@@ -1707,12 +13146,12 @@ Date:  Thu Sep 6 22:26:16 2012 -0400
 
     And hb_buffer_content_type_t and enum values.
 
 
     And hb_buffer_content_type_t and enum values.
 
- TODO                    |    1 +
- src/hb-buffer-private.hh |    2 ++
- src/hb-buffer.cc        |   34 ++++++++++++++++++++++++++++++++++
- src/hb-buffer.h         |   14 ++++++++++++++
- src/hb-shape.cc         |    5 +++++
- 5 files changed, 56 insertions(+), 0 deletions(-)
+ TODO                    |  1 +
+ src/hb-buffer-private.hh |  2 ++
+ src/hb-buffer.cc        | 34 ++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h         | 14 ++++++++++++++
+ src/hb-shape.cc         |  5 +++++
+ 5 files changed, 56 insertions(+)
 
 commit e30ebd2794b37bd8ec716a258d5cb017fb1dfadc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e30ebd2794b37bd8ec716a258d5cb017fb1dfadc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1720,13 +13159,13 @@ Date:  Thu Sep 6 22:09:06 2012 -0400
 
     Add hb_feature_to/from_string()
 
 
     Add hb_feature_to/from_string()
 
- TODO            |    4 +-
- src/hb-common.cc |    9 +++
- src/hb-common.h  |    6 ++-
- src/hb-shape.cc  |  168
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-shape.h   |   13 ++++
- util/options.cc  |  132 +-----------------------------------------
+ TODO            |   4 +-
+ src/hb-common.cc |   9 +++
+ src/hb-common.h  |   +-
+ src/hb-shape.cc  | 168
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-shape.h   |  13 +++++
+ util/options.cc  | 132 ++-----------------------------------------
  6 files changed, 201 insertions(+), 131 deletions(-)
 
 commit f67917161bbe317a33d6407fbc62ebffcafe7154
  6 files changed, 201 insertions(+), 131 deletions(-)
 
 commit f67917161bbe317a33d6407fbc62ebffcafe7154
@@ -1743,9 +13182,9 @@ Date:    Thu Sep 6 17:22:31 2012 -0400
 
     Now *that*'s pretty cool, if a bit anachronistic...
 
 
     Now *that*'s pretty cool, if a bit anachronistic...
 
- src/hb-ot-shape-fallback.cc |  43
+ src/hb-ot-shape-fallback.cc | 43
  ++++++++++++++++++++++++++++++++++++-------
  ++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 36 insertions(+), 7 deletions(-)
+ 1 file changed, 36 insertions(+), 7 deletions(-)
 
 commit 525c6855783a018d52867b9ece2ee90868ff1f91
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 525c6855783a018d52867b9ece2ee90868ff1f91
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1755,8 +13194,8 @@ Date:    Thu Sep 6 16:02:07 2012 -0400
 
     ...with clusters spanning multiple base characters.
 
 
     ...with clusters spanning multiple base characters.
 
- src/hb-ot-shape-fallback.cc |  11 +++++++++--
- 1 files changed, 9 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-fallback.cc | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
 
 commit 5d502443f5a07cbd0aa860dd71a0fa4ea8b6ff9f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5d502443f5a07cbd0aa860dd71a0fa4ea8b6ff9f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1764,8 +13203,8 @@ Date:    Thu Sep 6 15:29:29 2012 -0400
 
     [old] Clear offset array
 
 
     [old] Clear offset array
 
- src/hb-old.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-old.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 9433c218b4853442dd9ad53d0588a837a33dbf1e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9433c218b4853442dd9ad53d0588a837a33dbf1e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1773,8 +13212,8 @@ Date:    Thu Sep 6 14:27:15 2012 -0400
 
     [OT] Simplify fallback positioning condition
 
 
     [OT] Simplify fallback positioning condition
 
- src/hb-ot-shape-fallback.cc |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-fallback.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 028a1706f898bfcee0d14acfba47ebe1de09f0c4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 028a1706f898bfcee0d14acfba47ebe1de09f0c4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1782,10 +13221,10 @@ Date:  Thu Sep 6 14:25:48 2012 -0400
 
     Refactor common macro
 
 
     Refactor common macro
 
- src/hb-ot-shape-fallback.cc  |    5 +----
- src/hb-ot-shape-normalize.cc |    5 +----
- src/hb-ot-shape.cc          |    5 +----
- src/hb-unicode-private.hh    |    9 +++++++++
+ src/hb-ot-shape-fallback.cc  | 5 +----
+ src/hb-ot-shape-normalize.cc | 5 +----
+ src/hb-ot-shape.cc          | 5 +----
+ src/hb-unicode-private.hh    | 9 +++++++++
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 07cfbe21b511056d5c3c75cbfe84e4e982c3e8fb
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 07cfbe21b511056d5c3c75cbfe84e4e982c3e8fb
@@ -1794,10 +13233,10 @@ Date:  Thu Sep 6 01:16:39 2012 -0400
 
     [OT] Streamline Arabic fallback shaping table
 
 
     [OT] Streamline Arabic fallback shaping table
 
- src/gen-arabic-table.py                   |    6 +-
- src/hb-ot-shape-complex-arabic-fallback.hh |   2 +-
- src/hb-ot-shape-complex-arabic-table.hh    |  266
- ++++++++++++++--------------
+ src/gen-arabic-table.py                   |   6 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh |  2 +-
+ src/hb-ot-shape-complex-arabic-table.hh    | 266
+ ++++++++++++++---------------
  3 files changed, 137 insertions(+), 137 deletions(-)
 
 commit 82f6b6f388b801a1483854cb56a2cadbb94e0f2b
  3 files changed, 137 insertions(+), 137 deletions(-)
 
 commit 82f6b6f388b801a1483854cb56a2cadbb94e0f2b
@@ -1806,8 +13245,8 @@ Date:    Thu Sep 6 01:12:50 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-arabic-fallback.hh |  13 +++++++------
- 1 files changed, 7 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-arabic-fallback.hh | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
 
 commit fabd3113a98c5f4114f48920fa7ea38bd65a8d32
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fabd3113a98c5f4114f48920fa7ea38bd65a8d32
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1819,17 +13258,17 @@ Date:  Wed Sep 5 22:19:28 2012 -0400
 
     Let there be dragons... ⻯
 
 
     Let there be dragons... ⻯
 
- src/Makefile.am                           |    1 +
- src/hb-open-type-private.hh               |   69 +++++---
- src/hb-ot-layout-common-private.hh        |    9 +-
- src/hb-ot-layout-gsub-table.hh                    |   11 +-
- src/hb-ot-map-private.hh                  |    6 +
- src/hb-ot-map.cc                          |    1 +
- src/hb-ot-shape-complex-arabic-fallback.hh |  252
- ++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-arabic.cc         |  158 +++++-------------
- src/hb-ot-shape.cc                        |    7 +-
- src/hb-private.hh                         |   11 +-
+ src/Makefile.am                           |   1 +
+ src/hb-open-type-private.hh               |  69 +++++---
+ src/hb-ot-layout-common-private.hh        |   9 +-
+ src/hb-ot-layout-gsub-table.hh                    |  11 +-
+ src/hb-ot-map-private.hh                  |   6 +
+ src/hb-ot-map.cc                          |   1 +
+ src/hb-ot-shape-complex-arabic-fallback.hh | 252
+ +++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc         | 158 ++++++------------
+ src/hb-ot-shape.cc                        |   7 +-
+ src/hb-private.hh                         |  11 +-
  10 files changed, 369 insertions(+), 156 deletions(-)
 
 commit f0b8ed1b6dd9f1d2b9084c101a6fc5dee0cc22a8
  10 files changed, 369 insertions(+), 156 deletions(-)
 
 commit f0b8ed1b6dd9f1d2b9084c101a6fc5dee0cc22a8
@@ -1864,8 +13303,8 @@ Date:    Wed Sep 5 17:32:57 2012 -0400
     TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4ed717ef61813fa16cf74f2874848e9feb81568f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ed717ef61813fa16cf74f2874848e9feb81568f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1888,8 +13327,8 @@ Date:    Wed Sep 5 17:21:17 2012 -0400
 
     DEVANAGARI: 707325 out of 707394 tests passed. 69 failed (0.00975411%)
 
 
     DEVANAGARI: 707325 out of 707394 tests passed. 69 failed (0.00975411%)
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit aa7141efe49991a1160489106984e95163fe2ab8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa7141efe49991a1160489106984e95163fe2ab8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1922,8 +13361,8 @@ Date:    Wed Sep 5 15:54:21 2012 -0400
     Still some regressions, but some of the more egregious cases are
     addressed.
 
     Still some regressions, but some of the more egregious cases are
     addressed.
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit efb8d3eb713bca7cbfca41380a012bdb4d380e5c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit efb8d3eb713bca7cbfca41380a012bdb4d380e5c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -1976,8 +13415,8 @@ Date:    Wed Sep 5 15:50:47 2012 -0400
 
     Investigating.
 
 
     Investigating.
 
- test/shaping/hb_test_tools.py |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ test/shaping/hb_test_tools.py | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 27bd55bd2ca599d501f10c2fae81861137517e46
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 27bd55bd2ca599d501f10c2fae81861137517e46
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2010,8 +13449,8 @@ Date:    Wed Sep 5 15:11:14 2012 -0400
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-shape-complex-indic.cc |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 87b75d0a4aa03fe7a03e3bf7baf8ece131aec1bb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 87b75d0a4aa03fe7a03e3bf7baf8ece131aec1bb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2019,8 +13458,8 @@ Date:    Tue Sep 4 23:06:38 2012 -0400
 
     [OT] Allow adding features with fallback implementation
 
 
     [OT] Allow adding features with fallback implementation
 
- src/hb-ot-map-private.hh |    7 ++++---
- src/hb-ot-map.cc        |    6 ++++--
+ src/hb-ot-map-private.hh | 7 ++++---
+ src/hb-ot-map.cc        | 6 ++++--
  2 files changed, 8 insertions(+), 5 deletions(-)
 
 commit 1d3947a6bda6986c9c7d993589053051c119cc81
  2 files changed, 8 insertions(+), 5 deletions(-)
 
 commit 1d3947a6bda6986c9c7d993589053051c119cc81
@@ -2029,8 +13468,8 @@ Date:    Tue Sep 4 22:42:17 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gpos-table.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh |    2 +-
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit b3b89b66586897a69b410ef02e7434691de84ae6
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit b3b89b66586897a69b410ef02e7434691de84ae6
@@ -2039,9 +13478,9 @@ Date:    Tue Sep 4 21:13:17 2012 -0400
 
     [OT] Add SubstLookup serialize API
 
 
     [OT] Add SubstLookup serialize API
 
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gsub-table.hh     |  65
- +++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout-common-private.hh |  2 +-
+ src/hb-ot-layout-gsub-table.hh     | 65
+ +++++++++++++++++++++++++++++++++++++-
  2 files changed, 65 insertions(+), 2 deletions(-)
 
 commit 715e03bc21d6adaa8e1f647235843839dc47dad1
  2 files changed, 65 insertions(+), 2 deletions(-)
 
 commit 715e03bc21d6adaa8e1f647235843839dc47dad1
@@ -2050,8 +13489,8 @@ Date:    Tue Sep 4 20:10:17 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh |   7 ++-----
- 1 files changed, 2 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
 
 commit 652d1e0d64e47313ead2fc8318d1236f0e0d80ca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 652d1e0d64e47313ead2fc8318d1236f0e0d80ca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2059,8 +13498,8 @@ Date:    Tue Sep 4 20:00:44 2012 -0400
 
     [OT] Start adding Lookup-level serialize API
 
 
     [OT] Start adding Lookup-level serialize API
 
- src/hb-ot-layout-common-private.hh |  20 +++++++++++++++++++-
- 1 files changed, 19 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
 
 commit a930c68e9c50aade78c1eb0eef075c9c117e4ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a930c68e9c50aade78c1eb0eef075c9c117e4ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2068,10 +13507,10 @@ Date:  Tue Sep 4 18:17:57 2012 -0400
 
     [OT] More serialize.  Implements all basic GSUB subtables
 
 
     [OT] More serialize.  Implements all basic GSUB subtables
 
- src/hb-open-type-private.hh       |   53 +++++++++++++++-
- src/hb-ot-layout-common-private.hh |   8 ++-
- src/hb-ot-layout-gsub-table.hh     |  125
- ++++++++++++++++++++++++++++--------
+ src/hb-open-type-private.hh       |  53 +++++++++++++++-
+ src/hb-ot-layout-common-private.hh |  8 ++-
+ src/hb-ot-layout-gsub-table.hh     | 125
+ +++++++++++++++++++++++++++++--------
  3 files changed, 156 insertions(+), 30 deletions(-)
 
 commit 1b38b4e817d871b9549be65af6030bd0eea7f775
  3 files changed, 156 insertions(+), 30 deletions(-)
 
 commit 1b38b4e817d871b9549be65af6030bd0eea7f775
@@ -2080,8 +13519,8 @@ Date:    Tue Sep 4 18:17:21 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit f7e81ce0b882aa942ae33c787e741c5e8e5a0173
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f7e81ce0b882aa942ae33c787e741c5e8e5a0173
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2089,9 +13528,9 @@ Date:    Tue Sep 4 15:32:37 2012 -0400
 
     0.9.4
 
 
     0.9.4
 
- NEWS        |   18 ++++++++++++++++++
- configure.ac |    2 +-
- 2 files changed, 19 insertions(+), 1 deletions(-)
+ NEWS        | 18 ++++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
 
 commit 2bd9fe359839a653f7caae534bf768af1735f155
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2bd9fe359839a653f7caae534bf768af1735f155
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2099,11 +13538,11 @@ Date:  Tue Sep 4 15:15:19 2012 -0400
 
     Refactor
 
 
     Refactor
 
- src/hb-ot-layout-gpos-table.hh       |    7 ++-----
- src/hb-ot-layout-gsub-table.hh       |   16 +++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |   13 +++----------
- src/hb-ot-layout.cc                 |   23 +++++++++++++++++------
- src/hb-ot-shape-complex-arabic.cc    |    4 +---
+ src/hb-ot-layout-gpos-table.hh       |  7 ++-----
+ src/hb-ot-layout-gsub-table.hh       | 16 +++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh | 13 +++----------
+ src/hb-ot-layout.cc                 | 23 +++++++++++++++++------
+ src/hb-ot-shape-complex-arabic.cc    |  4 +---
  5 files changed, 28 insertions(+), 35 deletions(-)
 
 commit a5ddd9e31cd7906c4b559aa5b2fafdae4b9c8935
  5 files changed, 28 insertions(+), 35 deletions(-)
 
 commit a5ddd9e31cd7906c4b559aa5b2fafdae4b9c8935
@@ -2112,9 +13551,9 @@ Date:    Tue Sep 4 14:55:00 2012 -0400
 
     [OT] Really fix possible NULL dereference this time
 
 
     [OT] Really fix possible NULL dereference this time
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- src/hb-ot-layout.cc                 |    6 +++---
- src/hb-ot-shape-complex-arabic.cc    |    4 +++-
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ src/hb-ot-layout.cc                 | 6 +++---
+ src/hb-ot-shape-complex-arabic.cc    | 4 +++-
  3 files changed, 10 insertions(+), 8 deletions(-)
 
 commit 29416833584d7831ece84aaeada6f5ebba7828c0
  3 files changed, 10 insertions(+), 8 deletions(-)
 
 commit 29416833584d7831ece84aaeada6f5ebba7828c0
@@ -2123,8 +13562,8 @@ Date:    Mon Sep 3 23:31:14 2012 -0400
 
     [OT] Implement serialize() for AlternateSubst
 
 
     [OT] Implement serialize() for AlternateSubst
 
- src/hb-ot-layout-gsub-table.hh |   33 +++++++++++++++++++++++++++++++++
- 1 files changed, 33 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
 
 commit 1f07e3382a1608b054cbf88b89fef74f6c485434
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1f07e3382a1608b054cbf88b89fef74f6c485434
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2132,10 +13571,10 @@ Date:  Mon Sep 3 23:28:34 2012 -0400
 
     [OT] Implement serialize() for MultiSubst
 
 
     [OT] Implement serialize() for MultiSubst
 
- src/hb-open-type-private.hh   |   10 +++++++++
- src/hb-ot-layout-gsub-table.hh |   43
- ++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 53 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh   | 10 ++++++++++
+ src/hb-ot-layout-gsub-table.hh | 43
+ ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 53 insertions(+)
 
 commit 4912030dfba740c822e200d33cbb5c6dbbeaf79e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4912030dfba740c822e200d33cbb5c6dbbeaf79e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2143,8 +13582,8 @@ Date:    Mon Sep 3 20:58:03 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh   |    4 ++--
- src/hb-ot-layout-gsub-table.hh |    4 ++--
+ src/hb-open-type-private.hh   | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f8fa2b5cf67b02d74514dec7885d03de73ec7349
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f8fa2b5cf67b02d74514dec7885d03de73ec7349
@@ -2155,8 +13594,8 @@ Date:    Mon Sep 3 20:19:46 2012 -0400
 
     As reported by Kenichi Ishibashi.
 
 
     As reported by Kenichi Ishibashi.
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4b312fb288faa383a2c5bd3be0428f0e58e02699
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4b312fb288faa383a2c5bd3be0428f0e58e02699
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2166,8 +13605,8 @@ Date:    Sat Sep 1 21:56:06 2012 -0400
 
     Will reintroduce in a different way when we actually need it.
 
 
     Will reintroduce in a different way when we actually need it.
 
- src/hb-open-type-private.hh |  24 +++++++++++-------------
- 1 files changed, 11 insertions(+), 13 deletions(-)
+ src/hb-open-type-private.hh | 24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
 
 commit c61be03d6df122f18eebda3b29e42c9e768d45b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c61be03d6df122f18eebda3b29e42c9e768d45b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2175,10 +13614,10 @@ Date:  Sat Sep 1 21:43:38 2012 -0400
 
     [OT] A bit more serialize
 
 
     [OT] A bit more serialize
 
- src/hb-open-type-private.hh       |   14 +++++++++++
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gsub-table.hh     |  43
- ++++++++++++++++++++++++++++++++++-
+ src/hb-open-type-private.hh       | 14 +++++++++++++
+ src/hb-ot-layout-common-private.hh |  2 +-
+ src/hb-ot-layout-gsub-table.hh     | 43
+ ++++++++++++++++++++++++++++++++++++--
  3 files changed, 56 insertions(+), 3 deletions(-)
 
 commit abcc5ac1fde1c493e4055dd2f27b8aade7713156
  3 files changed, 56 insertions(+), 3 deletions(-)
 
 commit abcc5ac1fde1c493e4055dd2f27b8aade7713156
@@ -2189,8 +13628,8 @@ Date:    Sat Sep 1 21:30:17 2012 -0400
 
     For some definition of improvement...
 
 
     For some definition of improvement...
 
- src/hb-open-type-private.hh   |    6 ++++--
- src/hb-ot-layout-gsub-table.hh |    3 +--
+ src/hb-open-type-private.hh   | 6 ++++--
+ src/hb-ot-layout-gsub-table.hh | 3 +--
  2 files changed, 5 insertions(+), 4 deletions(-)
 
 commit bc5be24014371ceb811b9ffd37062ede63d87bb1
  2 files changed, 5 insertions(+), 4 deletions(-)
 
 commit bc5be24014371ceb811b9ffd37062ede63d87bb1
@@ -2199,10 +13638,10 @@ Date:  Sat Sep 1 20:48:22 2012 -0400
 
     [OT] Restart work on serialize()
 
 
     [OT] Restart work on serialize()
 
- src/hb-open-type-private.hh       |   39 +++++++++++++++++-----
- src/hb-ot-layout-common-private.hh |  61
- +++++++++++++++++------------------
- src/hb-ot-layout-gsub-table.hh     |  13 ++++++++
+ src/hb-open-type-private.hh       | 39 ++++++++++++++++++------
+ src/hb-ot-layout-common-private.hh | 61
+ +++++++++++++++++++-------------------
+ src/hb-ot-layout-gsub-table.hh     | 13 ++++++++
  3 files changed, 73 insertions(+), 40 deletions(-)
 
 commit 6912e476dd92639c3ddf07ca51c8d4a262c8b3a5
  3 files changed, 73 insertions(+), 40 deletions(-)
 
 commit 6912e476dd92639c3ddf07ca51c8d4a262c8b3a5
@@ -2221,8 +13660,8 @@ Date:    Sat Sep 1 20:38:45 2012 -0400
 
     I'm not willing to address the first case.
 
 
     I'm not willing to address the first case.
 
- src/hb-ot-shape.cc |  32 ++++++++++++++++++++++++++++++++
- 1 files changed, 32 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
 
 commit 1d581ec384bc1780995e32e1c44103af57596eda
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1d581ec384bc1780995e32e1c44103af57596eda
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2232,9 +13671,9 @@ Date:    Sat Sep 1 20:06:26 2012 -0400
 
     Not perfect, but so is fallback positioning in 2012...
 
 
     Not perfect, but so is fallback positioning in 2012...
 
- src/hb-ot-shape-fallback.cc |  56
- +++++++++++++++++++++++++++++++++++-------
- 1 files changed, 46 insertions(+), 10 deletions(-)
+ src/hb-ot-shape-fallback.cc | 56
+ +++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 46 insertions(+), 10 deletions(-)
 
 commit 3992b5ec4cb43d114d87ff7ee2b992bcf819c9cd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3992b5ec4cb43d114d87ff7ee2b992bcf819c9cd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2242,11 +13681,11 @@ Date:  Sat Sep 1 19:20:41 2012 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-shape-fallback-private.hh |   5 ++++
- src/hb-ot-shape-fallback.cc        |   46
- +++++++++++++++++++++++-----------
- src/hb-ot-shape-private.hh         |    6 ++++
- src/hb-ot-shape.cc                 |    4 +++
+ src/hb-ot-shape-fallback-private.hh | 5 ++++
+ src/hb-ot-shape-fallback.cc        | 46
+ +++++++++++++++++++++++++------------
+ src/hb-ot-shape-private.hh         |  6 +++++
+ src/hb-ot-shape.cc                 |  4 ++++
  4 files changed, 46 insertions(+), 15 deletions(-)
 
 commit b85800f9de8976a7418ef9df467d3080c6ab0199
  4 files changed, 46 insertions(+), 15 deletions(-)
 
 commit b85800f9de8976a7418ef9df467d3080c6ab0199
@@ -2270,14 +13709,14 @@ Date:  Fri Aug 31 18:12:01 2012 -0400
     would have formed a correct cluster."  That works better for split
     stuff, and I like it more.
 
     would have formed a correct cluster."  That works better for split
     stuff, and I like it more.
 
- src/hb-buffer-private.hh                |    1 +
- src/hb-buffer.cc                        |   10 ++++
- src/hb-ot-shape-complex-indic-machine.rl |    4 +-
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc        |   67
- +++++++++++++++++++++++++++---
- src/hb-ot-shape-normalize-private.hh    |    1 +
- src/hb-ot-shape-normalize.cc            |   11 +++--
+ src/hb-buffer-private.hh                |  1 +
+ src/hb-buffer.cc                        | 10 +++++
+ src/hb-ot-shape-complex-indic-machine.rl |  4 +-
+ src/hb-ot-shape-complex-indic-private.hh |  2 +-
+ src/hb-ot-shape-complex-indic.cc        | 67
+ +++++++++++++++++++++++++++++---
+ src/hb-ot-shape-normalize-private.hh    |  1 +
+ src/hb-ot-shape-normalize.cc            | 11 +++---
  7 files changed, 83 insertions(+), 13 deletions(-)
 
 commit 327d14ef188396006d54af976506ab6f8bb2869a
  7 files changed, 83 insertions(+), 13 deletions(-)
 
 commit 327d14ef188396006d54af976506ab6f8bb2869a
@@ -2286,9 +13725,9 @@ Date:    Fri Aug 31 16:49:34 2012 -0400
 
     [Indic] Start adding dotted-circle instrastructure
 
 
     [Indic] Start adding dotted-circle instrastructure
 
- src/hb-ot-shape-complex-indic-machine.rl |   19 ++++++------
- src/hb-ot-shape-complex-indic.cc        |   46
- +++++++++++++++++++++++++++--
+ src/hb-ot-shape-complex-indic-machine.rl | 19 +++++++------
+ src/hb-ot-shape-complex-indic.cc        | 46
+ +++++++++++++++++++++++++++++---
  2 files changed, 51 insertions(+), 14 deletions(-)
 
 commit 1be368e96fb7de8c77bf992874e0d5bd6b272ebe
  2 files changed, 51 insertions(+), 14 deletions(-)
 
 commit 1be368e96fb7de8c77bf992874e0d5bd6b272ebe
@@ -2297,8 +13736,8 @@ Date:    Fri Aug 31 16:29:17 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-buffer-private.hh |   16 +++++++++++++++-
- src/hb-buffer.cc        |   15 ---------------
+ src/hb-buffer-private.hh | 16 +++++++++++++++-
+ src/hb-buffer.cc        | 15 ---------------
  2 files changed, 15 insertions(+), 16 deletions(-)
 
 commit 784f29d061a2939562eca0c4943feb01174aee00
  2 files changed, 15 insertions(+), 16 deletions(-)
 
 commit 784f29d061a2939562eca0c4943feb01174aee00
@@ -2307,8 +13746,8 @@ Date:    Fri Aug 31 14:06:26 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |  12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit 5a7f18767a87a3f07269d0814f984a98f86ab852
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5a7f18767a87a3f07269d0814f984a98f86ab852
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2316,8 +13755,8 @@ Date:    Thu Aug 30 22:53:29 2012 -0400
 
     [OT] Better fallback-position Thai / Lao ccc!=0 marks
 
 
     [OT] Better fallback-position Thai / Lao ccc!=0 marks
 
- src/hb-ot-shape-fallback.cc |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-fallback.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 9f2348de58f0f85593027378169bc03c4dd64e59
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9f2348de58f0f85593027378169bc03c4dd64e59
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2325,9 +13764,9 @@ Date:    Wed Aug 29 21:08:59 2012 -0400
 
     [OT] Add serialize() for Coverage
 
 
     [OT] Add serialize() for Coverage
 
- src/hb-open-type-private.hh       |   34 ++++++++++++++++---
- src/hb-ot-layout-common-private.hh |  62
- ++++++++++++++++++++++++++++++++++++
+ src/hb-open-type-private.hh       | 34 +++++++++++++++++----
+ src/hb-ot-layout-common-private.hh | 62
+ ++++++++++++++++++++++++++++++++++++++
  2 files changed, 90 insertions(+), 6 deletions(-)
 
 commit e901b954c6ec44ac3ae7fb3c326e6e7a40718e4b
  2 files changed, 90 insertions(+), 6 deletions(-)
 
 commit e901b954c6ec44ac3ae7fb3c326e6e7a40718e4b
@@ -2336,9 +13775,9 @@ Date:    Wed Aug 29 20:26:08 2012 -0400
 
     [OT] Start adding serialize() API
 
 
     [OT] Start adding serialize() API
 
- src/hb-open-type-private.hh |  77
- +++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 77 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 77
+ +++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 77 insertions(+)
 
 commit 965c280de09b49d711cb78d629da321c802084de
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 965c280de09b49d711cb78d629da321c802084de
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2348,9 +13787,9 @@ Date:    Wed Aug 29 13:59:16 2012 -0400
 
     To be used in places we access buffer vars...
 
 
     To be used in places we access buffer vars...
 
- src/hb-buffer-private.hh |    3 +++
- src/hb-buffer.cc        |   16 ++++++++++++++++
- 2 files changed, 19 insertions(+), 0 deletions(-)
+ src/hb-buffer-private.hh |  3 +++
+ src/hb-buffer.cc        | 16 ++++++++++++++++
+ 2 files changed, 19 insertions(+)
 
 commit 0ccf9b64736559a230425fd131c9eb8aa3048221
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0ccf9b64736559a230425fd131c9eb8aa3048221
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2358,8 +13797,8 @@ Date:    Wed Aug 29 11:53:26 2012 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-shape.cc |  21 ++++++++++-----------
- 1 files changed, 10 insertions(+), 11 deletions(-)
+ src/hb-ot-shape.cc | 21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
 
 commit 2fcbbdb41a322f54b61d9ce983ab54434504c5ed
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2fcbbdb41a322f54b61d9ce983ab54434504c5ed
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2377,10 +13816,10 @@ Date:  Wed Aug 29 11:11:54 2012 -0400
     a better
     idea.  The current approach has way too many layering violations...
 
     a better
     idea.  The current approach has way too many layering violations...
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++
- src/hb-ot-shape-complex-arabic.cc    |   72
- +++++++++++++++++++++++-----------
- src/hb-ot-shape.cc                  |    4 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++
+ src/hb-ot-shape-complex-arabic.cc    | 72
+ ++++++++++++++++++++++++------------
+ src/hb-ot-shape.cc                  |  4 +-
  3 files changed, 56 insertions(+), 24 deletions(-)
 
 commit 5e399a8a45bddb49e06e2ca39df1ed04398c0aff
  3 files changed, 56 insertions(+), 24 deletions(-)
 
 commit 5e399a8a45bddb49e06e2ca39df1ed04398c0aff
@@ -2389,9 +13828,9 @@ Date:    Wed Aug 29 10:40:49 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh       |    1 -
- src/hb-ot-layout-gsubgpos-private.hh |    1 -
- 2 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-table.hh       | 1 -
+ src/hb-ot-layout-gsubgpos-private.hh | 1 -
+ 2 files changed, 2 deletions(-)
 
 commit a177d027d1d0ad9539e30ed75d8652e0e8da20ff
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a177d027d1d0ad9539e30ed75d8652e0e8da20ff
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2399,10 +13838,10 @@ Date:  Tue Aug 28 23:18:22 2012 -0400
 
     [GSUB] Move ligation logic over
 
 
     [GSUB] Move ligation logic over
 
- src/hb-ot-layout-gsub-table.hh       |   78
- ++++-----------------------------
- src/hb-ot-layout-gsubgpos-private.hh |   80
- ++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsub-table.hh       | 78
+ ++++-------------------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 80
+ ++++++++++++++++++++++++++++++++++++
  2 files changed, 89 insertions(+), 69 deletions(-)
 
 commit 191fa885d9e0a2dce92dd8727cddd18495e62409
  2 files changed, 89 insertions(+), 69 deletions(-)
 
 commit 191fa885d9e0a2dce92dd8727cddd18495e62409
@@ -2413,10 +13852,10 @@ Date:  Tue Aug 28 22:58:55 2012 -0400
 
     Looks better now...
 
 
     Looks better now...
 
- TODO                                |    4 --
- src/hb-ot-layout-gsub-table.hh       |   71
- ++++++---------------------------
- src/hb-ot-layout-gsubgpos-private.hh |   29 +++++++++++++-
+ TODO                                |  4 --
+ src/hb-ot-layout-gsub-table.hh       | 71
+ +++++++-----------------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 29 ++++++++++++++-
  3 files changed, 40 insertions(+), 64 deletions(-)
 
 commit 93814ca7dc2a7251f861c1c47ba155ba6e6bdf19
  3 files changed, 40 insertions(+), 64 deletions(-)
 
 commit 93814ca7dc2a7251f861c1c47ba155ba6e6bdf19
@@ -2425,10 +13864,10 @@ Date:  Tue Aug 28 22:24:51 2012 -0400
 
     Start converging Ligature and match_input
 
 
     Start converging Ligature and match_input
 
- src/hb-ot-layout-gsub-table.hh       |   58
- ++++++++++++++++---------------
- src/hb-ot-layout-gsubgpos-private.hh |   62
- ++++++++++++++++++++++++++--------
+ src/hb-ot-layout-gsub-table.hh       | 58
+ +++++++++++++++++----------------
+ src/hb-ot-layout-gsubgpos-private.hh | 62
+ ++++++++++++++++++++++++++++--------
  2 files changed, 78 insertions(+), 42 deletions(-)
 
 commit 2eef71737ea29ffadbb5a2be4a898b44f53f66ac
  2 files changed, 78 insertions(+), 42 deletions(-)
 
 commit 2eef71737ea29ffadbb5a2be4a898b44f53f66ac
@@ -2437,14 +13876,14 @@ Date:  Tue Aug 28 19:16:38 2012 -0400
 
     [hb-icu-le] Add visbility
 
 
     [hb-icu-le] Add visbility
 
- src/hb-icu-le/FontTableCache.h                |    6 ++++-
- src/hb-icu-le/PortableFontInstance.cpp |   39
- --------------------------------
- src/hb-icu-le/PortableFontInstance.h  |    7 ++++-
- src/hb-icu-le/cmaps.cpp               |    2 +-
- src/hb-icu-le/cmaps.h                 |    5 +++-
- src/hb-icu-le/letest.h                        |   14 +++++++++++
- src/hb-icu-le/sfnt.h                  |    6 ++++-
+ src/hb-icu-le/FontTableCache.h                |  6 +++++-
+ src/hb-icu-le/PortableFontInstance.cpp | 39
+ ----------------------------------
+ src/hb-icu-le/PortableFontInstance.h  |  7 ++++--
+ src/hb-icu-le/cmaps.cpp               |  2 +-
+ src/hb-icu-le/cmaps.h                 |  5 ++++-
+ src/hb-icu-le/letest.h                        | 14 ++++++++++++
+ src/hb-icu-le/sfnt.h                  |  6 +++++-
  7 files changed, 34 insertions(+), 45 deletions(-)
 
 commit d59e28e49204ed609d8a1bf3c0f21ab5fc178337
  7 files changed, 34 insertions(+), 45 deletions(-)
 
 commit d59e28e49204ed609d8a1bf3c0f21ab5fc178337
@@ -2453,9 +13892,9 @@ Date:    Tue Aug 28 19:08:36 2012 -0400
 
     Minor
 
 
     Minor
 
- src/Makefile.am          |    6 +++++-
- src/check-libstdc++.sh    |   2 +-
- src/check-static-inits.sh |   4 ++--
+ src/Makefile.am          | 6 +++++-
+ src/check-libstdc++.sh    | 2 +-
+ src/check-static-inits.sh | 4 ++--
  3 files changed, 8 insertions(+), 4 deletions(-)
 
 commit af169d2813ff8075288cd4a7811f0715e4fea3da
  3 files changed, 8 insertions(+), 4 deletions(-)
 
 commit af169d2813ff8075288cd4a7811f0715e4fea3da
@@ -2464,8 +13903,8 @@ Date:    Tue Aug 28 19:08:22 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-icu-le/PortableFontInstance.h |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-icu-le/PortableFontInstance.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 52ff2681d88886e2165ced397966ba29c2073583
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52ff2681d88886e2165ced397966ba29c2073583
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2473,8 +13912,8 @@ Date:    Tue Aug 28 18:03:35 2012 -0400
 
     Use VisualStudio-style atomic intrinsics on mingw32
 
 
     Use VisualStudio-style atomic intrinsics on mingw32
 
- src/hb-atomic-private.hh |   25 ++++++++++++++++++-------
- 1 files changed, 18 insertions(+), 7 deletions(-)
+ src/hb-atomic-private.hh | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
 
 commit 7c8e844d92aa604fc4b396343721ea90eb83adb8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7c8e844d92aa604fc4b396343721ea90eb83adb8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2484,24 +13923,24 @@ Date:  Tue Aug 28 17:57:49 2012 -0400
 
     Avoids USHORT, SHORT, ULONG, LONG clashes with Windows API.
 
 
     Avoids USHORT, SHORT, ULONG, LONG clashes with Windows API.
 
- src/hb-font.cc                              |   12 ++--
- src/hb-open-file-private.hh         |    4 ++
- src/hb-open-type-private.hh         |    9 ++--
- src/hb-ot-head-table.hh             |    4 ++
- src/hb-ot-hhea-table.hh             |    5 ++
- src/hb-ot-hmtx-table.hh             |    6 ++
- src/hb-ot-layout-common-private.hh   |    5 ++
- src/hb-ot-layout-gdef-table.hh       |    4 ++
- src/hb-ot-layout-gpos-table.hh       |    4 ++
- src/hb-ot-layout-gsub-table.hh       |    4 ++
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++
- src/hb-ot-layout-private.hh         |   12 +++-
- src/hb-ot-layout.cc                 |   91
- +++++++++++++++++-----------------
- src/hb-ot-maxp-table.hh             |    4 ++
- src/hb-ot-name-table.hh             |    4 ++
- src/hb-uniscribe.cc                 |    8 +--
- src/main.cc                         |    2 +
+ src/hb-font.cc                              | 12 ++---
+ src/hb-open-file-private.hh         |  4 ++
+ src/hb-open-type-private.hh         |  9 ++--
+ src/hb-ot-head-table.hh             |  4 ++
+ src/hb-ot-hhea-table.hh             |  5 ++
+ src/hb-ot-hmtx-table.hh             |  6 +++
+ src/hb-ot-layout-common-private.hh   |  5 ++
+ src/hb-ot-layout-gdef-table.hh       |  4 ++
+ src/hb-ot-layout-gpos-table.hh       |  4 ++
+ src/hb-ot-layout-gsub-table.hh       |  4 ++
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++
+ src/hb-ot-layout-private.hh         | 12 +++--
+ src/hb-ot-layout.cc                 | 91
+ ++++++++++++++++++------------------
+ src/hb-ot-maxp-table.hh             |  4 ++
+ src/hb-ot-name-table.hh             |  4 ++
+ src/hb-uniscribe.cc                 |  8 ++--
+ src/main.cc                         |  2 +
  17 files changed, 117 insertions(+), 65 deletions(-)
 
 commit dc5df5af6b349c3d9e4ab876864d9dec8096401f
  17 files changed, 117 insertions(+), 65 deletions(-)
 
 commit dc5df5af6b349c3d9e4ab876864d9dec8096401f
@@ -2514,8 +13953,8 @@ Date:    Tue Aug 28 16:31:23 2012 -0400
 
     I know remember why that line is there :).
 
 
     I know remember why that line is there :).
 
- src/hb-ot-shape-complex-arabic.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2523,8 +13962,8 @@ Date:    Mon Aug 27 17:10:02 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-arabic.cc |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 667218a5b134728863a318c73070f4e323590bbd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 667218a5b134728863a318c73070f4e323590bbd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2532,8 +13971,8 @@ Date:    Mon Aug 27 17:00:44 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-fallback.cc |   4 +---
- 1 files changed, 1 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-fallback.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
 
 commit 30dd62251fcd04c2cbaa9b979d47ddbf62c6d460
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 30dd62251fcd04c2cbaa9b979d47ddbf62c6d460
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2544,8 +13983,8 @@ Date:    Mon Aug 27 16:54:34 2012 -0400
     Previously, ccc=0 Thai / Lao marks were being
     mispositioned.  Don't touch them.
 
     Previously, ccc=0 Thai / Lao marks were being
     mispositioned.  Don't touch them.
 
- src/hb-ot-shape-fallback.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-fallback.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e1ba62811a61afb046d349e578cd141363c7fb34
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e1ba62811a61afb046d349e578cd141363c7fb34
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2553,8 +13992,8 @@ Date:    Mon Aug 27 16:28:05 2012 -0400
 
     Center unknown marks horizontally
 
 
     Center unknown marks horizontally
 
- src/hb-ot-shape-fallback.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-fallback.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit a4e75e4128751bb902117abc1a59dce4f2147672
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a4e75e4128751bb902117abc1a59dce4f2147672
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2562,8 +14001,8 @@ Date:    Mon Aug 27 15:54:15 2012 -0400
 
     Minor
 
 
     Minor
 
- test/shaping/hb_test_tools.py |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/shaping/hb_test_tools.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 23b0e9d7dc801e11640979af3c2b00649a519bb1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 23b0e9d7dc801e11640979af3c2b00649a519bb1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2573,8 +14012,8 @@ Date:    Sun Aug 26 14:30:18 2012 -0400
 
     D'oh.  Was working by pure chance :)).
 
 
     D'oh.  Was working by pure chance :)).
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ae4d4e1de6b4512576080e95896383887b30982f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae4d4e1de6b4512576080e95896383887b30982f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2582,8 +14021,8 @@ Date:    Sun Aug 26 14:27:44 2012 -0400
 
     Bug 53815 - CoreText backend doesn't link
 
 
     Bug 53815 - CoreText backend doesn't link
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ec0e46376a2afec4ff7606f95582b0ec49c2a44a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec0e46376a2afec4ff7606f95582b0ec49c2a44a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2591,8 +14030,8 @@ Date:    Fri Aug 24 00:44:53 2012 -0400
 
     Remove TODO items
 
 
     Remove TODO items
 
- TODO |    4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ TODO | 4 ----
+ 1 file changed, 4 deletions(-)
 
 commit 56e878ab875ff06d74702145e380e198be967bd6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 56e878ab875ff06d74702145e380e198be967bd6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2600,9 +14039,9 @@ Date:    Fri Aug 24 00:41:51 2012 -0400
 
     [graphite2] Cleanup scratch buffer allocation
 
 
     [graphite2] Cleanup scratch buffer allocation
 
- src/hb-graphite2.cc |  77
- +++++++++++++++++++++++++++++----------------------
- 1 files changed, 44 insertions(+), 33 deletions(-)
+ src/hb-graphite2.cc | 77
+ ++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 44 insertions(+), 33 deletions(-)
 
 commit 2f7586c6229096143ca0a96712a27416ee0d3c85
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f7586c6229096143ca0a96712a27416ee0d3c85
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2610,11 +14049,11 @@ Date:  Thu Aug 23 23:59:55 2012 -0400
 
     [icu-le] Implement icu layout engine shaper
 
 
     [icu-le] Implement icu layout engine shaper
 
- configure.ac         |    2 +-
- src/hb-icu-le.cc      |  113
- ++++++++++++++++++++++++++++++++++++++++++++----
- src/hb-icu-le/cmaps.h |    1 -
- src/hb-shaper-list.hh |    4 ++
+ configure.ac         |   2 +-
+ src/hb-icu-le.cc      | 113
+ +++++++++++++++++++++++++++++++++++++++++++++-----
+ src/hb-icu-le/cmaps.h |   1 -
+ src/hb-shaper-list.hh |   4 ++
  4 files changed, 108 insertions(+), 12 deletions(-)
 
 commit ba7f6c3797e5b440557bacd9b666bf09713dca76
  4 files changed, 108 insertions(+), 12 deletions(-)
 
 commit ba7f6c3797e5b440557bacd9b666bf09713dca76
@@ -2623,13 +14062,13 @@ Date:  Thu Aug 23 21:52:44 2012 -0400
 
     [icu-le] Hook up to hb_face_t
 
 
     [icu-le] Hook up to hb_face_t
 
- src/hb-icu-le.cc                      |   17 +++-
- src/hb-icu-le/FontTableCache.cpp      |   34 ++++----
- src/hb-icu-le/FontTableCache.h                |    9 ++-
- src/hb-icu-le/PortableFontInstance.cpp |  144
- +++-----------------------------
- src/hb-icu-le/PortableFontInstance.h  |   21 ++---
- src/hb-icu-le/README                  |    1 +
+ src/hb-icu-le.cc                      |  17 +++-
+ src/hb-icu-le/FontTableCache.cpp      |  34 ++++----
+ src/hb-icu-le/FontTableCache.h                |   9 ++-
+ src/hb-icu-le/PortableFontInstance.cpp | 144
+ +++------------------------------
+ src/hb-icu-le/PortableFontInstance.h  |  21 ++---
+ src/hb-icu-le/README                  |   1 +
  6 files changed, 57 insertions(+), 169 deletions(-)
 
 commit e96bb36995b2a5321b4d32bb11906e1701aaf115
  6 files changed, 57 insertions(+), 169 deletions(-)
 
 commit e96bb36995b2a5321b4d32bb11906e1701aaf115
@@ -2638,8 +14077,8 @@ Date:    Thu Aug 23 21:37:51 2012 -0400
 
     [icu-le] Actually use the FontTableCache
 
 
     [icu-le] Actually use the FontTableCache
 
- src/hb-icu-le/PortableFontInstance.cpp |   25 ++++++++-----------------
- 1 files changed, 8 insertions(+), 17 deletions(-)
+ src/hb-icu-le/PortableFontInstance.cpp | 25 ++++++++-----------------
+ 1 file changed, 8 insertions(+), 17 deletions(-)
 
 commit 7d242364ea647f655a7092bda25f9a10774c57f5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7d242364ea647f655a7092bda25f9a10774c57f5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2649,23 +14088,23 @@ Date:  Thu Aug 23 21:23:41 2012 -0400
 
     Import PortableFontInstance and add shaper stub.
 
 
     Import PortableFontInstance and add shaper stub.
 
- configure.ac                          |    9 +
- src/Makefile.am                       |    8 +
- src/hb-icu-le.cc                      |  111 ++++++++
- src/hb-icu-le/FontTableCache.cpp      |   91 +++++++
- src/hb-icu-le/FontTableCache.h                |   41 +++
- src/hb-icu-le/Makefile.am             |   25 ++
- src/hb-icu-le/PortableFontInstance.cpp |  436
- +++++++++++++++++++++++++++++++
- src/hb-icu-le/PortableFontInstance.h  |  117 +++++++++
- src/hb-icu-le/README                  |    2 +
- src/hb-icu-le/cmaps.cpp               |  200 ++++++++++++++
- src/hb-icu-le/cmaps.h                 |   85 ++++++
- src/hb-icu-le/letest.h                        |   49 ++++
- src/hb-icu-le/license.html            |   51 ++++
- src/hb-icu-le/sfnt.h                  |  449
+ configure.ac                          |   9 +
+ src/Makefile.am                       |   8 +
+ src/hb-icu-le.cc                      | 111 ++++++++
+ src/hb-icu-le/FontTableCache.cpp      |  91 +++++++
+ src/hb-icu-le/FontTableCache.h                |  41 +++
+ src/hb-icu-le/Makefile.am             |  25 ++
+ src/hb-icu-le/PortableFontInstance.cpp | 436
  ++++++++++++++++++++++++++++++++
  ++++++++++++++++++++++++++++++++
- 14 files changed, 1674 insertions(+), 0 deletions(-)
+ src/hb-icu-le/PortableFontInstance.h  | 117 +++++++++
+ src/hb-icu-le/README                  |   2 +
+ src/hb-icu-le/cmaps.cpp               | 200 +++++++++++++++
+ src/hb-icu-le/cmaps.h                 |  85 +++++++
+ src/hb-icu-le/letest.h                        |  49 ++++
+ src/hb-icu-le/license.html            |  51 ++++
+ src/hb-icu-le/sfnt.h                  | 449
+ +++++++++++++++++++++++++++++++++
+ 14 files changed, 1674 insertions(+)
 
 commit b5584ee4be46b47e1678acf28426970a6d670b4f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b5584ee4be46b47e1678acf28426970a6d670b4f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2678,8 +14117,8 @@ Date:    Thu Aug 23 16:26:07 2012 -0400
     doing this.  Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf.
     Doesn't regress new-spec or other scripts.
 
     doing this.  Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf.
     Doesn't regress new-spec or other scripts.
 
- src/hb-ot-shape-complex-indic.cc |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit d9b204d3d24cde165167714728bf380267903d6a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d9b204d3d24cde165167714728bf380267903d6a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2689,13 +14128,13 @@ Date:  Thu Aug 23 16:22:28 2012 -0400
 
     To be used in the next patch.
 
 
     To be used in the next patch.
 
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++++--
- src/hb-ot-layout-private.hh         |    3 ++-
- src/hb-ot-layout.cc                 |   14 ++++++++------
- src/hb-ot-layout.h                  |    7 ++++---
- src/hb-ot-map.cc                    |   12 ++----------
- src/hb-ot-shape-complex-indic.cc     |    2 +-
- src/test-would-substitute.cc        |    2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  6 ++++--
+ src/hb-ot-layout-private.hh         |  3 ++-
+ src/hb-ot-layout.cc                 | 14 ++++++++------
+ src/hb-ot-layout.h                  |  7 ++++---
+ src/hb-ot-map.cc                    | 12 ++----------
+ src/hb-ot-shape-complex-indic.cc     |  2 +-
+ src/test-would-substitute.cc        |  2 +-
  7 files changed, 22 insertions(+), 24 deletions(-)
 
 commit 1f2bb172fe9a173ecfd61054f1fdd850943ef059
  7 files changed, 22 insertions(+), 24 deletions(-)
 
 commit 1f2bb172fe9a173ecfd61054f1fdd850943ef059
@@ -2710,8 +14149,8 @@ Date:    Thu Aug 23 16:10:37 2012 -0400
     improved it.  I'll redo it, differentiating between old-spec and
     new-spec cases.
 
     improved it.  I'll redo it, differentiating between old-spec and
     new-spec cases.
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 +++-----
- 1 files changed, 3 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
 
 commit 24dd4e56743c6ce5e01cb710ca9e01b3e527af58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 24dd4e56743c6ce5e01cb710ca9e01b3e527af58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2748,8 +14187,8 @@ Date:    Thu Aug 23 15:47:10 2012 -0400
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 6732d62e78b13842ead9549c97bede25c73976cb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6732d62e78b13842ead9549c97bede25c73976cb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2759,8 +14198,8 @@ Date:    Thu Aug 23 15:19:45 2012 -0400
 
     Fixes Pa,H,Ra sequence with AnjaliNewLipi.ttf.
 
 
     Fixes Pa,H,Ra sequence with AnjaliNewLipi.ttf.
 
- src/hb-ot-shape-complex-indic.cc |    5 ++---
- 1 files changed, 2 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
 
 commit 80cd92326f8a3f48a7821e720e8ecb2072e73286
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 80cd92326f8a3f48a7821e720e8ecb2072e73286
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2796,8 +14235,8 @@ Date:    Thu Aug 23 12:06:14 2012 -0400
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
     TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
     TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit df5d5c68f3a5cab17bf4a429802a1a1a834c3456
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit df5d5c68f3a5cab17bf4a429802a1a1a834c3456
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2805,8 +14244,8 @@ Date:    Thu Aug 23 09:33:30 2012 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-ot-layout-gpos-table.hh |   20 ++++++++++----------
- 1 files changed, 10 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
 
 commit 7fe00d15da20193ca94a8ead9aee60df24074a9e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7fe00d15da20193ca94a8ead9aee60df24074a9e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2814,9 +14253,9 @@ Date:    Sat Aug 18 13:59:46 2012 -0400
 
     Release 0.9.3
 
 
     Release 0.9.3
 
- NEWS        |   16 ++++++++++++++++
- configure.ac |    2 +-
- 2 files changed, 17 insertions(+), 1 deletions(-)
+ NEWS        | 16 ++++++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
 
 commit 7068e534c4ef7ed2eb7ef8e1370fd4a449556ce8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7068e534c4ef7ed2eb7ef8e1370fd4a449556ce8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2824,8 +14263,8 @@ Date:    Sat Aug 18 13:56:10 2012 -0400
 
     Fix ChangeLog generation rule
 
 
     Fix ChangeLog generation rule
 
- Makefile.am |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2f1747ed7d28148807ad07eb8e22db3ab5c54966
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f1747ed7d28148807ad07eb8e22db3ab5c54966
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2833,8 +14272,8 @@ Date:    Thu Aug 16 11:46:46 2012 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-ot-shape-complex-arabic.cc |   4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit bd08d5d126aa878d1dbf7bfd4b1a764c170cd9ad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd08d5d126aa878d1dbf7bfd4b1a764c170cd9ad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2844,8 +14283,8 @@ Date:    Thu Aug 16 11:35:50 2012 -0400
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=782908
 
 
     https://bugzilla.mozilla.org/show_bug.cgi?id=782908
 
- src/hb-ot-shape-complex-arabic.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b161bfc4f6f2db0edea780b95b798ff7b559cf33
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b161bfc4f6f2db0edea780b95b798ff7b559cf33
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2855,8 +14294,8 @@ Date:    Thu Aug 16 08:09:44 2012 -0400
 
     Check for upstream-provided 'icu-uc' pkgconfig package.
 
 
     Check for upstream-provided 'icu-uc' pkgconfig package.
 
- configure.ac |   21 +--------------------
- 1 files changed, 1 insertions(+), 20 deletions(-)
+ configure.ac | 21 +--------------------
+ 1 file changed, 1 insertion(+), 20 deletions(-)
 
 commit daf0731865f91da960446928667d4095bde471ea
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit daf0731865f91da960446928667d4095bde471ea
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2866,8 +14305,8 @@ Date:    Thu Aug 16 07:32:59 2012 -0400
 
     As reported by Steven Loomis, including uversion.h works everywhere.
 
 
     As reported by Steven Loomis, including uversion.h works everywhere.
 
- src/hb-icu.cc |    6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
+ src/hb-icu.cc | 6 ------
+ 1 file changed, 6 deletions(-)
 
 commit a67ba9c0fe6798a3500af9f4acee8d678f5144ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a67ba9c0fe6798a3500af9f4acee8d678f5144ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2875,8 +14314,8 @@ Date:    Wed Aug 15 18:52:17 2012 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-old/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-old/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 9fe76051f7003d6b6a10486c5595bf1a4dbf5fe6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9fe76051f7003d6b6a10486c5595bf1a4dbf5fe6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2886,8 +14325,8 @@ Date:    Wed Aug 15 17:24:28 2012 -0400
 
     Oops!
 
 
     Oops!
 
- NEWS |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ NEWS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 45c1383cc7315f89c23c0ed388b99e87224884e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 45c1383cc7315f89c23c0ed388b99e87224884e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2895,10 +14334,10 @@ Date:  Tue Aug 14 09:33:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-coretext.cc      |    8 ++++----
- src/hb-fallback-shape.cc |    8 ++++----
- src/hb-graphite2.cc     |    8 ++++----
- src/hb-uniscribe.cc     |    8 ++++----
+ src/hb-coretext.cc      | 8 ++++----
+ src/hb-fallback-shape.cc | 8 ++++----
+ src/hb-graphite2.cc     | 8 ++++----
+ src/hb-uniscribe.cc     | 8 ++++----
  4 files changed, 16 insertions(+), 16 deletions(-)
 
 commit 4ac4c6f2e12ddc8bf5e750671321458218b6e0c8
  4 files changed, 16 insertions(+), 16 deletions(-)
 
 commit 4ac4c6f2e12ddc8bf5e750671321458218b6e0c8
@@ -2907,8 +14346,8 @@ Date:    Mon Aug 13 10:52:52 2012 -0400
 
     Fix ICU build with older ICUs
 
 
     Fix ICU build with older ICUs
 
- src/hb-icu.cc |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-icu.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit 883cbf5ed79d2b60191f803a5ee3f3e4496f3441
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 883cbf5ed79d2b60191f803a5ee3f3e4496f3441
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2916,8 +14355,8 @@ Date:    Sun Aug 12 17:11:27 2012 -0400
 
     Minor
 
 
     Minor
 
- contrib/README |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ contrib/README | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit b7a4d37d0b162f2222b65d09b9271b8c636086f8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b7a4d37d0b162f2222b65d09b9271b8c636086f8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2925,8 +14364,8 @@ Date:    Sat Aug 11 21:32:23 2012 -0400
 
     minor
 
 
     minor
 
- configure.ac |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit d5045a5f4017631a4660f985fe451c5a64c42ca0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d5045a5f4017631a4660f985fe451c5a64c42ca0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2937,13 +14376,13 @@ Date:  Sat Aug 11 21:26:25 2012 -0400
     It's considerably faster than the fallback implementation we had
     previously!
 
     It's considerably faster than the fallback implementation we had
     previously!
 
- src/hb-buffer.cc         |    9 ++---
- src/hb-glib.cc                   |   26 ++++++---------
- src/hb-icu.cc            |   75
- ++++++++++++++++++++++++++++++++++++---------
- src/hb-unicode-private.hh |   13 +------
- src/hb-unicode.cc        |   35 ++++++++++++++++++++-
- src/hb-warning.cc        |    8 -----
+ src/hb-buffer.cc         |  9 +++---
+ src/hb-glib.cc                   | 26 +++++++---------
+ src/hb-icu.cc            | 75
+ +++++++++++++++++++++++++++++++++++++----------
+ src/hb-unicode-private.hh | 13 ++------
+ src/hb-unicode.cc        | 35 ++++++++++++++++++++--
+ src/hb-warning.cc        |  8 -----
  6 files changed, 110 insertions(+), 56 deletions(-)
 
 commit 2b73a1f112c489c2553743c08dc03cd89f60cb2d
  6 files changed, 110 insertions(+), 56 deletions(-)
 
 commit 2b73a1f112c489c2553743c08dc03cd89f60cb2d
@@ -2952,8 +14391,8 @@ Date:    Sat Aug 11 19:17:54 2012 -0400
 
     Add TODO
 
 
     Add TODO
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 9f9f04c2229227bb0712166e824157bbbf5cef80
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9f9f04c2229227bb0712166e824157bbbf5cef80
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2966,12 +14405,12 @@ Date:  Sat Aug 11 18:34:13 2012 -0400
     shaping stage that happens before normalizing/cmap and disallow
     setup_mask modification of actual text.
 
     shaping stage that happens before normalizing/cmap and disallow
     setup_mask modification of actual text.
 
- src/hb-ot-shape-complex-arabic.cc  |  42
- ++++++++++++++++++++++++++---------
- src/hb-ot-shape-complex-indic.cc   |   1 +
- src/hb-ot-shape-complex-misc.cc    |  12 ++++++----
- src/hb-ot-shape-complex-private.hh |  15 ++++++++++--
- src/hb-ot-shape.cc                |    3 ++
+ src/hb-ot-shape-complex-arabic.cc  | 42
+ ++++++++++++++++++++++++++++----------
+ src/hb-ot-shape-complex-indic.cc   |  1 +
+ src/hb-ot-shape-complex-misc.cc    | 12 ++++++-----
+ src/hb-ot-shape-complex-private.hh | 15 +++++++++++---
+ src/hb-ot-shape.cc                |  3 +++
  5 files changed, 54 insertions(+), 19 deletions(-)
 
 commit e9f28a38f54b98fa59f9159ccaaa3be6027e1378
  5 files changed, 54 insertions(+), 19 deletions(-)
 
 commit e9f28a38f54b98fa59f9159ccaaa3be6027e1378
@@ -2980,9 +14419,9 @@ Date:    Sat Aug 11 18:20:28 2012 -0400
 
     [OT] Add shape_plan to Arabic shaper
 
 
     [OT] Add shape_plan to Arabic shaper
 
- src/hb-ot-shape-complex-arabic.cc |   82
- ++++++++++++++++++++++++-------------
- 1 files changed, 53 insertions(+), 29 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 82
+ +++++++++++++++++++++++++--------------
+ 1 file changed, 53 insertions(+), 29 deletions(-)
 
 commit 344cc56698a8c84c4c1a05a71d829e5171aa3a60
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 344cc56698a8c84c4c1a05a71d829e5171aa3a60
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2990,8 +14429,8 @@ Date:    Sat Aug 11 17:36:23 2012 -0400
 
     Add TODO
 
 
     Add TODO
 
- TODO |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ TODO | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit daf13afb0801740dcc7900c4af190e24b80a05c0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit daf13afb0801740dcc7900c4af190e24b80a05c0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2999,8 +14438,8 @@ Date:    Fri Aug 10 16:38:44 2012 -0400
 
     [OT] Implement fallback mark positioning for "double" combining marks
 
 
     [OT] Implement fallback mark positioning for "double" combining marks
 
- src/hb-ot-shape-fallback.cc |   9 ++++++++-
- 1 files changed, 8 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-fallback.cc | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
 
 commit d345313104d9e3c8a8533ccdebd74e0648d0bee3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d345313104d9e3c8a8533ccdebd74e0648d0bee3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3010,8 +14449,8 @@ Date:    Fri Aug 10 16:34:04 2012 -0400
 
     Ouch!
 
 
     Ouch!
 
- src/hb-ot-shape-fallback.cc |  13 +++++++++++--
- 1 files changed, 11 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-fallback.cc | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
 
 commit e297ee4acd6f9d950f8542fc6ad71fd580b69284
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e297ee4acd6f9d950f8542fc6ad71fd580b69284
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3021,13 +14460,13 @@ Date:  Fri Aug 10 14:49:37 2012 -0400
 
     A *real* release this time, with NEWS, ChangeLog, etc.
 
 
     A *real* release this time, with NEWS, ChangeLog, etc.
 
- AUTHORS      |    8 +++
- COPYING      |    9 +++-
- Makefile.am  |   13 +++---
- NEWS        |  136
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- THANKS       |    7 +++
- configure.ac |    4 +-
+ AUTHORS      |   8 ++++
+ COPYING      |   9 ++--
+ Makefile.am  |  13 +++---
+ NEWS        | 136
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ THANKS       |   7 +++
+ configure.ac |   4 +-
  6 files changed, 165 insertions(+), 12 deletions(-)
 
 commit 6efe1200b97cefe019857b0b5951a4a87deeb02b
  6 files changed, 165 insertions(+), 12 deletions(-)
 
 commit 6efe1200b97cefe019857b0b5951a4a87deeb02b
@@ -3036,8 +14475,8 @@ Date:    Fri Aug 10 13:49:32 2012 -0400
 
     Bump version to 0.9.1
 
 
     Bump version to 0.9.1
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 206ab6057303273590a3d005660e075bdcee0f5f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 206ab6057303273590a3d005660e075bdcee0f5f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3098,7 +14537,7 @@ Date:    Fri Aug 10 09:05:29 2012 -0400
  .../script-arabic/crulp/ligatures/MANIFEST        |    7 +
  .../script-arabic/crulp/ligatures/README          |   16 +
  .../script-arabic/crulp/ligatures/SOURCES         |    4 +
  .../script-arabic/crulp/ligatures/MANIFEST        |    7 +
  .../script-arabic/crulp/ligatures/README          |   16 +
  .../script-arabic/crulp/ligatures/SOURCES         |    4 +
- 13 files changed, 17315 insertions(+), 0 deletions(-)
+ 13 files changed, 17315 insertions(+)
 
 commit f4cb4762986a28634fa7de9b706f9d37859b881e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f4cb4762986a28634fa7de9b706f9d37859b881e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3110,9 +14549,9 @@ Date:    Fri Aug 10 03:51:44 2012 -0400
     decomposes to three or more characters, then try recomposition, in
     case the farther mark may compose with the base.
 
     decomposes to three or more characters, then try recomposition, in
     case the farther mark may compose with the base.
 
- src/hb-ot-shape-normalize.cc |   81
- ++++++++++++++++++++++++++++--------------
- 1 files changed, 54 insertions(+), 27 deletions(-)
+ src/hb-ot-shape-normalize.cc | 81
+ +++++++++++++++++++++++++++++---------------
+ 1 file changed, 54 insertions(+), 27 deletions(-)
 
 commit 07d682806349aee81f53114778ce0beb23909ed7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 07d682806349aee81f53114778ce0beb23909ed7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3120,8 +14559,8 @@ Date:    Fri Aug 10 03:28:50 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |   25 ++++++++-----------------
- src/hb-ot-shape.cc          |    2 +-
+ src/hb-ot-shape-normalize.cc | 25 ++++++++-----------------
+ src/hb-ot-shape.cc          |  2 +-
  2 files changed, 9 insertions(+), 18 deletions(-)
 
 commit b00321ea78793d9b3592b5173a9800e6322424fe
  2 files changed, 9 insertions(+), 18 deletions(-)
 
 commit b00321ea78793d9b3592b5173a9800e6322424fe
@@ -3134,10 +14573,10 @@ Date:  Thu Aug 9 22:33:32 2012 -0400
     The effect on Devanagari is small (but observable).  Should be more
     observable in simple text, like ASCII.
 
     The effect on Devanagari is small (but observable).  Should be more
     observable in simple text, like ASCII.
 
- src/hb-ot-shape-normalize-private.hh |    2 +
- src/hb-ot-shape-normalize.cc        |   76
- ++++++++++++++++++++++++----------
- src/hb-ot-shape.cc                  |   44 +++++++++----------
+ src/hb-ot-shape-normalize-private.hh |  2 +
+ src/hb-ot-shape-normalize.cc        | 76
+ +++++++++++++++++++++++++-----------
+ src/hb-ot-shape.cc                  | 44 ++++++++++-----------
  3 files changed, 77 insertions(+), 45 deletions(-)
 
 commit 12c0875eafa4bd92db650e5acca046d99594d1e6
  3 files changed, 77 insertions(+), 45 deletions(-)
 
 commit 12c0875eafa4bd92db650e5acca046d99594d1e6
@@ -3146,8 +14585,8 @@ Date:    Thu Aug 9 22:00:53 2012 -0400
 
     [OT] Remove redundant check
 
 
     [OT] Remove redundant check
 
- src/hb-ot-shape.cc |   5 +----
- 1 files changed, 1 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
 
 commit 5c60b70c89b4e0a6512d9fd1ab5394dd76feb742
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c60b70c89b4e0a6512d9fd1ab5394dd76feb742
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3157,9 +14596,9 @@ Date:    Thu Aug 9 21:58:07 2012 -0400
 
     Preparing for merging map_glyphs() and normalize().
 
 
     Preparing for merging map_glyphs() and normalize().
 
- src/hb-ot-shape.cc |  167
- +++++++++++++++++++++++++++-------------------------
- 1 files changed, 86 insertions(+), 81 deletions(-)
+ src/hb-ot-shape.cc | 167
+ +++++++++++++++++++++++++++--------------------------
+ 1 file changed, 86 insertions(+), 81 deletions(-)
 
 commit cd0c6e148f6d078b364370cb2f808b793b921be2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd0c6e148f6d078b364370cb2f808b793b921be2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3169,11 +14608,11 @@ Date:  Thu Aug 9 21:48:55 2012 -0400
 
     To room for more allocations, coming.
 
 
     To room for more allocations, coming.
 
- src/hb-ot-layout-private.hh             |    6 +++---
- src/hb-ot-shape-complex-arabic.cc       |    2 +-
- src/hb-ot-shape-complex-indic-private.hh |    4 ++--
- src/hb-ot-shape-complex-private.hh      |    5 ++---
- src/hb-ot-shape-private.hh              |    4 ++--
+ src/hb-ot-layout-private.hh             | 6 +++---
+ src/hb-ot-shape-complex-arabic.cc       | 2 +-
+ src/hb-ot-shape-complex-indic-private.hh | 4 ++--
+ src/hb-ot-shape-complex-private.hh      | 5 ++---
+ src/hb-ot-shape-private.hh              | 4 ++--
  5 files changed, 10 insertions(+), 11 deletions(-)
 
 commit 8d1eef3f32fb539de2a72804fa3834acc18daab5
  5 files changed, 10 insertions(+), 11 deletions(-)
 
 commit 8d1eef3f32fb539de2a72804fa3834acc18daab5
@@ -3182,9 +14621,9 @@ Date:    Thu Aug 9 21:31:52 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |   50
- ++++++++++++++++++++++++++----------------
- 1 files changed, 31 insertions(+), 19 deletions(-)
+ src/hb-ot-shape-normalize.cc | 50
+ +++++++++++++++++++++++++++-----------------
+ 1 file changed, 31 insertions(+), 19 deletions(-)
 
 commit 56c9e7c004e802ddcb8c704346026f1d7a812f9f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 56c9e7c004e802ddcb8c704346026f1d7a812f9f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3193,9 +14632,9 @@ Date:    Thu Aug 9 21:12:30 2012 -0400
     Fill out combining class resetting for fallback shaping
     Thai/Lao/Tibetan
 
     Fill out combining class resetting for fallback shaping
     Thai/Lao/Tibetan
 
- src/hb-ot-shape-fallback.cc |  38 +++++++++++++++++++++++++++++++++++++-
- src/hb-unicode-private.hh   |   7 ++++---
- src/hb-unicode.cc          |    2 +-
+ src/hb-ot-shape-fallback.cc | 38 +++++++++++++++++++++++++++++++++++++-
+ src/hb-unicode-private.hh   | 7 ++++---
+ src/hb-unicode.cc          |  2 +-
  3 files changed, 42 insertions(+), 5 deletions(-)
 
 commit a321e1d51e0e7fa02738410e8d6e77c841bc6b13
  3 files changed, 42 insertions(+), 5 deletions(-)
 
 commit a321e1d51e0e7fa02738410e8d6e77c841bc6b13
@@ -3208,8 +14647,8 @@ Date:    Thu Aug 9 18:30:34 2012 -0400
 
     See previous commit.
 
 
     See previous commit.
 
- src/hb-ot-layout-common-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 2eaf482b371034ce6ebfaedee98049b036fd3493
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2eaf482b371034ce6ebfaedee98049b036fd3493
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3224,8 +14663,8 @@ Date:    Thu Aug 9 18:30:05 2012 -0400
     we don't
     need bound checks since the array machinary already handles that.
 
     we don't
     need bound checks since the array machinary already handles that.
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit a02d86484be870615297abfc7be9f94645434762
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a02d86484be870615297abfc7be9f94645434762
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3235,12 +14674,12 @@ Date:  Wed Aug 8 18:04:29 2012 -0400
 
     And misc linking fixes.
 
 
     And misc linking fixes.
 
- src/Makefile.am                 |    1 +
- src/check-exported-symbols.sh   |   40
- ++++++++++++++++++++++++++++++++++++++
- src/check-internal-symbols.sh   |    2 +-
- src/hb-ot-shape-complex-indic.cc |    2 +-
- src/hb-ot-shape.cc              |    6 ++--
+ src/Makefile.am                 |  1 +
+ src/check-exported-symbols.sh   | 40
+ ++++++++++++++++++++++++++++++++++++++++
+ src/check-internal-symbols.sh   |  2 +-
+ src/hb-ot-shape-complex-indic.cc |  2 +-
+ src/hb-ot-shape.cc              |  6 +++---
  5 files changed, 46 insertions(+), 5 deletions(-)
 
 commit 4c8ac4f47e95d2b266b2f64e75c55af8233b6b91
  5 files changed, 46 insertions(+), 5 deletions(-)
 
 commit 4c8ac4f47e95d2b266b2f64e75c55af8233b6b91
@@ -3249,19 +14688,19 @@ Date:  Wed Aug 8 17:44:19 2012 -0400
 
     Misc minor fixes
 
 
     Misc minor fixes
 
- src/check-internal-symbols.sh |   10 +--
- src/hb-font-private.hh        |   29 +++++++-
- src/hb-font.cc                       |   63 +++++++---------
- src/hb-font.h                |    2 +-
- src/hb-graphite2.cc          |    4 +-
- src/hb-old.cc                |    2 +-
- src/hb-ot-layout.cc          |    6 +-
- src/hb-ot-shape-fallback.cc   |   10 +--
- src/hb-ot-shape.cc           |    2 +-
- src/hb-shape-plan.cc         |    2 +-
- src/hb-shape-plan.h          |    2 +-
- src/hb-tt-font.cc            |  166
- +----------------------------------------
+ src/check-internal-symbols.sh |  10 +--
+ src/hb-font-private.hh        |  29 +++++++-
+ src/hb-font.cc                       |  63 +++++++---------
+ src/hb-font.h                |   2 +-
+ src/hb-graphite2.cc          |   4 +-
+ src/hb-old.cc                |   2 +-
+ src/hb-ot-layout.cc          |   6 +-
+ src/hb-ot-shape-fallback.cc   |  10 +--
+ src/hb-ot-shape.cc           |   2 +-
+ src/hb-shape-plan.cc         |   2 +-
+ src/hb-shape-plan.h          |   2 +-
+ src/hb-tt-font.cc            | 166
+ +-----------------------------------------
  12 files changed, 72 insertions(+), 226 deletions(-)
 
 commit 560d68af8168d1baff607b9616a3590af70fe9ec
  12 files changed, 72 insertions(+), 226 deletions(-)
 
 commit 560d68af8168d1baff607b9616a3590af70fe9ec
@@ -3274,9 +14713,9 @@ Date:    Wed Aug 8 17:16:01 2012 -0400
     mingw32.  Going to disable that for DLLs again, but hopefully the
     export-file is doing *something*.
 
     mingw32.  Going to disable that for DLLs again, but hopefully the
     export-file is doing *something*.
 
- configure.ac   |   14 +++++++++++++-
- src/Makefile.am |   22 +++++++++++++++++++++-
- src/hb-buffer.h |    4 ++--
+ configure.ac   | 14 +++++++++++++-
+ src/Makefile.am | 22 +++++++++++++++++++++-
+ src/hb-buffer.h |  4 ++--
  3 files changed, 36 insertions(+), 4 deletions(-)
 
 commit f8751cf8e0a16125d63a88da65fdbfa76a19453f
  3 files changed, 36 insertions(+), 4 deletions(-)
 
 commit f8751cf8e0a16125d63a88da65fdbfa76a19453f
@@ -3285,8 +14724,8 @@ Date:    Wed Aug 8 17:15:44 2012 -0400
 
     [hb-old] speed-up build
 
 
     [hb-old] speed-up build
 
- src/hb-old/harfbuzz-external.h |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-old/harfbuzz-external.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 5f4c52867ce67faa15f5d26b59c18c8d068e9261
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5f4c52867ce67faa15f5d26b59c18c8d068e9261
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3294,8 +14733,8 @@ Date:    Wed Aug 8 16:53:37 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.h |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.h | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit fe2b8a7777ab1c84980424ede713cb0d6701f987
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fe2b8a7777ab1c84980424ede713cb0d6701f987
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3303,8 +14742,8 @@ Date:    Wed Aug 8 15:27:14 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ TODO | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 7e7d245b332306949a19c628bacd920717434769
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7e7d245b332306949a19c628bacd920717434769
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3312,8 +14751,8 @@ Date:    Wed Aug 8 15:23:48 2012 -0400
 
     Make default_language threadsafe
 
 
     Make default_language threadsafe
 
- src/hb-common.cc |   15 +++++----------
- 1 files changed, 5 insertions(+), 10 deletions(-)
+ src/hb-common.cc | 15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
 
 commit 06b192c458010c847362d809673209c87ea29949
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 06b192c458010c847362d809673209c87ea29949
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3321,8 +14760,8 @@ Date:    Wed Aug 8 15:23:45 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-common.h |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-common.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 37191ede7583fdb864db32a8f4d90956657926c7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 37191ede7583fdb864db32a8f4d90956657926c7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3330,8 +14769,8 @@ Date:    Wed Aug 8 14:59:09 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-common.h |    4 ++--
- src/hb-icu.h   |    1 -
+ src/hb-common.h | 4 ++--
+ src/hb-icu.h   | 1 -
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit 6d9a329a8a0f11f4b175e407de59c55924de1ef6
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit 6d9a329a8a0f11f4b175e407de59c55924de1ef6
@@ -3340,8 +14779,8 @@ Date:    Wed Aug 8 14:48:41 2012 -0400
 
     Adjust a couple source checks
 
 
     Adjust a couple source checks
 
- src/check-internal-symbols.sh |    4 ++--
- src/check-static-inits.sh     |   10 ++++++++--
+ src/check-internal-symbols.sh |  4 ++--
+ src/check-static-inits.sh     | 10 ++++++++--
  2 files changed, 10 insertions(+), 4 deletions(-)
 
 commit 9c929abdcfef44c0193a2917b20981df37ade21c
  2 files changed, 10 insertions(+), 4 deletions(-)
 
 commit 9c929abdcfef44c0193a2917b20981df37ade21c
@@ -3350,14 +14789,14 @@ Date:  Wed Aug 8 14:33:37 2012 -0400
 
     Minor renaming
 
 
     Minor renaming
 
- src/Makefile.am                             |    4 +-
- src/hb-ot-shape-fallback-private.hh         |   39 ++++
- src/hb-ot-shape-fallback.cc                 |  276
- ++++++++++++++++++++++++++
- src/hb-ot-shape-position-fallback-private.hh |   39 ----
- src/hb-ot-shape-position-fallback.cc        |  276
- --------------------------
- src/hb-ot-shape.cc                          |    4 +-
+ src/Makefile.am                             |   4 +-
+ src/hb-ot-shape-fallback-private.hh         |  39 ++++
+ src/hb-ot-shape-fallback.cc                 | 276
+ +++++++++++++++++++++++++++
+ src/hb-ot-shape-position-fallback-private.hh |  39 ----
+ src/hb-ot-shape-position-fallback.cc        | 276
+ ---------------------------
+ src/hb-ot-shape.cc                          |   4 +-
  6 files changed, 319 insertions(+), 319 deletions(-)
 
 commit 801298b590effd768607bb532dc83c73ba65d16b
  6 files changed, 319 insertions(+), 319 deletions(-)
 
 commit 801298b590effd768607bb532dc83c73ba65d16b
@@ -3368,8 +14807,8 @@ Date:    Wed Aug 8 14:26:36 2012 -0400
 
     https://bugs.freedesktop.org/show_bug.cgi?id=53233
 
 
     https://bugs.freedesktop.org/show_bug.cgi?id=53233
 
- src/hb-buffer-private.hh |   10 ++++++----
- src/hb-shape-plan.cc    |    4 ++--
+ src/hb-buffer-private.hh | 10 ++++++----
+ src/hb-shape-plan.cc    |  4 ++--
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 21756934a15e31dc243e2b6d80adec5752477652
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 21756934a15e31dc243e2b6d80adec5752477652
@@ -3381,13 +14820,13 @@ Date:  Wed Aug 8 01:20:45 2012 -0400
     Implemented for Arabic, Hebrew, and generic marks.
     Activated if no GPOS table present.
 
     Implemented for Arabic, Hebrew, and generic marks.
     Activated if no GPOS table present.
 
- src/hb-font.h                       |    3 +-
- src/hb-ft.cc                        |    3 +-
- src/hb-old.cc                       |    2 +-
- src/hb-ot-shape-position-fallback.cc |  237
- +++++++++++++++++++++++++++++++++-
- src/hb-unicode-private.hh           |   81 ++++++++++++
- src/hb-unicode.cc                   |  107 ++++++----------
+ src/hb-font.h                       |   3 +-
+ src/hb-ft.cc                        |   3 +-
+ src/hb-old.cc                       |   2 +-
+ src/hb-ot-shape-position-fallback.cc | 237
+ ++++++++++++++++++++++++++++++++++-
+ src/hb-unicode-private.hh           |  81 ++++++++++++
+ src/hb-unicode.cc                   | 107 ++++++----------
  6 files changed, 356 insertions(+), 77 deletions(-)
 
 commit fb56e7628362a73e20f7f0b49fe31e802dc01f4f
  6 files changed, 356 insertions(+), 77 deletions(-)
 
 commit fb56e7628362a73e20f7f0b49fe31e802dc01f4f
@@ -3396,8 +14835,8 @@ Date:    Tue Aug 7 23:44:47 2012 -0400
 
     [hb-old] Fix warnings
 
 
     [hb-old] Fix warnings
 
- src/hb-old/harfbuzz-shaper.cpp |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-old/harfbuzz-shaper.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit affaf8a0e5aa38e5820455f789eebf916e02eb7b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit affaf8a0e5aa38e5820455f789eebf916e02eb7b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3407,11 +14846,11 @@ Date:  Tue Aug 7 22:41:38 2012 -0400
 
     Used when there is no GPOS.
 
 
     Used when there is no GPOS.
 
- src/Makefile.am                             |    2 +
- src/hb-ot-shape-position-fallback-private.hh |   39 +++++++++++++++++++++
- src/hb-ot-shape-position-fallback.cc        |   47
- ++++++++++++++++++++++++++
- src/hb-ot-shape.cc                          |   23 +++----------
+ src/Makefile.am                             |  2 ++
+ src/hb-ot-shape-position-fallback-private.hh | 39 +++++++++++++++++++++++
+ src/hb-ot-shape-position-fallback.cc        | 47
+ ++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc                          | 23 +++-----------
  4 files changed, 93 insertions(+), 18 deletions(-)
 
 commit 7e4920fd1577987bf6804f67765e22a84983e057
  4 files changed, 93 insertions(+), 18 deletions(-)
 
 commit 7e4920fd1577987bf6804f67765e22a84983e057
@@ -3420,8 +14859,8 @@ Date:    Tue Aug 7 22:32:23 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 472f229a63f0d1bb21b02179ef430b7698df8f12
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 472f229a63f0d1bb21b02179ef430b7698df8f12
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3433,10 +14872,10 @@ Date:  Tue Aug 7 22:25:24 2012 -0400
     glyphs_len==1
     and a ligature started with the glyph.
 
     glyphs_len==1
     and a ligature started with the glyph.
 
- src/hb-ot-layout-gsub-table.hh       |   26 +++++++++++++++++++----
- src/hb-ot-layout-gsubgpos-private.hh |   37
- ++++++++++++++++-----------------
- src/hb-ot-layout.cc                 |    3 +-
+ src/hb-ot-layout-gsub-table.hh       | 26 ++++++++++++++++++++-----
+ src/hb-ot-layout-gsubgpos-private.hh | 37
+ ++++++++++++++++++------------------
+ src/hb-ot-layout.cc                 |  3 +--
  3 files changed, 40 insertions(+), 26 deletions(-)
 
 commit 6f3a300138f659020c21c3e08b7981c78df5f332
  3 files changed, 40 insertions(+), 26 deletions(-)
 
 commit 6f3a300138f659020c21c3e08b7981c78df5f332
@@ -3445,13 +14884,13 @@ Date:  Tue Aug 7 22:13:25 2012 -0400
 
     Add hb_font_glyph_from/to_string
 
 
     Add hb_font_glyph_from/to_string
 
- src/hb-font-private.hh       |   43
- ++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.cc                      |   24 +++++++++++++++++++---
- src/hb-font.h               |   11 ++++++++++
- src/hb-private.hh           |   16 +++++++++++++++
- src/test-would-substitute.cc |   11 +++++++++-
- util/options.cc             |    2 +-
+ src/hb-font-private.hh       | 43
+ +++++++++++++++++++++++++++++++++++++++++++
+ src/hb-font.cc                      | 24 ++++++++++++++++++++----
+ src/hb-font.h               | 11 +++++++++++
+ src/hb-private.hh           | 16 ++++++++++++++++
+ src/test-would-substitute.cc | 11 ++++++++++-
+ util/options.cc             |  2 +-
  6 files changed, 101 insertions(+), 6 deletions(-)
 
 commit eb56f6ae96260c5b4bcd4e1dfb7ab733a230f3a8
  6 files changed, 101 insertions(+), 6 deletions(-)
 
 commit eb56f6ae96260c5b4bcd4e1dfb7ab733a230f3a8
@@ -3460,10 +14899,10 @@ Date:  Tue Aug 7 21:44:25 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-mutex-private.hh |    1 +
- src/hb-uniscribe.cc    |    1 +
- src/hb-uniscribe.h     |    2 ++
- 3 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-mutex-private.hh | 1 +
+ src/hb-uniscribe.cc    | 1 +
+ src/hb-uniscribe.h     | 2 ++
+ 3 files changed, 4 insertions(+)
 
 commit f4e48adcdd4315ce09e755f87a0f801d88194f42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f4e48adcdd4315ce09e755f87a0f801d88194f42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3475,8 +14914,8 @@ Date:    Tue Aug 7 21:12:49 2012 -0400
     It's like 'calt', but supposedly always on.  We apply 'calt' anyway,
     and now apply this too.
 
     It's like 'calt', but supposedly always on.  We apply 'calt' anyway,
     and now apply this too.
 
- src/hb-ot-shape.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit b1914b8bd08ecdea79930dda7e3bb2ae9e6134a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b1914b8bd08ecdea79930dda7e3bb2ae9e6134a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3484,8 +14923,8 @@ Date:    Tue Aug 7 16:57:48 2012 -0400
 
     Fix warnings
 
 
     Fix warnings
 
- src/hb-icu.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-icu.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 0f8881d6bbf6cd59938315eeff9b71cfc736aa4e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0f8881d6bbf6cd59938315eeff9b71cfc736aa4e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3493,10 +14932,10 @@ Date:  Tue Aug 7 16:57:02 2012 -0400
 
     More refactoring
 
 
     More refactoring
 
- src/hb-ot-shape-normalize.cc |  161
- ++++++++++++++++++++++++++++++++++++++++-
- src/hb-unicode-private.hh    |  164
- +-----------------------------------------
+ src/hb-ot-shape-normalize.cc | 161
+ +++++++++++++++++++++++++++++++++++++++++-
+ src/hb-unicode-private.hh    | 164
+ +------------------------------------------
  2 files changed, 162 insertions(+), 163 deletions(-)
 
 commit 428dfcab6634ff264570a0a5d715efb8048c3db5
  2 files changed, 162 insertions(+), 163 deletions(-)
 
 commit 428dfcab6634ff264570a0a5d715efb8048c3db5
@@ -3505,8 +14944,8 @@ Date:    Tue Aug 7 16:51:48 2012 -0400
 
     Minor refactoring
 
 
     Minor refactoring
 
- src/hb-ot-shape-normalize.cc |   27 +++++++++++++++++++++++----
- 1 files changed, 23 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-normalize.cc | 27 +++++++++++++++++++++++----
+ 1 file changed, 23 insertions(+), 4 deletions(-)
 
 commit 61f41849af6ff9edf8b55cf9610066d1bfb4a8df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 61f41849af6ff9edf8b55cf9610066d1bfb4a8df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3516,9 +14955,9 @@ Date:    Tue Aug 7 16:45:27 2012 -0400
 
     Lifted from https://bugzilla.mozilla.org/show_bug.cgi?id=728866
 
 
     Lifted from https://bugzilla.mozilla.org/show_bug.cgi?id=728866
 
- src/hb-unicode-private.hh |  121
- ++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 120 insertions(+), 1 deletions(-)
+ src/hb-unicode-private.hh | 121
+ +++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 120 insertions(+), 1 deletion(-)
 
 commit 32d71dc13317b322e2c5de00d767b2cb15fddd8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 32d71dc13317b322e2c5de00d767b2cb15fddd8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3526,9 +14965,9 @@ Date:    Tue Aug 7 14:11:16 2012 -0400
 
     [Graphite] Minor
 
 
     [Graphite] Minor
 
- src/hb-graphite2.cc |  60
- +++++++++++++++++++++++---------------------------
- 1 files changed, 28 insertions(+), 32 deletions(-)
+ src/hb-graphite2.cc | 60
+ +++++++++++++++++++++++++----------------------------
+ 1 file changed, 28 insertions(+), 32 deletions(-)
 
 commit 030ac5022e8a43b9329c26e72527bafc582ef44b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 030ac5022e8a43b9329c26e72527bafc582ef44b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3538,8 +14977,8 @@ Date:    Tue Aug 7 13:01:12 2012 -0400
 
     ...again.
 
 
     ...again.
 
- src/hb-ot-shape-normalize-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-normalize-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 368b4e7649f9bc8c6bebf7c7ff03c9b9ec425a25
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 368b4e7649f9bc8c6bebf7c7ff03c9b9ec425a25
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3547,8 +14986,8 @@ Date:    Mon Aug 6 23:06:04 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-font.cc |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-font.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit ade7459ea7c75b4f33f7cfa43dd5bdfa0c18d6d5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ade7459ea7c75b4f33f7cfa43dd5bdfa0c18d6d5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3556,9 +14995,9 @@ Date:    Mon Aug 6 19:42:47 2012 -0700
 
     [util] Fix leaks
 
 
     [util] Fix leaks
 
- src/hb-graphite2.cc |  18 ++++++++++++++----
- util/options.cc     |   2 +-
- util/options.hh     |   2 +-
+ src/hb-graphite2.cc | 18 ++++++++++++++----
+ util/options.cc     | 2 +-
+ util/options.hh     | 2 +-
  3 files changed, 16 insertions(+), 6 deletions(-)
 
 commit 2fef993460dcfd94c92ab35413bdde18ad2b0ceb
  3 files changed, 16 insertions(+), 6 deletions(-)
 
 commit 2fef993460dcfd94c92ab35413bdde18ad2b0ceb
@@ -3569,8 +15008,8 @@ Date:    Mon Aug 6 19:35:04 2012 -0700
 
     Patch from Martin Hosken.
 
 
     Patch from Martin Hosken.
 
- src/hb-graphite2.cc |  33 ++++++++++++++++++---------------
- 1 files changed, 18 insertions(+), 15 deletions(-)
+ src/hb-graphite2.cc | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
 
 commit e4992e13e19877a73ea05fc1d31005a262c685ad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e4992e13e19877a73ea05fc1d31005a262c685ad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3578,10 +15017,10 @@ Date:  Mon Aug 6 19:25:39 2012 -0700
 
     [Graphite] Port graphite2 backend to new shaper infrastructure
 
 
     [Graphite] Port graphite2 backend to new shaper infrastructure
 
- src/hb-graphite2.cc   |  234
- ++++++++++++++++++++++--------------------------
- src/hb-graphite2.h    |    2 +-
- src/hb-shaper-list.hh |    2 +-
+ src/hb-graphite2.cc   | 234
+ +++++++++++++++++++++++---------------------------
+ src/hb-graphite2.h    |   2 +-
+ src/hb-shaper-list.hh |   2 +-
  3 files changed, 109 insertions(+), 129 deletions(-)
 
 commit 66591ececfba9791de06c814f5f30131e95e5fd2
  3 files changed, 109 insertions(+), 129 deletions(-)
 
 commit 66591ececfba9791de06c814f5f30131e95e5fd2
@@ -3593,8 +15032,8 @@ Date:    Mon Aug 6 17:07:19 2012 -0700
     We already set recount to INVALID when destroying.
     This block was not necessary.
 
     We already set recount to INVALID when destroying.
     This block was not necessary.
 
- src/hb-font.cc |    3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-font.cc | 3 ---
+ 1 file changed, 3 deletions(-)
 
 commit e3320ecc1b5a7eaccc7c9370b2d1b76850f054be
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e3320ecc1b5a7eaccc7c9370b2d1b76850f054be
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3602,8 +15041,8 @@ Date:    Mon Aug 6 11:44:10 2012 -0700
 
     Fix compiler warnings
 
 
     Fix compiler warnings
 
- configure.ac |   12 +++++++++---
- 1 files changed, 9 insertions(+), 3 deletions(-)
+ configure.ac | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
 
 commit 167b625d988b74572d6b2f646c285b666b650d49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 167b625d988b74572d6b2f646c285b666b650d49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3614,8 +15053,8 @@ Date:    Sun Aug 5 21:16:26 2012 -0700
     We don't apply them together anyway.  Should not make any difference
     right now.
 
     We don't apply them together anyway.  Should not make any difference
     right now.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 048e3b596fb7fccd3fb5f48de98b6b67788f774a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 048e3b596fb7fccd3fb5f48de98b6b67788f774a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3623,8 +15062,8 @@ Date:    Sat Aug 4 18:04:57 2012 -0700
 
     Speed up hb_set_digest_lowest_bits_t calcs
 
 
     Speed up hb_set_digest_lowest_bits_t calcs
 
- src/hb-set-private.hh |   10 +++++++---
- 1 files changed, 7 insertions(+), 3 deletions(-)
+ src/hb-set-private.hh | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
 
 commit 3d1b66a35e1ab3be19335705f310b278d76d66d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3d1b66a35e1ab3be19335705f310b278d76d66d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3632,8 +15071,8 @@ Date:    Sat Aug 4 17:42:28 2012 -0700
 
     Speed up hb_set_digest_common_bits_t calcs
 
 
     Speed up hb_set_digest_common_bits_t calcs
 
- src/hb-set-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-set-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit bdc48a879a1900138d8caaa8d90fb9fe1e768d1d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bdc48a879a1900138d8caaa8d90fb9fe1e768d1d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3644,8 +15083,8 @@ Date:    Sat Aug 4 17:08:38 2012 -0700
     Lohit Devanagari has a glyph named:
     u0924_u094D.half_u0930_u094D.blwf.vatu
 
     Lohit Devanagari has a glyph named:
     u0924_u094D.half_u0930_u094D.blwf.vatu
 
- util/options.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 25326c2359b0a3e25222b94acd142bc36eff78a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 25326c2359b0a3e25222b94acd142bc36eff78a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3655,8 +15094,8 @@ Date:    Sat Aug 4 16:43:18 2012 -0700
 
     Such it wouldn't apply to pointers accidentally.
 
 
     Such it wouldn't apply to pointers accidentally.
 
- src/hb-ot-shape-complex-arabic-table.hh |    4 ++--
- src/hb-private.hh                      |    9 ++++++---
+ src/hb-ot-shape-complex-arabic-table.hh | 4 ++--
+ src/hb-private.hh                      | 9 ++++++---
  2 files changed, 8 insertions(+), 5 deletions(-)
 
 commit 8ba8042821e4581fe4e87419e58c823520441205
  2 files changed, 8 insertions(+), 5 deletions(-)
 
 commit 8ba8042821e4581fe4e87419e58c823520441205
@@ -3668,8 +15107,8 @@ Date:    Fri Aug 3 18:54:54 2012 -0700
     Oops.  I broken this badly and the test suite did not notice.  That
     worries me.  Have to investigate.
 
     Oops.  I broken this badly and the test suite did not notice.  That
     worries me.  Have to investigate.
 
- src/hb-ot-shape-complex-indic.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit abd0c05f1f7f0546593bb2f1c4d59db12cb32e46
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit abd0c05f1f7f0546593bb2f1c4d59db12cb32e46
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3677,8 +15116,8 @@ Date:    Fri Aug 3 18:45:05 2012 -0700
 
     Minor
 
 
     Minor
 
- src/test-would-substitute.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/test-would-substitute.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 46ee108ef80f5d4675899862698a8c34d8fcfab5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46ee108ef80f5d4675899862698a8c34d8fcfab5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3686,8 +15125,8 @@ Date:    Fri Aug 3 18:21:13 2012 -0700
 
     Fix leak
 
 
     Fix leak
 
- src/hb-shape-plan.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-shape-plan.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 71baea0062da4d7f143d62da38492a0813814e49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71baea0062da4d7f143d62da38492a0813814e49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3703,8 +15142,8 @@ Date:    Fri Aug 3 17:40:07 2012 -0700
     is being
     replaced by proper fallback mark positioning soon.
 
     is being
     replaced by proper fallback mark positioning soon.
 
- src/hb-ot-shape.cc |   7 ++-----
- 1 files changed, 2 insertions(+), 5 deletions(-)
+ src/hb-ot-shape.cc | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
 
 commit 3a7e137a68ec8f723dc3afa89c918ca2df7ff6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3a7e137a68ec8f723dc3afa89c918ca2df7ff6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3712,8 +15151,8 @@ Date:    Fri Aug 3 17:23:40 2012 -0700
 
     Dn't use gint
 
 
     Dn't use gint
 
- src/hb-glib.cc |    4 ++--
- src/hb-icu.cc |    2 +-
+ src/hb-glib.cc | 4 ++--
+ src/hb-icu.cc | 2 +-
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 11b0e20ba42bf0b17133c3e1087732802bb4f230
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 11b0e20ba42bf0b17133c3e1087732802bb4f230
@@ -3724,9 +15163,9 @@ Date:    Thu Aug 2 14:21:40 2012 -0400
 
     This concludes the Indic shape_plan work.  May do for Arabic also...
 
 
     This concludes the Indic shape_plan work.  May do for Arabic also...
 
- src/hb-ot-shape-complex-indic-private.hh |   16 +-
- src/hb-ot-shape-complex-indic.cc        |  309
- +++++++++++++++---------------
+ src/hb-ot-shape-complex-indic-private.hh |  16 +-
+ src/hb-ot-shape-complex-indic.cc        | 309
+ +++++++++++++++----------------
  2 files changed, 159 insertions(+), 166 deletions(-)
 
 commit 85fc6c483f6d734febbe39270e84701a651f01f1
  2 files changed, 159 insertions(+), 166 deletions(-)
 
 commit 85fc6c483f6d734febbe39270e84701a651f01f1
@@ -3737,9 +15176,9 @@ Date:    Thu Aug 2 12:21:44 2012 -0400
 
     Almost done.  Need to add per-script static tables.
 
 
     Almost done.  Need to add per-script static tables.
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 +-
- src/hb-ot-shape-complex-indic.cc        |  216
- ++++++++++++++++--------------
+ src/hb-ot-shape-complex-indic-machine.rl |   4 +-
+ src/hb-ot-shape-complex-indic.cc        | 216
+ ++++++++++++++++---------------
  2 files changed, 116 insertions(+), 104 deletions(-)
 
 commit 914ffaa40fcca020f65bacdd709421e9047afd83
  2 files changed, 116 insertions(+), 104 deletions(-)
 
 commit 914ffaa40fcca020f65bacdd709421e9047afd83
@@ -3748,9 +15187,9 @@ Date:    Thu Aug 2 11:03:39 2012 -0400
 
     [Indic] Move more repeated work into shape_plan
 
 
     [Indic] Move more repeated work into shape_plan
 
- src/hb-ot-shape-complex-indic.cc |   63
- +++++++++++++++++++++++++------------
- 1 files changed, 42 insertions(+), 21 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 63
+ ++++++++++++++++++++++++++--------------
+ 1 file changed, 42 insertions(+), 21 deletions(-)
 
 commit a8c6da90f4c6e8d27a3a1b758a55476776d9f750
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a8c6da90f4c6e8d27a3a1b758a55476776d9f750
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3760,13 +15199,13 @@ Date:  Thu Aug 2 10:46:34 2012 -0400
 
     Hookup some Indic data to it.  More to come.
 
 
     Hookup some Indic data to it.  More to come.
 
- src/hb-ot-shape-complex-arabic.cc  |   2 +
- src/hb-ot-shape-complex-indic.cc   |  128
- +++++++++++++++++++++---------------
- src/hb-ot-shape-complex-misc.cc    |   4 +
- src/hb-ot-shape-complex-private.hh |  16 ++++-
- src/hb-ot-shape-private.hh        |    1 +
- src/hb-ot-shape.cc                |   23 +++++--
+ src/hb-ot-shape-complex-arabic.cc  |  2 +
+ src/hb-ot-shape-complex-indic.cc   | 128
+ ++++++++++++++++++++++---------------
+ src/hb-ot-shape-complex-misc.cc    |  4 ++
+ src/hb-ot-shape-complex-private.hh |  16 ++++-
+ src/hb-ot-shape-private.hh        |   1 +
+ src/hb-ot-shape.cc                |  23 +++++--
  6 files changed, 113 insertions(+), 61 deletions(-)
 
 commit 8bb5deba9630d35878eb6edb4643ecfabf99f15f
  6 files changed, 113 insertions(+), 61 deletions(-)
 
 commit 8bb5deba9630d35878eb6edb4643ecfabf99f15f
@@ -3775,13 +15214,13 @@ Date:  Thu Aug 2 10:07:58 2012 -0400
 
     [OT] Pipe shape_plan down to pause_callbacks
 
 
     [OT] Pipe shape_plan down to pause_callbacks
 
- src/hb-ot-map-private.hh                |    8 ++--
- src/hb-ot-map.cc                        |   11 +++---
- src/hb-ot-shape-complex-indic-machine.rl |    4 +-
- src/hb-ot-shape-complex-indic.cc        |   50
- ++++++++++++++---------------
- src/hb-ot-shape-private.hh              |    6 +++
- src/hb-ot-shape.cc                      |   28 +++++++++-------
+ src/hb-ot-map-private.hh                |  8 ++---
+ src/hb-ot-map.cc                        | 11 ++++---
+ src/hb-ot-shape-complex-indic-machine.rl |  4 +--
+ src/hb-ot-shape-complex-indic.cc        | 50
+ +++++++++++++++-----------------
+ src/hb-ot-shape-private.hh              |  6 ++++
+ src/hb-ot-shape.cc                      | 28 ++++++++++--------
  6 files changed, 57 insertions(+), 50 deletions(-)
 
 commit 3e38c0f2886c38d2f0a9d80a97a36edf2479d2c7
  6 files changed, 57 insertions(+), 50 deletions(-)
 
 commit 3e38c0f2886c38d2f0a9d80a97a36edf2479d2c7
@@ -3790,10 +15229,10 @@ Date:  Thu Aug 2 09:44:18 2012 -0400
 
     More massaging
 
 
     More massaging
 
- src/hb-ot-map-private.hh         |   20 ++++++++------------
- src/hb-ot-map.cc                 |   17 ++++++++---------
- src/hb-ot-shape-complex-arabic.cc |   8 ++++----
- src/hb-ot-shape-complex-indic.cc  |   18 +++++++-----------
+ src/hb-ot-map-private.hh         | 20 ++++++++------------
+ src/hb-ot-map.cc                 | 17 ++++++++---------
+ src/hb-ot-shape-complex-arabic.cc |  8 ++++----
+ src/hb-ot-shape-complex-indic.cc  | 18 +++++++-----------
  4 files changed, 27 insertions(+), 36 deletions(-)
 
 commit 16c6a27b4bffc19026944c7bea9cf0a3a8ff1d8f
  4 files changed, 27 insertions(+), 36 deletions(-)
 
 commit 16c6a27b4bffc19026944c7bea9cf0a3a8ff1d8f
@@ -3802,13 +15241,12 @@ Date:  Thu Aug 2 09:38:28 2012 -0400
 
     [OT] Port complex_shaper to planner/plan
 
 
     [OT] Port complex_shaper to planner/plan
 
- src/hb-ot-shape-complex-arabic.cc  |  17 ++++++++---------
- src/hb-ot-shape-complex-indic.cc   |  19 ++++++++-----------
- src/hb-ot-shape-complex-misc.cc    |  20 ++++++++------------
- src/hb-ot-shape-complex-private.hh |  32
- +++++++++++---------------------
- src/hb-ot-shape-private.hh        |   14 +++++++++++---
- src/hb-ot-shape.cc                |    9 +++++----
+ src/hb-ot-shape-complex-arabic.cc  | 17 ++++++++---------
+ src/hb-ot-shape-complex-indic.cc   | 19 ++++++++-----------
+ src/hb-ot-shape-complex-misc.cc    | 20 ++++++++------------
+ src/hb-ot-shape-complex-private.hh | 32 +++++++++++---------------------
+ src/hb-ot-shape-private.hh        | 14 +++++++++++---
+ src/hb-ot-shape.cc                |  9 +++++----
  6 files changed, 51 insertions(+), 60 deletions(-)
 
 commit 5393e3a62ba09fd7bcf3767b36225c8f49badb9d
  6 files changed, 51 insertions(+), 60 deletions(-)
 
 commit 5393e3a62ba09fd7bcf3767b36225c8f49badb9d
@@ -3817,11 +15255,11 @@ Date:  Thu Aug 2 09:24:35 2012 -0400
 
     [OT] Minor refactoring
 
 
     [OT] Minor refactoring
 
- src/hb-ot-map.cc          |    4 ----
- src/hb-ot-shape-private.hh |  26 ++++++++++++++++++++++++++
- src/hb-ot-shape.cc        |   26 ++------------------------
- src/hb-shape-plan.cc      |    2 ++
- src/hb-shape.cc           |    2 --
+ src/hb-ot-map.cc          |  4 ----
+ src/hb-ot-shape-private.hh | 26 ++++++++++++++++++++++++++
+ src/hb-ot-shape.cc        | 26 ++------------------------
+ src/hb-shape-plan.cc      |  2 ++
+ src/hb-shape.cc           |  2 --
  5 files changed, 30 insertions(+), 30 deletions(-)
 
 commit 24eacf17c801c66a2d466e8ae02b73f501a26b25
  5 files changed, 30 insertions(+), 30 deletions(-)
 
 commit 24eacf17c801c66a2d466e8ae02b73f501a26b25
@@ -3830,9 +15268,9 @@ Date:    Thu Aug 2 08:42:11 2012 -0400
 
     [Indic] Move consonant-position-setting into initial_reordering()
 
 
     [Indic] Move consonant-position-setting into initial_reordering()
 
- src/hb-ot-shape-complex-indic.cc |   65
- ++++++++++++++++++++-----------------
- 1 files changed, 35 insertions(+), 30 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 65
+ +++++++++++++++++++++-------------------
+ 1 file changed, 35 insertions(+), 30 deletions(-)
 
 commit afbcc24be01a64bdb5c05c63880269145fa1d3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit afbcc24be01a64bdb5c05c63880269145fa1d3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3845,14 +15283,14 @@ Date:  Thu Aug 2 08:36:40 2012 -0400
     separate substitute()/position() entry points (anymore), so there is
     no point in not providing the font to GSUB.
 
     separate substitute()/position() entry points (anymore), so there is
     no point in not providing the font to GSUB.
 
- src/hb-ot-layout-gsub-table.hh       |   13 +++++--------
- src/hb-ot-layout-gsubgpos-private.hh |    7 ++-----
- src/hb-ot-layout-private.hh         |    6 +++---
- src/hb-ot-layout.cc                 |   18 +++++++++---------
- src/hb-ot-map-private.hh            |   15 ++++++---------
- src/hb-ot-map.cc                    |    8 ++++----
- src/hb-ot-shape-complex-indic.cc     |    8 ++++----
- src/hb-ot-shape.cc                  |    6 +++---
+ src/hb-ot-layout-gsub-table.hh       | 13 +++++--------
+ src/hb-ot-layout-gsubgpos-private.hh |  7 ++-----
+ src/hb-ot-layout-private.hh         |  6 +++---
+ src/hb-ot-layout.cc                 | 18 +++++++++---------
+ src/hb-ot-map-private.hh            | 15 ++++++---------
+ src/hb-ot-map.cc                    |  8 ++++----
+ src/hb-ot-shape-complex-indic.cc     |  8 ++++----
+ src/hb-ot-shape.cc                  |  6 +++---
  8 files changed, 36 insertions(+), 45 deletions(-)
 
 commit b0e6a26a10ccca70ebc88a9e158a89ccfab0add5
  8 files changed, 36 insertions(+), 45 deletions(-)
 
 commit b0e6a26a10ccca70ebc88a9e158a89ccfab0add5
@@ -3864,11 +15302,10 @@ Date:  Thu Aug 2 08:11:14 2012 -0400
     It was impossible to meaningfully use them from the outside these
     days.
 
     It was impossible to meaningfully use them from the outside these
     days.
 
- src/hb-ot-layout-private.hh |  40
- ++++++++++++++++++++++++++++++++--------
- src/hb-ot-layout.cc        |   20 --------------------
- src/hb-ot-layout.h         |   34 ----------------------------------
- src/hb-ot-map.cc           |    8 ++++----
+ src/hb-ot-layout-private.hh | 40 ++++++++++++++++++++++++++++++++--------
+ src/hb-ot-layout.cc        | 20 --------------------
+ src/hb-ot-layout.h         | 34 ----------------------------------
+ src/hb-ot-map.cc           |  8 ++++----
  4 files changed, 36 insertions(+), 66 deletions(-)
 
 commit 305246744ed178f116e01498b7f9d1af6950ca30
  4 files changed, 36 insertions(+), 66 deletions(-)
 
 commit 305246744ed178f116e01498b7f9d1af6950ca30
@@ -3877,8 +15314,8 @@ Date:    Thu Aug 2 08:08:04 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8ef3d53255ae9fbb0e46c22909e50009d1e7eeb0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8ef3d53255ae9fbb0e46c22909e50009d1e7eeb0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3888,9 +15325,9 @@ Date:    Thu Aug 2 07:53:18 2012 -0400
 
     To be moved to initial_reordering next...
 
 
     To be moved to initial_reordering next...
 
- src/hb-ot-shape-complex-indic.cc |   59
- ++++++++++++++++++++++++++-----------
- 1 files changed, 41 insertions(+), 18 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 59
+ ++++++++++++++++++++++++++++------------
+ 1 file changed, 41 insertions(+), 18 deletions(-)
 
 commit 3eb6f81fd3f1e56679eec10d08f5e2303121753f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3eb6f81fd3f1e56679eec10d08f5e2303121753f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3901,10 +15338,10 @@ Date:  Thu Aug 2 07:37:46 2012 -0400
     Move all the logic that needs to eventually move into the indic table
     into hb-ot-shape-complex-indic-private.hh.
 
     Move all the logic that needs to eventually move into the indic table
     into hb-ot-shape-complex-indic-private.hh.
 
- src/hb-ot-shape-complex-indic-private.hh |  210
- +++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc        |  227
- +----------------------------
+ src/hb-ot-shape-complex-indic-private.hh | 210
+ ++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc        | 227
+ ++-----------------------------
  2 files changed, 218 insertions(+), 219 deletions(-)
 
 commit 3614ba242fc7d338761acdda365a134706035b6d
  2 files changed, 218 insertions(+), 219 deletions(-)
 
 commit 3614ba242fc7d338761acdda365a134706035b6d
@@ -3913,9 +15350,9 @@ Date:    Thu Aug 2 07:13:55 2012 -0400
 
     [Indic] Rename
 
 
     [Indic] Rename
 
- src/hb-ot-shape-complex-indic.cc |   40
- +++++++++++++++++++------------------
- 1 files changed, 21 insertions(+), 19 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 40
+ +++++++++++++++++++++-------------------
+ 1 file changed, 21 insertions(+), 19 deletions(-)
 
 commit 610e5e8f713bb2a68939b72cb2b801a7aaede4f9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 610e5e8f713bb2a68939b72cb2b801a7aaede4f9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3925,11 +15362,11 @@ Date:  Thu Aug 2 05:27:46 2012 -0400
 
     Comes with some 10% speedup for Devanagari even!
 
 
     Comes with some 10% speedup for Devanagari even!
 
- src/hb-ot-map-private.hh        |   85
- +++++++++++++++++++++++--------------
- src/hb-ot-map.cc                |   18 ++++----
- src/hb-ot-shape-complex-indic.cc |   85
- +++++++++++++++++++++----------------
+ src/hb-ot-map-private.hh        | 85
+ +++++++++++++++++++++++++---------------
+ src/hb-ot-map.cc                | 18 ++++-----
+ src/hb-ot-shape-complex-indic.cc | 85
+ +++++++++++++++++++++++-----------------
  3 files changed, 110 insertions(+), 78 deletions(-)
 
 commit 1d002048d5afcd45abbb09fdf0419f13b2e2265c
  3 files changed, 110 insertions(+), 78 deletions(-)
 
 commit 1d002048d5afcd45abbb09fdf0419f13b2e2265c
@@ -3938,9 +15375,9 @@ Date:    Thu Aug 2 05:01:11 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-private.hh |   16 -------
- src/hb-ot-shape-complex-indic.cc        |   64
- ++++++++++++++++++++----------
+ src/hb-ot-shape-complex-indic-private.hh | 16 --------
+ src/hb-ot-shape-complex-indic.cc        | 64
+ +++++++++++++++++++++-----------
  2 files changed, 43 insertions(+), 37 deletions(-)
 
 commit 6f7611375521c6d285a9aa763f2ea5cb44cd0d39
  2 files changed, 43 insertions(+), 37 deletions(-)
 
 commit 6f7611375521c6d285a9aa763f2ea5cb44cd0d39
@@ -3949,8 +15386,8 @@ Date:    Thu Aug 2 04:00:31 2012 -0400
 
     [GSUB/GPOS] Check array size before accessing digests
 
 
     [GSUB/GPOS] Check array size before accessing digests
 
- src/hb-ot-layout-private.hh |   3 +++
- src/hb-ot-layout.cc        |   32 ++++++++++++++++----------------
+ src/hb-ot-layout-private.hh | 3 +++
+ src/hb-ot-layout.cc        | 32 ++++++++++++++++----------------
  2 files changed, 19 insertions(+), 16 deletions(-)
 
 commit 22148b8c4af3ed296d96e969cdd47bac97b32307
  2 files changed, 19 insertions(+), 16 deletions(-)
 
 commit 22148b8c4af3ed296d96e969cdd47bac97b32307
@@ -3959,9 +15396,9 @@ Date:    Thu Aug 2 03:51:51 2012 -0400
 
     Use Coverage digests in would_apply
 
 
     Use Coverage digests in would_apply
 
- src/hb-ot-layout-gsub-table.hh       |    1 +
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++++-
- src/hb-ot-layout.cc                 |    4 ++--
+ src/hb-ot-layout-gsub-table.hh       | 1 +
+ src/hb-ot-layout-gsubgpos-private.hh | 6 +++++-
+ src/hb-ot-layout.cc                 | 4 ++--
  3 files changed, 8 insertions(+), 3 deletions(-)
 
 commit 6c459c8fef85bc44f45d7b58c28a34abfb2c33fc
  3 files changed, 8 insertions(+), 3 deletions(-)
 
 commit 6c459c8fef85bc44f45d7b58c28a34abfb2c33fc
@@ -3970,9 +15407,9 @@ Date:    Thu Aug 2 03:45:53 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gpos-table.hh       |    2 +-
- src/hb-ot-layout-gsub-table.hh       |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-ot-layout-gpos-table.hh       | 2 +-
+ src/hb-ot-layout-gsub-table.hh       | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit e2b8d75fa6e847ecf5c040f4e1e16a565c5d8aaf
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit e2b8d75fa6e847ecf5c040f4e1e16a565c5d8aaf
@@ -3981,8 +15418,8 @@ Date:    Wed Aug 1 22:17:48 2012 -0400
 
     Use wider set digests on 64-bit archs
 
 
     Use wider set digests on 64-bit archs
 
- src/hb-set-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-set-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 0120ce9679aab3ac936aeb18f6709529eef000a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0120ce9679aab3ac936aeb18f6709529eef000a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -3990,9 +15427,9 @@ Date:    Wed Aug 1 21:56:35 2012 -0400
 
     [GSUB/GPOS] Remove unused get_coverage() methods
 
 
     [GSUB/GPOS] Remove unused get_coverage() methods
 
- src/hb-ot-layout-gpos-table.hh |   11 -----------
- src/hb-ot-layout-gsub-table.hh |   11 -----------
- 2 files changed, 0 insertions(+), 22 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 11 -----------
+ src/hb-ot-layout-gsub-table.hh | 11 -----------
+ 2 files changed, 22 deletions(-)
 
 commit 1336ecdf8e4e9879b96b26ecfbf5c9ba6c49e2b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1336ecdf8e4e9879b96b26ecfbf5c9ba6c49e2b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4007,12 +15444,12 @@ Date:  Wed Aug 1 21:46:36 2012 -0400
     digest
     is 4%.
 
     digest
     is 4%.
 
- src/hb-ot-layout-gpos-table.hh       |   30 ++++++++--------------------
- src/hb-ot-layout-gsub-table.hh       |   35
- +++++++++++----------------------
- src/hb-ot-layout-gsubgpos-private.hh |    8 +++++-
- src/hb-ot-layout-private.hh         |    4 +++
- src/hb-ot-layout.cc                 |   29 ++++++++++++++++++++++++---
+ src/hb-ot-layout-gpos-table.hh       | 30 +++++++++---------------------
+ src/hb-ot-layout-gsub-table.hh       | 35
+ ++++++++++++-----------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  8 ++++++--
+ src/hb-ot-layout-private.hh         |  4 ++++
+ src/hb-ot-layout.cc                 | 29 +++++++++++++++++++++++++----
  5 files changed, 56 insertions(+), 50 deletions(-)
 
 commit a878c58a8fc1500986d713b2bcedfeb90a0087b0
  5 files changed, 56 insertions(+), 50 deletions(-)
 
 commit a878c58a8fc1500986d713b2bcedfeb90a0087b0
@@ -4021,9 +15458,9 @@ Date:    Wed Aug 1 21:18:54 2012 -0400
 
     [GSUB/GPOS] Add add_coverage()
 
 
     [GSUB/GPOS] Add add_coverage()
 
- src/hb-ot-layout-gpos-table.hh |   18 ++++++++++++++++++
- src/hb-ot-layout-gsub-table.hh |   18 ++++++++++++++++++
- 2 files changed, 36 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 18 ++++++++++++++++++
+ src/hb-ot-layout-gsub-table.hh | 18 ++++++++++++++++++
+ 2 files changed, 36 insertions(+)
 
 commit 60a3035ac5ec8227e4cc0e6708732bb139c9e0b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60a3035ac5ec8227e4cc0e6708732bb139c9e0b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4033,9 +15470,9 @@ Date:    Wed Aug 1 21:06:27 2012 -0400
 
     Implement two set digests, and one that combines the two.
 
 
     Implement two set digests, and one that combines the two.
 
- src/hb-set-private.hh |   95
- +++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 95 insertions(+), 0 deletions(-)
+ src/hb-set-private.hh | 95
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 95 insertions(+)
 
 commit c8accf1dd2d92cc4f714393eb0ea46f69bb182a6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c8accf1dd2d92cc4f714393eb0ea46f69bb182a6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4043,8 +15480,8 @@ Date:    Wed Aug 1 21:05:57 2012 -0400
 
     [OT] Templatize Coverage::add_coverage()
 
 
     [OT] Templatize Coverage::add_coverage()
 
- src/hb-ot-layout-common-private.hh |  12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-common-private.hh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit 8fbfda920e0b3bb4ab7afb732826026964b79be9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8fbfda920e0b3bb4ab7afb732826026964b79be9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4052,18 +15489,18 @@ Date:  Wed Aug 1 19:03:46 2012 -0400
 
     Inline font getters
 
 
     Inline font getters
 
- src/hb-fallback-shape.cc         |   21 ++--
- src/hb-font-private.hh                   |  204
- +++++++++++++++++++++++++++++++++++++
- src/hb-font.cc                           |  129 ++++--------------------
- src/hb-graphite2.cc              |    6 +-
- src/hb-old.cc                    |   10 +-
- src/hb-ot-layout-gdef-table.hh    |   2 +-
- src/hb-ot-layout-gpos-table.hh    |   2 +-
- src/hb-ot-shape-complex-arabic.cc |   4 +-
- src/hb-ot-shape-complex-indic.cc  |   6 +-
- src/hb-ot-shape-normalize.cc     |   12 +-
- src/hb-ot-shape.cc               |   47 ++++-----
+ src/hb-fallback-shape.cc         |  21 ++--
+ src/hb-font-private.hh                   | 204
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-font.cc                           | 129 ++++--------------------
+ src/hb-graphite2.cc              |   6 +-
+ src/hb-old.cc                    |  10 +-
+ src/hb-ot-layout-gdef-table.hh    |   2 +-
+ src/hb-ot-layout-gpos-table.hh    |   2 +-
+ src/hb-ot-shape-complex-arabic.cc |   4 +-
+ src/hb-ot-shape-complex-indic.cc  |   6 +-
+ src/hb-ot-shape-normalize.cc     |  12 +--
+ src/hb-ot-shape.cc               |  47 +++++----
  11 files changed, 277 insertions(+), 166 deletions(-)
 
 commit 6adf417bc15d4524e280b284e3accd1ae647662e
  11 files changed, 277 insertions(+), 166 deletions(-)
 
 commit 6adf417bc15d4524e280b284e3accd1ae647662e
@@ -4072,10 +15509,10 @@ Date:  Wed Aug 1 18:07:42 2012 -0400
 
     Use a lookup table for modified_combining_class
 
 
     Use a lookup table for modified_combining_class
 
- src/hb-unicode-private.hh |   10 ++-
- src/hb-unicode.cc        |  213
- +++++++++++++++++++++++++++++++--------------
- src/hb-unicode.h         |    4 +
+ src/hb-unicode-private.hh |  10 ++-
+ src/hb-unicode.cc        | 213
+ +++++++++++++++++++++++++++++++---------------
+ src/hb-unicode.h         |   4 +
  3 files changed, 157 insertions(+), 70 deletions(-)
 
 commit 208f70f0553d73d2908b21b9552298029482a8b9
  3 files changed, 157 insertions(+), 70 deletions(-)
 
 commit 208f70f0553d73d2908b21b9552298029482a8b9
@@ -4084,16 +15521,16 @@ Date:  Wed Aug 1 17:13:10 2012 -0400
 
     Inline Unicode callbacks internally
 
 
     Inline Unicode callbacks internally
 
- src/hb-buffer.cc               |    2 +-
- src/hb-fallback-shape.cc       |    2 +-
- src/hb-old.cc                  |    2 +-
- src/hb-ot-shape-complex-misc.cc |    2 +-
- src/hb-ot-shape-normalize.cc   |   13 ++---
- src/hb-ot-shape-private.hh     |    6 +-
- src/hb-ot-shape.cc             |    4 +-
- src/hb-unicode-private.hh      |  112
- +++++++++++++++++++-------------------
- src/hb-unicode.cc              |    5 +-
+ src/hb-buffer.cc               |   2 +-
+ src/hb-fallback-shape.cc       |   2 +-
+ src/hb-old.cc                  |   2 +-
+ src/hb-ot-shape-complex-misc.cc |   2 +-
+ src/hb-ot-shape-normalize.cc   |  13 +++--
+ src/hb-ot-shape-private.hh     |   6 +--
+ src/hb-ot-shape.cc             |   4 +-
+ src/hb-unicode-private.hh      | 112
+ ++++++++++++++++++++--------------------
+ src/hb-unicode.cc              |   5 +-
  9 files changed, 73 insertions(+), 75 deletions(-)
 
 commit 7470315a3e782aa6192bbe64f7a3944266fb1521
  9 files changed, 73 insertions(+), 75 deletions(-)
 
 commit 7470315a3e782aa6192bbe64f7a3944266fb1521
@@ -4102,9 +15539,9 @@ Date:    Wed Aug 1 17:01:59 2012 -0400
 
     Move unicode accessors around
 
 
     Move unicode accessors around
 
- src/hb-unicode-private.hh |   73
- ++++++++++++++++++++++++++++++++++++++++++++-
- src/hb-unicode.cc        |   65 ++++------------------------------------
+ src/hb-unicode-private.hh | 73
+ ++++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-unicode.cc        | 65 ++++-------------------------------------
  2 files changed, 78 insertions(+), 60 deletions(-)
 
 commit 21fdcee00125b6e1c09f0bed3064d16ccd3a7a5d
  2 files changed, 78 insertions(+), 60 deletions(-)
 
 commit 21fdcee00125b6e1c09f0bed3064d16ccd3a7a5d
@@ -4113,13 +15550,13 @@ Date:  Wed Aug 1 16:23:44 2012 -0400
 
     Add hb_unicode_combining_class_t
 
 
     Add hb_unicode_combining_class_t
 
- src/hb-common.h          |   38 +-------------
- src/hb-glib.cc                   |    4 +-
- src/hb-icu.cc            |    4 +-
- src/hb-unicode-private.hh |   2 +-
- src/hb-unicode.cc        |   11 ++--
- src/hb-unicode.h         |  124
- ++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-common.h          |  38 +-------------
+ src/hb-glib.cc                   |   4 +-
+ src/hb-icu.cc            |   4 +-
+ src/hb-unicode-private.hh |   2 +-
+ src/hb-unicode.cc        |  11 ++--
+ src/hb-unicode.h         | 124
+ +++++++++++++++++++++++++++++++++++++++++++++-
  6 files changed, 134 insertions(+), 49 deletions(-)
 
 commit 84186a64004e5dcd2ce98b564d0e0a09aa5d68b2
  6 files changed, 134 insertions(+), 49 deletions(-)
 
 commit 84186a64004e5dcd2ce98b564d0e0a09aa5d68b2
@@ -4128,8 +15565,8 @@ Date:    Wed Aug 1 13:32:39 2012 -0400
 
     Add commentary on the compatibility decomposition in the normalizer
 
 
     Add commentary on the compatibility decomposition in the normalizer
 
- src/hb-ot-shape-normalize.cc |   18 +++++++++++++++---
- 1 files changed, 15 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-normalize.cc | 18 +++++++++++++++---
+ 1 file changed, 15 insertions(+), 3 deletions(-)
 
 commit 0834d952017a04c6f4599e574cb75ecf3ca27d3b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0834d952017a04c6f4599e574cb75ecf3ca27d3b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4140,8 +15577,8 @@ Date:    Wed Aug 1 00:21:09 2012 -0400
     Fallback mark positioning works now...  With hb-ft and hb-view /
     hb-shape at least.
 
     Fallback mark positioning works now...  With hb-ft and hb-view /
     hb-shape at least.
 
- src/hb-old.cc                 |   10 +++++-----
- src/hb-old/harfbuzz-shaper.cpp |    1 +
+ src/hb-old.cc                 | 10 +++++-----
+ src/hb-old/harfbuzz-shaper.cpp |  1 +
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 4ca743dfb8e09f9fa525061c7f1144d55f72effb
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 4ca743dfb8e09f9fa525061c7f1144d55f72effb
@@ -4150,8 +15587,8 @@ Date:    Wed Aug 1 00:03:41 2012 -0400
 
     [old] Implement fontMetrics
 
 
     [old] Implement fontMetrics
 
- src/hb-old.cc |   11 ++++++++++-
- 1 files changed, 10 insertions(+), 1 deletions(-)
+ src/hb-old.cc | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
 
 commit 1e7d860613032e40a3f90e2caa2ee5ac44ab8c8c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e7d860613032e40a3f90e2caa2ee5ac44ab8c8c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4167,14 +15604,14 @@ Date:  Tue Jul 31 23:41:06 2012 -0400
     Fixes regression with Tibetan, where the font has GPOS, and marks a
     glyph as mark where it shouldn't get zero advance.
 
     Fixes regression with Tibetan, where the font has GPOS, and marks a
     glyph as mark where it shouldn't get zero advance.
 
- src/hb-ot-layout-gpos-table.hh     |  14 ++++++++------
- src/hb-ot-layout.cc               |    4 ++--
- src/hb-ot-layout.h                |    3 ++-
- src/hb-ot-shape-complex-arabic.cc  |   2 +-
- src/hb-ot-shape-complex-indic.cc   |   2 +-
- src/hb-ot-shape-complex-misc.cc    |   4 ++--
- src/hb-ot-shape-complex-private.hh |   2 +-
- src/hb-ot-shape.cc                |    6 ++----
+ src/hb-ot-layout-gpos-table.hh     | 14 ++++++++------
+ src/hb-ot-layout.cc               |  4 ++--
+ src/hb-ot-layout.h                |  3 ++-
+ src/hb-ot-shape-complex-arabic.cc  |  2 +-
+ src/hb-ot-shape-complex-indic.cc   |  2 +-
+ src/hb-ot-shape-complex-misc.cc    |  4 ++--
+ src/hb-ot-shape-complex-private.hh |  2 +-
+ src/hb-ot-shape.cc                |  6 ++----
  8 files changed, 19 insertions(+), 18 deletions(-)
 
 commit a8842e4a448efb30f3f2f3c628d6dc4824829726
  8 files changed, 19 insertions(+), 18 deletions(-)
 
 commit a8842e4a448efb30f3f2f3c628d6dc4824829726
@@ -4183,8 +15620,8 @@ Date:    Tue Jul 31 23:10:11 2012 -0400
 
     Remove some TODO items
 
 
     Remove some TODO items
 
- TODO           |   27 ---------------------------
- src/hb-shape.cc |    2 ++
+ TODO           | 27 ---------------------------
+ src/hb-shape.cc |  2 ++
  2 files changed, 2 insertions(+), 27 deletions(-)
 
 commit 2bc3b9a616cedbc56ff4a915f9e3439ff3a6bf13
  2 files changed, 2 insertions(+), 27 deletions(-)
 
 commit 2bc3b9a616cedbc56ff4a915f9e3439ff3a6bf13
@@ -4195,12 +15632,12 @@ Date:  Tue Jul 31 23:08:25 2012 -0400
 
     Enabled for all shapers except for Indic.
 
 
     Enabled for all shapers except for Indic.
 
- src/hb-ot-shape-complex-arabic.cc  |   1 +
- src/hb-ot-shape-complex-indic.cc   |   1 +
- src/hb-ot-shape-complex-misc.cc    |   2 ++
- src/hb-ot-shape-complex-private.hh |   2 ++
- src/hb-ot-shape.cc                |   15 +++++++++++++++
- 5 files changed, 21 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc  |  1 +
+ src/hb-ot-shape-complex-indic.cc   |  1 +
+ src/hb-ot-shape-complex-misc.cc    |  2 ++
+ src/hb-ot-shape-complex-private.hh |  2 ++
+ src/hb-ot-shape.cc                | 15 +++++++++++++++
+ 5 files changed, 21 insertions(+)
 
 commit 5fecd8b0355894ceda14b3d3c654f20c3d5e77f4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5fecd8b0355894ceda14b3d3c654f20c3d5e77f4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4208,8 +15645,8 @@ Date:    Tue Jul 31 22:48:38 2012 -0400
 
     [OT] Synthesize glyph classes
 
 
     [OT] Synthesize glyph classes
 
- TODO              |    2 --
- src/hb-ot-shape.cc |  20 ++++++++++++++++++--
+ TODO              |  2 --
+ src/hb-ot-shape.cc | 20 ++++++++++++++++++--
  2 files changed, 18 insertions(+), 4 deletions(-)
 
 commit 03b09214c073ce37eeb8af5218942c85b2d393df
  2 files changed, 18 insertions(+), 4 deletions(-)
 
 commit 03b09214c073ce37eeb8af5218942c85b2d393df
@@ -4218,8 +15655,8 @@ Date:    Tue Jul 31 22:43:58 2012 -0400
 
     [GSUB] Minor
 
 
     [GSUB] Minor
 
- src/hb-ot-layout-gsub-table.hh |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit f0fc1df8fc949739b68d55948741016081b69c3a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f0fc1df8fc949739b68d55948741016081b69c3a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4229,8 +15666,8 @@ Date:    Tue Jul 31 22:43:32 2012 -0400
 
     Still working on it.
 
 
     Still working on it.
 
- src/hb-old.cc |   13 ++++++++++++-
- 1 files changed, 12 insertions(+), 1 deletions(-)
+ src/hb-old.cc | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
 
 commit 378d279bbf692195c4654e312dae854ab3be04cf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 378d279bbf692195c4654e312dae854ab3be04cf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4241,16 +15678,16 @@ Date:  Tue Jul 31 21:36:16 2012 -0400
     Based on patch from Philip Withnall.
     https://bugs.freedesktop.org/show_bug.cgi?id=41095
 
     Based on patch from Philip Withnall.
     https://bugs.freedesktop.org/show_bug.cgi?id=41095
 
- src/hb-glib.cc                      |   30 +++++++++++++++++++++++
- src/hb-icu.cc               |   36 +++++++++++++++++++++++++++-
- src/hb-ot-shape-normalize.cc |   53
- +++++++++++++++++++++++++++--------------
- src/hb-unicode-private.hh    |    1 +
- src/hb-unicode.cc           |   27 ++++++++++++++++++++-
- src/hb-unicode.h            |   37 ++++++++++++++++++++++++++++-
- test/api/hb-test.h          |    1 +
- test/api/test-unicode.c      |   50
- +++++++++++++++++++++++++++++++++++++++
+ src/hb-glib.cc                      | 30 +++++++++++++++++++++++++
+ src/hb-icu.cc               | 36 +++++++++++++++++++++++++++++-
+ src/hb-ot-shape-normalize.cc | 53
+ +++++++++++++++++++++++++++++---------------
+ src/hb-unicode-private.hh    |  1 +
+ src/hb-unicode.cc           | 27 +++++++++++++++++++++-
+ src/hb-unicode.h            | 37 ++++++++++++++++++++++++++++++-
+ test/api/hb-test.h          |  1 +
+ test/api/test-unicode.c      | 50
+ +++++++++++++++++++++++++++++++++++++++++
  8 files changed, 214 insertions(+), 21 deletions(-)
 
 commit 321ec29cc270e7e66a529696b70b2caac553c95f
  8 files changed, 214 insertions(+), 21 deletions(-)
 
 commit 321ec29cc270e7e66a529696b70b2caac553c95f
@@ -4259,8 +15696,8 @@ Date:    Tue Jul 31 21:10:16 2012 -0400
 
     Remove unused function
 
 
     Remove unused function
 
- src/hb-ot-shape-complex-indic.cc |    7 -------
- 1 files changed, 0 insertions(+), 7 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 7 -------
+ 1 file changed, 7 deletions(-)
 
 commit 69cc492dc120847ed00cae65ec958593ebf550c5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 69cc492dc120847ed00cae65ec958593ebf550c5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4268,8 +15705,8 @@ Date:    Tue Jul 31 14:51:36 2012 -0400
 
     [buffer] Minor
 
 
     [buffer] Minor
 
- src/hb-buffer-private.hh |    3 ++-
- src/hb-buffer.cc        |   24 ++++++++++++------------
+ src/hb-buffer-private.hh |  3 ++-
+ src/hb-buffer.cc        | 24 ++++++++++++------------
  2 files changed, 14 insertions(+), 13 deletions(-)
 
 commit 693918ef8541014a5ef7dfb91c6ea0ae36d9c368
  2 files changed, 14 insertions(+), 13 deletions(-)
 
 commit 693918ef8541014a5ef7dfb91c6ea0ae36d9c368
@@ -4280,14 +15717,14 @@ Date:  Mon Jul 30 21:08:51 2012 -0400
 
     Add a shaper class struct.
 
 
     Add a shaper class struct.
 
- src/hb-ot-shape-complex-arabic.cc    |   37 +++----
- src/hb-ot-shape-complex-indic.cc     |   47 ++++++---
- src/hb-ot-shape-complex-misc.cc      |   67 ++++++--------
- src/hb-ot-shape-complex-private.hh   |  179
- ++++++++++------------------------
- src/hb-ot-shape-normalize-private.hh |    4 +-
- src/hb-ot-shape-private.hh          |    2 +-
- src/hb-ot-shape.cc                  |   16 ++-
+ src/hb-ot-shape-complex-arabic.cc    |  37 ++++----
+ src/hb-ot-shape-complex-indic.cc     |  47 ++++++---
+ src/hb-ot-shape-complex-misc.cc      |  67 ++++++-------
+ src/hb-ot-shape-complex-private.hh   | 179
+ ++++++++++-------------------------
+ src/hb-ot-shape-normalize-private.hh |   4 +-
+ src/hb-ot-shape-private.hh          |   2 +-
+ src/hb-ot-shape.cc                  |  16 ++--
  7 files changed, 143 insertions(+), 209 deletions(-)
 
 commit c2e42c3db691515f3a458eb4c71fe1e6439d5620
  7 files changed, 143 insertions(+), 209 deletions(-)
 
 commit c2e42c3db691515f3a458eb4c71fe1e6439d5620
@@ -4296,10 +15733,10 @@ Date:  Mon Jul 30 19:54:50 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gpos-table.hh       |    2 +-
- src/hb-ot-layout-gsub-table.hh       |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- src/hb-ot-layout-private.hh         |    4 ++--
+ src/hb-ot-layout-gpos-table.hh       | 2 +-
+ src/hb-ot-layout-gsub-table.hh       | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ src/hb-ot-layout-private.hh         | 4 ++--
  4 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 03f67bc012f42131b36083a23efc78e1b04b828c
  4 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 03f67bc012f42131b36083a23efc78e1b04b828c
@@ -4308,10 +15745,10 @@ Date:  Mon Jul 30 19:47:53 2012 -0400
 
     More refactoring glyph class access
 
 
     More refactoring glyph class access
 
- src/hb-ot-layout-gpos-table.hh       |    2 +-
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |  154
- ++++++++++++++++------------------
+ src/hb-ot-layout-gpos-table.hh       |   2 +-
+ src/hb-ot-layout-gsub-table.hh       |   2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 154
+ +++++++++++++++++------------------
  3 files changed, 76 insertions(+), 82 deletions(-)
 
 commit 300c7307eb7943ba7416b672345506be1e27c6ba
  3 files changed, 76 insertions(+), 82 deletions(-)
 
 commit 300c7307eb7943ba7416b672345506be1e27c6ba
@@ -4320,8 +15757,8 @@ Date:    Mon Jul 30 19:37:44 2012 -0400
 
     [OT] Don't crash if no GDEF available
 
 
     [OT] Don't crash if no GDEF available
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 3dcbdc2125c04c173f29f04922fc031929893f4e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3dcbdc2125c04c173f29f04922fc031929893f4e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4329,8 +15766,8 @@ Date:    Mon Jul 30 19:31:17 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.cc |  15 +++++----------
- 1 files changed, 5 insertions(+), 10 deletions(-)
+ src/hb-ot-layout.cc | 15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
 
 commit 05bd1b63426e07d1df7a1b40bf845dc94ab995a8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 05bd1b63426e07d1df7a1b40bf845dc94ab995a8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4338,15 +15775,15 @@ Date:  Mon Jul 30 19:30:01 2012 -0400
 
     [GSUB/GPOS] Move glyph props matching around
 
 
     [GSUB/GPOS] Move glyph props matching around
 
- src/hb-ot-layout-gpos-table.hh       |   11 ++--
- src/hb-ot-layout-gsub-table.hh       |   18 ++++--
- src/hb-ot-layout-gsubgpos-private.hh |   99
- ++++++++++++++++++++++++++++----
- src/hb-ot-layout-private.hh         |   12 ----
- src/hb-ot-layout.cc                 |  104
- +++-------------------------------
- src/hb-ot-layout.h                  |   12 +++-
- src/hb-ot-shape.cc                  |   10 ++--
+ src/hb-ot-layout-gpos-table.hh       |  11 ++--
+ src/hb-ot-layout-gsub-table.hh       |  18 +++---
+ src/hb-ot-layout-gsubgpos-private.hh |  99
+ +++++++++++++++++++++++++++++----
+ src/hb-ot-layout-private.hh         |  12 ----
+ src/hb-ot-layout.cc                 | 104
+ +++--------------------------------
+ src/hb-ot-layout.h                  |  12 ++--
+ src/hb-ot-shape.cc                  |  10 ++--
  7 files changed, 127 insertions(+), 139 deletions(-)
 
 commit 2fca1426ca06cabbe8f027f2dc9dee9c27560c76
  7 files changed, 127 insertions(+), 139 deletions(-)
 
 commit 2fca1426ca06cabbe8f027f2dc9dee9c27560c76
@@ -4355,8 +15792,8 @@ Date:    Mon Jul 30 18:46:41 2012 -0400
 
     [GSUB] Don't erase glyph classes if GDEF does not have glyph classes
 
 
     [GSUB] Don't erase glyph classes if GDEF does not have glyph classes
 
- src/hb-ot-layout-gsubgpos-private.hh |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit fd42257f8c45ff8e036e1c3eb1a788a101be7ead
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fd42257f8c45ff8e036e1c3eb1a788a101be7ead
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4364,8 +15801,8 @@ Date:    Mon Jul 30 18:40:27 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.cc |  29 +++++------------------------
- 1 files changed, 5 insertions(+), 24 deletions(-)
+ src/hb-ot-layout.cc | 29 +++++------------------------
+ 1 file changed, 5 insertions(+), 24 deletions(-)
 
 commit 7fbbf86efe675e4c038dfc5985c24bbc544620cd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7fbbf86efe675e4c038dfc5985c24bbc544620cd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4373,9 +15810,9 @@ Date:    Mon Jul 30 18:36:42 2012 -0400
 
     [GSUB] Minor
 
 
     [GSUB] Minor
 
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++++++
- 2 files changed, 7 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh       | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ++++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
 
 commit 713914d3203109a8e9213f5a1d3b384730703ce9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 713914d3203109a8e9213f5a1d3b384730703ce9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4383,8 +15820,8 @@ Date:    Mon Jul 30 17:54:38 2012 -0400
 
     [Uniscribe] Clean up a bit
 
 
     [Uniscribe] Clean up a bit
 
- src/hb-uniscribe.cc |  17 +++++------------
- 1 files changed, 5 insertions(+), 12 deletions(-)
+ src/hb-uniscribe.cc | 17 +++++------------
+ 1 file changed, 5 insertions(+), 12 deletions(-)
 
 commit 301168dae77a63ee25adfb26ce2b54a708f83791
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 301168dae77a63ee25adfb26ce2b54a708f83791
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4392,9 +15829,9 @@ Date:    Mon Jul 30 17:48:04 2012 -0400
 
     [CoreText] Port to shape_plan infrastructure
 
 
     [CoreText] Port to shape_plan infrastructure
 
- src/hb-coretext.cc |  161
- ++++++++++++++++++++++++++--------------------------
- 1 files changed, 80 insertions(+), 81 deletions(-)
+ src/hb-coretext.cc | 161
+ ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 80 insertions(+), 81 deletions(-)
 
 commit 6cdfd14bb19d60ac3d6b20ff611408432254f273
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6cdfd14bb19d60ac3d6b20ff611408432254f273
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4402,8 +15839,8 @@ Date:    Mon Jul 30 17:22:17 2012 -0400
 
     Fix build on Mac
 
 
     Fix build on Mac
 
- src/hb-ot-layout-gsub-table.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 7e34601dededd521bcef15111e39293df3d0d13d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7e34601dededd521bcef15111e39293df3d0d13d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4416,11 +15853,11 @@ Date:  Mon Jul 30 14:53:41 2012 -0400
     copied from Hangul, so had the fully-composed normalization behavior,
     which was unnecessary.  So, fix that too.
 
     copied from Hangul, so had the fully-composed normalization behavior,
     which was unnecessary.  So, fix that too.
 
- src/hb-ot-shape-complex-arabic.cc  |   2 +-
- src/hb-ot-shape-complex-indic.cc   |   4 +---
- src/hb-ot-shape-complex-misc.cc    |  12 +++++++++---
- src/hb-ot-shape-complex-private.hh |   9 ++++-----
- src/hb-ot-shape.cc                |    4 +++-
+ src/hb-ot-shape-complex-arabic.cc  |  2 +-
+ src/hb-ot-shape-complex-indic.cc   |  4 +---
+ src/hb-ot-shape-complex-misc.cc    | 12 +++++++++---
+ src/hb-ot-shape-complex-private.hh |  9 ++++-----
+ src/hb-ot-shape.cc                |  4 +++-
  5 files changed, 18 insertions(+), 13 deletions(-)
 
 commit 7afb14407e59dfeaa79c33aca1ffa60e7982e349
  5 files changed, 18 insertions(+), 13 deletions(-)
 
 commit 7afb14407e59dfeaa79c33aca1ffa60e7982e349
@@ -4431,8 +15868,8 @@ Date:    Mon Jul 30 13:54:46 2012 -0400
 
     Fixes 8 more Telugu tests. Failures at 15 (0.00154548%).
 
 
     Fixes 8 more Telugu tests. Failures at 15 (0.00154548%).
 
- src/hb-unicode.cc |   8 ++++++++
- src/indic.cc     |   11 ++++++++---
+ src/hb-unicode.cc |  8 ++++++++
+ src/indic.cc     | 11 ++++++++---
  2 files changed, 16 insertions(+), 3 deletions(-)
 
 commit 70b3dc327232b20051b36397aa2b196ab8c62397
  2 files changed, 16 insertions(+), 3 deletions(-)
 
 commit 70b3dc327232b20051b36397aa2b196ab8c62397
@@ -4441,8 +15878,9 @@ Date:    Mon Jul 30 12:40:18 2012 -0400
 
     Add Hebrew test
 
 
     Add Hebrew test
 
- .../script-hebrew/misc/diacritics.txt             |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-default/script-hebrew/misc/diacritics.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit f2377155e35c15919af4d7db21b6edc6783146b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f2377155e35c15919af4d7db21b6edc6783146b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4463,10 +15901,10 @@ Date:  Mon Jul 30 10:50:57 2012 -0400
        https://bugs.freedesktop.org/show_bug.cgi?id=31994
        https://bugs.freedesktop.org/show_bug.cgi?id=31995
 
        https://bugs.freedesktop.org/show_bug.cgi?id=31994
        https://bugs.freedesktop.org/show_bug.cgi?id=31995
 
- src/hb-old/harfbuzz-arabic.c  |   12 +++++++++---
- src/hb-old/harfbuzz-gpos.c    |    6 +++---
- src/hb-old/harfbuzz-gsub.c    |    6 +++---
- src/hb-old/harfbuzz-tibetan.c |    1 +
+ src/hb-old/harfbuzz-arabic.c  | 12 +++++++++---
+ src/hb-old/harfbuzz-gpos.c    |  6 +++---
+ src/hb-old/harfbuzz-gsub.c    |  6 +++---
+ src/hb-old/harfbuzz-tibetan.c |  1 +
  4 files changed, 16 insertions(+), 9 deletions(-)
 
 commit 3f4764bb56bb7e42ba8859f1905810bd2f998838
  4 files changed, 16 insertions(+), 9 deletions(-)
 
 commit 3f4764bb56bb7e42ba8859f1905810bd2f998838
@@ -4475,8 +15913,8 @@ Date:    Mon Jul 30 10:06:42 2012 -0400
 
     Don't lock user_data set during destruction if empty
 
 
     Don't lock user_data set during destruction if empty
 
- src/hb-private.hh |   5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ src/hb-private.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit 4ba647eecf0f70917ac4229af1f2dd3c62fcb7d5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ba647eecf0f70917ac4229af1f2dd3c62fcb7d5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4484,8 +15922,8 @@ Date:    Mon Jul 30 09:53:06 2012 -0400
 
     Fix leak
 
 
     Fix leak
 
- src/hb-ot-shape.cc |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit f860366456d9e59b139a940da6d89c3c4fb9e96e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f860366456d9e59b139a940da6d89c3c4fb9e96e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4493,13 +15931,13 @@ Date:  Mon Jul 30 02:38:39 2012 -0400
 
     [OT] Gain back some lost speed
 
 
     [OT] Gain back some lost speed
 
- src/hb-ot-layout-private.hh       |   27 +++++++++++++++-
- src/hb-ot-layout.cc               |   63
- ++++++++++++++++++++++++++++++++---
- src/hb-ot-map-private.hh          |   26 +++------------
- src/hb-ot-map.cc                  |   35 ++++++++++++++------
- src/hb-ot-shape-complex-indic.cc   |   2 +-
- src/hb-ot-shape-complex-private.hh |   5 ---
+ src/hb-ot-layout-private.hh       | 27 +++++++++++++++-
+ src/hb-ot-layout.cc               | 63
+ ++++++++++++++++++++++++++++++++++----
+ src/hb-ot-map-private.hh          | 26 +++-------------
+ src/hb-ot-map.cc                  | 35 +++++++++++++++------
+ src/hb-ot-shape-complex-indic.cc   |  2 +-
+ src/hb-ot-shape-complex-private.hh |  5 ---
  6 files changed, 114 insertions(+), 44 deletions(-)
 
 commit 11f4c87d01924cac43bf40044f67838440e19e42
  6 files changed, 114 insertions(+), 44 deletions(-)
 
 commit 11f4c87d01924cac43bf40044f67838440e19e42
@@ -4510,8 +15948,8 @@ Date:    Mon Jul 30 02:36:46 2012 -0400
 
     I didn't like it from the beginning.
 
 
     I didn't like it from the beginning.
 
- src/hb-ot-layout.cc |   9 +++++----
- src/hb-ot-layout.h  |   5 -----
+ src/hb-ot-layout.cc | 9 +++++----
+ src/hb-ot-layout.h  | 5 -----
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 578e42182b9b9cf15b4c5426fae36e224160cbd7
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 578e42182b9b9cf15b4c5426fae36e224160cbd7
@@ -4520,9 +15958,9 @@ Date:    Mon Jul 30 02:35:07 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-private.hh |   2 --
- src/hb-ot-layout.cc        |    1 -
- 2 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-private.hh | 2 --
+ src/hb-ot-layout.cc        | 1 -
+ 2 files changed, 3 deletions(-)
 
 commit a973b5ce86051e8ef0d20df362db1a50488842ab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a973b5ce86051e8ef0d20df362db1a50488842ab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4535,8 +15973,9 @@ Date:    Mon Jul 30 01:46:34 2012 -0400
     since it was ligating consonants, pushing matra out, and then ligating
     with the matra.  Adjust for that.  See comments.
 
     since it was ligating consonants, pushing matra out, and then ligating
     with the matra.  Adjust for that.  See comments.
 
- src/hb-ot-layout-gsub-table.hh                            |   11 ++++++++---
- .../indic/script-kannada/misc/misc.txt                    |    1 +
+ src/hb-ot-layout-gsub-table.hh                                       |
+ 11 ++++++++---
+ .../in-tree/shaper-indic/indic/script-kannada/misc/misc.txt   |  1 +
  2 files changed, 9 insertions(+), 3 deletions(-)
 
 commit 0aef425e25e2c58445157057f17ef18f695c5240
  2 files changed, 9 insertions(+), 3 deletions(-)
 
 commit 0aef425e25e2c58445157057f17ef18f695c5240
@@ -4545,8 +15984,8 @@ Date:    Mon Jul 30 00:55:15 2012 -0400
 
     [GSUB] Minor
 
 
     [GSUB] Minor
 
- src/hb-ot-layout-gpos-table.hh |   15 ++++++---------
- 1 files changed, 6 insertions(+), 9 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
 
 commit d1d69ec52e75a78575b620a1c456d528b6078170
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d1d69ec52e75a78575b620a1c456d528b6078170
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4558,8 +15997,8 @@ Date:    Mon Jul 30 00:51:47 2012 -0400
     This concludes the mark-attachment vs ligating interaction fixes
     (for now).
 
     This concludes the mark-attachment vs ligating interaction fixes
     (for now).
 
- src/hb-ot-layout-gsub-table.hh |   24 ++++++++++++++++++++++++
- 1 files changed, 24 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
 
 commit 4751dec8be05883483fd5f6b474ebd22583ae566
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4751dec8be05883483fd5f6b474ebd22583ae566
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4567,8 +16006,8 @@ Date:    Mon Jul 30 00:42:07 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-private.hh |  20 ++++++++++----------
- 1 files changed, 10 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-private.hh | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
 
 commit f24bcfbed1f3b4f4f6311246bd870f73ad6ba750
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f24bcfbed1f3b4f4f6311246bd870f73ad6ba750
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4576,8 +16015,8 @@ Date:    Mon Jul 30 00:39:00 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit fe20c0f84f5ff518dc471bf22ac5a83ef079eb69
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fe20c0f84f5ff518dc471bf22ac5a83ef079eb69
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4589,10 +16028,10 @@ Date:  Mon Jul 30 00:00:59 2012 -0400
 
     Fixes https://bugzilla.gnome.org/show_bug.cgi?id=437633
 
 
     Fixes https://bugzilla.gnome.org/show_bug.cgi?id=437633
 
- src/hb-ot-layout-gsub-table.hh       |  117
- ++++++++++++++++++++++------------
- src/hb-ot-layout-gsubgpos-private.hh |    8 --
- src/hb-ot-layout-private.hh         |    8 +--
+ src/hb-ot-layout-gsub-table.hh       | 117
+ +++++++++++++++++++++++------------
+ src/hb-ot-layout-gsubgpos-private.hh |   8 ---
+ src/hb-ot-layout-private.hh         |   8 +--
  3 files changed, 79 insertions(+), 54 deletions(-)
 
 commit 2ec3ba46a3c24469096e901750e38f6ee555479a
  3 files changed, 79 insertions(+), 54 deletions(-)
 
 commit 2ec3ba46a3c24469096e901750e38f6ee555479a
@@ -4603,8 +16042,8 @@ Date:    Sun Jul 29 22:02:24 2012 -0400
 
     Start squeezing more out of lig_id/lig_comp.
 
 
     Start squeezing more out of lig_id/lig_comp.
 
- src/hb-ot-layout-gsub-table.hh |    6 +++---
- src/hb-ot-layout-private.hh   |   35 +++++++++++++++++++++++++++++++----
+ src/hb-ot-layout-gsub-table.hh |  6 +++---
+ src/hb-ot-layout-private.hh   | 35 +++++++++++++++++++++++++++++++----
  2 files changed, 34 insertions(+), 7 deletions(-)
 
 commit ef6e9cec3399e4f63f4b662abd77cf6d4683e8a3
  2 files changed, 34 insertions(+), 7 deletions(-)
 
 commit ef6e9cec3399e4f63f4b662abd77cf6d4683e8a3
@@ -4613,8 +16052,8 @@ Date:    Sun Jul 29 21:35:22 2012 -0400
 
     Fixup bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 
 
     Fixup bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 
- src/hb-shape-plan.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-shape-plan.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit cb3d34063154bf164c61eeba41c6166b0bd304fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cb3d34063154bf164c61eeba41c6166b0bd304fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4635,8 +16074,8 @@ Date:    Sun Jul 29 20:37:38 2012 -0400
     it would
     be wrong to ligate them.  Uniscribe has this bug also.
 
     it would
     be wrong to ligate them.  Uniscribe has this bug also.
 
- src/hb-ot-layout-gsub-table.hh |   18 ++++++++++++++----
- 1 files changed, 14 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
 
 commit 97a201becf936f62046914b568e5763e27ee936e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 97a201becf936f62046914b568e5763e27ee936e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4644,10 +16083,10 @@ Date:  Sun Jul 29 20:31:36 2012 -0400
 
     Add Arabic tests for mark ligature component attachments
 
 
     Add Arabic tests for mark ligature component attachments
 
- .../script-arabic/misc/diacritics/MANIFEST        |    1 +
- .../misc/diacritics/ligature-components.txt       |   18
+ .../script-arabic/misc/diacritics/MANIFEST            |  1 +
+ .../misc/diacritics/ligature-components.txt           | 18
  ++++++++++++++++++
  ++++++++++++++++++
- 2 files changed, 19 insertions(+), 0 deletions(-)
+ 2 files changed, 19 insertions(+)
 
 commit a15b70a81a609f024083cb04f9819483f4d5cab7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a15b70a81a609f024083cb04f9819483f4d5cab7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4658,8 +16097,8 @@ Date:    Sun Jul 29 20:09:22 2012 -0400
     Unlike Uniscribe, hb-old returns glyphs in logical order, so the logic
     does not need to duplicated for RTL.
 
     Unlike Uniscribe, hb-old returns glyphs in logical order, so the logic
     does not need to duplicated for RTL.
 
- src/hb-old.cc |   12 +++---------
- 1 files changed, 3 insertions(+), 9 deletions(-)
+ src/hb-old.cc | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
 
 commit 8a7e70ef65952fc16b8c1d5f1126c94d9d81e755
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8a7e70ef65952fc16b8c1d5f1126c94d9d81e755
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4667,8 +16106,8 @@ Date:    Sun Jul 29 19:56:54 2012 -0400
 
     [Minor]
 
 
     [Minor]
 
- src/test.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/test.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bb0e4ba3e9c5a407fc5d73c914e429d24d336380
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4676,8 +16115,8 @@ Date:    Sun Jul 29 17:34:14 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-shape-plan.cc        |    2 +-
- src/test-would-substitute.cc |    2 +-
+ src/hb-shape-plan.cc        | 2 +-
+ src/test-would-substitute.cc | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a00ad60bc0fe74bf0e11d73da563239f3392f351
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a00ad60bc0fe74bf0e11d73da563239f3392f351
@@ -4690,8 +16129,8 @@ Date:    Sat Jul 28 21:16:08 2012 -0400
     it and
     do what we've got to do transparently.
 
     it and
     do what we've got to do transparently.
 
- src/hb-uniscribe.cc |   6 +++++-
- src/hb-uniscribe.h  |   4 ----
+ src/hb-uniscribe.cc | 6 +++++-
+ src/hb-uniscribe.h  | 4 ----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 5d874d566fe5d2cc4cfaf02c79b663d8a626ca1e
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 5d874d566fe5d2cc4cfaf02c79b663d8a626ca1e
@@ -4706,15 +16145,15 @@ Date:  Sat Jul 28 21:05:25 2012 -0400
     when one of the marks itself is a ligature.  That regressed 26 Tibetan
     tests (up from zero!).  Fix that.  Tibetan back to zero.
 
     when one of the marks itself is a ligature.  That regressed 26 Tibetan
     tests (up from zero!).  Fix that.  Tibetan back to zero.
 
- src/hb-ot-layout-gpos-table.hh                            |   27
- ++++++++++++++-----
- src/hb-ot-layout-private.hh                       |    5 ++-
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
- .../indic/script-sinhala/misc/MANIFEST                    |    1 +
- .../in-tree/shaper-indic/south-asian/MANIFEST     |    1 +
- .../south-asian/script-tibetan/MANIFEST           |    1 +
- .../south-asian/script-tibetan/misc/MANIFEST      |    1 +
- .../south-asian/script-tibetan/misc/misc.txt      |    1 +
+ src/hb-ot-layout-gpos-table.hh                            | 27
+ ++++++++++++++++------
+ src/hb-ot-layout-private.hh                       |  5 ++--
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST   |  1 +
+ .../indic/script-sinhala/misc/MANIFEST                    |  1 +
+ .../in-tree/shaper-indic/south-asian/MANIFEST     |  1 +
+ .../south-asian/script-tibetan/MANIFEST           |  1 +
+ .../south-asian/script-tibetan/misc/MANIFEST      |  1 +
+ .../south-asian/script-tibetan/misc/misc.txt      |  1 +
  8 files changed, 29 insertions(+), 9 deletions(-)
 
 commit 338fe662b50f9309bf0050dd99becb644874195b
  8 files changed, 29 insertions(+), 9 deletions(-)
 
 commit 338fe662b50f9309bf0050dd99becb644874195b
@@ -4723,8 +16162,8 @@ Date:    Sat Jul 28 18:53:01 2012 -0400
 
     [GSUB] Minor
 
 
     [GSUB] Minor
 
- src/hb-ot-layout-gsub-table.hh |   33 ++++++++++++++++-----------------
- 1 files changed, 16 insertions(+), 17 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 33 ++++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 17 deletions(-)
 
 commit e6f7479fe34fb4a7cada61d84c2ed70d1fd565c8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6f7479fe34fb4a7cada61d84c2ed70d1fd565c8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4732,9 +16171,9 @@ Date:    Sat Jul 28 18:34:58 2012 -0400
 
     [GSUB] Simplify would-apply
 
 
     [GSUB] Simplify would-apply
 
- src/hb-ot-layout-gsub-table.hh       |   71
- +++-------------------------------
- src/hb-ot-layout-gsubgpos-private.hh |   24 ++---------
+ src/hb-ot-layout-gsub-table.hh       | 71
+ +++---------------------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 24 +++---------
  2 files changed, 11 insertions(+), 84 deletions(-)
 
 commit dadede012e4841f9fcb70d514fdc752f3ea4663d
  2 files changed, 11 insertions(+), 84 deletions(-)
 
 commit dadede012e4841f9fcb70d514fdc752f3ea4663d
@@ -4743,9 +16182,9 @@ Date:    Sat Jul 28 18:03:20 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-common-private.hh |   7 +++----
- src/hb-ot-layout-gpos-table.hh     |   2 +-
- src/hb-ot-layout-gsub-table.hh     |   2 +-
+ src/hb-ot-layout-common-private.hh | 7 +++----
+ src/hb-ot-layout-gpos-table.hh     | 2 +-
+ src/hb-ot-layout-gsub-table.hh     | 2 +-
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 0b99429ead05ae32b3c210cb499af401b02770a9
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 0b99429ead05ae32b3c210cb499af401b02770a9
@@ -4762,11 +16201,11 @@ Date:  Sat Jul 28 17:31:01 2012 -0400
 
     Remove the "fast_path" hack from before.
 
 
     Remove the "fast_path" hack from before.
 
- src/hb-ot-layout-gpos-table.hh       |  179
- +++++++++++++++++++++++++++++----
- src/hb-ot-layout-gsub-table.hh       |  166
+ src/hb-ot-layout-gpos-table.hh       | 179
+ ++++++++++++++++++++++++++++++-----
+ src/hb-ot-layout-gsub-table.hh       | 166
  ++++++++++++++++++++++++++------
  ++++++++++++++++++++++++++------
- src/hb-ot-layout-gsubgpos-private.hh |   26 +++++
+ src/hb-ot-layout-gsubgpos-private.hh |  26 +++++
  3 files changed, 321 insertions(+), 50 deletions(-)
 
 commit 30ec9002d84e8b49290e782e6192069821ffa942
  3 files changed, 321 insertions(+), 50 deletions(-)
 
 commit 30ec9002d84e8b49290e782e6192069821ffa942
@@ -4775,8 +16214,8 @@ Date:    Sat Jul 28 17:25:20 2012 -0400
 
     Reject lookups with no subTable
 
 
     Reject lookups with no subTable
 
- src/hb-ot-layout-common-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-common-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 0981068b75710397f08e0d2d776a0a2ea68d7117
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0981068b75710397f08e0d2d776a0a2ea68d7117
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4784,8 +16223,8 @@ Date:    Sat Jul 28 17:01:59 2012 -0400
 
     [GSUB/GPOS] Reject Context/ChainContext lookups with zero input
 
 
     [GSUB/GPOS] Reject Context/ChainContext lookups with zero input
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 2f87cebe1062c7007021ebd05c1664e60da80825
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f87cebe1062c7007021ebd05c1664e60da80825
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4795,14 +16234,14 @@ Date:  Fri Jul 27 04:02:38 2012 -0400
 
     Should give us some performance boost.
 
 
     Should give us some performance boost.
 
- TODO                    |    4 ++
- src/hb-buffer-private.hh |   30 ++++++++++++++
- src/hb-font-private.hh   |    6 +++
- src/hb-font.cc                  |   15 ++++++-
- src/hb-shape-plan.cc    |  100
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-shape-plan.h     |    7 +++
- src/hb-shape.cc         |    2 +-
+ TODO                    |   4 ++
+ src/hb-buffer-private.hh |  30 ++++++++++++++
+ src/hb-font-private.hh   |   6 +++
+ src/hb-font.cc                  |  15 ++++++-
+ src/hb-shape-plan.cc    | 100
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-shape-plan.h     |   7 ++++
+ src/hb-shape.cc         |   2 +-
  7 files changed, 162 insertions(+), 2 deletions(-)
 
 commit e9eb9503e97044222f843daacfa47e26e51312b7
  7 files changed, 162 insertions(+), 2 deletions(-)
 
 commit e9eb9503e97044222f843daacfa47e26e51312b7
@@ -4811,9 +16250,9 @@ Date:    Fri Jul 27 03:16:22 2012 -0400
 
     Add default_shaper_list to shape_plan
 
 
     Add default_shaper_list to shape_plan
 
- src/hb-shape-plan-private.hh |    1 +
- src/hb-shape-plan.cc        |    2 ++
- 2 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-shape-plan-private.hh | 1 +
+ src/hb-shape-plan.cc        | 2 ++
+ 2 files changed, 3 insertions(+)
 
 commit 3b7c4e270694ed962e2a2839e44f2a59c26b326c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3b7c4e270694ed962e2a2839e44f2a59c26b326c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4824,8 +16263,8 @@ Date:    Fri Jul 27 03:12:23 2012 -0400
     Shapers have a chance to reject a font in face shaper_data creation.
     No need to allow failing during planning.
 
     Shapers have a chance to reject a font in face shaper_data creation.
     No need to allow failing during planning.
 
- src/hb-shape-plan.cc |   17 ++++++-----------
- 1 files changed, 6 insertions(+), 11 deletions(-)
+ src/hb-shape-plan.cc | 17 ++++++-----------
+ 1 file changed, 6 insertions(+), 11 deletions(-)
 
 commit cfe9882610489e1b917e09a74dfbf6bbba2e4a57
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cfe9882610489e1b917e09a74dfbf6bbba2e4a57
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -4833,12 +16272,12 @@ Date:  Fri Jul 27 03:06:30 2012 -0400
 
     Add hb_ot_layout_ensure() and hb_uniscribe_font_ensure()
 
 
     Add hb_ot_layout_ensure() and hb_uniscribe_font_ensure()
 
- src/hb-ot-layout.cc     |    7 +++++++
- src/hb-ot-layout.h      |    6 ++++++
- src/hb-shape-plan.cc    |   22 ++--------------------
- src/hb-shaper-private.hh |   18 ++++++++++++++++++
- src/hb-uniscribe.cc     |   11 +++++++++++
- src/hb-uniscribe.h      |    4 ++++
+ src/hb-ot-layout.cc     |  7 +++++++
+ src/hb-ot-layout.h      |  6 ++++++
+ src/hb-shape-plan.cc    | 22 ++--------------------
+ src/hb-shaper-private.hh | 18 ++++++++++++++++++
+ src/hb-uniscribe.cc     | 11 +++++++++++
+ src/hb-uniscribe.h      |  4 ++++
  6 files changed, 48 insertions(+), 20 deletions(-)
 
 commit c5b668fb9239c912d2448280a7176e331ebc9181
  6 files changed, 48 insertions(+), 20 deletions(-)
 
 commit c5b668fb9239c912d2448280a7176e331ebc9181
@@ -4847,8 +16286,8 @@ Date:    Fri Jul 27 02:49:39 2012 -0400
 
     Choose one shaper per plan
 
 
     Choose one shaper per plan
 
- src/hb-shape-plan-private.hh |    2 +-
- src/hb-shape-plan.cc        |   19 +++++++++----------
+ src/hb-shape-plan-private.hh |  2 +-
+ src/hb-shape-plan.cc        | 19 +++++++++----------
  2 files changed, 10 insertions(+), 11 deletions(-)
 
 commit e82061e8db922f0ddbefd5a184ee2f9f967b9a05
  2 files changed, 10 insertions(+), 11 deletions(-)
 
 commit e82061e8db922f0ddbefd5a184ee2f9f967b9a05
@@ -4857,10 +16296,10 @@ Date:  Fri Jul 27 02:29:32 2012 -0400
 
     Move ot shaper completely to shape_plan
 
 
     Move ot shaper completely to shape_plan
 
- src/hb-ot-shape-private.hh |   6 --
- src/hb-ot-shape.cc        |  181
- ++++++++++++++++++++------------------------
- src/hb-uniscribe.cc       |    2 +-
+ src/hb-ot-shape-private.hh |  6 --
+ src/hb-ot-shape.cc        | 181
+ +++++++++++++++++++++------------------------
+ src/hb-uniscribe.cc       |   2 +-
  3 files changed, 84 insertions(+), 105 deletions(-)
 
 commit ea278d3895fe0c92801d692cd71d8d9f1de7c048
  3 files changed, 84 insertions(+), 105 deletions(-)
 
 commit ea278d3895fe0c92801d692cd71d8d9f1de7c048
@@ -4869,17 +16308,17 @@ Date:  Fri Jul 27 02:12:28 2012 -0400
 
     Partially switch ot shaper to shape_plan
 
 
     Partially switch ot shaper to shape_plan
 
- src/hb-buffer-private.hh      |    1 +
- src/hb-buffer.cc              |    1 -
- src/hb-font-private.hh                |    2 --
- src/hb-font.cc                        |   22 ++++++++++++++--------
- src/hb-ot-layout-gpos-table.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh |    4 ++--
- src/hb-ot-layout-private.hh   |    1 +
- src/hb-ot-layout.cc           |    9 ++++++---
- src/hb-ot-shape.cc            |    3 ++-
- src/hb-shape-plan.cc          |   11 +++++++++++
- src/hb-shaper-private.hh      |    3 ++-
+ src/hb-buffer-private.hh      |  1 +
+ src/hb-buffer.cc              |  1 -
+ src/hb-font-private.hh                |  2 --
+ src/hb-font.cc                        | 22 ++++++++++++++--------
+ src/hb-ot-layout-gpos-table.hh |  2 +-
+ src/hb-ot-layout-gsub-table.hh |  4 ++--
+ src/hb-ot-layout-private.hh   |  1 +
+ src/hb-ot-layout.cc           |  9 ++++++---
+ src/hb-ot-shape.cc            |  3 ++-
+ src/hb-shape-plan.cc          | 11 +++++++++++
+ src/hb-shaper-private.hh      |  3 ++-
  11 files changed, 40 insertions(+), 19 deletions(-)
 
 commit b6b7ba1313bf686e6ed567183466104c90504a67
  11 files changed, 40 insertions(+), 19 deletions(-)
 
 commit b6b7ba1313bf686e6ed567183466104c90504a67
@@ -4888,12 +16327,12 @@ Date:  Fri Jul 27 01:26:11 2012 -0400
 
     Switch old and uniscribe backends to shape_plan
 
 
     Switch old and uniscribe backends to shape_plan
 
- src/hb-old.cc                |   80 ++-----------------------
- src/hb-shape.cc              |    5 ++
- src/hb-shaper-impl-private.hh |    3 +-
- src/hb-shaper-private.hh      |    4 -
- src/hb-uniscribe.cc          |  130
- ++++++++++++-----------------------------
+ src/hb-old.cc                |  80 ++------------------------
+ src/hb-shape.cc              |   5 ++
+ src/hb-shaper-impl-private.hh |   3 +-
+ src/hb-shaper-private.hh      |   4 --
+ src/hb-uniscribe.cc          | 130
+ ++++++++++++------------------------------
  5 files changed, 48 insertions(+), 174 deletions(-)
 
 commit c32c096a429da3e64896cf42ff5ab8c775d3c2ec
  5 files changed, 48 insertions(+), 174 deletions(-)
 
 commit c32c096a429da3e64896cf42ff5ab8c775d3c2ec
@@ -4904,9 +16343,9 @@ Date:    Fri Jul 27 01:13:53 2012 -0400
 
     Not optimized yet. Eats babies.  And no shaper uses the shape_plan.
 
 
     Not optimized yet. Eats babies.  And no shaper uses the shape_plan.
 
- src/hb-shape-plan.cc |   37 +++++++++++++++++++++++++++++++++++--
- src/hb-shape-plan.h  |    8 ++++++++
- src/hb-shape.cc      |   27 ++++-----------------------
+ src/hb-shape-plan.cc | 37 +++++++++++++++++++++++++++++++++++--
+ src/hb-shape-plan.h  |  8 ++++++++
+ src/hb-shape.cc      | 27 ++++-----------------------
  3 files changed, 47 insertions(+), 25 deletions(-)
 
 commit 5b95c148cc485f79fd7018bc4520b4cb5f728a18
  3 files changed, 47 insertions(+), 25 deletions(-)
 
 commit 5b95c148cc485f79fd7018bc4520b4cb5f728a18
@@ -4915,16 +16354,16 @@ Date:  Thu Jul 26 23:46:53 2012 -0400
 
     Start implementing shape_plan
 
 
     Start implementing shape_plan
 
- src/hb-fallback-shape.cc     |    4 ++-
- src/hb-font-private.hh       |    4 ++
- src/hb-old.cc               |    4 ++-
- src/hb-ot-shape.cc          |    4 ++-
- src/hb-shape-plan-private.hh |    7 ++++
- src/hb-shape-plan.cc        |   76
- ++++++++++++++++++++++++++++++++++++++++-
- src/hb-shape.cc             |    4 ++
- src/hb-shaper-private.hh     |    4 +-
- src/hb-uniscribe.cc         |    4 ++-
+ src/hb-fallback-shape.cc     |  4 ++-
+ src/hb-font-private.hh       |  4 +++
+ src/hb-old.cc               |  4 ++-
+ src/hb-ot-shape.cc          |  4 ++-
+ src/hb-shape-plan-private.hh |  7 ++++
+ src/hb-shape-plan.cc        | 76
+ ++++++++++++++++++++++++++++++++++++++++++--
+ src/hb-shape.cc             |  4 +++
+ src/hb-shaper-private.hh     |  4 +--
+ src/hb-uniscribe.cc         |  4 ++-
  9 files changed, 103 insertions(+), 8 deletions(-)
 
 commit bd26b4d21f59312805d294f46f15182adbcc47da
  9 files changed, 103 insertions(+), 8 deletions(-)
 
 commit bd26b4d21f59312805d294f46f15182adbcc47da
@@ -4933,18 +16372,17 @@ Date:  Thu Jul 26 22:05:39 2012 -0400
 
     Minor
 
 
     Minor
 
- src/Makefile.am             |    1 +
- src/hb-fallback-shape.cc     |    3 +-
- src/hb-old.cc               |    3 +-
- src/hb-ot-shape.cc          |    3 +-
- src/hb-shape-plan-private.hh |    2 +-
- src/hb-shape-plan.cc        |    2 +
- src/hb-shape.cc             |   98
- ++++----------------------------------
- src/hb-shaper-private.hh     |   16 +++++-
- src/hb-shaper.cc            |  109
- ++++++++++++++++++++++++++++++++++++++++++
- src/hb-uniscribe.cc         |    3 +-
+ src/Makefile.am             |   1 +
+ src/hb-fallback-shape.cc     |   3 +-
+ src/hb-old.cc               |   3 +-
+ src/hb-ot-shape.cc          |   3 +-
+ src/hb-shape-plan-private.hh |   2 +-
+ src/hb-shape-plan.cc        |   2 +
+ src/hb-shape.cc             |  98 ++++----------------------------------
+ src/hb-shaper-private.hh     |  16 ++++++-
+ src/hb-shaper.cc            | 109
+ +++++++++++++++++++++++++++++++++++++++++++
+ src/hb-uniscribe.cc         |   3 +-
  10 files changed, 145 insertions(+), 95 deletions(-)
 
 commit 027857d0412477fb4427dcb8a8c45287c272e143
  10 files changed, 145 insertions(+), 95 deletions(-)
 
 commit 027857d0412477fb4427dcb8a8c45287c272e143
@@ -4955,28 +16393,28 @@ Date:  Thu Jul 26 17:34:25 2012 -0400
 
     Add global shape_plan.  Unused so far.
 
 
     Add global shape_plan.  Unused so far.
 
- src/Makefile.am                 |   15 ++-
- src/hb-coretext-private.hh      |   42 ---------
- src/hb-coretext.cc              |    6 +-
- src/hb-fallback-shape-private.hh |   41 ---------
- src/hb-fallback-shape.cc        |   62 ++++++++++++-
- src/hb-font-private.hh                  |   12 +++
- src/hb-font.cc                          |   15 +++-
- src/hb-graphite2-private.hh     |   42 ---------
- src/hb-old-private.hh           |   40 --------
- src/hb-old.cc                   |  109 +++++++++++++++++-----
- src/hb-ot-shape-private.hh      |    8 --
- src/hb-ot-shape.cc              |   60 ++++++++++++-
- src/hb-shape-plan-private.hh    |   52 +++++++++++
- src/hb-shape-plan.cc            |   85 +++++++++++++++++
- src/hb-shape-plan.h             |   60 ++++++++++++
- src/hb-shape.cc                 |   48 +---------
- src/hb-shaper-impl-private.hh   |   44 +++++++++
- src/hb-shaper-list.hh           |   50 ++++++++++
- src/hb-shaper-private.hh        |   81 +++++++++++++++++
- src/hb-uniscribe-private.hh     |   42 ---------
- src/hb-uniscribe.cc             |  186
- ++++++++++++++++++++++++--------------
+ src/Makefile.am                 |  15 ++--
+ src/hb-coretext-private.hh      |  42 ---------
+ src/hb-coretext.cc              |   6 +-
+ src/hb-fallback-shape-private.hh |  41 ---------
+ src/hb-fallback-shape.cc        |  62 ++++++++++++-
+ src/hb-font-private.hh                  |  12 +++
+ src/hb-font.cc                          |  15 +++-
+ src/hb-graphite2-private.hh     |  42 ---------
+ src/hb-old-private.hh           |  40 ---------
+ src/hb-old.cc                   | 109 ++++++++++++++++++-----
+ src/hb-ot-shape-private.hh      |   8 --
+ src/hb-ot-shape.cc              |  60 ++++++++++++-
+ src/hb-shape-plan-private.hh    |  52 +++++++++++
+ src/hb-shape-plan.cc            |  85 ++++++++++++++++++
+ src/hb-shape-plan.h             |  60 +++++++++++++
+ src/hb-shape.cc                 |  48 ++--------
+ src/hb-shaper-impl-private.hh   |  44 +++++++++
+ src/hb-shaper-list.hh           |  50 +++++++++++
+ src/hb-shaper-private.hh        |  81 +++++++++++++++++
+ src/hb-uniscribe-private.hh     |  42 ---------
+ src/hb-uniscribe.cc             | 186
+ ++++++++++++++++++++++++---------------
  21 files changed, 735 insertions(+), 365 deletions(-)
 
 commit fa2dfcd560444d8c54b6349ee106134d3536f79b
  21 files changed, 735 insertions(+), 365 deletions(-)
 
 commit fa2dfcd560444d8c54b6349ee106134d3536f79b
@@ -4985,8 +16423,8 @@ Date:    Thu Jul 26 16:06:16 2012 -0400
 
     Fix visibility warnings with MinGW32
 
 
     Fix visibility warnings with MinGW32
 
- src/hb-old/harfbuzz-global.h |   17 +++++++++++------
- src/hb-old/harfbuzz-impl.h   |    6 +++++-
+ src/hb-old/harfbuzz-global.h | 17 +++++++++++------
+ src/hb-old/harfbuzz-impl.h   |  6 +++++-
  2 files changed, 16 insertions(+), 7 deletions(-)
 
 commit ac2085d4b391b0a72473ecac3dd6c22efe66833f
  2 files changed, 16 insertions(+), 7 deletions(-)
 
 commit ac2085d4b391b0a72473ecac3dd6c22efe66833f
@@ -5002,8 +16440,8 @@ Date:    Thu Jul 26 15:58:45 2012 -0400
     For RTL runs, ensure cluster values are non-increasing (instead of
     non-decreasing).
 
     For RTL runs, ensure cluster values are non-increasing (instead of
     non-decreasing).
 
- src/hb-coretext.cc |  37 +++++++++++++++++++++++++++++++++++++
- 1 files changed, 37 insertions(+), 0 deletions(-)
+ src/hb-coretext.cc | 37 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
 
 commit 441d3bb7de311d54b9f0a5210344f9a96e97e153
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 441d3bb7de311d54b9f0a5210344f9a96e97e153
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5011,8 +16449,8 @@ Date:    Thu Jul 26 12:01:12 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-coretext.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-coretext.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 2e7f223054d310695bdb3498b2b2b5d17b6cce78
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2e7f223054d310695bdb3498b2b2b5d17b6cce78
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5033,8 +16471,8 @@ Date:    Wed Jul 25 19:30:15 2012 -0400
 
        Backporting from Chromium.
 
 
        Backporting from Chromium.
 
- src/hb-old/harfbuzz-shaper.cpp |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-old/harfbuzz-shaper.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9550a8c4e8b4e28be60d38c27d59253846ff9569
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9550a8c4e8b4e28be60d38c27d59253846ff9569
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5042,8 +16480,8 @@ Date:    Wed Jul 25 19:22:57 2012 -0400
 
     [hb-old] Fixup not-enough-space handling
 
 
     [hb-old] Fixup not-enough-space handling
 
- src/hb-old.cc |   15 ++++++++-------
- 1 files changed, 8 insertions(+), 7 deletions(-)
+ src/hb-old.cc | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
 
 commit 91e721ea8693205f4f738bca97a5055ee75cf463
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 91e721ea8693205f4f738bca97a5055ee75cf463
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5054,10 +16492,10 @@ Date:  Wed Jul 25 19:20:34 2012 -0400
     Unlike its "documentation", hb-old's log_clusters are, well, indeed
     logical, not visual.  Fixup.  Adapted / copied from hb-uniscribe.
 
     Unlike its "documentation", hb-old's log_clusters are, well, indeed
     logical, not visual.  Fixup.  Adapted / copied from hb-uniscribe.
 
- src/hb-old.cc               |   51
- ++++++++++++++++++++++++++++++++---------
- src/hb-old/harfbuzz-shaper.h |    1 +
- src/hb-uniscribe.cc         |    5 ++-
+ src/hb-old.cc               | 51
+ ++++++++++++++++++++++++++++++++++----------
+ src/hb-old/harfbuzz-shaper.h |  1 +
+ src/hb-uniscribe.cc         |  5 +++--
  3 files changed, 44 insertions(+), 13 deletions(-)
 
 commit a3313e54008167e415b72c780ca7b9cda958d07e
  3 files changed, 44 insertions(+), 13 deletions(-)
 
 commit a3313e54008167e415b72c780ca7b9cda958d07e
@@ -5072,8 +16510,8 @@ Date:    Wed Jul 25 18:37:51 2012 -0400
     resulting from a MultipleSubst.  Fixed.  Test with the ALLAH character
     in Amiri.
 
     resulting from a MultipleSubst.  Fixed.  Test with the ALLAH character
     in Amiri.
 
- src/hb-ot-layout-gpos-table.hh |   10 +++++-----
- src/hb-ot-layout-private.hh   |   23 +++++++++++++++++++++--
+ src/hb-ot-layout-gpos-table.hh | 10 +++++-----
+ src/hb-ot-layout-private.hh   | 23 +++++++++++++++++++++--
  2 files changed, 26 insertions(+), 7 deletions(-)
 
 commit 35bdab3cf1f0836807160e3ce93766c321b32e8c
  2 files changed, 26 insertions(+), 7 deletions(-)
 
 commit 35bdab3cf1f0836807160e3ce93766c321b32e8c
@@ -5082,8 +16520,8 @@ Date:    Wed Jul 25 11:59:52 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-unicode-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-unicode-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8fe4c7405b922cf0f936a46a9baedf4885b05254
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8fe4c7405b922cf0f936a46a9baedf4885b05254
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5093,15 +16531,15 @@ Date:  Tue Jul 24 21:05:12 2012 -0400
 
     Choose using shaper name "old".
 
 
     Choose using shaper name "old".
 
- configure.ac          |    8 +
- src/Makefile.am       |   14 +-
- src/hb-old-private.hh |   40 +++
- src/hb-old.cc         |  369 +++++++++++++++++++++++
- src/hb-old/.gitignore |    7 -
- src/hb-old/Makefile.am |    2 +
- src/hb-old/Makefile.in |  762
- ------------------------------------------------
- src/hb-shape.cc       |    8 +-
+ configure.ac          |   8 +
+ src/Makefile.am       |  14 +-
+ src/hb-old-private.hh |  40 +++
+ src/hb-old.cc         | 369 ++++++++++++++++++++++++
+ src/hb-old/.gitignore |   7 -
+ src/hb-old/Makefile.am |   2 +
+ src/hb-old/Makefile.in | 762
+ -------------------------------------------------
+ src/hb-shape.cc       |   8 +-
  8 files changed, 436 insertions(+), 774 deletions(-)
 
 commit 5e1987005eb1b9af7a4d3d9f90c5768d8cc80015
  8 files changed, 436 insertions(+), 774 deletions(-)
 
 commit 5e1987005eb1b9af7a4d3d9f90c5768d8cc80015
@@ -5110,10 +16548,10 @@ Date:  Tue Jul 24 19:53:55 2012 -0400
 
     [hb-old] Define Unicode funcs in terms of new HarfBuzz
 
 
     [hb-old] Define Unicode funcs in terms of new HarfBuzz
 
- src/hb-old/Makefile.am                |    4 +
- src/hb-old/Makefile.in                |  182
- +++++++++++++++++++++++++++++++++++-----
- src/hb-old/harfbuzz-external.h |  100 +++++++++++++---------
+ src/hb-old/Makefile.am                |   4 +
+ src/hb-old/Makefile.in                | 182
+ ++++++++++++++++++++++++++++++++++++-----
+ src/hb-old/harfbuzz-external.h | 100 +++++++++++++---------
  3 files changed, 224 insertions(+), 62 deletions(-)
 
 commit 4a31166b2853c1ec052844140e114158f47c2355
  3 files changed, 224 insertions(+), 62 deletions(-)
 
 commit 4a31166b2853c1ec052844140e114158f47c2355
@@ -5122,19 +16560,19 @@ Date:  Tue Jul 24 19:49:48 2012 -0400
 
     [hb-old] Shovel out the line-breaking / word-segmentation stuff
 
 
     [hb-old] Shovel out the line-breaking / word-segmentation stuff
 
- src/hb-old/Makefile.am                      |   10 +-
- src/hb-old/Makefile.in                      |   13 +-
- src/hb-old/harfbuzz-external.h       |   66 ------
- src/hb-old/harfbuzz-indic.cpp       |   26 ---
- src/hb-old/harfbuzz-khmer.c         |   25 --
- src/hb-old/harfbuzz-myanmar.c       |   28 ---
- src/hb-old/harfbuzz-shaper-private.h |   12 -
- src/hb-old/harfbuzz-shaper.cpp       |  403
- +++-------------------------------
- src/hb-old/harfbuzz-shaper.h        |   31 ---
- src/hb-old/harfbuzz-thai.c          |  111 ----------
- src/hb-old/harfbuzz-tibetan.c       |   26 ---
- src/hb-old/harfbuzz.c               |   32 ---
+ src/hb-old/Makefile.am                      |  10 +-
+ src/hb-old/Makefile.in                      |  13 +-
+ src/hb-old/harfbuzz-external.h       |  66 ------
+ src/hb-old/harfbuzz-indic.cpp       |  26 ---
+ src/hb-old/harfbuzz-khmer.c         |  25 ---
+ src/hb-old/harfbuzz-myanmar.c       |  28 ---
+ src/hb-old/harfbuzz-shaper-private.h |  12 --
+ src/hb-old/harfbuzz-shaper.cpp       | 403
+ +++--------------------------------
+ src/hb-old/harfbuzz-shaper.h        |  31 ---
+ src/hb-old/harfbuzz-thai.c          | 111 ----------
+ src/hb-old/harfbuzz-tibetan.c       |  26 ---
+ src/hb-old/harfbuzz.c               |  32 ---
  12 files changed, 33 insertions(+), 750 deletions(-)
 
 commit 0bcbe88cf313117f739b98a11dbe698b75784e9d
  12 files changed, 33 insertions(+), 750 deletions(-)
 
 commit 0bcbe88cf313117f739b98a11dbe698b75784e9d
@@ -5143,8 +16581,8 @@ Date:    Tue Jul 24 19:38:24 2012 -0400
 
     [hb-old] Add visibility attributes
 
 
     [hb-old] Add visibility attributes
 
- src/hb-old/harfbuzz-global.h |   10 ++++++----
- src/hb-old/harfbuzz-impl.h   |    2 +-
+ src/hb-old/harfbuzz-global.h | 10 ++++++----
+ src/hb-old/harfbuzz-impl.h   |  2 +-
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit 6a9d43c3178c920672a84382ca3797e3c478b2b0
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit 6a9d43c3178c920672a84382ca3797e3c478b2b0
@@ -5153,9 +16591,9 @@ Date:    Tue Jul 24 19:21:22 2012 -0400
 
     [hb-old] Remove unused header file
 
 
     [hb-old] Remove unused header file
 
- src/hb-old/harfbuzz-shape.h | 199
- -------------------------------------------
- 1 files changed, 0 insertions(+), 199 deletions(-)
+ src/hb-old/harfbuzz-shape.h | 199
+ --------------------------------------------
+ 1 file changed, 199 deletions(-)
 
 commit fb47209c5b3aa992faf18d1a3f78b9d7682cf62f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb47209c5b3aa992faf18d1a3f78b9d7682cf62f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5163,9 +16601,9 @@ Date:    Tue Jul 24 19:20:19 2012 -0400
 
     [hb-old] Rename hb_buffer_* to HB_Buffer_*
 
 
     [hb-old] Rename hb_buffer_* to HB_Buffer_*
 
- src/hb-old/harfbuzz-buffer.c  |   22 +++++++++++-----------
- src/hb-old/harfbuzz-buffer.h  |    8 ++++----
- src/hb-old/harfbuzz-shaper.cpp |    8 ++++----
+ src/hb-old/harfbuzz-buffer.c  | 22 +++++++++++-----------
+ src/hb-old/harfbuzz-buffer.h  |  8 ++++----
+ src/hb-old/harfbuzz-shaper.cpp |  8 ++++----
  3 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 1512a7357513b72e2a07dda706a176bb23d694e9
  3 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 1512a7357513b72e2a07dda706a176bb23d694e9
@@ -5220,7 +16658,7 @@ Date:    Tue Jul 24 19:16:56 2012 -0400
  src/hb-old/harfbuzz-tibetan.c       |  274 ++
  src/hb-old/harfbuzz.c               |   32 +
  src/hb-old/harfbuzz.h               |   38 +
  src/hb-old/harfbuzz-tibetan.c       |  274 ++
  src/hb-old/harfbuzz.c               |   32 +
  src/hb-old/harfbuzz.h               |   38 +
- 45 files changed, 24892 insertions(+), 0 deletions(-)
+ 45 files changed, 24892 insertions(+)
 
 commit 478fd0529b868b22905a9dedf331ac7cc9721723
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 478fd0529b868b22905a9dedf331ac7cc9721723
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5228,8 +16666,8 @@ Date:    Tue Jul 24 17:09:01 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-unicode-private.hh |   27 ++++++++++++++-------------
- 1 files changed, 14 insertions(+), 13 deletions(-)
+ src/hb-unicode-private.hh | 27 ++++++++++++++-------------
+ 1 file changed, 14 insertions(+), 13 deletions(-)
 
 commit 8979a7f6f2b44ade4c0198a31ae08561b35ce009
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8979a7f6f2b44ade4c0198a31ae08561b35ce009
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5239,8 +16677,8 @@ Date:    Tue Jul 24 17:03:55 2012 -0400
 
     Results match Uniscribe now.
 
 
     Results match Uniscribe now.
 
- src/hb-unicode-private.hh |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-unicode-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit aa6d849838d5231465ae1a25a4dd5ea1e9380ff9
 Author: Jonathan Kew <jfkthame@gmail.com>
 
 commit aa6d849838d5231465ae1a25a4dd5ea1e9380ff9
 Author: Jonathan Kew <jfkthame@gmail.com>
@@ -5255,14 +16693,14 @@ Date:  Tue Jul 24 15:52:32 2012 -0400
     may even be
     out-of-order in the case of reordrant glyphs.
 
     may even be
     out-of-order in the case of reordrant glyphs.
 
- configure.ac              |   12 ++
- src/Makefile.am           |    7 +
- src/hb-coretext-private.hh |  42 ++++++
- src/hb-coretext.cc        |  323
- ++++++++++++++++++++++++++++++++++++++++++++
- src/hb-coretext.h         |   43 ++++++
- src/hb-shape.cc           |    6 +
- 6 files changed, 433 insertions(+), 0 deletions(-)
+ configure.ac              |  12 ++
+ src/Makefile.am           |   7 +
+ src/hb-coretext-private.hh |  42 ++++++
+ src/hb-coretext.cc        | 323
+ +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-coretext.h         |  43 ++++++
+ src/hb-shape.cc           |   6 +
+ 6 files changed, 433 insertions(+)
 
 commit ec8d2494694275dfbbac2dd0d33ca2894b0463d6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec8d2494694275dfbbac2dd0d33ca2894b0463d6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5275,18 +16713,18 @@ Date:  Tue Jul 24 15:40:37 2012 -0400
     -Wunused-private-field.
     Based on patch from Jonathan Kew.
 
     -Wunused-private-field.
     Based on patch from Jonathan Kew.
 
- src/hb-open-file-private.hh         |    8 +++---
- src/hb-ot-head-table.hh             |    2 +-
- src/hb-ot-hhea-table.hh             |    2 +-
- src/hb-ot-hmtx-table.hh             |    2 +-
- src/hb-ot-layout-common-private.hh   |   14 +++++----
- src/hb-ot-layout-gdef-table.hh       |   20 +++++++-------
- src/hb-ot-layout-gpos-table.hh       |   48
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-table.hh       |   30 ++++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |   32 +++++++++++-----------
- src/hb-ot-maxp-table.hh             |    2 +-
- src/hb-ot-name-table.hh             |    2 +-
+ src/hb-open-file-private.hh         |  8 +++---
+ src/hb-ot-head-table.hh             |  2 +-
+ src/hb-ot-hhea-table.hh             |  2 +-
+ src/hb-ot-hmtx-table.hh             |  2 +-
+ src/hb-ot-layout-common-private.hh   | 14 ++++++-----
+ src/hb-ot-layout-gdef-table.hh       | 20 +++++++--------
+ src/hb-ot-layout-gpos-table.hh       | 48
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-table.hh       | 30 +++++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh | 32 ++++++++++++------------
+ src/hb-ot-maxp-table.hh             |  2 +-
+ src/hb-ot-name-table.hh             |  2 +-
  11 files changed, 82 insertions(+), 80 deletions(-)
 
 commit 97aa0b738a33b73a3f9763dd2950f2dd39f596ed
  11 files changed, 82 insertions(+), 80 deletions(-)
 
 commit 97aa0b738a33b73a3f9763dd2950f2dd39f596ed
@@ -5295,8 +16733,8 @@ Date:    Tue Jul 24 15:02:34 2012 -0400
 
     Minor const correctness shuffling
 
 
     Minor const correctness shuffling
 
- src/hb-shape.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 6411e74caf23af7b0545f1fe54d19a1c8da895e8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6411e74caf23af7b0545f1fe54d19a1c8da895e8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5310,9 +16748,11 @@ Date:   Tue Jul 24 13:48:49 2012 -0400
 
     Gurmukhi failures down from 59 to 41 (0.0674242%).
 
 
     Gurmukhi failures down from 59 to 41 (0.0674242%).
 
- src/hb-ot-shape-complex-indic.cc                  |    2 +-
- .../indic/script-gurmukhi/misc/misc.txt           |    1 +
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                       |
+ 2 +-
+ .../texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt     |
+ 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit c3f769ba09df319fa69d04f68c57444f95eceee6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c3f769ba09df319fa69d04f68c57444f95eceee6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5342,9 +16782,11 @@ Date:   Tue Jul 24 13:26:32 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970550 out of 970573 tests passed. 23 failed (0.00236973%)
 
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970550 out of 970573 tests passed. 23 failed (0.00236973%)
 
- test/shaping/hb_test_tools.py                     |    1 +
- .../indic/script-malayalam/misc/misc.txt          |    2 ++
- 2 files changed, 3 insertions(+), 0 deletions(-)
+ test/shaping/hb_test_tools.py                                          |
+ 1 +
+ .../texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt    |
+ 2 ++
+ 2 files changed, 3 insertions(+)
 
 commit 65c43accdc4d2082282d5cedba8514b8df0c18a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 65c43accdc4d2082282d5cedba8514b8df0c18a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5369,9 +16811,9 @@ Date:    Tue Jul 24 03:36:47 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
- src/hb-ot-shape-complex-indic.cc                  |   41
- +++++++++++++------
- .../indic/script-malayalam/misc/misc.txt          |    1 +
+ src/hb-ot-shape-complex-indic.cc                  | 41
+ +++++++++++++++-------
+ .../indic/script-malayalam/misc/misc.txt          |  1 +
  2 files changed, 29 insertions(+), 13 deletions(-)
 
 commit 88f413b56f2858d149e2fc067685aeecaea779ca
  2 files changed, 29 insertions(+), 13 deletions(-)
 
 commit 88f413b56f2858d149e2fc067685aeecaea779ca
@@ -5406,8 +16848,9 @@ Date:    Tue Jul 24 03:04:36 2012 -0400
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
     TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
     TELUGU: 970524 out of 970573 tests passed. 49 failed (0.00504856%)
 
- src/hb-ot-shape-complex-indic.cc                  |   10 ++++++++--
- .../indic/script-bengali/misc/reph.txt                    |    4 ++++
+ src/hb-ot-shape-complex-indic.cc                              |
+ 10 ++++++++--
+ .../in-tree/shaper-indic/indic/script-bengali/misc/reph.txt   |  4 ++++
  2 files changed, 12 insertions(+), 2 deletions(-)
 
 commit dff0ece11d61978c04e839501f179a5c3077f340
  2 files changed, 12 insertions(+), 2 deletions(-)
 
 commit dff0ece11d61978c04e839501f179a5c3077f340
@@ -5424,8 +16867,8 @@ Date:    Tue Jul 24 02:30:38 2012 -0400
     Two Devanagari tests regressed, but who cares about tests with 20
     joiners in a row?! Devanagari at 57 (0.00821766%) now.
 
     Two Devanagari tests regressed, but who cares about tests with 20
     joiners in a row?! Devanagari at 57 (0.00821766%) now.
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 330b329c8905a37ca88c556dea82c70d74c77458
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 330b329c8905a37ca88c556dea82c70d74c77458
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5435,9 +16878,11 @@ Date:   Tue Jul 24 02:25:26 2012 -0400
 
     Fixes another 1 Khmer failure.  Down to 30 (0.0100293%) now.
 
 
     Fixes another 1 Khmer failure.  Down to 30 (0.0100293%) now.
 
- src/hb-ot-shape-complex-indic.cc                  |    2 ++
- .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
- 2 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                       |
+ 2 ++
+ .../in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt   |
+ 1 +
+ 2 files changed, 3 insertions(+)
 
 commit 6824a7194e01b77eddb95bd95a9b32e219140912
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6824a7194e01b77eddb95bd95a9b32e219140912
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5447,8 +16892,8 @@ Date:    Tue Jul 24 02:22:18 2012 -0400
 
     Khmer failures down from 39 to 31 (0.0103636%).
 
 
     Khmer failures down from 39 to 31 (0.0103636%).
 
- src/hb-ot-shape-complex-indic.cc |   23 ++++++++++-------------
- 1 files changed, 10 insertions(+), 13 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 23 ++++++++++-------------
+ 1 file changed, 10 insertions(+), 13 deletions(-)
 
 commit d90b8e841e0068a601c96ab184d18b0f48eec9d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d90b8e841e0068a601c96ab184d18b0f48eec9d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5463,9 +16908,10 @@ Date:   Tue Jul 24 02:10:20 2012 -0400
 
     Khmer failures down from 136 to 39 (0.0130381%).
 
 
     Khmer failures down from 136 to 39 (0.0130381%).
 
- src/hb-ot-shape-complex-indic.cc                  |   13 +++++++++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |   4 ++++
- 2 files changed, 17 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                           | 13
+ +++++++++++++
+ .../south-east-asian/script-khmer/misc/misc.txt            |  4 ++++
+ 2 files changed, 17 insertions(+)
 
 commit 0afb84c12567ac35adac657bf8be29999b8c5a50
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0afb84c12567ac35adac657bf8be29999b8c5a50
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5473,8 +16919,8 @@ Date:    Tue Jul 24 01:44:47 2012 -0400
 
     [Indic] Fix minor bug in pre-base Ra positioning
 
 
     [Indic] Fix minor bug in pre-base Ra positioning
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 7573799126e812a047daa5f64121ec959866b3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7573799126e812a047daa5f64121ec959866b3c8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5484,9 +16930,10 @@ Date:   Tue Jul 24 01:32:07 2012 -0400
 
     Fixes another 6 Khmer failures.  Now at 136 (0.0454661%).
 
 
     Fixes another 6 Khmer failures.  Now at 136 (0.0454661%).
 
- src/hb-ot-shape-complex-indic.cc                  |    6 ++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
- 2 files changed, 7 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                   |
+ 6 ++++++
+ .../shaper-indic/south-east-asian/script-khmer/misc/misc.txt       | 1 +
+ 2 files changed, 7 insertions(+)
 
 commit 8d00e8d0e7d10f823e6975fecaffb9d557b1a99a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8d00e8d0e7d10f823e6975fecaffb9d557b1a99a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5499,8 +16946,8 @@ Date:    Tue Jul 24 01:04:18 2012 -0400
 
     Brings down Khmer failures from 510 to 142 (0.047572%).
 
 
     Brings down Khmer failures from 510 to 142 (0.047572%).
 
- src/hb-ot-shape-complex-indic.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 2278eefcdb3dd0d492b9d07176fbecc1f0516bb7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2278eefcdb3dd0d492b9d07176fbecc1f0516bb7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5510,8 +16957,9 @@ Date:    Tue Jul 24 00:26:43 2012 -0400
 
     Fixes another 10 Sinhala failures. Down to 148 (0.0544424%).
 
 
     Fixes another 10 Sinhala failures. Down to 148 (0.0544424%).
 
- src/hb-ot-shape-complex-indic.cc                  |   10 +++++-----
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ src/hb-ot-shape-complex-indic.cc                              |
+ 10 +++++-----
+ .../in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt   |  1 +
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 71fd5e80ad06c8e85a1112cc89e129d6cd03f82c
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 71fd5e80ad06c8e85a1112cc89e129d6cd03f82c
@@ -5531,8 +16979,9 @@ Date:    Tue Jul 24 00:21:16 2012 -0400
     Sinhala failures down from 208 to 158 (0.0581209%).  No changes to
     Khmer.
 
     Sinhala failures down from 208 to 158 (0.0581209%).  No changes to
     Khmer.
 
- src/hb-ot-shape-complex-indic.cc                  |   11 +++++++----
- .../indic/script-sinhala/misc/misc.txt                    |    3 +++
+ src/hb-ot-shape-complex-indic.cc                             |
+ 11 +++++++----
+ .../in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt   |  3 +++
  2 files changed, 10 insertions(+), 4 deletions(-)
 
 commit 73d71cc527d28fd5519c5d965c272ea1fb149a0e
  2 files changed, 10 insertions(+), 4 deletions(-)
 
 commit 73d71cc527d28fd5519c5d965c272ea1fb149a0e
@@ -5545,9 +16994,11 @@ Date:   Tue Jul 24 00:09:12 2012 -0400
 
     Fixed 120 Sinhala failures.  Now at 208 (0.0765136%).
 
 
     Fixed 120 Sinhala failures.  Now at 208 (0.0765136%).
 
- src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl                               |
+ 2 +-
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt      |
+ 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit 34c215036f5fcdc7599b1ab0591b56dbb3811902
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34c215036f5fcdc7599b1ab0591b56dbb3811902
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5568,10 +17019,10 @@ Date:  Mon Jul 23 23:51:29 2012 -0400
 
     Brings down Sinhala failures from 455 to 328 (0.120656%).
 
 
     Brings down Sinhala failures from 455 to 328 (0.120656%).
 
- src/hb-ot-shape-complex-indic.cc                  |   18
+ src/hb-ot-shape-complex-indic.cc                      | 18
  +++++++++++++++++-
  +++++++++++++++++-
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
- 2 files changed, 18 insertions(+), 1 deletions(-)
+ .../shaper-indic/indic/script-sinhala/misc/misc.txt   |  1 +
+ 2 files changed, 18 insertions(+), 1 deletion(-)
 
 commit 2ec934c6c25423e7af20d909a9c698a149808ea9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2ec934c6c25423e7af20d909a9c698a149808ea9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5579,8 +17030,8 @@ Date:    Mon Jul 23 23:49:04 2012 -0400
 
     [Indic] Change "unknown" position to end of syllable
 
 
     [Indic] Change "unknown" position to end of syllable
 
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b70021f7c81a0ed08475b14b07291f662cd9f905
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b70021f7c81a0ed08475b14b07291f662cd9f905
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5590,8 +17041,8 @@ Date:    Mon Jul 23 20:18:17 2012 -0400
 
     If a mark ligated, it probably should NOT be removed.
 
 
     If a mark ligated, it probably should NOT be removed.
 
- src/hb-ot-shape.cc |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 49c5ec51444f27f33e1eb6aa1959c61b08fa89c0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 49c5ec51444f27f33e1eb6aa1959c61b08fa89c0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5599,11 +17050,11 @@ Date:  Mon Jul 23 20:14:13 2012 -0400
 
     Minor refactoring
 
 
     Minor refactoring
 
- src/hb-ot-layout-gsubgpos-private.hh |   32
- -------------------------------
- src/hb-ot-layout-private.hh         |   35
- ++++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc     |    2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 32
+ --------------------------------
+ src/hb-ot-layout-private.hh         | 35
+ +++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc     |  2 +-
  3 files changed, 36 insertions(+), 33 deletions(-)
 
 commit c3e6fdc3791168cf2b4c9412e751f187d58faa42
  3 files changed, 36 insertions(+), 33 deletions(-)
 
 commit c3e6fdc3791168cf2b4c9412e751f187d58faa42
@@ -5614,9 +17065,9 @@ Date:    Mon Jul 23 20:11:42 2012 -0400
 
     Only skip actual ligatures, not marks in-between ligature components.
 
 
     Only skip actual ligatures, not marks in-between ligature components.
 
- src/hb-ot-layout-gsubgpos-private.hh |    5 +++++
- src/hb-ot-shape-complex-indic.cc     |    2 +-
- 2 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 5 +++++
+ src/hb-ot-shape-complex-indic.cc     | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
 
 commit 771a8f50289e8fa458cfc3cd84f73a380ce98077
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 771a8f50289e8fa458cfc3cd84f73a380ce98077
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5631,9 +17082,9 @@ Date:    Mon Jul 23 20:07:50 2012 -0400
 
     Sinhala failures down from 514 to 455 (0.167374%).
 
 
     Sinhala failures down from 514 to 455 (0.167374%).
 
- src/hb-ot-shape-complex-indic.cc                  |   41
- ++++++++++---------
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ src/hb-ot-shape-complex-indic.cc                  | 41
+ ++++++++++++----------
+ .../indic/script-sinhala/misc/misc.txt                    |  1 +
  2 files changed, 23 insertions(+), 19 deletions(-)
 
 commit d1af9e82e5309158ed334ab8e21f3a3b64b9540f
  2 files changed, 23 insertions(+), 19 deletions(-)
 
 commit d1af9e82e5309158ed334ab8e21f3a3b64b9540f
@@ -5642,8 +17093,8 @@ Date:    Mon Jul 23 19:55:35 2012 -0400
 
     [GSUB/GPOS] Const correctness
 
 
     [GSUB/GPOS] Const correctness
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit baacd090df97610e3f6d1b2a110dc67b6c6f9f5c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit baacd090df97610e3f6d1b2a110dc67b6c6f9f5c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5651,8 +17102,8 @@ Date:    Mon Jul 23 19:51:48 2012 -0400
 
     [Indic] Minor refactoring
 
 
     [Indic] Minor refactoring
 
- src/hb-ot-shape-complex-indic.cc |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
 
 commit c7c4de2fb9bba216e37875d79815eef55c0acc01
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c7c4de2fb9bba216e37875d79815eef55c0acc01
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5662,8 +17113,8 @@ Date:    Mon Jul 23 18:25:02 2012 -0400
 
     We now limit syllable lengths in the machine.  No need to match here.
 
 
     We now limit syllable lengths in the machine.  No need to match here.
 
- src/hb-ot-shape-complex-indic.cc |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 9fa052733eb93a3ce1205f63ff8f74cb295cbe99
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9fa052733eb93a3ce1205f63ff8f74cb295cbe99
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5699,8 +17150,8 @@ Date:    Mon Jul 23 18:19:17 2012 -0400
     Uniscribe
     eating Anusvara when placed before a non-joiner.  Ouch!
 
     Uniscribe
     eating Anusvara when placed before a non-joiner.  Ouch!
 
- src/hb-ot-shape-complex-indic-machine.rl |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 093cd583263a5d427e3377b31585043fb55d2557
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 093cd583263a5d427e3377b31585043fb55d2557
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5710,8 +17161,8 @@ Date:    Mon Jul 23 14:04:42 2012 -0400
 
     Oops, thinko.
 
 
     Oops, thinko.
 
- src/hb-ot-shape-complex-misc.cc |    6 +++---
- src/hb-private.hh              |    4 ++--
+ src/hb-ot-shape-complex-misc.cc | 6 +++---
+ src/hb-private.hh              | 4 ++--
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 42848453bf260b456b46a07f066e31b8c3aac2f1
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 42848453bf260b456b46a07f066e31b8c3aac2f1
@@ -5726,12 +17177,12 @@ Date:  Mon Jul 23 13:52:07 2012 -0400
 
     Fixes the two remaining Thai failures (see previous commit).
 
 
     Fixes the two remaining Thai failures (see previous commit).
 
- src/hb-ot-shape-complex-misc.cc                   |    7 +++++++
- src/hb-unicode.cc                                 |    6 ++++++
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
- .../shaper-thai/script-thai/misc/phinthu.txt      |   16
+ src/hb-ot-shape-complex-misc.cc                         |  7 +++++++
+ src/hb-unicode.cc                                       |  6 ++++++
+ .../texts/in-tree/shaper-thai/script-thai/misc/MANIFEST  |  1 +
+ .../in-tree/shaper-thai/script-thai/misc/phinthu.txt    | 16
  ++++++++++++++++
  ++++++++++++++++
- 4 files changed, 30 insertions(+), 0 deletions(-)
+ 4 files changed, 30 insertions(+)
 
 commit 4a7f4f3e56f8f7640ae7337aa1b3324f31e0d4ab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a7f4f3e56f8f7640ae7337aa1b3324f31e0d4ab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5758,14 +17209,14 @@ Date:  Mon Jul 23 13:15:33 2012 -0400
        54k (0.0615167%).  All seem to be insignificant mark positioning
        with two marks on a base.  Have to investigate.
 
        54k (0.0615167%).  All seem to be insignificant mark positioning
        with two marks on a base.  Have to investigate.
 
- src/hb-ot-shape-complex-misc.cc                   |   42
- ++++++++++++-------
- src/hb-private.hh                                 |    6 +++
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   1 +
- .../texts/in-tree/shaper-thai/script-lao/MANIFEST  |   1 +
- .../in-tree/shaper-thai/script-lao/misc/MANIFEST   |   1 +
- .../shaper-thai/script-lao/misc/sara-am.txt       |   20 +++++++++
- .../shaper-thai/script-thai/misc/sara-am.txt      |   18 ++++++++-
+ src/hb-ot-shape-complex-misc.cc                   | 42
+ +++++++++++++---------
+ src/hb-private.hh                                 |  6 ++++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST    |  1 +
+ .../texts/in-tree/shaper-thai/script-lao/MANIFEST  |  1 +
+ .../in-tree/shaper-thai/script-lao/misc/MANIFEST   |  1 +
+ .../shaper-thai/script-lao/misc/sara-am.txt       | 20 +++++++++++
+ .../shaper-thai/script-thai/misc/sara-am.txt      | 18 +++++++++-
  7 files changed, 72 insertions(+), 17 deletions(-)
 
 commit 2cc933aff97916e5d0fe42883f40f0879f848e25
  7 files changed, 72 insertions(+), 17 deletions(-)
 
 commit 2cc933aff97916e5d0fe42883f40f0879f848e25
@@ -5776,8 +17227,8 @@ Date:    Mon Jul 23 08:22:55 2012 -0400
 
     Test case was: <U+0D15,U+0D4D,U+0D15,U+0D4A>.
 
 
     Test case was: <U+0D15,U+0D4D,U+0D15,U+0D4A>.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit e6b01a878cd2e63cb675e7e0c6ac4d83a8c10f37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6b01a878cd2e63cb675e7e0c6ac4d83a8c10f37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5788,8 +17239,8 @@ Date:    Mon Jul 23 00:11:26 2012 -0400
     This should address all possible cluster misformations that I had in
     mind.
 
     This should address all possible cluster misformations that I had in
     mind.
 
- src/hb-ot-shape-complex-indic.cc |   21 ++++++++++-----------
- 1 files changed, 10 insertions(+), 11 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
 
 commit 7b2a7dadd6c616bbfe1d8358700cab9cee88e584
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7b2a7dadd6c616bbfe1d8358700cab9cee88e584
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5801,8 +17252,8 @@ Date:    Sun Jul 22 23:58:55 2012 -0400
     speculating may happen with surrounding syllables. Or most of it
     perhaps.
 
     speculating may happen with surrounding syllables. Or most of it
     perhaps.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit abb3239ef92cc5dccb4638806d7ae9868b9ac9b3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit abb3239ef92cc5dccb4638806d7ae9868b9ac9b3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5813,8 +17264,8 @@ Date:    Sun Jul 22 23:55:19 2012 -0400
     Fixes crashes reported with left matra under
     non-uniscribe-bug-compatibilty mode.
 
     Fixes crashes reported with left matra under
     non-uniscribe-bug-compatibilty mode.
 
- src/hb-ot-shape-complex-indic.cc |    9 ++++++++-
- 1 files changed, 8 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
 
 commit 60554f14d8dca208721f0da8b69d84b92819c54f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60554f14d8dca208721f0da8b69d84b92819c54f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5825,9 +17276,9 @@ Date:    Sun Jul 22 23:23:56 2012 -0400
     From:
     http://silpa.org.in/pub/tests/hb/ml/ml-harfbuzz-testdata.txt
 
     From:
     http://silpa.org.in/pub/tests/hb/ml/ml-harfbuzz-testdata.txt
 
- .../indic/script-malayalam/misc/misc.txt          |   94
- ++++++++++----------
- 1 files changed, 46 insertions(+), 48 deletions(-)
+ .../indic/script-malayalam/misc/misc.txt          | 94
+ +++++++++++-----------
+ 1 file changed, 46 insertions(+), 48 deletions(-)
 
 commit 5c7081770c7a611bbe79b451b7b86dec4fa6395d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c7081770c7a611bbe79b451b7b86dec4fa6395d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5840,7 +17291,7 @@ Date:    Sun Jul 22 23:20:27 2012 -0400
 
  .../indic/script-sinhala/misc/extensive.txt       | 4390
  ++++++++++++++++++++
 
  .../indic/script-sinhala/misc/extensive.txt       | 4390
  ++++++++++++++++++++
- 1 files changed, 4390 insertions(+), 0 deletions(-)
+ 1 file changed, 4390 insertions(+)
 
 commit 2efe4707b1b449962f6e161716477d9775456c46
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2efe4707b1b449962f6e161716477d9775456c46
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5851,9 +17302,9 @@ Date:    Sun Jul 22 23:17:59 2012 -0400
     Merge tests from:
     http://git.savannah.gnu.org/cgit/sinhala.git/plain/patches/icu-sinhala-rendering.txt
 
     Merge tests from:
     http://git.savannah.gnu.org/cgit/sinhala.git/plain/patches/icu-sinhala-rendering.txt
 
- .../indic/script-sinhala/misc/misc.txt                    |   26
- ++++++++++++++++++-
- 1 files changed, 24 insertions(+), 2 deletions(-)
+ .../indic/script-sinhala/misc/misc.txt                    | 26
+ ++++++++++++++++++++--
+ 1 file changed, 24 insertions(+), 2 deletions(-)
 
 commit 3d4c111b7a13700b2f7a0b087eb3992283295f21
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3d4c111b7a13700b2f7a0b087eb3992283295f21
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5861,8 +17312,9 @@ Date:    Fri Jul 20 19:34:39 2012 -0400
 
     Add a test case
 
 
     Add a test case
 
- .../indic/script-bengali/misc/misc.txt                    |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 92a1ad7bef9efb456ab87bd63818cfbed7da3f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 92a1ad7bef9efb456ab87bd63818cfbed7da3f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5875,8 +17327,8 @@ Date:    Fri Jul 20 18:38:27 2012 -0400
     deal
     with that later.
 
     deal
     with that later.
 
- src/hb-ot-shape-complex-indic.cc |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 4c450c703f8e4618c587bcd7ef46dcc1f2c7947b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c450c703f8e4618c587bcd7ef46dcc1f2c7947b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5888,8 +17340,8 @@ Date:    Fri Jul 20 18:13:04 2012 -0400
 
     Improves Bengali a bit.
 
 
     Improves Bengali a bit.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- src/hb-unicode.cc               |    8 ++++++++
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ src/hb-unicode.cc               | 8 ++++++++
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit e9c0f152a38cb2e76650a3e43f7fdcda266af696
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit e9c0f152a38cb2e76650a3e43f7fdcda266af696
@@ -5900,8 +17352,8 @@ Date:    Fri Jul 20 17:05:46 2012 -0400
 
     Gurmukhi failures half now.  Others changed slightly.
 
 
     Gurmukhi failures half now.  Others changed slightly.
 
- src/hb-uniscribe.cc |  34 ++++++++++++++--------------------
- 1 files changed, 14 insertions(+), 20 deletions(-)
+ src/hb-uniscribe.cc | 34 ++++++++++++++--------------------
+ 1 file changed, 14 insertions(+), 20 deletions(-)
 
 commit 5791f329159c9863317e2b507514c29321be31a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5791f329159c9863317e2b507514c29321be31a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5913,8 +17365,8 @@ Date:    Fri Jul 20 16:26:55 2012 -0400
     too.
     Sinhala had one or two test regressions, but...
 
     too.
     Sinhala had one or two test regressions, but...
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 34ae336f3fae93ef9372881d545c817bce383041
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34ae336f3fae93ef9372881d545c817bce383041
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5925,8 +17377,8 @@ Date:    Fri Jul 20 16:17:28 2012 -0400
     Fixes 20 out of 48 failing Oriya tests.  Failure rate down to
     0.066% now.
 
     Fixes 20 out of 48 failing Oriya tests.  Failure rate down to
     0.066% now.
 
- src/hb-ot-shape-complex-indic.cc |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit bdd080431a40bc941ece3230f338b94a46bd12a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bdd080431a40bc941ece3230f338b94a46bd12a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5936,10 +17388,13 @@ Date:  Fri Jul 20 16:03:09 2012 -0400
 
     Oriya failures down from 0.65% to 0.20%.
 
 
     Oriya failures down from 0.65% to 0.20%.
 
- src/hb-ot-shape-complex-indic.cc                  |    1 +
- .../shaper-indic/indic/script-oriya/misc/MANIFEST  |   1 +
- .../shaper-indic/indic/script-oriya/misc/bindu.txt |   2 ++
- 3 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                       |
+ 1 +
+ .../shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/MANIFEST |
+ 1 +
+ .../texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt       |
+ 2 ++
+ 3 files changed, 4 insertions(+)
 
 commit 5f0eaaad129ff04d56b8756bebf19fbc242718c9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5f0eaaad129ff04d56b8756bebf19fbc242718c9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5950,8 +17405,8 @@ Date:    Fri Jul 20 15:47:24 2012 -0400
     Fixes most Malayalam failures.  Down from 1.6% to 0.38% now.  Fixes a
     few more in other scripts too.
 
     Fixes most Malayalam failures.  Down from 1.6% to 0.38% now.  Fixes a
     few more in other scripts too.
 
- src/hb-ot-shape-complex-indic.cc |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit 81202bd860e4034c18d9f80c5a4f33d9f48463a3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81202bd860e4034c18d9f80c5a4f33d9f48463a3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5959,9 +17414,9 @@ Date:    Fri Jul 20 15:10:02 2012 -0400
 
     [Indic] Don't attach SM/VD to other characters
 
 
     [Indic] Don't attach SM/VD to other characters
 
- src/hb-ot-shape-complex-indic-private.hh |    3 ++
- src/hb-ot-shape-complex-indic.cc        |   38
- ++++++++++++++++-------------
+ src/hb-ot-shape-complex-indic-private.hh |  3 +++
+ src/hb-ot-shape-complex-indic.cc        | 38
+ ++++++++++++++++++--------------
  2 files changed, 24 insertions(+), 17 deletions(-)
 
 commit efb4ad735691837a52447bedc1a66a87d0d9af51
  2 files changed, 24 insertions(+), 17 deletions(-)
 
 commit efb4ad735691837a52447bedc1a66a87d0d9af51
@@ -5972,8 +17427,8 @@ Date:    Fri Jul 20 14:27:38 2012 -0400
 
     If x is not constant, we cannot ASSERT_STATIC on it.
 
 
     If x is not constant, we cannot ASSERT_STATIC on it.
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f31d97e44eeb6fb141f3de928e27e033fc7b1f47
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f31d97e44eeb6fb141f3de928e27e033fc7b1f47
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -5983,8 +17438,8 @@ Date:    Fri Jul 20 14:13:35 2012 -0400
 
     Apparently this was approved in Feb 2012.  No font yet.
 
 
     Apparently this was approved in Feb 2012.  No font yet.
 
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc        |    4 ++--
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
+ src/hb-ot-shape-complex-indic.cc        | 4 ++--
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 2e193b240ec85cab0d4e2f8a375c5a7f0ef99985
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 2e193b240ec85cab0d4e2f8a375c5a7f0ef99985
@@ -5999,8 +17454,8 @@ Date:    Fri Jul 20 14:02:35 2012 -0400
 
     Gujarati failures down from 0.672% to 0.0130966%.
 
 
     Gujarati failures down from 0.672% to 0.0130966%.
 
- src/hb-unicode.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-unicode.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 30c3d5e9fc61b49c2c6ad4e744300edd6f3e0261
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 30c3d5e9fc61b49c2c6ad4e744300edd6f3e0261
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6011,8 +17466,8 @@ Date:    Fri Jul 20 13:56:32 2012 -0400
     Now that we break syllables on Halant,ZWNJ, this code can be
     simplified.
 
     Now that we break syllables on Halant,ZWNJ, this code can be
     simplified.
 
- src/hb-ot-shape-complex-indic.cc |   11 ++---------
- 1 files changed, 2 insertions(+), 9 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
 
 commit decf6ffca475fe01ff3151b7641f629f031137d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit decf6ffca475fe01ff3151b7641f629f031137d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6020,8 +17475,8 @@ Date:    Fri Jul 20 13:51:31 2012 -0400
 
     [Indic] Minor!
 
 
     [Indic] Minor!
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9e4f94a72cea6d65a6a7ba5a47db92e00dbfbb91
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9e4f94a72cea6d65a6a7ba5a47db92e00dbfbb91
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6036,8 +17491,8 @@ Date:    Fri Jul 20 13:48:03 2012 -0400
     Sent Telugu from 1% failures to 0.03%.  Improved Kannada and Malayalam
     slightly.  Fixed half of Bengali, and did NOT break anything!
 
     Sent Telugu from 1% failures to 0.03%.  Improved Kannada and Malayalam
     slightly.  Fixed half of Bengali, and did NOT break anything!
 
- src/hb-ot-shape-complex-indic-machine.rl |    5 +++--
- src/hb-ot-shape-complex-indic.cc        |    5 ++---
+ src/hb-ot-shape-complex-indic-machine.rl | 5 +++--
+ src/hb-ot-shape-complex-indic.cc        | 5 ++---
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 2c372b80f6befad69e216e3f218b38640b8cc044
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 2c372b80f6befad69e216e3f218b38640b8cc044
@@ -6050,8 +17505,8 @@ Date:    Fri Jul 20 13:37:48 2012 -0400
 
     Fixes some more of Bengali.
 
 
     Fixes some more of Bengali.
 
- src/hb-ot-shape-complex-indic.cc |    9 +--------
- src/hb-private.hh               |    3 ++-
+ src/hb-ot-shape-complex-indic.cc | 9 +--------
+ src/hb-private.hh               | 3 ++-
  2 files changed, 3 insertions(+), 9 deletions(-)
 
 commit 34a7440b7c6c6e53394ddbdbedaad57b23f85105
  2 files changed, 3 insertions(+), 9 deletions(-)
 
 commit 34a7440b7c6c6e53394ddbdbedaad57b23f85105
@@ -6066,8 +17521,8 @@ Date:    Fri Jul 20 12:32:59 2012 -0400
     font relying
     on this immediately.
 
     font relying
     on this immediately.
 
- src/hb-ot-layout-gpos-table.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 8ed248de77e5d2ed978e55c0ce1a11727bc9e34c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8ed248de77e5d2ed978e55c0ce1a11727bc9e34c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6075,8 +17530,8 @@ Date:    Fri Jul 20 11:42:24 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic.cc |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit d0e68dbd0b9fc9a42c4280d01c8ffd9c5015d550
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d0e68dbd0b9fc9a42c4280d01c8ffd9c5015d550
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6087,8 +17542,8 @@ Date:    Fri Jul 20 11:25:41 2012 -0400
     Not tuned, just copied from step 2.  Fixes another 0.5% of Kannada
     failures.  1% to go.
 
     Not tuned, just copied from step 2.  Fixes another 0.5% of Kannada
     failures.  1% to go.
 
- src/hb-ot-shape-complex-indic.cc |   12 +++++++++++-
- 1 files changed, 11 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
 
 commit a9e45c32e4a0d6da33c52f8427aa694e57f52eb9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a9e45c32e4a0d6da33c52f8427aa694e57f52eb9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6100,8 +17555,8 @@ Date:    Fri Jul 20 11:04:15 2012 -0400
     quarter for
     Telugu, and others slightly improved or unchanged.
 
     quarter for
     Telugu, and others slightly improved or unchanged.
 
- src/hb-ot-shape-complex-indic.cc |    6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit 20b68e699f73e6ce046c0ec143d40b3d6d48e06b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20b68e699f73e6ce046c0ec143d40b3d6d48e06b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6111,8 +17566,8 @@ Date:    Fri Jul 20 10:47:46 2012 -0400
 
     Fixes 5 Devanagari failures, and no regressions.
 
 
     Fixes 5 Devanagari failures, and no regressions.
 
- src/hb-ot-shape-complex-indic.cc |   15 +++++++++------
- 1 files changed, 9 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
 
 commit 51e764de441072e7c9f67de23e8ed717b9b8957d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 51e764de441072e7c9f67de23e8ed717b9b8957d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6122,8 +17577,8 @@ Date:    Fri Jul 20 10:30:24 2012 -0400
 
     Brings down failures with Lohit-Telugu from 57% to 1.40%.
 
 
     Brings down failures with Lohit-Telugu from 57% to 1.40%.
 
- src/hb-ot-shape-complex-indic.cc |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 900cf3d449bf36d4f8b1474590cae925fef48fc8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 900cf3d449bf36d4f8b1474590cae925fef48fc8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6131,8 +17586,8 @@ Date:    Fri Jul 20 10:18:23 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 87cd63266e73af316b250573ef57388a0bcc9133
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 87cd63266e73af316b250573ef57388a0bcc9133
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6142,10 +17597,11 @@ Date:  Thu Jul 19 21:17:48 2012 -0400
 
     Kannada failures down from 3.5% to 2.93%.
 
 
     Kannada failures down from 3.5% to 2.93%.
 
- src/hb-ot-shape-complex-indic.cc                  |    2 +-
- .../indic/script-kannada/misc/MANIFEST                    |    1 +
- .../indic/script-kannada/misc/right-matras.txt     |   7 +++++++
- 3 files changed, 9 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                  | 2 +-
+ .../texts/in-tree/shaper-indic/indic/script-kannada/misc/MANIFEST  | 1 +
+ .../shaper-indic/indic/script-kannada/misc/right-matras.txt       |
+ 7 +++++++
+ 3 files changed, 9 insertions(+), 1 deletion(-)
 
 commit 3604d64ced909ade91998d294a7b4b2ee14d47aa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3604d64ced909ade91998d294a7b4b2ee14d47aa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6157,8 +17613,8 @@ Date:    Thu Jul 19 21:13:04 2012 -0400
     failures.
     Failures down from 7.7% to 0.222%!
 
     failures.
     Failures down from 7.7% to 0.222%!
 
- src/hb-ot-shape-complex-indic.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 89328581236a53ec16508b95db54c7e5315b178f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 89328581236a53ec16508b95db54c7e5315b178f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6166,8 +17622,8 @@ Date:    Thu Jul 19 21:02:38 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 47ef931f13778b894090139a64238a5ab9ac1154
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 47ef931f13778b894090139a64238a5ab9ac1154
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6175,8 +17631,8 @@ Date:    Thu Jul 19 20:52:44 2012 -0400
 
     [buffer] Make sure out_info = info during GPOS
 
 
     [buffer] Make sure out_info = info during GPOS
 
- src/hb-buffer.cc |    9 +++++++--
- 1 files changed, 7 insertions(+), 2 deletions(-)
+ src/hb-buffer.cc | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
 
 commit ae63cf206291befe3920adfe015e6cd0961580e5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae63cf206291befe3920adfe015e6cd0961580e5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6184,8 +17640,8 @@ Date:    Thu Jul 19 20:45:41 2012 -0400
 
     Print line number during return when tracing
 
 
     Print line number during return when tracing
 
- src/hb-private.hh |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 5249f3aee108b0f41770d137e63a625f594418e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5249f3aee108b0f41770d137e63a625f594418e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6197,8 +17653,8 @@ Date:    Thu Jul 19 20:30:22 2012 -0400
     the font.
     We were looking in the wrong order anyway.
 
     the font.
     We were looking in the wrong order anyway.
 
- src/hb-ot-shape-complex-indic.cc |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit e0475345d5d7db8dbc8b554beedfa2435c5d7fd1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e0475345d5d7db8dbc8b554beedfa2435c5d7fd1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6209,8 +17665,8 @@ Date:    Thu Jul 19 20:24:14 2012 -0400
     Fixes 1.5% more failures for Telugu, 2% for Kannada.
     Breaks one test in Devanagari.
 
     Fixes 1.5% more failures for Telugu, 2% for Kannada.
     Breaks one test in Devanagari.
 
- src/hb-ot-shape-complex-indic.cc |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit c87bcddb10752b407c0471ee5ac4de6f1b00b711
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c87bcddb10752b407c0471ee5ac4de6f1b00b711
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6218,8 +17674,9 @@ Date:    Thu Jul 19 20:03:25 2012 -0400
 
     [Indic] Add failing test for Kannada
 
 
     [Indic] Add failing test for Kannada
 
- .../indic/script-kannada/misc/misc.txt                    |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit fa247ebe524f92fa95d344ba912f704262879c13
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fa247ebe524f92fa95d344ba912f704262879c13
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6229,8 +17686,8 @@ Date:    Thu Jul 19 19:52:19 2012 -0400
 
     Fixes another 5% of Kannada failures.
 
 
     Fixes another 5% of Kannada failures.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit f055442716ec7543ed156d4789955b19c11a5255
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f055442716ec7543ed156d4789955b19c11a5255
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6240,10 +17697,10 @@ Date:  Thu Jul 19 16:20:21 2012 -0400
 
     Fixes most failures of Oriya, and improves others a bit.
 
 
     Fixes most failures of Oriya, and improves others a bit.
 
- src/hb-ot-map-private.hh                |   13 +++-
- src/hb-ot-shape-complex-indic-private.hh |  105
- ------------------------------
- src/hb-ot-shape-complex-indic.cc        |   63 +++++++++++++-----
+ src/hb-ot-map-private.hh                |  13 ++--
+ src/hb-ot-shape-complex-indic-private.hh | 105
+ -------------------------------
+ src/hb-ot-shape-complex-indic.cc        |  63 +++++++++++++------
  3 files changed, 54 insertions(+), 127 deletions(-)
 
 commit 74d1d88781e91866a52e27f391e34df03b313442
  3 files changed, 54 insertions(+), 127 deletions(-)
 
 commit 74d1d88781e91866a52e27f391e34df03b313442
@@ -6252,8 +17709,8 @@ Date:    Thu Jul 19 16:14:23 2012 -0400
 
     [GSUB] Fix would_apply() for LigatureSubst
 
 
     [GSUB] Fix would_apply() for LigatureSubst
 
- src/hb-ot-layout-gsub-table.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 787f7d1e9ba9ad038f24e5a1063d12c7d169ad37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 787f7d1e9ba9ad038f24e5a1063d12c7d169ad37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6261,8 +17718,8 @@ Date:    Thu Jul 19 15:29:13 2012 -0400
 
     [TODO] Minor
 
 
     [TODO] Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit be73a5f9368136ecbdb211b96516ad0c554c8201
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit be73a5f9368136ecbdb211b96516ad0c554c8201
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6270,11 +17727,11 @@ Date:  Thu Jul 19 14:59:15 2012 -0400
 
     Add src/test-would-substitute tool
 
 
     Add src/test-would-substitute tool
 
- src/Makefile.am             |    6 ++-
- src/test-would-substitute.cc |   94 ++++++++++++++++++++++++++++++
- src/test.cc                 |  132
- ++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 231 insertions(+), 1 deletions(-)
+ src/Makefile.am             |   +-
+ src/test-would-substitute.cc |  94 ++++++++++++++++++++++++++++++
+ src/test.cc                 | 132
+ +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 231 insertions(+), 1 deletion(-)
 
 commit e72b360ac6381b549249b8836fa3e70b909d3437
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e72b360ac6381b549249b8836fa3e70b909d3437
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6284,12 +17741,12 @@ Date:  Thu Jul 19 14:35:23 2012 -0400
 
     Untested.
 
 
     Untested.
 
- src/hb-ot-layout-gpos-table.hh       |    6 +-
- src/hb-ot-layout-gsub-table.hh       |  126 ++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |  233
- +++++++++++++++++++++++++++++++++-
- src/hb-ot-layout.cc                 |   11 ++
- src/hb-ot-layout.h                  |    7 +
+ src/hb-ot-layout-gpos-table.hh       |   6 +-
+ src/hb-ot-layout-gsub-table.hh       | 126 +++++++++----------
+ src/hb-ot-layout-gsubgpos-private.hh | 233
+ ++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout.cc                 |  11 ++
+ src/hb-ot-layout.h                  |   7 ++
  5 files changed, 308 insertions(+), 75 deletions(-)
 
 commit 8c973ebf0f59abb5ee920edd5d64e23d8e47ad75
  5 files changed, 308 insertions(+), 75 deletions(-)
 
 commit 8c973ebf0f59abb5ee920edd5d64e23d8e47ad75
@@ -6304,10 +17761,10 @@ Date:  Thu Jul 19 13:25:08 2012 -0400
     from
     44% to 10%.  Does NOT affect other scripts' test results.
 
     from
     44% to 10%.  Does NOT affect other scripts' test results.
 
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc        |   40
- +++++++++++++++++++++++++++--
- src/hb-unicode.cc                       |    2 +-
+ src/hb-ot-shape-complex-indic-private.hh |  2 +-
+ src/hb-ot-shape-complex-indic.cc        | 40
+ +++++++++++++++++++++++++++++---
+ src/hb-unicode.cc                       |  2 +-
  3 files changed, 39 insertions(+), 5 deletions(-)
 
 commit 8bb32458f95f13f66688e0811cc91f1bfffb867d
  3 files changed, 39 insertions(+), 5 deletions(-)
 
 commit 8bb32458f95f13f66688e0811cc91f1bfffb867d
@@ -6316,9 +17773,9 @@ Date:    Thu Jul 19 12:59:06 2012 -0400
 
     [Indic] More refactoring
 
 
     [Indic] More refactoring
 
- src/hb-ot-shape-complex-indic-private.hh |    9 ++--
- src/hb-ot-shape-complex-indic.cc        |   65
- +++++++++++++++++++++++-------
+ src/hb-ot-shape-complex-indic-private.hh |  9 ++---
+ src/hb-ot-shape-complex-indic.cc        | 65
+ ++++++++++++++++++++++++--------
  2 files changed, 54 insertions(+), 20 deletions(-)
 
 commit 9ccc6382ba43760167c134c18c1c4ada4b8c3f22
  2 files changed, 54 insertions(+), 20 deletions(-)
 
 commit 9ccc6382ba43760167c134c18c1c4ada4b8c3f22
@@ -6327,9 +17784,9 @@ Date:    Thu Jul 19 12:32:16 2012 -0400
 
     [Indic] Minor refactoring
 
 
     [Indic] Minor refactoring
 
- src/hb-ot-shape-complex-indic.cc |  127
- +++++++++++++++++++++-----------------
- 1 files changed, 71 insertions(+), 56 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 127
+ ++++++++++++++++++++++-----------------
+ 1 file changed, 71 insertions(+), 56 deletions(-)
 
 commit f83aaa3133de5d807be267a100d6a200e8db9017
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f83aaa3133de5d807be267a100d6a200e8db9017
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6337,9 +17794,9 @@ Date:    Thu Jul 19 12:23:23 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-private.hh |   42
- ++++++++++++++++++-----------
- 1 files changed, 26 insertions(+), 16 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 42
+ ++++++++++++++++++++------------
+ 1 file changed, 26 insertions(+), 16 deletions(-)
 
 commit be8b9f5f715f6fb36b98bd33c3303f79cc068f8a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit be8b9f5f715f6fb36b98bd33c3303f79cc068f8a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6347,9 +17804,9 @@ Date:    Thu Jul 19 12:11:12 2012 -0400
 
     [Indic] Start refactoring different matra positions per script
 
 
     [Indic] Start refactoring different matra positions per script
 
- src/hb-ot-shape-complex-indic-private.hh |   36
- ++++++++++++++++++-----------
- src/hb-ot-shape-complex-indic.cc        |    4 +-
+ src/hb-ot-shape-complex-indic-private.hh | 36
+ +++++++++++++++++++-------------
+ src/hb-ot-shape-complex-indic.cc        |  4 ++--
  2 files changed, 24 insertions(+), 16 deletions(-)
 
 commit deeb540a74f8d394db273145b17bf385d14d01bb
  2 files changed, 24 insertions(+), 16 deletions(-)
 
 commit deeb540a74f8d394db273145b17bf385d14d01bb
@@ -6358,8 +17815,8 @@ Date:    Thu Jul 19 11:30:48 2012 -0400
 
     [test] Ignore tests with DOTTED CIRCLE in the output
 
 
     [test] Ignore tests with DOTTED CIRCLE in the output
 
- test/shaping/hb_test_tools.py |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ test/shaping/hb_test_tools.py | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit b01d9b3d90e892341ee4463f2eda4600850b97d8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b01d9b3d90e892341ee4463f2eda4600850b97d8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6374,8 +17831,8 @@ Date:    Thu Jul 19 11:25:49 2012 -0400
     The results with or without decomposition are the same, but Uniscribe
     does not normalize, so this matches better.
 
     The results with or without decomposition are the same, but Uniscribe
     does not normalize, so this matches better.
 
- src/hb-unicode.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-unicode.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 422ecd2d3c198a36d07d409341cb82ea57c7ad6b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 422ecd2d3c198a36d07d409341cb82ea57c7ad6b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6392,9 +17849,11 @@ Date:   Wed Jul 18 23:25:58 2012 -0400
 
     Fixes some 100 or more of Sinhala failures.  Now at 622 only (0.23%).
 
 
     Fixes some 100 or more of Sinhala failures.  Now at 622 only (0.23%).
 
- src/hb-ot-shape-complex-indic-machine.rl          |    3 ++-
- .../indic/script-sinhala/misc/misc.txt                    |    2 ++
- 2 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl                              |
+ 3 ++-
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt     |
+ 2 ++
+ 2 files changed, 4 insertions(+), 1 deletion(-)
 
 commit 6fc1732003d71cf90d37247482772c3da884687f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6fc1732003d71cf90d37247482772c3da884687f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6405,8 +17864,8 @@ Date:    Wed Jul 18 17:49:19 2012 -0400
     The sequence <ZWJ,Al-Lakuna,ZWJ> is used in Sinhala to explicitly ask
     for Rakar. Fixes two-thousand Sinhala tests.  Not many left.
 
     The sequence <ZWJ,Al-Lakuna,ZWJ> is used in Sinhala to explicitly ask
     for Rakar. Fixes two-thousand Sinhala tests.  Not many left.
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 10cdc94eee2225f14c198c015256a5a0063eecad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 10cdc94eee2225f14c198c015256a5a0063eecad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6419,8 +17878,9 @@ Date:    Wed Jul 18 17:42:34 2012 -0400
 
     Fixes a few hundred of Sinhala failures with Iskoola Pota.
 
 
     Fixes a few hundred of Sinhala failures with Iskoola Pota.
 
- src/hb-ot-shape-complex-indic.cc                  |    7 ++-----
- .../indic/script-sinhala/misc/misc.txt                    |    1 +
+ src/hb-ot-shape-complex-indic.cc                                  |
+ 7 ++-----
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt  | 1 +
  2 files changed, 3 insertions(+), 5 deletions(-)
 
 commit 9c4d24a3a677a58ec59c7fb0f8b70b8aad30a032
  2 files changed, 3 insertions(+), 5 deletions(-)
 
 commit 9c4d24a3a677a58ec59c7fb0f8b70b8aad30a032
@@ -6429,8 +17889,8 @@ Date:    Wed Jul 18 17:29:10 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3285e107c9a83aeb552e67f9460680ff6d167d88
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3285e107c9a83aeb552e67f9460680ff6d167d88
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6440,11 +17900,13 @@ Date:  Wed Jul 18 17:22:14 2012 -0400
 
     In Sinhala, Reph is formed only explicitly, by the presence of a ZWJ.
 
 
     In Sinhala, Reph is formed only explicitly, by the presence of a ZWJ.
 
- src/hb-ot-shape-complex-indic-private.hh          |    2 ++
- src/hb-ot-shape-complex-indic.cc                  |    7 ++++++-
- .../indic/script-sinhala/misc/MANIFEST                    |    1 +
- .../indic/script-sinhala/misc/reph.txt                    |    3 +++
- 4 files changed, 12 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh                          | 2 ++
+ src/hb-ot-shape-complex-indic.cc                                  |
+ 7 ++++++-
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/MANIFEST  | 1 +
+ .../texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt  |
+ 3 +++
+ 4 files changed, 12 insertions(+), 1 deletion(-)
 
 commit 91cade755534c42bb826a6aefcbca8a543d94387
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 91cade755534c42bb826a6aefcbca8a543d94387
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6456,8 +17918,8 @@ Date:    Wed Jul 18 16:50:41 2012 -0400
 
     Fixes most of the failures.  Down from 15% to 1.3%!
 
 
     Fixes most of the failures.  Down from 15% to 1.3%!
 
- src/hb-unicode.cc |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-unicode.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit d8942dcbb4e3249a2d78a6455c119294ed4390bc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d8942dcbb4e3249a2d78a6455c119294ed4390bc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6469,9 +17931,9 @@ Date:    Wed Jul 18 16:34:10 2012 -0400
 
     Merges back Hangul into the default shaper.
 
 
     Merges back Hangul into the default shaper.
 
- src/hb-ot-shape-complex-misc.cc    |  82
- ++++++++++++++++--------------------
- src/hb-ot-shape-complex-private.hh |   7 ---
+ src/hb-ot-shape-complex-misc.cc    | 82
+ +++++++++++++++++---------------------
+ src/hb-ot-shape-complex-private.hh |  7 ----
  2 files changed, 37 insertions(+), 52 deletions(-)
 
 commit 552d19b7a11f7dff888587fce4d56d9f8e47e819
  2 files changed, 37 insertions(+), 52 deletions(-)
 
 commit 552d19b7a11f7dff888587fce4d56d9f8e47e819
@@ -6484,9 +17946,12 @@ Date:   Wed Jul 18 16:00:49 2012 -0400
 
     Fixes another 18 Khmer tests.
 
 
     Fixes another 18 Khmer tests.
 
- src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
- src/hb-ot-shape-complex-indic.cc                  |    2 --
- .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
+ src/hb-ot-shape-complex-indic-machine.rl                               |
+ 2 +-
+ src/hb-ot-shape-complex-indic.cc                                       |
+ 2 --
+ .../in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt   |
+ 1 +
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit e8cd81f76d159f3ecf808952dab24bc07782497a
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit e8cd81f76d159f3ecf808952dab24bc07782497a
@@ -6495,8 +17960,8 @@ Date:    Wed Jul 18 16:00:20 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 69f26bf39c824d6bf5b1c0d410380cc5462ad5ca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 69f26bf39c824d6bf5b1c0d410380cc5462ad5ca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6508,9 +17973,11 @@ Date:   Wed Jul 18 15:45:43 2012 -0400
 
     Fixes last Tamil failure!
 
 
     Fixes last Tamil failure!
 
- src/hb-ot-shape-complex-indic.cc                  |    2 +-
- .../indic/script-devanagari/misc/misc.txt         |    1 +
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                                       |
+ 2 +-
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt   |
+ 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit d16ccc4ae7aa8be460881042413fa2637929fede
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d16ccc4ae7aa8be460881042413fa2637929fede
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6522,8 +17989,8 @@ Date:    Wed Jul 18 15:43:55 2012 -0400
 
     jk
 
 
     jk
 
- src/hb-buffer-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 075d671f1093d2e3c58f7f45568696030f1b3efd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 075d671f1093d2e3c58f7f45568696030f1b3efd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6531,8 +17998,8 @@ Date:    Wed Jul 18 15:41:53 2012 -0400
 
     [Indic] Fix out-of-bounds array access
 
 
     [Indic] Fix out-of-bounds array access
 
- src/hb-ot-shape-complex-indic.cc |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit dcb527242b1eca4db1e190a7802f9cd132aaf46e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dcb527242b1eca4db1e190a7802f9cd132aaf46e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6542,8 +18009,8 @@ Date:    Wed Jul 18 15:28:25 2012 -0400
 
     Fixes 1 more Devanagari test!
 
 
     Fixes 1 more Devanagari test!
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 391cc0331749e263bdfe83a8f5f6d76f2360ee7a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 391cc0331749e263bdfe83a8f5f6d76f2360ee7a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6554,8 +18021,9 @@ Date:    Wed Jul 18 15:10:05 2012 -0400
     Fixes 2 out of 560 Devanagari failures.  AND:
     Fixes 1 out of 2 Tamil failures.
 
     Fixes 2 out of 560 Devanagari failures.  AND:
     Fixes 1 out of 2 Tamil failures.
 
- src/hb-ot-shape-complex-indic-machine.rl          |    7 ++++---
- .../indic/script-devanagari/misc/misc.txt         |    1 +
+ src/hb-ot-shape-complex-indic-machine.rl                          |
+ 7 ++++---
+ .../in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt     | 1 +
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit ca4e3d3eab7b738c2b8e2a81696a28bca1b81495
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit ca4e3d3eab7b738c2b8e2a81696a28bca1b81495
@@ -6564,8 +18032,8 @@ Date:    Wed Jul 18 15:05:40 2012 -0400
 
     [Indic] Streamline halant/joiner in grammar
 
 
     [Indic] Streamline halant/joiner in grammar
 
- src/hb-ot-shape-complex-indic-machine.rl |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 418d00dffddd95a1f27e9be15752d494c627d45e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 418d00dffddd95a1f27e9be15752d494c627d45e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6573,9 +18041,11 @@ Date:   Wed Jul 18 14:57:28 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-machine.rl          |    3 ++-
- .../indic/script-devanagari/misc/misc.txt         |    3 +++
- 2 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl                              |
+ 3 ++-
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt  |
+ 3 +++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
 
 commit 4c3691d2a32ca7e54a54f7c08098fd96fa7af39e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c3691d2a32ca7e54a54f7c08098fd96fa7af39e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6585,8 +18055,8 @@ Date:    Wed Jul 18 14:23:55 2012 -0400
 
     Refactoring Indic machin.  No semantic change.
 
 
     Refactoring Indic machin.  No semantic change.
 
- src/hb-ot-shape-complex-indic-machine.rl |   12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit e092c556fb1cf38be3cea1f4b75a0d879372dfa2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e092c556fb1cf38be3cea1f4b75a0d879372dfa2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6594,8 +18064,8 @@ Date:    Wed Jul 18 14:09:25 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 14dbdd9e39d3a869fd1521000c889c347433d22b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 14dbdd9e39d3a869fd1521000c889c347433d22b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6605,8 +18075,8 @@ Date:    Wed Jul 18 13:13:03 2012 -0400
 
     Tamil has only about 150 failures now!
 
 
     Tamil has only about 150 failures now!
 
- src/hb-ot-shape-complex-indic.cc |   18 +++++++++++++++++-
- 1 files changed, 17 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
 
 commit db8981f1e0e8625714568c6d0f11f0b317b11d0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db8981f1e0e8625714568c6d0f11f0b317b11d0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6621,10 +18091,10 @@ Date:  Tue Jul 17 18:17:30 2012 -0400
     Another 200 Khmer failures fixed.  547 to go.  That's better than
     Devanagari!
 
     Another 200 Khmer failures fixed.  547 to go.  That's better than
     Devanagari!
 
- src/hb-ot-shape-complex-indic-machine.rl |   36
- +++++++++++++++--------------
- src/hb-ot-shape-complex-indic-private.hh |    7 +++--
- src/hb-ot-shape-complex-indic.cc        |   13 ++++++++++
+ src/hb-ot-shape-complex-indic-machine.rl | 36
+ +++++++++++++++++---------------
+ src/hb-ot-shape-complex-indic-private.hh |  7 ++++---
+ src/hb-ot-shape-complex-indic.cc        | 13 ++++++++++++
  3 files changed, 36 insertions(+), 20 deletions(-)
 
 commit 25bc489498ef7d0beb8fe9ab663e3f0b2f52c9c2
  3 files changed, 36 insertions(+), 20 deletions(-)
 
 commit 25bc489498ef7d0beb8fe9ab663e3f0b2f52c9c2
@@ -6635,12 +18105,13 @@ Date:  Tue Jul 17 17:53:03 2012 -0400
 
     Down another 500 or so Khmer failures!
 
 
     Down another 500 or so Khmer failures!
 
- src/hb-ot-shape-complex-indic-machine.rl          |   14 +++++++-------
- src/hb-ot-shape-complex-indic-private.hh          |    2 +-
- src/hb-ot-shape-complex-indic.cc                  |    8 ++++----
- .../south-east-asian/script-khmer/misc/MANIFEST    |   2 ++
- .../script-khmer/misc/other-marks-invalid.txt     |    4 ++++
- .../script-khmer/misc/other-marks.txt             |    6 ++++++
+ src/hb-ot-shape-complex-indic-machine.rl                  | 14
+ +++++++-------
+ src/hb-ot-shape-complex-indic-private.hh                  |  2 +-
+ src/hb-ot-shape-complex-indic.cc                          |  8 ++++----
+ .../south-east-asian/script-khmer/misc/MANIFEST           |  2 ++
+ .../script-khmer/misc/other-marks-invalid.txt             |  4 ++++
+ .../south-east-asian/script-khmer/misc/other-marks.txt     |  6 ++++++
  6 files changed, 24 insertions(+), 12 deletions(-)
 
 commit 39b17837b4064d59c18cebb49c1c0b5b8cc0c117
  6 files changed, 24 insertions(+), 12 deletions(-)
 
 commit 39b17837b4064d59c18cebb49c1c0b5b8cc0c117
@@ -6655,12 +18126,12 @@ Date:  Tue Jul 17 17:09:29 2012 -0400
     getting the same hb-shape output for visually-equal glyphs for each
     cluster.
 
     getting the same hb-shape output for visually-equal glyphs for each
     cluster.
 
- src/hb-buffer.cc  |   76
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-buffer.h   |   13 +++++++++
- src/hb-private.hh |   29 +++++++++++++++-----
- util/options.cc   |   1 +
- util/options.hh   |   7 ++++-
+ src/hb-buffer.cc  | 76
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h   | 13 ++++++++++
+ src/hb-private.hh | 29 ++++++++++++++++-----
+ util/options.cc   |  1 +
+ util/options.hh   |  7 ++++-
  5 files changed, 118 insertions(+), 8 deletions(-)
 
 commit 25e302da9a712e6f1d63b0d243a8df0d326ddba3
  5 files changed, 118 insertions(+), 8 deletions(-)
 
 commit 25e302da9a712e6f1d63b0d243a8df0d326ddba3
@@ -6669,8 +18140,8 @@ Date:    Tue Jul 17 14:25:14 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic.cc |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 5d32690a3428fa86eb26fe5fcec943a10aa95881
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5d32690a3428fa86eb26fe5fcec943a10aa95881
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6685,9 +18156,9 @@ Date:    Tue Jul 17 14:23:28 2012 -0400
     Test sequence:
     U+1798,200c,U+17C9,U+17D2,U+179B,U+17C1,U+17C7
 
     Test sequence:
     U+1798,200c,U+17C9,U+17D2,U+179B,U+17C1,U+17C7
 
- src/hb-ot-shape-complex-indic.cc |   59
- ++++++++++++++++++++++---------------
- 1 files changed, 35 insertions(+), 24 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 59
+ ++++++++++++++++++++++++----------------
+ 1 file changed, 35 insertions(+), 24 deletions(-)
 
 commit 34b57149065d96f7528aaccaa7654e956ce27e93
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34b57149065d96f7528aaccaa7654e956ce27e93
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6697,9 +18168,11 @@ Date:   Tue Jul 17 14:09:32 2012 -0400
 
     Except that there may be a ZWNJ before a Register Shifter.
 
 
     Except that there may be a ZWNJ before a Register Shifter.
 
- src/hb-ot-shape-complex-indic-machine.rl          |    2 +-
- .../south-east-asian/script-khmer/misc/misc.txt    |   2 ++
- 2 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl                               |
+ 2 +-
+ .../in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt   |
+ 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
 
 commit 11e2a601b19861b05dbb2051d2d078c3cfd75b29
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 11e2a601b19861b05dbb2051d2d078c3cfd75b29
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6707,8 +18180,8 @@ Date:    Tue Jul 17 14:02:28 2012 -0400
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 0201e0a4649ad5b607e50bcb9605e7a5b7143812
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0201e0a4649ad5b607e50bcb9605e7a5b7143812
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6722,9 +18195,9 @@ Date:    Tue Jul 17 13:55:10 2012 -0400
       U+1784,U+17D2,U+179A,U+17D2,U+1782
       U+1784,U+17D2,U+1782,U+17D2,U+179A
 
       U+1784,U+17D2,U+179A,U+17D2,U+1782
       U+1784,U+17D2,U+1782,U+17D2,U+179A
 
- src/hb-ot-shape-complex-indic.cc                  |   16
+ src/hb-ot-shape-complex-indic.cc                        | 16
  ++++++++++++++--
  ++++++++++++++--
- .../south-east-asian/script-khmer/misc/misc.txt      2 ++
+ .../south-east-asian/script-khmer/misc/misc.txt         |  2 ++
  2 files changed, 16 insertions(+), 2 deletions(-)
 
 commit 55f70ebfb95083f515d9b0044a2a65ab11484bb5
  2 files changed, 16 insertions(+), 2 deletions(-)
 
 commit 55f70ebfb95083f515d9b0044a2a65ab11484bb5
@@ -6739,10 +18212,11 @@ Date:  Tue Jul 17 12:50:13 2012 -0400
 
     Fixes another 1k of the Khmer failures.  Not much left really.
 
 
     Fixes another 1k of the Khmer failures.  Not much left really.
 
- src/hb-ot-shape-complex-indic-private.hh          |    1 +
- src/hb-ot-shape-complex-indic.cc                  |   13 +++++++++++++
- .../south-east-asian/script-khmer/misc/misc.txt    |   2 ++
- 3 files changed, 16 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh                   |  1 +
+ src/hb-ot-shape-complex-indic.cc                           | 13
+ +++++++++++++
+ .../south-east-asian/script-khmer/misc/misc.txt            |  2 ++
+ 3 files changed, 16 insertions(+)
 
 commit c50ed71e9a3df1844f564de66d54b46a696c1356
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c50ed71e9a3df1844f564de66d54b46a696c1356
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6754,9 +18228,11 @@ Date:   Tue Jul 17 11:54:28 2012 -0400
     (Coeng+C) and a final subscripted independent vowel (Coeng+V).
     Fixes another 2k of Khmer failures.
 
     (Coeng+C) and a final subscripted independent vowel (Coeng+V).
     Fixes another 2k of Khmer failures.
 
- src/hb-ot-shape-complex-indic-machine.rl          |    7 ++++---
- src/hb-ot-shape-complex-indic.cc                  |    6 +++++-
- .../south-east-asian/script-khmer/misc/misc.txt    |   1 +
+ src/hb-ot-shape-complex-indic-machine.rl                          |
+ 7 ++++---
+ src/hb-ot-shape-complex-indic.cc                                  |
+ 6 +++++-
+ .../shaper-indic/south-east-asian/script-khmer/misc/misc.txt      | 1 +
  3 files changed, 10 insertions(+), 4 deletions(-)
 
 commit deb521dee4fdca8c2124cfb39a205e6269d4a70d
  3 files changed, 10 insertions(+), 4 deletions(-)
 
 commit deb521dee4fdca8c2124cfb39a205e6269d4a70d
@@ -6767,10 +18243,9 @@ Date:   Tue Jul 17 11:37:32 2012 -0400
 
     No characters recategorized yet.  No semantic change.
 
 
     No characters recategorized yet.  No semantic change.
 
- src/hb-ot-shape-complex-indic-machine.rl |    1 +
- src/hb-ot-shape-complex-indic-private.hh |    3 ++-
- src/hb-ot-shape-complex-indic.cc        |   26
- ++++++++++++++++----------
+ src/hb-ot-shape-complex-indic-machine.rl |  1 +
+ src/hb-ot-shape-complex-indic-private.hh |  3 ++-
+ src/hb-ot-shape-complex-indic.cc        | 26 ++++++++++++++++----------
  3 files changed, 19 insertions(+), 11 deletions(-)
 
 commit 74ccc6a1322f8c48c5f2a05f04821783c4b87a14
  3 files changed, 19 insertions(+), 11 deletions(-)
 
 commit 74ccc6a1322f8c48c5f2a05f04821783c4b87a14
@@ -6788,9 +18263,10 @@ Date:   Tue Jul 17 11:16:19 2012 -0400
     should ligate with the Halant to form Ya Phala, but previously a
     reordered matras was blocking the ligation.
 
     should ligate with the Halant to form Ya Phala, but previously a
     reordered matras was blocking the ligation.
 
- src/hb-ot-shape-complex-indic.cc                  |   11 +++++++++++
- .../indic/script-bengali/misc/misc.txt                    |    1 +
- 2 files changed, 12 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc                             |
+ 11 +++++++++++
+ .../in-tree/shaper-indic/indic/script-bengali/misc/misc.txt   |  1 +
+ 2 files changed, 12 insertions(+)
 
 commit d5c4edcdd6df32f2f23aca44f14838b4baab4d7a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d5c4edcdd6df32f2f23aca44f14838b4baab4d7a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6805,8 +18281,9 @@ Date:    Tue Jul 17 10:40:59 2012 -0400
     some Ra Phala sequences for Bengali with Vrinda.  Fixes another 2% of
     Bengali failures (a couple more to go).
 
     some Ra Phala sequences for Bengali with Vrinda.  Fixes another 2% of
     Bengali failures (a couple more to go).
 
- src/hb-ot-shape-complex-indic.cc                  |    6 +++---
- .../indic/script-bengali/misc/misc.txt                    |    1 +
+ src/hb-ot-shape-complex-indic.cc                                   |
+ 6 +++---
+ .../texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt   | 1 +
  2 files changed, 4 insertions(+), 3 deletions(-)
 
 commit 559f70667891a3ceeffb36f40de38a4f85868945
  2 files changed, 4 insertions(+), 3 deletions(-)
 
 commit 559f70667891a3ceeffb36f40de38a4f85868945
@@ -6818,8 +18295,8 @@ Date:    Mon Jul 16 22:43:17 2012 -0400
     Fixes issue reported by Khaled Hosny with his Hussaini Nastaleeq font
     and sequences like those added in the previous commit.
 
     Fixes issue reported by Khaled Hosny with his Hussaini Nastaleeq font
     and sequences like those added in the previous commit.
 
- src/hb-ot-layout.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6de103547e4a7fb34c833861713ea373cd912261
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6de103547e4a7fb34c833861713ea373cd912261
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6829,9 +18306,10 @@ Date:   Mon Jul 16 22:46:06 2012 -0400
 
     Expose a bug with Khaled's Hussaini Nastaleeq font.
 
 
     Expose a bug with Khaled's Hussaini Nastaleeq font.
 
- .../script-arabic/misc/diacritics/MANIFEST        |    1 +
- .../misc/diacritics/mark-skipping.txt             |   10 ++++++++++
- 2 files changed, 11 insertions(+), 0 deletions(-)
+ .../shaper-arabic/script-arabic/misc/diacritics/MANIFEST      |  1 +
+ .../script-arabic/misc/diacritics/mark-skipping.txt           |
+ 10 ++++++++++
+ 2 files changed, 11 insertions(+)
 
 commit ad4494759fa8bfd2497800c24fa414075ed1aa61
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ad4494759fa8bfd2497800c24fa414075ed1aa61
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6839,8 +18317,8 @@ Date:    Mon Jul 16 22:40:21 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit af92b4cc90e4184d5bdd8037c551ed482700114f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit af92b4cc90e4184d5bdd8037c551ed482700114f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6856,8 +18334,8 @@ Date:    Mon Jul 16 20:31:24 2012 -0400
     Fixes some 10% of the Khmer failures.  Remains under 3% (excluding
     dotted-circle ones).
 
     Fixes some 10% of the Khmer failures.  Remains under 3% (excluding
     dotted-circle ones).
 
- src/hb-ot-shape-complex-indic.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit d96838ef951ce6170eb2dc576ebcba2262cf7008
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d96838ef951ce6170eb2dc576ebcba2262cf7008
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6867,12 +18345,12 @@ Date:  Mon Jul 16 20:26:57 2012 -0400
 
     In a new callback...  Currently unused by all complex shapers.
 
 
     In a new callback...  Currently unused by all complex shapers.
 
- src/hb-ot-shape-complex-arabic.cc  |   6 ++++++
- src/hb-ot-shape-complex-indic.cc   |   6 ++++++
- src/hb-ot-shape-complex-misc.cc    |  18 ++++++++++++++++++
- src/hb-ot-shape-complex-private.hh |  30 ++++++++++++++++++++++++++++++
- src/hb-ot-shape.cc                |    2 ++
- 5 files changed, 62 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc  |  6 ++++++
+ src/hb-ot-shape-complex-indic.cc   |  6 ++++++
+ src/hb-ot-shape-complex-misc.cc    | 18 ++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh | 30 ++++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc                |  2 ++
+ 5 files changed, 62 insertions(+)
 
 commit df50b8474094f0563ccfdae12c4425a51b72add6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit df50b8474094f0563ccfdae12c4425a51b72add6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6885,8 +18363,8 @@ Date:    Mon Jul 16 19:56:29 2012 -0400
 
     Fixes another percent of Khmer failures.  Down to under 3%!
 
 
     Fixes another percent of Khmer failures.  Down to under 3%!
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 8e7b5882fb4c1921c9d030d354a9b998115cdb8c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8e7b5882fb4c1921c9d030d354a9b998115cdb8c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6899,9 +18377,9 @@ Date:    Mon Jul 16 17:04:46 2012 -0400
     Fixes another percent in the Khmer failures.  About three more
     to go...
 
     Fixes another percent in the Khmer failures.  About three more
     to go...
 
- src/hb-ot-shape-complex-indic.cc |   84
- +++++++++++++++++++++-----------------
- 1 files changed, 46 insertions(+), 38 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 84
+ ++++++++++++++++++++++------------------
+ 1 file changed, 46 insertions(+), 38 deletions(-)
 
 commit 7d09c98a1fff97127e48eae48d380dc9fcff288e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7d09c98a1fff97127e48eae48d380dc9fcff288e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6911,9 +18389,9 @@ Date:    Mon Jul 16 16:45:22 2012 -0400
 
     Fixes another 6% of the Khmer failures.
 
 
     Fixes another 6% of the Khmer failures.
 
- src/hb-ot-shape-complex-indic-machine.rl |    3 ++-
- src/hb-ot-shape-complex-indic-private.hh |    5 +++--
- src/hb-ot-shape-complex-indic.cc        |    2 ++
+ src/hb-ot-shape-complex-indic-machine.rl | 3 ++-
+ src/hb-ot-shape-complex-indic-private.hh | 5 +++--
+ src/hb-ot-shape-complex-indic.cc        | 2 ++
  3 files changed, 7 insertions(+), 3 deletions(-)
 
 commit 60da763dfac96a7931d6e6bdef8b9973bd5209ab
  3 files changed, 7 insertions(+), 3 deletions(-)
 
 commit 60da763dfac96a7931d6e6bdef8b9973bd5209ab
@@ -6924,8 +18402,8 @@ Date:    Mon Jul 16 16:13:32 2012 -0400
 
     Brings down Khmer failures with Daun Penh font from 36% to 20%.
 
 
     Brings down Khmer failures with Daun Penh font from 36% to 20%.
 
- src/hb-ot-layout-gsubgpos-private.hh |   20 +++++++++++++-------
- 1 files changed, 13 insertions(+), 7 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
 
 commit fcdc5f1c8849a7f38d9f34f64d60c6d95d7501f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fcdc5f1c8849a7f38d9f34f64d60c6d95d7501f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6935,8 +18413,8 @@ Date:    Mon Jul 16 15:52:54 2012 -0400
 
     Khmer failures down from 58% to 36%.
 
 
     Khmer failures down from 58% to 36%.
 
- src/hb-ot-shape-complex-indic-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 78818124b17691ec2c647142fdb9ae743aa03dee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 78818124b17691ec2c647142fdb9ae743aa03dee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6946,9 +18424,9 @@ Date:    Mon Jul 16 15:49:08 2012 -0400
 
     Brings down Malayalam failures from 14% down to 3%.
 
 
     Brings down Malayalam failures from 14% down to 3%.
 
- src/hb-ot-shape-complex-indic.cc |   42
- ++++++++++++++++++++++++++-----------
- 1 files changed, 29 insertions(+), 13 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 42
+ +++++++++++++++++++++++++++-------------
+ 1 file changed, 29 insertions(+), 13 deletions(-)
 
 commit 1a1dbe9a2787f226f3e43063da8eb6633438b0a0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1a1dbe9a2787f226f3e43063da8eb6633438b0a0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6956,8 +18434,8 @@ Date:    Mon Jul 16 15:40:33 2012 -0400
 
     [Indic] Rename
 
 
     [Indic] Rename
 
- src/hb-ot-shape-complex-indic.cc |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 46e645ec4b59f0a278347be11f40c7df700d5bb6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46e645ec4b59f0a278347be11f40c7df700d5bb6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6965,8 +18443,8 @@ Date:    Mon Jul 16 15:30:05 2012 -0400
 
     [Indic] Start implementing pre-base reordering
 
 
     [Indic] Start implementing pre-base reordering
 
- src/hb-ot-shape-complex-indic.cc |   33 ++++++++++++++++++---------------
- 1 files changed, 18 insertions(+), 15 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
 
 commit 921ce5b17daf06af8e17989a3e335b9f5df20483
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 921ce5b17daf06af8e17989a3e335b9f5df20483
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6976,8 +18454,8 @@ Date:    Mon Jul 16 15:26:56 2012 -0400
 
     No semantic change.
 
 
     No semantic change.
 
- src/hb-ot-shape-complex-indic.cc |   26 +++++++++++++-------------
- 1 files changed, 13 insertions(+), 13 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
 
 commit b504e060f008e95b1ba36c06600c9fea4f5d4808
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b504e060f008e95b1ba36c06600c9fea4f5d4808
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6987,8 +18465,8 @@ Date:    Mon Jul 16 15:21:12 2012 -0400
 
     Almost...
 
 
     Almost...
 
- src/hb-ot-shape-complex-indic.cc |    8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 commit 17d7de91d76406d3e92db37d9eef2fc615f06e68
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 17d7de91d76406d3e92db37d9eef2fc615f06e68
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -6998,8 +18476,8 @@ Date:    Mon Jul 16 15:20:15 2012 -0400
 
     No reordering yet.
 
 
     No reordering yet.
 
- src/hb-ot-shape-complex-indic.cc |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit 362d3db8d3527d0fef260a17d2466e92a4a25425
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 362d3db8d3527d0fef260a17d2466e92a4a25425
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7010,8 +18488,8 @@ Date:    Mon Jul 16 15:15:28 2012 -0400
     Should not be any semantic change. In preparation for implementing
     pre-base reordering Ra.
 
     Should not be any semantic change. In preparation for implementing
     pre-base reordering Ra.
 
- src/hb-ot-shape-complex-indic.cc |    8 +-------
- 1 files changed, 1 insertions(+), 7 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
 
 commit 70fe77bb9a25922bd34f206826d8731d901fb451
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 70fe77bb9a25922bd34f206826d8731d901fb451
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7019,9 +18497,9 @@ Date:    Mon Jul 16 14:52:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |   44
- +++++++++++++++++++-------------------
- 1 files changed, 22 insertions(+), 22 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 44
+ ++++++++++++++++++++--------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
 
 commit 2f903215c5da2330a37abe489a3f45f7c3fd5a09
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f903215c5da2330a37abe489a3f45f7c3fd5a09
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7029,8 +18507,8 @@ Date:    Mon Jul 16 13:54:43 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a3e04bee2c2fa648759a87e460db6b4f1b685586
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a3e04bee2c2fa648759a87e460db6b4f1b685586
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7038,8 +18516,8 @@ Date:    Mon Jul 16 13:47:19 2012 -0400
 
     [Indic] Reorder virama only for old Indic spec
 
 
     [Indic] Reorder virama only for old Indic spec
 
- src/hb-ot-shape-complex-indic.cc |   15 +++++++++++++--
- 1 files changed, 13 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
 
 commit 0de771b72da6b342b015e3556190821547a4011d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0de771b72da6b342b015e3556190821547a4011d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7047,8 +18525,8 @@ Date:    Mon Jul 16 13:39:36 2012 -0400
 
     [Indic] Categorize Khmer consonants
 
 
     [Indic] Categorize Khmer consonants
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit d487fff266258eb1af056e9704cfb09d04251ddc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d487fff266258eb1af056e9704cfb09d04251ddc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7060,8 +18538,8 @@ Date:    Mon Jul 16 13:25:17 2012 -0400
     refactored properly later to move the complex logic into complex
     shapers.
 
     refactored properly later to move the complex logic into complex
     shapers.
 
- src/hb-unicode.cc |   22 ++++++++++++++++++++++
- 1 files changed, 22 insertions(+), 0 deletions(-)
+ src/hb-unicode.cc | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
 
 commit 8aa801a6fd1a737fa20b851edf7528bdd6635b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8aa801a6fd1a737fa20b851edf7528bdd6635b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7073,8 +18551,8 @@ Date:    Mon Jul 16 13:24:26 2012 -0400
     that the second half takes the codepoint of the whole matra.  So,
     position them where the second half is supposed to end up.
 
     that the second half takes the codepoint of the whole matra.  So,
     position them where the second half is supposed to end up.
 
- src/hb-ot-shape-complex-indic-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 1feb8345a5fd92297eb6796e6dce633bafa0c76e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1feb8345a5fd92297eb6796e6dce633bafa0c76e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7086,8 +18564,8 @@ Date:    Mon Jul 16 13:23:40 2012 -0400
     fonts
     shipped with Windows, namely, Daun Penh.
 
     fonts
     shipped with Windows, namely, Daun Penh.
 
- src/hb-ot-layout-gsub-table.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 29f106d7fba25e1464debd3a4831a7380d75c4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 29f106d7fba25e1464debd3a4831a7380d75c4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7095,8 +18573,8 @@ Date:    Mon Jul 16 12:05:35 2012 -0400
 
     [Indic] Apply Above Forms
 
 
     [Indic] Apply Above Forms
 
- src/hb-ot-shape-complex-indic.cc |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit fa2bd9fb63d83b657373764d4b657084d8327fc9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fa2bd9fb63d83b657373764d4b657084d8327fc9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7104,8 +18582,8 @@ Date:    Sat Jul 14 12:15:54 2012 -0400
 
     Further simplify atomic ops on Visual Studio
 
 
     Further simplify atomic ops on Visual Studio
 
- src/hb-atomic-private.hh |    5 -----
- 1 files changed, 0 insertions(+), 5 deletions(-)
+ src/hb-atomic-private.hh | 5 -----
+ 1 file changed, 5 deletions(-)
 
 commit 0a492357016bc9a614d2a726f2006c10af68ca58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0a492357016bc9a614d2a726f2006c10af68ca58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7113,8 +18591,8 @@ Date:    Fri Jul 13 13:20:49 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-warning.cc |   29 +++++------------------------
- 1 files changed, 5 insertions(+), 24 deletions(-)
+ src/hb-warning.cc | 29 +++++------------------------
+ 1 file changed, 5 insertions(+), 24 deletions(-)
 
 commit 11c4ad439ef2b39a840f397a693b1ba643f52c21
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 11c4ad439ef2b39a840f397a693b1ba643f52c21
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7122,9 +18600,9 @@ Date:    Fri Jul 13 11:29:31 2012 -0400
 
     Add -Wcast-align
 
 
     Add -Wcast-align
 
- configure.ac   |    3 +++
- src/Makefile.am |    2 +-
- 2 files changed, 4 insertions(+), 1 deletions(-)
+ configure.ac   | 3 +++
+ src/Makefile.am | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
 
 commit a98d0ab18624501ee60551304f2715361ac643da
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a98d0ab18624501ee60551304f2715361ac643da
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7136,9 +18614,9 @@ Date:    Fri Jul 13 10:19:10 2012 -0400
     desired,
     and use these to make only declared symbols public.
 
     desired,
     and use these to make only declared symbols public.
 
- src/check-c-linkage-decls.sh            |   10 +++++++++-
- src/hb-fallback-shape-private.hh        |    6 ------
- src/hb-ot-shape-complex-indic-machine.rl |    4 ----
+ src/check-c-linkage-decls.sh            | 10 +++++++++-
+ src/hb-fallback-shape-private.hh        |  6 ------
+ src/hb-ot-shape-complex-indic-machine.rl |  4 ----
  3 files changed, 9 insertions(+), 11 deletions(-)
 
 commit 5c5bc96216c9ad58243eb3ed27b253e237f08ebe
  3 files changed, 9 insertions(+), 11 deletions(-)
 
 commit 5c5bc96216c9ad58243eb3ed27b253e237f08ebe
@@ -7147,8 +18625,8 @@ Date:    Fri Jul 13 10:15:37 2012 -0400
 
     Allow overriding HB_BEGIN_DECLS / HB_END_DECLS
 
 
     Allow overriding HB_BEGIN_DECLS / HB_END_DECLS
 
- src/hb-common.h |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-common.h | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit ec5f5f0f8a1d5b3ff98452175bb4450a59897620
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec5f5f0f8a1d5b3ff98452175bb4450a59897620
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7156,8 +18634,8 @@ Date:    Fri Jul 13 10:00:42 2012 -0400
 
     Don't export inline methods
 
 
     Don't export inline methods
 
- configure.ac |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 50a4e78b530563917eb606ff3b96dcc9eed5b3ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 50a4e78b530563917eb606ff3b96dcc9eed5b3ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7169,8 +18647,8 @@ Date:    Fri Jul 13 09:48:39 2012 -0400
     already.
     Fix coming.
 
     already.
     Fix coming.
 
- src/check-internal-symbols.sh |    8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ src/check-internal-symbols.sh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 commit b5aeb95afeb13a66177caada9f5d5ad4cddbd35f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b5aeb95afeb13a66177caada9f5d5ad4cddbd35f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7178,8 +18656,8 @@ Date:    Fri Jul 13 09:45:54 2012 -0400
 
     Make hb_in_range() static
 
 
     Make hb_in_range() static
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 271c8f89075607c689938b4f5e60323d9a1acd70
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 271c8f89075607c689938b4f5e60323d9a1acd70
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7187,8 +18665,8 @@ Date:    Fri Jul 13 09:32:30 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ft.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ft.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 391f1ff5d894b60bfe0f606be436ffe7e43f7455
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 391f1ff5d894b60bfe0f606be436ffe7e43f7455
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7196,8 +18674,8 @@ Date:    Fri Jul 13 09:04:07 2012 -0400
 
     Fix _InterlockedCompareExchangePointer on x86
 
 
     Fix _InterlockedCompareExchangePointer on x86
 
- src/hb-atomic-private.hh |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-atomic-private.hh | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 2023e2b54d91924dddfd228ffdbb46021135b068
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2023e2b54d91924dddfd228ffdbb46021135b068
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7210,8 +18688,8 @@ Date:    Wed Jul 11 19:00:30 2012 -0400
     FreeType makes it really hard to set size and ppem independently.
     For now, disable it.  Need to come up with a fix later.
 
     FreeType makes it really hard to set size and ppem independently.
     For now, disable it.  Need to come up with a fix later.
 
- src/hb-ft.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ft.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit cdf7444505a7ae49d20f9ba6776dea92c1fde2a6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdf7444505a7ae49d20f9ba6776dea92c1fde2a6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7219,8 +18697,8 @@ Date:    Wed Jul 11 18:52:39 2012 -0400
 
     [ft] Use unfitted kerning if x_ppem is zero
 
 
     [ft] Use unfitted kerning if x_ppem is zero
 
- src/hb-ft.cc |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ft.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 6d08c7f1b3601095f9a12630045331dd0fe75380
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6d08c7f1b3601095f9a12630045331dd0fe75380
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7232,9 +18710,9 @@ Date:    Wed Jul 11 18:01:27 2012 -0400
 
     This is work-in-progress.  Didn't mean to push it out just yet.
 
 
     This is work-in-progress.  Didn't mean to push it out just yet.
 
- src/hb-ot-layout-gpos-table.hh       |   16 ++++++----------
- src/hb-ot-layout-gsub-table.hh       |   24 ++++++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |   33
+ src/hb-ot-layout-gpos-table.hh       | 16 ++++++----------
+ src/hb-ot-layout-gsub-table.hh       | 24 ++++++++++--------------
+ src/hb-ot-layout-gsubgpos-private.hh | 33
  ++-------------------------------
  3 files changed, 18 insertions(+), 55 deletions(-)
 
  ++-------------------------------
  3 files changed, 18 insertions(+), 55 deletions(-)
 
@@ -7249,8 +18727,8 @@ Date:    Wed Jul 11 16:44:51 2012 -0400
     will hide
     those symbols.
 
     will hide
     those symbols.
 
- src/hb-uniscribe.cc |   2 +-
- src/hb-uniscribe.h  |   2 +-
+ src/hb-uniscribe.cc | 2 +-
+ src/hb-uniscribe.h  | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 9a5b421a64db1bb23d5c6ebbc3bf3f3a5513dc36
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 9a5b421a64db1bb23d5c6ebbc3bf3f3a5513dc36
@@ -7259,8 +18737,8 @@ Date:    Wed Jul 11 16:35:04 2012 -0400
 
     Fix build with no Unicode funcs implementations provided
 
 
     Fix build with no Unicode funcs implementations provided
 
- src/hb-unicode-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-unicode-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 6efe1eca660135096f05987ac0ef9b635de6cdfd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6efe1eca660135096f05987ac0ef9b635de6cdfd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7268,8 +18746,8 @@ Date:    Wed Jul 11 15:30:08 2012 -0400
 
     Update git.mk to upstream
 
 
     Update git.mk to upstream
 
- git.mk |   58 ++++++++++++++++++++++++++++++++++++++--------------------
- 1 files changed, 38 insertions(+), 20 deletions(-)
+ git.mk | 58 ++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 38 insertions(+), 20 deletions(-)
 
 commit 727135f3a9938c1ebd5b9f5015a46c7ccc8573c5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 727135f3a9938c1ebd5b9f5015a46c7ccc8573c5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7277,9 +18755,9 @@ Date:    Tue Jul 3 22:15:35 2012 -0400
 
     Towards templatizing common Lookup types
 
 
     Towards templatizing common Lookup types
 
- src/hb-ot-layout-gpos-table.hh       |   16 ++++++++++------
- src/hb-ot-layout-gsub-table.hh       |   24 ++++++++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |   33
+ src/hb-ot-layout-gpos-table.hh       | 16 ++++++++++------
+ src/hb-ot-layout-gsub-table.hh       | 24 ++++++++++++++----------
+ src/hb-ot-layout-gsubgpos-private.hh | 33
  +++++++++++++++++++++++++++++++--
  3 files changed, 55 insertions(+), 18 deletions(-)
 
  +++++++++++++++++++++++++++++++--
  3 files changed, 55 insertions(+), 18 deletions(-)
 
@@ -7289,12 +18767,15 @@ Date:  Tue Jul 3 11:38:46 2012 -0400
 
     Minor
 
 
     Minor
 
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   2 +-
- .../texts/in-tree/shaper-thai/misc/MANIFEST       |    1 -
- .../texts/in-tree/shaper-thai/misc/misc.txt       |    6 ------
- .../texts/in-tree/shaper-thai/script-thai/MANIFEST |   1 +
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |   1 +
- .../shaper-thai/script-thai/misc/sara-am.txt      |    4 ++++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST                    |
+ 2 +-
+ test/shaping/texts/in-tree/shaper-thai/misc/MANIFEST               | 1 -
+ test/shaping/texts/in-tree/shaper-thai/misc/misc.txt               |
+ 6 ------
+ test/shaping/texts/in-tree/shaper-thai/script-thai/MANIFEST        | 1 +
+ test/shaping/texts/in-tree/shaper-thai/script-thai/misc/MANIFEST    | 1 +
+ test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt |
+ 4 ++++
  6 files changed, 7 insertions(+), 8 deletions(-)
 
 commit aa116582e69d18777448e7993078e5d6335ddfed
  6 files changed, 7 insertions(+), 8 deletions(-)
 
 commit aa116582e69d18777448e7993078e5d6335ddfed
@@ -7303,8 +18784,9 @@ Date:    Fri Jun 29 10:50:12 2012 -0400
 
     Minor
 
 
     Minor
 
- .../indic/script-malayalam/misc/misc.txt          |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 1f13c7185f02ea18d4fadd2ea8ad444bea863c39
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1f13c7185f02ea18d4fadd2ea8ad444bea863c39
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7312,8 +18794,8 @@ Date:    Wed Jun 27 10:07:27 2012 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 12f5c0a222a2f0aebe63c0d367937a0ff985474a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 12f5c0a222a2f0aebe63c0d367937a0ff985474a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7321,8 +18803,8 @@ Date:    Tue Jun 26 11:16:13 2012 -0400
 
     Fix check for Intel atomic ops
 
 
     Fix check for Intel atomic ops
 
- configure.ac            |    9 +++++----
- src/hb-atomic-private.hh |    2 +-
+ configure.ac            | 9 +++++----
+ src/hb-atomic-private.hh | 2 +-
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 6932a41fb61ffc2901c260587b1e98ed9c2a7ea1
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit 6932a41fb61ffc2901c260587b1e98ed9c2a7ea1
@@ -7333,8 +18815,8 @@ Date:    Tue Jun 26 10:46:31 2012 -0400
 
     https://bugs.freedesktop.org/show_bug.cgi?id=50970
 
 
     https://bugs.freedesktop.org/show_bug.cgi?id=50970
 
- src/hb-private.hh |   17 ++++++++++++-----
- 1 files changed, 12 insertions(+), 5 deletions(-)
+ src/hb-private.hh | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
 
 commit 8c0ea7bcb4409aaf8c96ad641f2db30003228ad0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8c0ea7bcb4409aaf8c96ad641f2db30003228ad0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7344,8 +18826,8 @@ Date:    Sun Jun 24 13:20:56 2012 -0400
 
     Until I figure out the build issues.  Sigh...
 
 
     Until I figure out the build issues.  Sigh...
 
- configure.ac   |    2 +-
- src/Makefile.am |   42 +++++++++++++++++++++---------------------
+ configure.ac   |  2 +-
+ src/Makefile.am | 42 +++++++++++++++++++++---------------------
  2 files changed, 22 insertions(+), 22 deletions(-)
 
 commit 8c5f5e6f5ec2b6a219fbdfc955f6299325a0adde
  2 files changed, 22 insertions(+), 22 deletions(-)
 
 commit 8c5f5e6f5ec2b6a219fbdfc955f6299325a0adde
@@ -7354,8 +18836,8 @@ Date:    Sun Jun 17 14:58:59 2012 -0400
 
     Minor
 
 
     Minor
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 49f8e0cd9a5493ae26857c43bac0711cdf47c80d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 49f8e0cd9a5493ae26857c43bac0711cdf47c80d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7363,8 +18845,8 @@ Date:    Sat Jun 16 15:40:03 2012 -0400
 
     GStaticMutex is deprecated
 
 
     GStaticMutex is deprecated
 
- src/hb-mutex-private.hh |    9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-mutex-private.hh | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 5e113a4b7921ced6af2d53460a7a2f1d0185c02a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5e113a4b7921ced6af2d53460a7a2f1d0185c02a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7372,8 +18854,8 @@ Date:    Sat Jun 16 15:26:13 2012 -0400
 
     g_thread_init() is deprecated
 
 
     g_thread_init() is deprecated
 
- test/api/hb-test.h |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ test/api/hb-test.h | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 1bc1cb3603167f5da309336f7018c8b0608ac104
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1bc1cb3603167f5da309336f7018c8b0608ac104
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7381,20 +18863,20 @@ Date:  Sat Jun 16 15:21:55 2012 -0400
 
     Make source more digestable for gobject-introspection
 
 
     Make source more digestable for gobject-introspection
 
- src/hb-blob.cc                   |    2 +-
- src/hb-blob.h            |    2 +-
- src/hb-buffer-private.hh  |   4 ++--
- src/hb-buffer.h          |    6 +++---
- src/hb-common.cc         |    2 +-
- src/hb-common.h          |    4 ++--
- src/hb-font-private.hh    |   6 +++---
- src/hb-font.cc                   |    2 +-
- src/hb-font.h            |    8 ++++----
- src/hb-set-private.hh    |    2 +-
- src/hb-set.h             |    2 +-
- src/hb-shape.h                   |    2 +-
- src/hb-unicode-private.hh |   2 +-
- src/hb-unicode.h         |    2 +-
+ src/hb-blob.cc                   | 2 +-
+ src/hb-blob.h            | 2 +-
+ src/hb-buffer-private.hh  | 4 ++--
+ src/hb-buffer.h          | 6 +++---
+ src/hb-common.cc         | 2 +-
+ src/hb-common.h          | 4 ++--
+ src/hb-font-private.hh    | 6 +++---
+ src/hb-font.cc                   | 2 +-
+ src/hb-font.h            | 8 ++++----
+ src/hb-set-private.hh    | 2 +-
+ src/hb-set.h             | 2 +-
+ src/hb-shape.h                   | 2 +-
+ src/hb-unicode-private.hh | 2 +-
+ src/hb-unicode.h         | 2 +-
  14 files changed, 23 insertions(+), 23 deletions(-)
 
 commit 84d781e54cc75c81a06ba43fd7b1a74b8c7d9591
  14 files changed, 23 insertions(+), 23 deletions(-)
 
 commit 84d781e54cc75c81a06ba43fd7b1a74b8c7d9591
@@ -7403,8 +18885,8 @@ Date:    Sat Jun 16 15:21:41 2012 -0400
 
     Flesh out gobject-introspection stuff a bit
 
 
     Flesh out gobject-introspection stuff a bit
 
- configure.ac   |    1 +
- src/Makefile.am |   23 +++++++++++++++++++++--
+ configure.ac   |  1 +
+ src/Makefile.am | 23 +++++++++++++++++++++--
  2 files changed, 22 insertions(+), 2 deletions(-)
 
 commit 49ee12ccd00870d4976339dc546c74eaf08a8fc0
  2 files changed, 22 insertions(+), 2 deletions(-)
 
 commit 49ee12ccd00870d4976339dc546c74eaf08a8fc0
@@ -7413,8 +18895,8 @@ Date:    Sat Jun 16 14:53:51 2012 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit d3c8115d1ad09404b8970b98e6b5ab74510a35f6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d3c8115d1ad09404b8970b98e6b5ab74510a35f6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7422,8 +18904,8 @@ Date:    Tue Jun 12 09:52:57 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 2cf301968cb8c1150cead0ab909457cdd3ee2d01
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2cf301968cb8c1150cead0ab909457cdd3ee2d01
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7431,8 +18913,8 @@ Date:    Sat Jun 9 14:58:01 2012 -0400
 
     Add hb_object_lock/unlock()
 
 
     Add hb_object_lock/unlock()
 
- src/hb-object-private.hh |   32 ++++++++++++++++++++++++++------
- 1 files changed, 26 insertions(+), 6 deletions(-)
+ src/hb-object-private.hh | 32 ++++++++++++++++++++++++++------
+ 1 file changed, 26 insertions(+), 6 deletions(-)
 
 commit 6a5661f1e69c937083e8d976cb12429b99180d54
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6a5661f1e69c937083e8d976cb12429b99180d54
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7440,8 +18922,8 @@ Date:    Sat Jun 9 03:26:16 2012 -0400
 
     Ugh
 
 
     Ugh
 
- util/shape-consumer.hh |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ util/shape-consumer.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit f211d5c291b4c947cfd732e873627567173057e4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f211d5c291b4c947cfd732e873627567173057e4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7449,9 +18931,9 @@ Date:    Sat Jun 9 03:11:22 2012 -0400
 
     More Oops! Fix fast-path with sub-type==0
 
 
     More Oops! Fix fast-path with sub-type==0
 
- src/hb-ot-layout-gpos-table.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh |    2 +-
- util/shape-consumer.hh                |    2 ++
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ util/shape-consumer.hh                | 2 ++
  3 files changed, 4 insertions(+), 2 deletions(-)
 
 commit b1de6aa1f33b228afe231c8209aef90a5fa1ee5d
  3 files changed, 4 insertions(+), 2 deletions(-)
 
 commit b1de6aa1f33b228afe231c8209aef90a5fa1ee5d
@@ -7460,8 +18942,8 @@ Date:    Sat Jun 9 03:07:59 2012 -0400
 
     Oops!
 
 
     Oops!
 
- src/hb-ot-layout-gpos-table.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh |    2 +-
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit b12e2549cbcd4f1ef46e66c75533686ee560f59b
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit b12e2549cbcd4f1ef46e66c75533686ee560f59b
@@ -7470,8 +18952,8 @@ Date:    Sat Jun 9 03:05:20 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit faf0f20253d954cc4cfa4c967ece7573a5ddae3b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit faf0f20253d954cc4cfa4c967ece7573a5ddae3b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7479,8 +18961,8 @@ Date:    Sat Jun 9 03:02:36 2012 -0400
 
     Add sanitize() logic for fast-paths
 
 
     Add sanitize() logic for fast-paths
 
- src/hb-ot-layout-gpos-table.hh |   15 ++++++++++++---
- src/hb-ot-layout-gsub-table.hh |   20 ++++++++++++++------
+ src/hb-ot-layout-gpos-table.hh | 15 ++++++++++++---
+ src/hb-ot-layout-gsub-table.hh | 20 ++++++++++++++------
  2 files changed, 26 insertions(+), 9 deletions(-)
 
 commit 4e766ff28d1fb831ded20666799787478129c07c
  2 files changed, 26 insertions(+), 9 deletions(-)
 
 commit 4e766ff28d1fb831ded20666799787478129c07c
@@ -7491,8 +18973,8 @@ Date:    Sat Jun 9 02:53:57 2012 -0400
 
     Shaves another 3% for DejaVu Sans long Latin strings.
 
 
     Shaves another 3% for DejaVu Sans long Latin strings.
 
- src/hb-ot-layout-gpos-table.hh |   16 ++++++++++++++--
- 1 files changed, 14 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-table.hh | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
 
 commit 993c51915f503f74ee00eee646b67bf2e3f73596
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 993c51915f503f74ee00eee646b67bf2e3f73596
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7504,8 +18986,8 @@ Date:    Sat Jun 9 02:48:16 2012 -0400
     Now, DejaVu is very ChainContext-intensive, but it's also a very
     popular font!
 
     Now, DejaVu is very ChainContext-intensive, but it's also a very
     popular font!
 
- src/hb-ot-layout-gsub-table.hh |   18 ++++++++++++++++--
- 1 files changed, 16 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
 
 commit f19e0b0099ec73b8fedccacff4902403f5eabc42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f19e0b0099ec73b8fedccacff4902403f5eabc42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7515,8 +18997,8 @@ Date:    Sat Jun 9 02:26:57 2012 -0400
 
     Makes more sense, optimization-wise.
 
 
     Makes more sense, optimization-wise.
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 67bb9e8cea49a44be6996515e1c7d8cdc95a77e6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 67bb9e8cea49a44be6996515e1c7d8cdc95a77e6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7524,9 +19006,9 @@ Date:    Sat Jun 9 02:02:46 2012 -0400
 
     Add set add_coverage() to Coverage()
 
 
     Add set add_coverage() to Coverage()
 
- src/hb-ot-layout-common-private.hh |  24 ++++++++++++++++++++++++
- src/hb-set-private.hh             |    5 +++++
- 2 files changed, 29 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-common-private.hh | 24 ++++++++++++++++++++++++
+ src/hb-set-private.hh             |  5 +++++
+ 2 files changed, 29 insertions(+)
 
 commit 4952f0aa5b2f4368d9e3418252e0a1b9294cd5ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4952f0aa5b2f4368d9e3418252e0a1b9294cd5ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7534,8 +19016,8 @@ Date:    Sat Jun 9 01:39:11 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit ad6a6f22401d6256e34521d0f52e91348c5ed4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ad6a6f22401d6256e34521d0f52e91348c5ed4c9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7543,8 +19025,8 @@ Date:    Sat Jun 9 01:21:02 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 46617a42133fbab151de4111a74dcbdc4e769c74
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46617a42133fbab151de4111a74dcbdc4e769c74
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7552,8 +19034,8 @@ Date:    Sat Jun 9 01:18:58 2012 -0400
 
     Fix cache implementation
 
 
     Fix cache implementation
 
- src/hb-cache-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-cache-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit ce47613889aa3ff9b0067d3e51ba63cfdb139adb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ce47613889aa3ff9b0067d3e51ba63cfdb139adb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7563,9 +19045,9 @@ Date:    Sat Jun 9 01:10:26 2012 -0400
 
     I know...
 
 
     I know...
 
- src/hb-ot-layout-gsubgpos-private.hh |    3 +-
- src/hb-ot-layout.cc                 |   46
- ++++++++++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh |  3 ++-
+ src/hb-ot-layout.cc                 | 46
+ ++++++++++++++++++++++--------------
  2 files changed, 30 insertions(+), 19 deletions(-)
 
 commit 70416de298b811ab6be53a1c67f0d2531d99cd46
  2 files changed, 30 insertions(+), 19 deletions(-)
 
 commit 70416de298b811ab6be53a1c67f0d2531d99cd46
@@ -7574,8 +19056,8 @@ Date:    Sat Jun 9 00:56:41 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 99159e52a3c9d5ae6c0fbdec64e7ed684fa70b61
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 99159e52a3c9d5ae6c0fbdec64e7ed684fa70b61
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7585,8 +19067,8 @@ Date:    Sat Jun 9 00:50:40 2012 -0400
 
     I see about 8% speedup with long strings with DejaVu Sans.
 
 
     I see about 8% speedup with long strings with DejaVu Sans.
 
- src/hb-open-type-private.hh |  19 ++++++++++++++-----
- 1 files changed, 14 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
 
 commit caf0412690542e58e23246dccc4b2fb83bd652ec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit caf0412690542e58e23246dccc4b2fb83bd652ec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7594,8 +19076,8 @@ Date:    Sat Jun 9 00:26:32 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0f8fea71a66b1e01ee4398967db464393f478d42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0f8fea71a66b1e01ee4398967db464393f478d42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7603,9 +19085,9 @@ Date:    Sat Jun 9 00:24:38 2012 -0400
 
     Minor.  Hide _hb_ot_layout_get_glyph_property()
 
 
     Minor.  Hide _hb_ot_layout_get_glyph_property()
 
- src/hb-ot-layout-private.hh |   4 ----
- src/hb-ot-layout.cc        |    2 +-
- 2 files changed, 1 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-private.hh | 4 ----
+ src/hb-ot-layout.cc        | 2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
 
 commit 44b8ee0c90d7b1dd91e5848114141e3186534a0f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 44b8ee0c90d7b1dd91e5848114141e3186534a0f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7613,8 +19095,8 @@ Date:    Sat Jun 9 00:23:24 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gpos-table.hh |    3 ++-
- src/hb-ot-layout.cc           |    2 +-
+ src/hb-ot-layout-gpos-table.hh | 3 ++-
+ src/hb-ot-layout.cc           | 2 +-
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 7b84c536c10ab90ed96a033d88e9ad232d46c5b8
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 7b84c536c10ab90ed96a033d88e9ad232d46c5b8
@@ -7630,9 +19112,9 @@ Date:    Fri Jun 8 22:04:23 2012 -0400
 
     with Arabic Typesetting.  Originally reported by Khaled Hosny.
 
 
     with Arabic Typesetting.  Originally reported by Khaled Hosny.
 
- src/hb-ot-layout-gpos-table.hh       |    7 ++++++-
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++++++
- 2 files changed, 14 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-table.hh       | 7 ++++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++++++
+ 2 files changed, 14 insertions(+), 1 deletion(-)
 
 commit ec57e0c5655ced5109c4638bf802772d336448fd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec57e0c5655ced5109c4638bf802772d336448fd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7643,8 +19125,8 @@ Date:    Fri Jun 8 21:47:23 2012 -0400
     To be used for correct mark attachment to first component of a
     MultipleSubst output.  That's what Uniscribe does.
 
     To be used for correct mark attachment to first component of a
     MultipleSubst output.  That's what Uniscribe does.
 
- src/hb-ot-layout-gsub-table.hh |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit e085fcf7ca302eb7802a032197c022819e7e7074
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e085fcf7ca302eb7802a032197c022819e7e7074
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7652,10 +19134,10 @@ Date:  Fri Jun 8 21:45:00 2012 -0400
 
     Remove unused buffer->replace_glyphs_be16
 
 
     Remove unused buffer->replace_glyphs_be16
 
- src/hb-buffer-private.hh            |    3 ---
- src/hb-buffer.cc                    |   23 -----------------------
- src/hb-ot-layout-gsubgpos-private.hh |    8 --------
- 3 files changed, 0 insertions(+), 34 deletions(-)
+ src/hb-buffer-private.hh            |  3 ---
+ src/hb-buffer.cc                    | 23 -----------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  8 --------
+ 3 files changed, 34 deletions(-)
 
 commit 3ec77d6ae0510dc2c0ec64382c4948bc6e109844
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ec77d6ae0510dc2c0ec64382c4948bc6e109844
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7663,8 +19145,8 @@ Date:    Fri Jun 8 21:44:06 2012 -0400
 
     Don't use replace_glyphs_be for MultipleSubst
 
 
     Don't use replace_glyphs_be for MultipleSubst
 
- src/hb-ot-layout-gsub-table.hh       |    5 ++++-
- src/hb-ot-layout-gsubgpos-private.hh |    7 ++++++-
+ src/hb-ot-layout-gsub-table.hh       | 5 ++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 7 ++++++-
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit 4b7192125ffd295091d6b3a0bdfca7011947c2ca
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit 4b7192125ffd295091d6b3a0bdfca7011947c2ca
@@ -7673,9 +19155,9 @@ Date:    Fri Jun 8 21:41:46 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh       |    3 ++-
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++++++
- 2 files changed, 10 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh       | 3 ++-
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++++++
+ 2 files changed, 10 insertions(+), 1 deletion(-)
 
 commit 4508789f4b5e0ece5620d35598aeeb7ecbe3e3aa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4508789f4b5e0ece5620d35598aeeb7ecbe3e3aa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7683,9 +19165,9 @@ Date:    Fri Jun 8 21:32:43 2012 -0400
 
     Add test for static initializers and other C++ stuff
 
 
     Add test for static initializers and other C++ stuff
 
- src/Makefile.am          |    3 ++-
- src/check-static-inits.sh |   33 +++++++++++++++++++++++++++++++++
- 2 files changed, 35 insertions(+), 1 deletions(-)
+ src/Makefile.am          |  3 ++-
+ src/check-static-inits.sh | 33 +++++++++++++++++++++++++++++++++
+ 2 files changed, 35 insertions(+), 1 deletion(-)
 
 commit 56bd259b9ac22dd98913c8ca2e2cf7b30b632373
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 56bd259b9ac22dd98913c8ca2e2cf7b30b632373
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7693,8 +19175,8 @@ Date:    Fri Jun 8 21:29:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/check-internal-symbols.sh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/check-internal-symbols.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4538b47bf08e73e7f5cce6337df5fe154233c168
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4538b47bf08e73e7f5cce6337df5fe154233c168
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7702,8 +19184,8 @@ Date:    Fri Jun 8 21:01:45 2012 -0400
 
     Remove done TODO items
 
 
     Remove done TODO items
 
- TODO |    7 +------
- 1 files changed, 1 insertions(+), 6 deletions(-)
+ TODO | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
 
 commit bc8357ea7b4c0d7c715aae353176434fb9460205
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bc8357ea7b4c0d7c715aae353176434fb9460205
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7711,8 +19193,8 @@ Date:    Fri Jun 8 21:01:20 2012 -0400
 
     Merge clusters during normalization
 
 
     Merge clusters during normalization
 
- src/hb-ot-shape-normalize.cc |   11 +++++++----
- 1 files changed, 7 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-normalize.cc | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
 
 commit fe3dabc08df7501010564f8844bd4d11771cc6a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fe3dabc08df7501010564f8844bd4d11771cc6a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7720,8 +19202,8 @@ Date:    Fri Jun 8 20:56:05 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-buffer.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-buffer.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit e88e14421a33ca5bdfd76bc0b2f801fcb6e78911
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e88e14421a33ca5bdfd76bc0b2f801fcb6e78911
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7729,8 +19211,8 @@ Date:    Fri Jun 8 20:55:21 2012 -0400
 
     Use merge_clusters instead of open-coding
 
 
     Use merge_clusters instead of open-coding
 
- src/hb-buffer.cc |   16 ++++------------
- 1 files changed, 4 insertions(+), 12 deletions(-)
+ src/hb-buffer.cc | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
 
 commit 330a2af3ff0e12c01b3b451357b8bdc83b2e9b47
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 330a2af3ff0e12c01b3b451357b8bdc83b2e9b47
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7738,8 +19220,8 @@ Date:    Fri Jun 8 20:40:02 2012 -0400
 
     Use merge_clusters when forming Unicode clusters
 
 
     Use merge_clusters when forming Unicode clusters
 
- src/hb-ot-shape.cc |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit bd300df9adf955c1e69b3783c1c061876940fb8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd300df9adf955c1e69b3783c1c061876940fb8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7747,8 +19229,8 @@ Date:    Fri Jun 8 20:35:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-object-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e51d2b6ed1c794ac28c5610bfd01dbc9fb383633
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e51d2b6ed1c794ac28c5610bfd01dbc9fb383633
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7757,8 +19239,8 @@ Date:    Fri Jun 8 20:33:27 2012 -0400
     Extend into main buffer if extension hit end of out-buffer merging
     clusters
 
     Extend into main buffer if extension hit end of out-buffer merging
     clusters
 
- src/hb-buffer.cc               |    5 +++++
- src/hb-ot-shape-complex-misc.cc |    9 ---------
+ src/hb-buffer.cc               | 5 +++++
+ src/hb-ot-shape-complex-misc.cc | 9 ---------
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 5ced012d9f58c51d557a835593c3277e35fe3b35
  2 files changed, 5 insertions(+), 9 deletions(-)
 
 commit 5ced012d9f58c51d557a835593c3277e35fe3b35
@@ -7767,8 +19249,8 @@ Date:    Fri Jun 8 20:31:32 2012 -0400
 
     Extend end when merging clusters in out-buffer
 
 
     Extend end when merging clusters in out-buffer
 
- src/hb-buffer.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 72c0a1878313e7232d554bc226f4c6dc01418a95
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 72c0a1878313e7232d554bc226f4c6dc01418a95
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7776,8 +19258,8 @@ Date:    Fri Jun 8 20:30:03 2012 -0400
 
     Extend clusters backward in out-buffer
 
 
     Extend clusters backward in out-buffer
 
- src/hb-buffer.cc               |    8 ++++++++
- src/hb-ot-shape-complex-misc.cc |    2 --
+ src/hb-buffer.cc               | 8 ++++++++
+ src/hb-ot-shape-complex-misc.cc | 2 --
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit cd5891493df06fdb92e1ae526d29dee8df250235
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit cd5891493df06fdb92e1ae526d29dee8df250235
@@ -7786,8 +19268,8 @@ Date:    Fri Jun 8 20:27:53 2012 -0400
 
     Extend clusters backwards, into the out-buffer too
 
 
     Extend clusters backwards, into the out-buffer too
 
- src/hb-buffer.cc |    9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 77471e037122548bfc08cacea6fbb472831c34f3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 77471e037122548bfc08cacea6fbb472831c34f3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7795,8 +19277,8 @@ Date:    Fri Jun 8 20:21:02 2012 -0400
 
     Clear output buffer before calling GSUB pause functions
 
 
     Clear output buffer before calling GSUB pause functions
 
- src/hb-ot-map.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-map.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit cafa6f372721fd6b0a7c0da68b9421d3e94931bc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cafa6f372721fd6b0a7c0da68b9421d3e94931bc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7804,8 +19286,8 @@ Date:    Fri Jun 8 20:17:10 2012 -0400
 
     When merging clusters, extend the end
 
 
     When merging clusters, extend the end
 
- src/hb-buffer.cc |   20 ++++++++++++++------
- 1 files changed, 14 insertions(+), 6 deletions(-)
+ src/hb-buffer.cc | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
 
 commit 28ce5fa454b54f728044ee12a9dbe7d016783d4a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 28ce5fa454b54f728044ee12a9dbe7d016783d4a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7813,8 +19295,8 @@ Date:    Fri Jun 8 20:13:56 2012 -0400
 
     Merge clusters when ligating
 
 
     Merge clusters when ligating
 
- src/hb-ot-layout-gsub-table.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 2bb1761ccb7d300744ced6427165f4ea75ddf96c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2bb1761ccb7d300744ced6427165f4ea75ddf96c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7822,8 +19304,8 @@ Date:    Fri Jun 8 19:29:44 2012 -0400
 
     Minor, use next_glyph()
 
 
     Minor, use next_glyph()
 
- src/hb-ot-layout-gsub-table.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 5f68f8675e5ccaee91f5a90d86bc3b022b9a54e4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5f68f8675e5ccaee91f5a90d86bc3b022b9a54e4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7831,8 +19313,8 @@ Date:    Fri Jun 8 19:23:43 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 872969126756456a69bf958f3df6e56a26e57b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 872969126756456a69bf958f3df6e56a26e57b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7840,8 +19322,8 @@ Date:    Fri Jun 8 14:18:30 2012 -0400
 
     Increase Uniscribe MAX_ITEMS
 
 
     Increase Uniscribe MAX_ITEMS
 
- src/hb-uniscribe.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-uniscribe.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit dbffa4c83d29c689ee4cd8a1c53e84521028c711
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dbffa4c83d29c689ee4cd8a1c53e84521028c711
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7858,8 +19340,8 @@ Date:    Fri Jun 8 14:08:32 2012 -0400
     rewriting
     the name table with a unique family name...
 
     rewriting
     the name table with a unique family name...
 
- src/hb-uniscribe.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-uniscribe.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 82e8bd8628aeb37835fb019a71b6bdac87824b97
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 82e8bd8628aeb37835fb019a71b6bdac87824b97
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7867,8 +19349,8 @@ Date:    Fri Jun 8 11:48:29 2012 -0400
 
     Remove unused code
 
 
     Remove unused code
 
- src/hb-uniscribe.cc |   4 +---
- 1 files changed, 1 insertions(+), 3 deletions(-)
+ src/hb-uniscribe.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
 
 commit 6da9dbff21b47fb10794b8d6cb747393c9eab7dd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6da9dbff21b47fb10794b8d6cb747393c9eab7dd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7876,8 +19358,8 @@ Date:    Fri Jun 8 10:53:35 2012 -0400
 
     Remove zero-width chars in the fallback shaper too
 
 
     Remove zero-width chars in the fallback shaper too
 
- src/hb-fallback-shape.cc |   16 ++++++++++++----
- 1 files changed, 12 insertions(+), 4 deletions(-)
+ src/hb-fallback-shape.cc | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
 
 commit 68b76121f83fc9b87dc84f03e8bef38d4332734d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 68b76121f83fc9b87dc84f03e8bef38d4332734d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7888,8 +19370,8 @@ Date:    Fri Jun 8 10:43:49 2012 -0400
     Introduced in 99c2695759a6af855d565f4994bbdf220570bb48.
     Broken mark-mark and mark-ligature stuff.
 
     Introduced in 99c2695759a6af855d565f4994bbdf220570bb48.
     Broken mark-mark and mark-ligature stuff.
 
- src/hb-ot-layout-gpos-table.hh       |    6 +++---
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-layout-gpos-table.hh       | 6 +++---
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 0dd86f9f6849d82d60a99e66b6928795cfb2a3c7
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 0dd86f9f6849d82d60a99e66b6928795cfb2a3c7
@@ -7898,9 +19380,9 @@ Date:    Fri Jun 8 10:23:03 2012 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-uniscribe.cc | 144
- +++++++++++++++++++++++++-------------------------
- 1 files changed, 72 insertions(+), 72 deletions(-)
+ src/hb-uniscribe.cc | 144
+ ++++++++++++++++++++++++++--------------------------
+ 1 file changed, 72 insertions(+), 72 deletions(-)
 
 commit 8e7beba7c3b3dea3cb3b7e280c5aab4f13b92d31
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8e7beba7c3b3dea3cb3b7e280c5aab4f13b92d31
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7908,8 +19390,8 @@ Date:    Fri Jun 8 10:22:06 2012 -0400
 
     Fix Uniscribe clusters with direction-overriden Arabic
 
 
     Fix Uniscribe clusters with direction-overriden Arabic
 
- src/hb-uniscribe.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-uniscribe.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit b069c3c31bfbbf160eb897c7474be9ea90ed4fc1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b069c3c31bfbbf160eb897c7474be9ea90ed4fc1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7917,8 +19399,8 @@ Date:    Fri Jun 8 10:10:29 2012 -0400
 
     Really fix override-direction in Uniscribe
 
 
     Really fix override-direction in Uniscribe
 
- src/hb-uniscribe.cc |  10 +++++++---
- 1 files changed, 7 insertions(+), 3 deletions(-)
+ src/hb-uniscribe.cc | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
 
 commit fcd6f5326166e993b8f5222efbaffe916da98f0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fcd6f5326166e993b8f5222efbaffe916da98f0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7929,8 +19411,8 @@ Date:    Fri Jun 8 09:59:43 2012 -0400
     Oops.  hb_tag_t and OPENTYPE_TAG have different endianness.  Perhaps
     something to add API for in hb-uniscribe.h
 
     Oops.  hb_tag_t and OPENTYPE_TAG have different endianness.  Perhaps
     something to add API for in hb-uniscribe.h
 
- src/hb-private.hh   |  12 +++++++++++-
- src/hb-uniscribe.cc |   8 ++++----
+ src/hb-private.hh   | 12 +++++++++++-
+ src/hb-uniscribe.cc | 8 ++++----
  2 files changed, 15 insertions(+), 5 deletions(-)
 
 commit 29eac8f591fdb86f1c4fdc0a6ab63910ff286b84
  2 files changed, 15 insertions(+), 5 deletions(-)
 
 commit 29eac8f591fdb86f1c4fdc0a6ab63910ff286b84
@@ -7941,8 +19423,8 @@ Date:    Fri Jun 8 09:26:17 2012 -0400
 
     Matches OT backend now.
 
 
     Matches OT backend now.
 
- src/hb-uniscribe.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-uniscribe.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1c1233e57686d77d89fe3ac1dc53de9ee60798c1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1c1233e57686d77d89fe3ac1dc53de9ee60798c1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7950,8 +19432,8 @@ Date:    Fri Jun 8 09:20:53 2012 -0400
 
     Make Uniscribe backend respect selected script
 
 
     Make Uniscribe backend respect selected script
 
- src/hb-uniscribe.cc |  15 +++++++++++++--
- 1 files changed, 13 insertions(+), 2 deletions(-)
+ src/hb-uniscribe.cc | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
 
 commit 0bb0f5d41976ae27c5c7a51cbb82144b48315a4b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0bb0f5d41976ae27c5c7a51cbb82144b48315a4b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7959,8 +19441,8 @@ Date:    Thu Jun 7 17:42:48 2012 -0400
 
     Add note re _NullPool
 
 
     Add note re _NullPool
 
- src/hb-open-type-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 2a3d911fe0ff5d6442659d3381d5b08c30ee2896
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2a3d911fe0ff5d6442659d3381d5b08c30ee2896
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7970,10 +19452,10 @@ Date:  Thu Jun 7 17:31:46 2012 -0400
 
     Detected by clang and lots of cmdline options.
 
 
     Detected by clang and lots of cmdline options.
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |    5 +++--
- src/hb-ot-layout-gsub-table.hh       |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-buffer-private.hh            | 2 +-
+ src/hb-buffer.cc                    | 5 +++--
+ src/hb-ot-layout-gsub-table.hh       | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  4 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 6095de1635441af16340c7b2c5a6b4c531ec242f
  4 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 6095de1635441af16340c7b2c5a6b4c531ec242f
@@ -7982,8 +19464,8 @@ Date:    Thu Jun 7 15:48:18 2012 -0400
 
     Fix clang warning with NO_MT path
 
 
     Fix clang warning with NO_MT path
 
- src/hb-shape.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a18280a8ce9128fc9d75f8a367ae8ce0886a9599
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a18280a8ce9128fc9d75f8a367ae8ce0886a9599
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -7991,10 +19473,10 @@ Date:  Thu Jun 7 15:44:12 2012 -0400
 
     Fix warnings produced by clang analyzer
 
 
     Fix warnings produced by clang analyzer
 
- src/hb-icu.cc         |    6 ++++--
- test/api/test-blob.c  |    2 +-
- test/api/test-buffer.c |    4 ++--
- util/helper-cairo.cc  |    2 +-
+ src/hb-icu.cc         | 6 ++++--
+ test/api/test-blob.c  | 2 +-
+ test/api/test-buffer.c | 4 ++--
+ util/helper-cairo.cc  | 2 +-
  4 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 7ec83051c05777c0e6e2eea6ef6c71effede9527
  4 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 7ec83051c05777c0e6e2eea6ef6c71effede9527
@@ -8003,8 +19485,8 @@ Date:    Thu Jun 7 13:32:57 2012 -0400
 
     Fix warnings
 
 
     Fix warnings
 
- util/ansi-print.cc |  30 +++++++++++++-----------------
- 1 files changed, 13 insertions(+), 17 deletions(-)
+ util/ansi-print.cc | 30 +++++++++++++-----------------
+ 1 file changed, 13 insertions(+), 17 deletions(-)
 
 commit 73cb02de2dd28b09d4aa76230132248215cfe83d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 73cb02de2dd28b09d4aa76230132248215cfe83d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8012,8 +19494,8 @@ Date:    Wed Jun 6 11:29:25 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-private.hh |   26 +++++++++++++-------------
- 1 files changed, 13 insertions(+), 13 deletions(-)
+ src/hb-private.hh | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
 
 commit 79e2b4791fe95ede9a1e6b1c71ccc6e36c4fc0e5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 79e2b4791fe95ede9a1e6b1c71ccc6e36c4fc0e5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8023,8 +19505,8 @@ Date:    Wed Jun 6 11:27:17 2012 -0400
 
     As reported by bashi.  Not tested.
 
 
     As reported by bashi.  Not tested.
 
- src/hb-private.hh |   8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-private.hh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 4282d2f3771d6510c27b62e54cc1254d6f2389b3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4282d2f3771d6510c27b62e54cc1254d6f2389b3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8032,8 +19514,8 @@ Date:    Wed Jun 6 03:42:36 2012 -0400
 
     Enabled ICU again
 
 
     Enabled ICU again
 
- configure.ac |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 6220e5fc0dad728e67a92e838d3ac275d032f2c7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6220e5fc0dad728e67a92e838d3ac275d032f2c7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8041,13 +19523,13 @@ Date:  Wed Jun 6 03:30:09 2012 -0400
 
     Add ASSERT_POD for most objects
 
 
     Add ASSERT_POD for most objects
 
- src/hb-blob.cc                   |    1 +
- src/hb-buffer-private.hh  |   2 ++
- src/hb-font-private.hh    |   3 +++
- src/hb-object-private.hh  |   2 ++
- src/hb-private.hh        |    2 +-
- src/hb-set-private.hh    |    4 +++-
- src/hb-unicode-private.hh |   1 +
+ src/hb-blob.cc                   | 1 +
+ src/hb-buffer-private.hh  | 2 ++
+ src/hb-font-private.hh    | 3 +++
+ src/hb-object-private.hh  | 2 ++
+ src/hb-private.hh        | 2 +-
+ src/hb-set-private.hh    | 4 +++-
+ src/hb-unicode-private.hh | 1 +
  7 files changed, 13 insertions(+), 2 deletions(-)
 
 commit a00a63b5ef503fafa87e26b517732b2214e01719
  7 files changed, 13 insertions(+), 2 deletions(-)
 
 commit a00a63b5ef503fafa87e26b517732b2214e01719
@@ -8056,9 +19538,9 @@ Date:    Wed Jun 6 03:07:01 2012 -0400
 
     Add macros to check that types are POD
 
 
     Add macros to check that types are POD
 
- configure.ac               |    1 +
- src/hb-open-type-private.hh |  32 ++++++++++++++++++++------------
- src/hb-private.hh          |   24 ++++++++++++++++++++++++
+ configure.ac               |  1 +
+ src/hb-open-type-private.hh | 32 ++++++++++++++++++++------------
+ src/hb-private.hh          | 24 ++++++++++++++++++++++++
  3 files changed, 45 insertions(+), 12 deletions(-)
 
 commit 61eb60c129e865e92f6a5767a88c44a391f4d413
  3 files changed, 45 insertions(+), 12 deletions(-)
 
 commit 61eb60c129e865e92f6a5767a88c44a391f4d413
@@ -8069,8 +19551,8 @@ Date:    Tue Jun 5 21:14:04 2012 -0400
 
     New try.
 
 
     New try.
 
- src/Makefile.am |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 81a4b9fd4eb8995c5930db1df3669db93661eb52
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81a4b9fd4eb8995c5930db1df3669db93661eb52
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8078,8 +19560,8 @@ Date:    Tue Jun 5 20:49:51 2012 -0400
 
     Remove unused hb_static_mutex_t
 
 
     Remove unused hb_static_mutex_t
 
- src/hb-mutex-private.hh |   11 -----------
- 1 files changed, 0 insertions(+), 11 deletions(-)
+ src/hb-mutex-private.hh | 11 -----------
+ 1 file changed, 11 deletions(-)
 
 commit 4a3a9897b3698dd09c3e880b3ddd4db24c6fb460
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a3a9897b3698dd09c3e880b3ddd4db24c6fb460
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8089,8 +19571,8 @@ Date:    Tue Jun 5 20:39:07 2012 -0400
 
     Apparently the configure test is not enough...
 
 
     Apparently the configure test is not enough...
 
- src/hb-atomic-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0594a2448440208efa0acac9a5d8d52d43108289
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0594a2448440208efa0acac9a5d8d52d43108289
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8098,36 +19580,36 @@ Date:  Tue Jun 5 20:35:40 2012 -0400
 
     Cleanup TRUE/FALSE vs true/false
 
 
     Cleanup TRUE/FALSE vs true/false
 
- src/hb-atomic-private.hh          |    4 +-
- src/hb-blob.cc                            |   28 ++++++++--------
- src/hb-buffer-private.hh          |    2 +-
- src/hb-buffer.cc                  |   38 ++++++++++++------------
- src/hb-buffer.h                   |    4 +-
- src/hb-fallback-shape.cc          |    2 +-
- src/hb-font.cc                            |   22 +++++++-------
- src/hb-ft.cc                      |   22 +++++++-------
- src/hb-glib.cc                            |   16 +++++-----
- src/hb-graphite2.cc               |    8 ++--
- src/hb-icu.cc                     |   30 +++++++++---------
- src/hb-ot-layout.cc               |   28 ++++++++--------
- src/hb-ot-shape-complex-private.hh |   2 +-
- src/hb-ot-shape-normalize.cc      |   16 +++++-----
- src/hb-ot-shape.cc                |    4 +-
- src/hb-private.hh                 |   18 ++++-------
- src/hb-set.cc                     |    2 +-
- src/hb-set.h                      |    2 +-
- src/hb-shape.cc                   |    6 ++--
- src/hb-tt-font.cc                 |   12 ++++----
- src/hb-unicode.cc                 |    8 ++--
- src/hb-uniscribe.cc               |   18 +++++-----
- src/main.cc                       |    2 +-
- util/hb-shape.cc                  |    2 +-
- util/helper-cairo.cc              |   16 +++++-----
- util/main-font-text.hh                    |    2 +-
- util/options.cc                   |   58
- ++++++++++++++++++------------------
- util/options.hh                   |    2 +-
- util/view-cairo.hh                |    2 +-
+ src/hb-atomic-private.hh          |  4 +--
+ src/hb-blob.cc                            | 28 +++++++++---------
+ src/hb-buffer-private.hh          |  2 +-
+ src/hb-buffer.cc                  | 38 ++++++++++++-------------
+ src/hb-buffer.h                   |  4 +--
+ src/hb-fallback-shape.cc          |  2 +-
+ src/hb-font.cc                            | 22 +++++++--------
+ src/hb-ft.cc                      | 22 +++++++--------
+ src/hb-glib.cc                            | 16 +++++------
+ src/hb-graphite2.cc               |  8 +++---
+ src/hb-icu.cc                     | 30 ++++++++++----------
+ src/hb-ot-layout.cc               | 28 +++++++++---------
+ src/hb-ot-shape-complex-private.hh |  2 +-
+ src/hb-ot-shape-normalize.cc      | 16 +++++------
+ src/hb-ot-shape.cc                |  4 +--
+ src/hb-private.hh                 | 18 ++++--------
+ src/hb-set.cc                     |  2 +-
+ src/hb-set.h                      |  2 +-
+ src/hb-shape.cc                   |  6 ++--
+ src/hb-tt-font.cc                 | 12 ++++----
+ src/hb-unicode.cc                 |  8 +++---
+ src/hb-uniscribe.cc               | 18 ++++++------
+ src/main.cc                       |  2 +-
+ util/hb-shape.cc                  |  2 +-
+ util/helper-cairo.cc              | 16 +++++------
+ util/main-font-text.hh                    |  2 +-
+ util/options.cc                   | 58
+ +++++++++++++++++++-------------------
+ util/options.hh                   |  2 +-
+ util/view-cairo.hh                |  2 +-
  29 files changed, 185 insertions(+), 191 deletions(-)
 
 commit e1ac38f8dd04c29d2d4140f5a492cdaf25d72901
  29 files changed, 185 insertions(+), 191 deletions(-)
 
 commit e1ac38f8dd04c29d2d4140f5a492cdaf25d72901
@@ -8138,8 +19620,8 @@ Date:    Tue Jun 5 20:31:49 2012 -0400
 
     Oops!
 
 
     Oops!
 
- src/hb-buffer.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 04bc1eebe7a304c0e6f86ab6814c65889f152602
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 04bc1eebe7a304c0e6f86ab6814c65889f152602
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8147,9 +19629,9 @@ Date:    Tue Jun 5 20:16:56 2012 -0400
 
     Add configure tests for Intel atomic intrinsics
 
 
     Add configure tests for Intel atomic intrinsics
 
- configure.ac            |   17 +++++++++++++++++
- src/hb-atomic-private.hh |   12 ++++++------
- src/hb-mutex-private.hh  |    2 +-
+ configure.ac            | 17 +++++++++++++++++
+ src/hb-atomic-private.hh | 12 ++++++------
+ src/hb-mutex-private.hh  |  2 +-
  3 files changed, 24 insertions(+), 7 deletions(-)
 
 commit 68c75b46977beb57e35082db26be712b3cd65678
  3 files changed, 24 insertions(+), 7 deletions(-)
 
 commit 68c75b46977beb57e35082db26be712b3cd65678
@@ -8158,8 +19640,8 @@ Date:    Tue Jun 5 19:55:46 2012 -0400
 
     Shuffle
 
 
     Shuffle
 
- configure.ac |   16 ++++++++--------
- 1 files changed, 8 insertions(+), 8 deletions(-)
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
 
 commit f64b2ebf82c5f355cd95806478cd30c00b1a2731
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f64b2ebf82c5f355cd95806478cd30c00b1a2731
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8169,9 +19651,9 @@ Date:    Tue Jun 5 19:23:29 2012 -0400
 
     We're free!  Lazy or immediate...
 
 
     We're free!  Lazy or immediate...
 
- src/hb-ft.cc   |    2 +
- src/hb-shape.cc |  150
- +++++++++++++++++++++++++++++++++++++++---------------
+ src/hb-ft.cc   |   2 +
+ src/hb-shape.cc | 150
+ ++++++++++++++++++++++++++++++++++++++++----------------
  2 files changed, 110 insertions(+), 42 deletions(-)
 
 commit 4a8a529068fc380298bb05b9d878bede3e9f4da1
  2 files changed, 110 insertions(+), 42 deletions(-)
 
 commit 4a8a529068fc380298bb05b9d878bede3e9f4da1
@@ -8180,8 +19662,8 @@ Date:    Tue Jun 5 19:17:02 2012 -0400
 
     Make hb-view err if all shapers failed
 
 
     Make hb-view err if all shapers failed
 
- util/view-cairo.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/view-cairo.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 04aed572f112b96a6033cd6c3df7bdba5e29e93c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 04aed572f112b96a6033cd6c3df7bdba5e29e93c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8189,8 +19671,8 @@ Date:    Tue Jun 5 18:30:19 2012 -0400
 
     Make hb-ft static-initializer free
 
 
     Make hb-ft static-initializer free
 
- src/hb-common.cc |    5 ++---
- src/hb-ft.cc    |   38 +++++++++++++++++++++++++++-----------
+ src/hb-common.cc |  5 ++---
+ src/hb-ft.cc    | 38 +++++++++++++++++++++++++++-----------
  2 files changed, 29 insertions(+), 14 deletions(-)
 
 commit be4560a3b5e8599cbe2b29a01a60c21c9e2b194f
  2 files changed, 29 insertions(+), 14 deletions(-)
 
 commit be4560a3b5e8599cbe2b29a01a60c21c9e2b194f
@@ -8199,11 +19681,11 @@ Date:  Tue Jun 5 18:14:03 2012 -0400
 
     Undo default unicode-funcs to avoid static initializer again
 
 
     Undo default unicode-funcs to avoid static initializer again
 
- src/hb-buffer.cc         |    2 +-
- src/hb-glib.cc                   |   23 ++++++++++++-----------
- src/hb-icu.cc            |   24 +++++++++++++-----------
- src/hb-unicode-private.hh |   10 +++++-----
- src/hb-unicode.cc        |   26 ++++++++++++++------------
+ src/hb-buffer.cc         |  2 +-
+ src/hb-glib.cc                   | 23 ++++++++++++-----------
+ src/hb-icu.cc            | 24 +++++++++++++-----------
+ src/hb-unicode-private.hh | 10 +++++-----
+ src/hb-unicode.cc        | 26 ++++++++++++++------------
  5 files changed, 45 insertions(+), 40 deletions(-)
 
 commit 093171cceca63e48e735bbf05a2c11b1b7e95ef1
  5 files changed, 45 insertions(+), 40 deletions(-)
 
 commit 093171cceca63e48e735bbf05a2c11b1b7e95ef1
@@ -8214,9 +19696,9 @@ Date:    Tue Jun 5 18:00:45 2012 -0400
 
     Another static-initialization down.  One more to go.
 
 
     Another static-initialization down.  One more to go.
 
- src/hb-common.cc |   66
- ++++++++++++++++++++++++++++++++++++++++++++---------
- 1 files changed, 54 insertions(+), 12 deletions(-)
+ src/hb-common.cc | 66
+ +++++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 54 insertions(+), 12 deletions(-)
 
 commit 6843ce01be0df501ef3149a2c1c54cdfb693195d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6843ce01be0df501ef3149a2c1c54cdfb693195d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8227,8 +19709,8 @@ Date:    Tue Jun 5 17:27:20 2012 -0400
     Gonig to use these for lock-free linked-lists, to be used for
     hb_language_t among other things.
 
     Gonig to use these for lock-free linked-lists, to be used for
     hb_language_t among other things.
 
- src/hb-atomic-private.hh |   21 +++++++++++++++++++++
- 1 files changed, 21 insertions(+), 0 deletions(-)
+ src/hb-atomic-private.hh | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
 
 commit cdafe3a7d8483ac586e2c16487e2a09164e0f65c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdafe3a7d8483ac586e2c16487e2a09164e0f65c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8236,12 +19718,12 @@ Date:  Tue Jun 5 16:34:49 2012 -0400
 
     Add gcc intrinsics implementations for atomic and mutex
 
 
     Add gcc intrinsics implementations for atomic and mutex
 
- configure.ac            |    4 +-
- src/hb-atomic-private.hh |   11 ++++++++-
- src/hb-mutex-private.hh  |   51
- +++++++++++++++++++++++++++++++++++++++------
- src/hb-object-private.hh |    4 ++-
- src/hb-warning.cc       |   14 ++++++------
+ configure.ac            |  4 ++--
+ src/hb-atomic-private.hh | 11 +++++++++--
+ src/hb-mutex-private.hh  | 51
+ +++++++++++++++++++++++++++++++++++++++++-------
+ src/hb-object-private.hh |  4 +++-
+ src/hb-warning.cc       | 14 ++++++-------
  5 files changed, 65 insertions(+), 19 deletions(-)
 
 commit d970d2899b36a2fbd002b224b8bd37b0906fdd5f
  5 files changed, 65 insertions(+), 19 deletions(-)
 
 commit d970d2899b36a2fbd002b224b8bd37b0906fdd5f
@@ -8250,8 +19732,8 @@ Date:    Tue Jun 5 16:06:28 2012 -0400
 
     Add gcc implementation for atomic ops
 
 
     Add gcc implementation for atomic ops
 
- src/hb-atomic-private.hh |    9 +++++++--
- 1 files changed, 7 insertions(+), 2 deletions(-)
+ src/hb-atomic-private.hh | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
 
 commit 0e253e97af71e2a7ead153589f61fd579a247502
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e253e97af71e2a7ead153589f61fd579a247502
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8261,10 +19743,10 @@ Date:  Tue Jun 5 15:37:19 2012 -0400
 
     Removes one more static-initialization.  A few more to go.
 
 
     Removes one more static-initialization.  A few more to go.
 
- src/hb-common.cc        |   24 +++++++++---------------
- src/hb-mutex-private.hh  |   19 +++++++------------
- src/hb-object-private.hh |   36 ++++++++++++++++++++++--------------
- src/hb-private.hh       |   11 +++++------
+ src/hb-common.cc        | 24 +++++++++---------------
+ src/hb-mutex-private.hh  | 19 +++++++------------
+ src/hb-object-private.hh | 36 ++++++++++++++++++++++--------------
+ src/hb-private.hh       | 11 +++++------
  4 files changed, 43 insertions(+), 47 deletions(-)
 
 commit a2b471df821b32625d127f83b2f90e6d6a967e7e
  4 files changed, 43 insertions(+), 47 deletions(-)
 
 commit a2b471df821b32625d127f83b2f90e6d6a967e7e
@@ -8273,9 +19755,9 @@ Date:    Tue Jun 5 15:17:44 2012 -0400
 
     Remove static initializers from indic
 
 
     Remove static initializers from indic
 
- src/hb-ot-shape-complex-indic.cc |   50
- +++++++++++++++++++++++++++++--------
- 1 files changed, 39 insertions(+), 11 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 50
+ +++++++++++++++++++++++++++++++---------
+ 1 file changed, 39 insertions(+), 11 deletions(-)
 
 commit f06ab8a4262c759b4723614fd28f55ee77aa8466
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f06ab8a4262c759b4723614fd28f55ee77aa8466
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8283,16 +19765,16 @@ Date:  Tue Jun 5 12:31:51 2012 -0400
 
     Better hide nil objects and make them const
 
 
     Better hide nil objects and make them const
 
- src/hb-blob.cc                   |   34 +++++++++++-----------
- src/hb-buffer.cc         |   39 ++++++++++++-------------
- src/hb-font.cc                   |   70
- ++++++++++++++++++++++-----------------------
- src/hb-ft.cc             |   49 ++++++++++++++-----------------
- src/hb-glib.cc                   |   25 ++++++++--------
- src/hb-icu.cc            |   25 ++++++++--------
- src/hb-set.cc            |   16 +++++-----
- src/hb-unicode-private.hh |   11 +++----
- src/hb-unicode.cc        |   34 +++++++++++-----------
+ src/hb-blob.cc                   | 34 +++++++++++------------
+ src/hb-buffer.cc         | 39 +++++++++++++-------------
+ src/hb-font.cc                   | 70
+ +++++++++++++++++++++++------------------------
+ src/hb-ft.cc             | 49 +++++++++++++++------------------
+ src/hb-glib.cc                   | 25 ++++++++---------
+ src/hb-icu.cc            | 25 ++++++++---------
+ src/hb-set.cc            | 16 +++++------
+ src/hb-unicode-private.hh | 11 ++++----
+ src/hb-unicode.cc        | 34 +++++++++++------------
  9 files changed, 146 insertions(+), 157 deletions(-)
 
 commit bf93b636c4963cbc32d5fba7ace1053db6719192
  9 files changed, 146 insertions(+), 157 deletions(-)
 
 commit bf93b636c4963cbc32d5fba7ace1053db6719192
@@ -8307,10 +19789,10 @@ Date:  Tue Jun 5 14:17:32 2012 -0400
     Now, most nil objects just moved from .bss to .data.  Fixing for that
     coming soon.
 
     Now, most nil objects just moved from .bss to .data.  Fixing for that
     coming soon.
 
- src/hb-object-private.hh |    3 +++
- src/hb-private.hh       |    4 +++-
- src/hb-set-private.hh   |    1 +
- 3 files changed, 7 insertions(+), 1 deletions(-)
+ src/hb-object-private.hh | 3 +++
+ src/hb-private.hh       | 4 +++-
+ src/hb-set-private.hh   | 1 +
+ 3 files changed, 7 insertions(+), 1 deletion(-)
 
 commit 7037291aacb858f8090fd7d9028c196cc1a21703
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7037291aacb858f8090fd7d9028c196cc1a21703
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8318,8 +19800,8 @@ Date:    Tue Jun 5 13:30:11 2012 -0400
 
     Check for atexit()
 
 
     Check for atexit()
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f1971a217424bd6db5c7072ba5cf197f318d4e47
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f1971a217424bd6db5c7072ba5cf197f318d4e47
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8327,8 +19809,8 @@ Date:    Tue Jun 5 13:04:20 2012 -0400
 
     Fix warnings
 
 
     Fix warnings
 
- src/indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b0a6e58bb3dda72dcce37d54d987591630a3db6c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b0a6e58bb3dda72dcce37d54d987591630a3db6c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8336,49 +19818,49 @@ Date:  Mon Jun 4 10:21:22 2012 -0400
 
     s/script-punjabi/script-gurmukhi/
 
 
     s/script-punjabi/script-gurmukhi/
 
- .../texts/in-tree/shaper-indic/indic/MANIFEST     |    2 +-
- .../shaper-indic/indic/script-gurmukhi/MANIFEST    |   2 +
- .../indic/script-gurmukhi/misc/MANIFEST           |    1 +
- .../indic/script-gurmukhi/misc/misc.txt           |    1 +
- .../indic/script-gurmukhi/utrrs/LICENSE           |   19 +++
- .../indic/script-gurmukhi/utrrs/MANIFEST          |    3 +
- .../indic/script-gurmukhi/utrrs/README                    |   13 ++
- .../indic/script-gurmukhi/utrrs/SOURCES           |    2 +
- .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +++++
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 ++
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 ++
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 +
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 ++
- .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
- .../indic/script-gurmukhi/utrrs/codepoint/MANIFEST |   7 +
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 +++
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 +
- .../indic/script-gurmukhi/utrrs/gpos/MANIFEST     |    2 +
- .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152
- ++++++++++++++++++++
- .../indic/script-gurmukhi/utrrs/gsub/MANIFEST     |    1 +
- .../shaper-indic/indic/script-punjabi/MANIFEST     |   2 -
- .../indic/script-punjabi/misc/MANIFEST                    |    1 -
- .../indic/script-punjabi/misc/misc.txt                    |    1 -
- .../indic/script-punjabi/utrrs/LICENSE                    |   19 ---
- .../indic/script-punjabi/utrrs/MANIFEST           |    3 -
- .../shaper-indic/indic/script-punjabi/utrrs/README |  13 --
- .../indic/script-punjabi/utrrs/SOURCES                    |    2 -
- .../IndicFontFeatureCodepoint-Consonants.txt      |   38 -----
- .../IndicFontFeatureCodepoint-DependentVowels.txt  |   9 --
- .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 --
- .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |   6 -
- ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 --
- .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
- .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
- .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |   7 -
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 ---
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |   2 -
- .../indic/script-punjabi/utrrs/gpos/MANIFEST      |    2 -
- .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  152
- --------------------
- .../indic/script-punjabi/utrrs/gsub/MANIFEST      |    1 -
+ .../texts/in-tree/shaper-indic/indic/MANIFEST     |   2 +-
+ .../shaper-indic/indic/script-gurmukhi/MANIFEST    |  2 +
+ .../indic/script-gurmukhi/misc/MANIFEST           |   1 +
+ .../indic/script-gurmukhi/misc/misc.txt           |   1 +
+ .../indic/script-gurmukhi/utrrs/LICENSE           |  19 +++
+ .../indic/script-gurmukhi/utrrs/MANIFEST          |   3 +
+ .../indic/script-gurmukhi/utrrs/README                    |  13 ++
+ .../indic/script-gurmukhi/utrrs/SOURCES           |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |  38 ++++++
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  9 ++
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 ++
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |  6 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 ++
+ .../IndicFontFeatureCodepoint-Reserved.txt        |   2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  6 +
+ .../indic/script-gurmukhi/utrrs/codepoint/MANIFEST |  7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 +++
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  2 +
+ .../indic/script-gurmukhi/utrrs/gpos/MANIFEST     |   2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 152
+ +++++++++++++++++++++
+ .../indic/script-gurmukhi/utrrs/gsub/MANIFEST     |   1 +
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |  2 -
+ .../indic/script-punjabi/misc/MANIFEST                    |   1 -
+ .../indic/script-punjabi/misc/misc.txt                    |   1 -
+ .../indic/script-punjabi/utrrs/LICENSE                    |  19 ---
+ .../indic/script-punjabi/utrrs/MANIFEST           |   3 -
+ .../shaper-indic/indic/script-punjabi/utrrs/README |  13 --
+ .../indic/script-punjabi/utrrs/SOURCES                    |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |  38 ------
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  9 --
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 --
+ .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt |  6 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  10 --
+ .../IndicFontFeatureCodepoint-Reserved.txt        |   2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  6 -
+ .../indic/script-punjabi/utrrs/codepoint/MANIFEST  |  7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  22 ---
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  2 -
+ .../indic/script-punjabi/utrrs/gpos/MANIFEST      |   2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 152
+ ---------------------
+ .../indic/script-punjabi/utrrs/gsub/MANIFEST      |   1 -
  41 files changed, 309 insertions(+), 309 deletions(-)
 
 commit c1885483120d4b686b2fe95b217dce7248e040b1
  41 files changed, 309 insertions(+), 309 deletions(-)
 
 commit c1885483120d4b686b2fe95b217dce7248e040b1
@@ -8389,9 +19871,9 @@ Date:    Mon Jun 4 08:56:00 2012 -0400
 
     Just turns all --show-* options on.
 
 
     Just turns all --show-* options on.
 
- util/options.cc |   11 +++++++++++
- util/options.hh |    1 -
- 2 files changed, 11 insertions(+), 1 deletions(-)
+ util/options.cc | 11 +++++++++++
+ util/options.hh |  1 -
+ 2 files changed, 11 insertions(+), 1 deletion(-)
 
 commit 9fc7a11469113d31d8095757c4fc038c3427d44a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9fc7a11469113d31d8095757c4fc038c3427d44a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8401,8 +19883,8 @@ Date:    Mon Jun 4 08:28:19 2012 -0400
 
     As reported by Jonathan Kew on the list.
 
 
     As reported by Jonathan Kew on the list.
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3b8fd9c48f4bde368bf2d465c148b9743a9216ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3b8fd9c48f4bde368bf2d465c148b9743a9216ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8432,8 +19914,8 @@ Date:    Sun Jun 3 15:54:19 2012 -0400
     hb-ot-shape.cc:521:12: note: synthesized method
     '_hb_set_t::_hb_set_t()' first required here
 
     hb-ot-shape.cc:521:12: note: synthesized method
     '_hb_set_t::_hb_set_t()' first required here
 
- src/hb-object-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 70600dbf626808a30fb0fd8b7ae860e64d9ffe87
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 70600dbf626808a30fb0fd8b7ae860e64d9ffe87
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8441,8 +19923,8 @@ Date:    Sun Jun 3 15:52:51 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-object-private.hh |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-object-private.hh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit ae62166519291057316a9d15cea3f1570fcb5eaf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae62166519291057316a9d15cea3f1570fcb5eaf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8450,9 +19932,9 @@ Date:    Sat Jun 2 12:21:19 2012 -0400
 
     [util] Minor
 
 
     [util] Minor
 
- util/options.cc       |    4 +---
- util/options.hh       |   26 ++++++++++++++------------
- util/shape-consumer.hh |    4 +++-
+ util/options.cc       |  4 +---
+ util/options.hh       | 26 ++++++++++++++------------
+ util/shape-consumer.hh |  4 +++-
  3 files changed, 18 insertions(+), 16 deletions(-)
 
 commit 5db0683a822f70c914468430cda6487cee740ae3
  3 files changed, 18 insertions(+), 16 deletions(-)
 
 commit 5db0683a822f70c914468430cda6487cee740ae3
@@ -8461,15 +19943,15 @@ Date:  Sat Jun 2 12:13:08 2012 -0400
 
     [util] Make hb-shape continue shaping other lines if shapers failed
 
 
     [util] Make hb-shape continue shaping other lines if shapers failed
 
- util/hb-ot-shape-closure.cc |   3 ++
- util/hb-shape.cc           |   36 ++++++++++++++++++++++++-----
- util/main-font-text.hh      |   2 +-
- util/options.cc            |   34 +++++++++++++++++++++------
- util/options.hh            |   33 ++++++++++++++-------------
- util/shape-consumer.hh      |  17 +++++++++++--
- util/view-cairo.cc         |   47 ++++++--------------------------------
- util/view-cairo.hh         |   52
- +++++++++++++++++++++++++++++++++++++-----
+ util/hb-ot-shape-closure.cc | 3 +++
+ util/hb-shape.cc           | 36 +++++++++++++++++++++++++------
+ util/main-font-text.hh      | 2 +-
+ util/options.cc            | 34 ++++++++++++++++++++++-------
+ util/options.hh            | 33 ++++++++++++++--------------
+ util/shape-consumer.hh      | 17 ++++++++++++---
+ util/view-cairo.cc         | 47 +++++++---------------------------------
+ util/view-cairo.hh         | 52
+ +++++++++++++++++++++++++++++++++++++++------
  8 files changed, 143 insertions(+), 81 deletions(-)
 
 commit 96a9ef0c9fca8d58d8dc6baf6b262d96587abee0
  8 files changed, 143 insertions(+), 81 deletions(-)
 
 commit 96a9ef0c9fca8d58d8dc6baf6b262d96587abee0
@@ -8481,8 +19963,8 @@ Date:    Fri Jun 1 13:46:26 2012 -0400
     Uniscribe does that, this make comparing results to Uniscribe
     easier.
 
     Uniscribe does that, this make comparing results to Uniscribe
     easier.
 
- src/hb-unicode-private.hh |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-unicode-private.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit cd6a5493411fea30a04466128e1a37b4d89c6a72
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd6a5493411fea30a04466128e1a37b4d89c6a72
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8490,8 +19972,8 @@ Date:    Fri Jun 1 13:45:25 2012 -0400
 
     Remove unused variable
 
 
     Remove unused variable
 
- util/hb-ot-shape-closure.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ util/hb-ot-shape-closure.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 0558d55bac7fb9279aac859b465e7c0e3ad97492
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0558d55bac7fb9279aac859b465e7c0e3ad97492
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8504,8 +19986,8 @@ Date:    Mon May 28 10:46:47 2012 -0400
     I'm just adjusting these as I better understand the requirements of
     the code and the guarantees of each operation.
 
     I'm just adjusting these as I better understand the requirements of
     the code and the guarantees of each operation.
 
- src/hb-atomic-private.hh |    8 --------
- src/hb-object-private.hh |   12 +++++-------
+ src/hb-atomic-private.hh |  8 --------
+ src/hb-object-private.hh | 12 +++++-------
  2 files changed, 5 insertions(+), 15 deletions(-)
 
 commit 4efdffec095e19ceeb4b319d60201e84ece30fd9
  2 files changed, 5 insertions(+), 15 deletions(-)
 
 commit 4efdffec095e19ceeb4b319d60201e84ece30fd9
@@ -8516,8 +19998,9 @@ Date:    Sun May 27 22:39:48 2012 -0400
 
     From https://bugs.freedesktop.org/show_bug.cgi?id=45166
 
 
     From https://bugs.freedesktop.org/show_bug.cgi?id=45166
 
- .../indic/script-malayalam/misc/misc.txt          |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit dfff5b3021016d3a472c100272fd8e2f52307860
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dfff5b3021016d3a472c100272fd8e2f52307860
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8525,11 +20008,15 @@ Date:  Sun May 27 22:07:04 2012 -0400
 
     Add Myanmar test case
 
 
     Add Myanmar test case
 
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
- .../south-east-asian/script-myanmar/MANIFEST      |    1 +
- .../south-east-asian/script-myanmar/misc/MANIFEST  |   1 +
- .../south-east-asian/script-myanmar/misc/misc.txt  |   1 +
- 4 files changed, 4 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST
+ | 1 +
+ .../texts/in-tree/shaper-indic/south-east-asian/script-myanmar/MANIFEST
+ | 1 +
+ .../in-tree/shaper-indic/south-east-asian/script-myanmar/misc/MANIFEST
+ | 1 +
+ .../in-tree/shaper-indic/south-east-asian/script-myanmar/misc/misc.txt
+ | 1 +
+ 4 files changed, 4 insertions(+)
 
 commit bce095524b3e69a47f8e88a2fb02d6ab537f9b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bce095524b3e69a47f8e88a2fb02d6ab537f9b0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8537,14 +20024,14 @@ Date:  Sun May 27 11:29:21 2012 -0400
 
     Add hb_font_get_glyph_name() and hb_font_get_glyph_from_name()
 
 
     Add hb_font_get_glyph_name() and hb_font_get_glyph_from_name()
 
- TODO                       |    1 +
- src/hb-font-private.hh      |   2 +
- src/hb-font.cc                     |   80
- +++++++++++++++++++++++++++++++++----------
- src/hb-font.h              |   28 +++++++++++++++
- src/hb-ft.cc               |   52 +++++++++++++++++++++++-----
- util/hb-ot-shape-closure.cc |   9 ++---
- util/options.cc            |   10 ++----
+ TODO                       |  1 +
+ src/hb-font-private.hh      | 2 ++
+ src/hb-font.cc                     | 80
+ +++++++++++++++++++++++++++++++++++----------
+ src/hb-font.h              | 28 ++++++++++++++++
+ src/hb-ft.cc               | 52 ++++++++++++++++++++++++-----
+ util/hb-ot-shape-closure.cc | 9 ++---
+ util/options.cc            | 10 ++----
  7 files changed, 142 insertions(+), 40 deletions(-)
 
 commit bc145658bdaeaeea0cdbd719e2756f09a2dbfb48
  7 files changed, 142 insertions(+), 40 deletions(-)
 
 commit bc145658bdaeaeea0cdbd719e2756f09a2dbfb48
@@ -8553,9 +20040,9 @@ Date:    Sun May 27 10:45:57 2012 -0400
 
     Warn if no Unicode functions implementation is found
 
 
     Warn if no Unicode functions implementation is found
 
- src/hb-unicode-private.hh |   1 +
- src/hb-warning.cc        |   13 +++++++++++++
- 2 files changed, 14 insertions(+), 0 deletions(-)
+ src/hb-unicode-private.hh |  1 +
+ src/hb-warning.cc        | 13 +++++++++++++
+ 2 files changed, 14 insertions(+)
 
 commit a3547330fa88e30a138f6f17e60d9c7d1e316622
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a3547330fa88e30a138f6f17e60d9c7d1e316622
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8563,8 +20050,8 @@ Date:    Sun May 27 10:20:47 2012 -0400
 
     Cleanup atomic ops on OS X
 
 
     Cleanup atomic ops on OS X
 
- src/hb-atomic-private.hh |    7 +++----
- 1 files changed, 3 insertions(+), 4 deletions(-)
+ src/hb-atomic-private.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
 
 commit e4b6d503c5575ddbf49249e3fef693d75ae75170
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e4b6d503c5575ddbf49249e3fef693d75ae75170
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8576,8 +20063,8 @@ Date:    Sun May 27 10:11:13 2012 -0400
     are enough, no need for expensive memory barriers. It's a cache,
     that's all.
 
     are enough, no need for expensive memory barriers. It's a cache,
     that's all.
 
- src/hb-cache-private.hh |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-cache-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 819faa05307aa192015f4b43d8103a35e87d6cc7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 819faa05307aa192015f4b43d8103a35e87d6cc7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8585,8 +20072,8 @@ Date:    Sun May 27 10:09:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-atomic-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 303d5850ec0516e198db241456b0cfc4899ef9c0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 303d5850ec0516e198db241456b0cfc4899ef9c0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8601,8 +20088,8 @@ Date:    Sun May 27 10:01:13 2012 -0400
     _ReadBarrier()
     and/or _WriteBarrier().
 
     _ReadBarrier()
     and/or _WriteBarrier().
 
- src/hb-atomic-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-atomic-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 8f8956a55fff95e5ad529d2f124c9528d1f4f81d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f8956a55fff95e5ad529d2f124c9528d1f4f81d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8610,8 +20097,8 @@ Date:    Fri May 25 14:30:24 2012 -0400
 
     [util] Add hidden --shaper that is equivalent of --shapers
 
 
     [util] Add hidden --shaper that is equivalent of --shapers
 
- util/helper-cairo.cc |    2 +-
- util/options.cc      |    6 +++++-
+ util/helper-cairo.cc | 2 +-
+ util/options.cc      | 6 +++++-
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 29ce446d3161b7ea5874352e5f8eb33cd59338c3
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 29ce446d3161b7ea5874352e5f8eb33cd59338c3
@@ -8620,10 +20107,10 @@ Date:  Fri May 25 14:17:54 2012 -0400
 
     Add set iterator
 
 
     Add set iterator
 
- src/hb-set-private.hh      |   26 +++++++++++++++++++++++---
- src/hb-set.cc              |    7 +++++++
- src/hb-set.h               |   11 +++++++++--
- util/hb-ot-shape-closure.cc |   8 +++++---
+ src/hb-set-private.hh      | 26 +++++++++++++++++++++++---
+ src/hb-set.cc              |  7 +++++++
+ src/hb-set.h               | 11 +++++++++--
+ util/hb-ot-shape-closure.cc | 8 +++++---
  4 files changed, 44 insertions(+), 8 deletions(-)
 
 commit 62c3e111fce0ad34960871134c2eb6da572df303
  4 files changed, 44 insertions(+), 8 deletions(-)
 
 commit 62c3e111fce0ad34960871134c2eb6da572df303
@@ -8632,10 +20119,10 @@ Date:  Fri May 25 13:48:00 2012 -0400
 
     Add set symmetric difference
 
 
     Add set symmetric difference
 
- src/hb-set-private.hh |    5 +++++
- src/hb-set.cc        |    7 +++++++
- src/hb-set.h         |    6 ++++++
- 3 files changed, 18 insertions(+), 0 deletions(-)
+ src/hb-set-private.hh | 5 +++++
+ src/hb-set.cc        | 7 +++++++
+ src/hb-set.h         | 6 ++++++
+ 3 files changed, 18 insertions(+)
 
 commit 27aba594c90b4444c35273a38f5fedc8e09d9a88
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 27aba594c90b4444c35273a38f5fedc8e09d9a88
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8643,8 +20130,8 @@ Date:    Thu May 24 15:00:01 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- src/hb-ot-shape-complex-indic.cc        |    2 +-
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ src/hb-ot-shape-complex-indic.cc        | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit cde1c0114ba66a45d907e81a49bf625e0dc946b0
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit cde1c0114ba66a45d907e81a49bf625e0dc946b0
@@ -8655,8 +20142,8 @@ Date:    Thu May 24 10:46:39 2012 -0400
 
     As pointed out by Jonathan Kew.
 
 
     As pointed out by Jonathan Kew.
 
- src/hb-atomic-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-atomic-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3b9b7133bea787f787170beea073f185e36d2327
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3b9b7133bea787f787170beea073f185e36d2327
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8664,8 +20151,8 @@ Date:    Wed May 23 22:00:25 2012 -0400
 
     Update TODO
 
 
     Update TODO
 
- TODO |   18 ++++++++++++++++--
- 1 files changed, 16 insertions(+), 2 deletions(-)
+ TODO | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
 
 commit ff3524c21aabf5d0d6014d1ce1b3e12ca5f0990f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ff3524c21aabf5d0d6014d1ce1b3e12ca5f0990f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8673,15 +20160,15 @@ Date:  Wed May 23 21:50:43 2012 -0400
 
     Add Arabic diacritics tests
 
 
     Add Arabic diacritics tests
 
- .../shaper-arabic/script-arabic/misc/MANIFEST     |    2 +-
- .../script-arabic/misc/diacritics/MANIFEST        |    5 +
- .../script-arabic/misc/diacritics/lam-alef.txt     |  28 +
- .../misc/diacritics/language-arabic.txt           |  695
- ++++++++++++++++++++
- .../misc/diacritics/language-persian.txt          |   48 ++
- .../misc/diacritics/language-urdu.txt             |  188 ++++++
- .../misc/diacritics/ligature-diacritics.txt       |    1 +
- .../script-arabic/misc/ligature-diacritics.txt     |   1 -
+ .../shaper-arabic/script-arabic/misc/MANIFEST     |   2 +-
+ .../script-arabic/misc/diacritics/MANIFEST        |   5 +
+ .../script-arabic/misc/diacritics/lam-alef.txt     |  28 +
+ .../misc/diacritics/language-arabic.txt           | 695
+ +++++++++++++++++++++
+ .../misc/diacritics/language-persian.txt          |  48 ++
+ .../misc/diacritics/language-urdu.txt             | 188 ++++++
+ .../misc/diacritics/ligature-diacritics.txt       |   1 +
+ .../script-arabic/misc/ligature-diacritics.txt     |  1 -
  8 files changed, 966 insertions(+), 2 deletions(-)
 
 commit ed2f1363a391add41f10cff18792003583a10257
  8 files changed, 966 insertions(+), 2 deletions(-)
 
 commit ed2f1363a391add41f10cff18792003583a10257
@@ -8695,8 +20182,8 @@ Date:    Tue May 22 22:12:22 2012 -0400
     Still got to find an example font+string that makes this matter, but
     need this for fixing synthetic GDEF anyway.
 
     Still got to find an example font+string that makes this matter, but
     need this for fixing synthetic GDEF anyway.
 
- src/hb-ot-layout-gsub-table.hh       |   10 ++++------
- src/hb-ot-layout-gsubgpos-private.hh |   23 ++++++-----------------
+ src/hb-ot-layout-gsub-table.hh       | 10 ++++------
+ src/hb-ot-layout-gsubgpos-private.hh | 23 ++++++-----------------
  2 files changed, 10 insertions(+), 23 deletions(-)
 
 commit a6de53664df9549a5dc93752647ea1d3bb336f7b
  2 files changed, 10 insertions(+), 23 deletions(-)
 
 commit a6de53664df9549a5dc93752647ea1d3bb336f7b
@@ -8708,20 +20195,20 @@ Date:  Fri May 18 15:04:35 2012 -0400
     From:
     http://people.mozilla.org/~jdaggett/tests/cjkcompat.html
 
     From:
     http://people.mozilla.org/~jdaggett/tests/cjkcompat.html
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   3 +-
- .../in-tree/shaper-default/script-han/MANIFEST     |   1 +
- .../shaper-default/script-han/misc/MANIFEST       |    1 +
- .../shaper-default/script-han/misc/cjk-compat.txt  |   3 +
- .../shaper-default/script-hiragana/MANIFEST       |    1 +
- .../shaper-default/script-hiragana/misc/MANIFEST   |   2 +
- .../script-hiragana/misc/kazuraki-liga-lines.txt   |   8 +++
- .../script-hiragana/misc/kazuraki-liga.txt        |   53
- ++++++++++++++++++++
- .../shaper-default/script-japanese/MANIFEST       |    1 -
- .../shaper-default/script-japanese/misc/MANIFEST   |   2 -
- .../script-japanese/misc/kazuraki-liga-lines.txt   |   8 ---
- .../script-japanese/misc/kazuraki-liga.txt        |   53
- --------------------
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |  3 +-
+ .../in-tree/shaper-default/script-han/MANIFEST     |  1 +
+ .../shaper-default/script-han/misc/MANIFEST       |  1 +
+ .../shaper-default/script-han/misc/cjk-compat.txt  |  3 ++
+ .../shaper-default/script-hiragana/MANIFEST       |  1 +
+ .../shaper-default/script-hiragana/misc/MANIFEST   |  2 +
+ .../script-hiragana/misc/kazuraki-liga-lines.txt   |  8 ++++
+ .../script-hiragana/misc/kazuraki-liga.txt        | 53
+ ++++++++++++++++++++++
+ .../shaper-default/script-japanese/MANIFEST       |  1 -
+ .../shaper-default/script-japanese/misc/MANIFEST   |  2 -
+ .../script-japanese/misc/kazuraki-liga-lines.txt   |  8 ----
+ .../script-japanese/misc/kazuraki-liga.txt        | 53
+ ----------------------
  12 files changed, 71 insertions(+), 65 deletions(-)
 
 commit 20fdb0f41d81b226e076a4830d4b0d03da31fc19
  12 files changed, 71 insertions(+), 65 deletions(-)
 
 commit 20fdb0f41d81b226e076a4830d4b0d03da31fc19
@@ -8732,12 +20219,12 @@ Date:  Thu May 17 22:04:45 2012 -0400
 
     To be used for cmap and advance caching if desired.
 
 
     To be used for cmap and advance caching if desired.
 
- TODO                   |    2 +
- src/Makefile.am        |    1 +
- src/hb-cache-private.hh |   72
- +++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.cc                 |    2 +
- 4 files changed, 77 insertions(+), 0 deletions(-)
+ TODO                   |  2 ++
+ src/Makefile.am        |  1 +
+ src/hb-cache-private.hh | 72
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-font.cc                 |  2 ++
+ 4 files changed, 77 insertions(+)
 
 commit bd908b4f102b5ae18a3ad4a8b137994cf74b86ce
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd908b4f102b5ae18a3ad4a8b137994cf74b86ce
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8745,8 +20232,8 @@ Date:    Thu May 17 22:02:08 2012 -0400
 
     Implement hb_atomic_int_set() for OS X
 
 
     Implement hb_atomic_int_set() for OS X
 
- src/hb-atomic-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-atomic-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 022a05ae90f30bcddff413022e0cd801809b5390
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 022a05ae90f30bcddff413022e0cd801809b5390
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8754,8 +20241,8 @@ Date:    Thu May 17 21:53:24 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-atomic-private.hh |    4 +++-
- src/hb-mutex-private.hh  |    4 +++-
+ src/hb-atomic-private.hh | 4 +++-
+ src/hb-mutex-private.hh  | 4 +++-
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 22afd66a30d01b6771405e76777306f600807bea
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit 22afd66a30d01b6771405e76777306f600807bea
@@ -8764,8 +20251,8 @@ Date:    Thu May 17 21:23:49 2012 -0400
 
     Add hb_atomic_int_set() again
 
 
     Add hb_atomic_int_set() again
 
- src/hb-atomic-private.hh |    9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/hb-atomic-private.hh | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 4aa7258cb16176a89e1547fee8f86571fdd98307
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4aa7258cb16176a89e1547fee8f86571fdd98307
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8773,8 +20260,8 @@ Date:    Thu May 17 21:01:04 2012 -0400
 
     Fix type conflicts on Windows without glib
 
 
     Fix type conflicts on Windows without glib
 
- src/hb-tt-font.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-tt-font.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit f039e79d5438a8fc4a3ec11a387bbfc0f6b83024
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f039e79d5438a8fc4a3ec11a387bbfc0f6b83024
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8784,8 +20271,8 @@ Date:    Thu May 17 20:55:12 2012 -0400
 
     They can be macros on some systems.  Eg. mingw32.
 
 
     They can be macros on some systems.  Eg. mingw32.
 
- src/hb-set-private.hh |    4 ++--
- src/hb-set.cc        |    4 ++--
+ src/hb-set-private.hh | 4 ++--
+ src/hb-set.cc        | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 34961e3198e27fa37fd4cfdad12ef86a2e9e51c2
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 34961e3198e27fa37fd4cfdad12ef86a2e9e51c2
@@ -8794,8 +20281,8 @@ Date:    Thu May 17 20:50:38 2012 -0400
 
     Prefer native atomic/mutex ops to glib's
 
 
     Prefer native atomic/mutex ops to glib's
 
- src/hb-atomic-private.hh |   29 ++++++++++++++++-------------
- src/hb-mutex-private.hh  |   24 ++++++++++++++----------
+ src/hb-atomic-private.hh | 29 ++++++++++++++++-------------
+ src/hb-mutex-private.hh  | 24 ++++++++++++++----------
  2 files changed, 30 insertions(+), 23 deletions(-)
 
 commit ec3ba4b96fc4f262db1ff9f906628c32f26c9b7d
  2 files changed, 30 insertions(+), 23 deletions(-)
 
 commit ec3ba4b96fc4f262db1ff9f906628c32f26c9b7d
@@ -8804,12 +20291,12 @@ Date:  Thu May 17 20:30:46 2012 -0400
 
     Move atomic ops into their own header
 
 
     Move atomic ops into their own header
 
- src/Makefile.am         |    1 +
- src/hb-atomic-private.hh |   78
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-mutex-private.hh  |    1 -
- src/hb-object-private.hh |   52 +-----------------------------
- src/hb-warning.cc       |    2 +-
+ src/Makefile.am         |  1 +
+ src/hb-atomic-private.hh | 78
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-mutex-private.hh  |  1 -
+ src/hb-object-private.hh | 52 ++------------------------------
+ src/hb-warning.cc       |  2 +-
  5 files changed, 82 insertions(+), 52 deletions(-)
 
 commit de0878395be5c72d7058faac8f64715bdd42eb3b
  5 files changed, 82 insertions(+), 52 deletions(-)
 
 commit de0878395be5c72d7058faac8f64715bdd42eb3b
@@ -8818,8 +20305,8 @@ Date:    Thu May 17 20:15:49 2012 -0400
 
     Update TODO
 
 
     Update TODO
 
- TODO |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ TODO | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit c87b317f0eb118e67134e8e419a6d65e0fa40d30
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c87b317f0eb118e67134e8e419a6d65e0fa40d30
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8856,11 +20343,11 @@ Date:  Tue May 15 23:53:18 2012 -0400
     --no-glyph-names
     5 6 133 134 135 136
 
     --no-glyph-names
     5 6 133 134 135 136
 
- configure.ac               |    2 +-
- util/Makefile.am           |   22 ++++++---
- util/hb-ot-shape-closure.cc | 112
- +++++++++++++++++++++++++++++++++++++++++++
- util/options.hh            |   12 +++++
+ configure.ac               |   2 +-
+ util/Makefile.am           |  22 ++++++---
+ util/hb-ot-shape-closure.cc | 112
+ ++++++++++++++++++++++++++++++++++++++++++++
+ util/options.hh            |  12 +++++
  4 files changed, 140 insertions(+), 8 deletions(-)
 
 commit 45675e589e6ef9f81b2a4199cf33e3e7778433a8
  4 files changed, 140 insertions(+), 8 deletions(-)
 
 commit 45675e589e6ef9f81b2a4199cf33e3e7778433a8
@@ -8869,14 +20356,14 @@ Date:  Tue May 15 23:10:39 2012 -0400
 
     [util] Refactor to accommodate for upcoming new tool
 
 
     [util] Refactor to accommodate for upcoming new tool
 
- util/Makefile.am      |   10 +++--
- util/hb-shape.cc      |   70 ++++++++++++++++++-----------------------
- util/hb-view.cc       |    8 +++--
- util/hb-view.hh       |   80
- ------------------------------------------------
- util/main-font-text.hh |   80
- ++++++++++++++++++++++++++++++++++++++++++++++++
- util/shape-consumer.hh |   69 +++++++++++++++++++++++++++++++++++++++++
+ util/Makefile.am      | 10 ++++---
+ util/hb-shape.cc      | 70 +++++++++++++++++++------------------------
+ util/hb-view.cc       |  8 +++--
+ util/hb-view.hh       | 80
+ --------------------------------------------------
+ util/main-font-text.hh | 80
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/shape-consumer.hh | 69 +++++++++++++++++++++++++++++++++++++++++++
  6 files changed, 191 insertions(+), 126 deletions(-)
 
 commit 1d6846db9ebf84561bb30a4e48c6c43184914099
  6 files changed, 191 insertions(+), 126 deletions(-)
 
 commit 1d6846db9ebf84561bb30a4e48c6c43184914099
@@ -8888,8 +20375,8 @@ Date:    Sun May 13 18:09:29 2012 +0200
     Testing with old Deva spec this reduces failures.
     Test sequence: U+0915,U+094D,U+0930.
 
     Testing with old Deva spec this reduces failures.
     Test sequence: U+0915,U+094D,U+0930.
 
- src/hb-ot-shape-complex-indic.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 8caf5dcd66550351c6038b9ae7ecc5254eed64ff
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8caf5dcd66550351c6038b9ae7ecc5254eed64ff
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8897,9 +20384,9 @@ Date:    Sun May 13 17:10:18 2012 +0200
 
     Minor
 
 
     Minor
 
- util/ansi-print.cc |  67
- +++++++++++++++++++++++++--------------------------
- 1 files changed, 33 insertions(+), 34 deletions(-)
+ util/ansi-print.cc | 67
+ +++++++++++++++++++++++++++---------------------------
+ 1 file changed, 33 insertions(+), 34 deletions(-)
 
 commit 617f4ac46f1084859d2034c08760e31e52d3bec3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 617f4ac46f1084859d2034c08760e31e52d3bec3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8907,9 +20394,9 @@ Date:    Sun May 13 16:48:03 2012 +0200
 
     Refactor
 
 
     Refactor
 
- src/hb-ot-shape-complex-indic.cc |   44
- +++++++++++++++++++------------------
- 1 files changed, 23 insertions(+), 21 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 44
+ +++++++++++++++++++++-------------------
+ 1 file changed, 23 insertions(+), 21 deletions(-)
 
 commit 5e4e21fce4b548b0b8a5951bc8f35a9f27428192
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5e4e21fce4b548b0b8a5951bc8f35a9f27428192
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8919,8 +20406,8 @@ Date:    Sun May 13 16:46:08 2012 +0200
 
     This reverts commit 0831061efb78983b9c6e1e72574c977e56383c08.
 
 
     This reverts commit 0831061efb78983b9c6e1e72574c977e56383c08.
 
- src/hb-ot-shape-complex-indic.cc |   28 ++++++++--------------------
- 1 files changed, 8 insertions(+), 20 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 28 ++++++++--------------------
+ 1 file changed, 8 insertions(+), 20 deletions(-)
 
 commit 3f18236a03880c0960f5990dc90685f6146951a6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3f18236a03880c0960f5990dc90685f6146951a6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8928,9 +20415,9 @@ Date:    Sun May 13 16:20:10 2012 +0200
 
     Fix more warnings
 
 
     Fix more warnings
 
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gsub-table.hh     |   2 +-
- src/hb-ot-shape-complex-indic.cc   |   8 ++++----
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh     | 2 +-
+ src/hb-ot-shape-complex-indic.cc   | 8 ++++----
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 9f377ed3210fe7d9f15e0c4f82020556f9a8f6f0
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 9f377ed3210fe7d9f15e0c4f82020556f9a8f6f0
@@ -8939,11 +20426,11 @@ Date:  Sun May 13 16:13:44 2012 +0200
 
     Fix more unused-var warnings
 
 
     Fix more unused-var warnings
 
- src/hb-ot-shape-complex-arabic.cc |   7 +++++--
- src/hb-ot-shape-complex-indic.cc  |   25 ++++++++++++++++++-------
- src/hb-ot-shape-complex-misc.cc   |   21 +++++++++++++++------
- src/hb-ot-shape-normalize.cc     |   13 ++++++-------
- src/hb-set.cc                    |    2 +-
+ src/hb-ot-shape-complex-arabic.cc |  7 +++++--
+ src/hb-ot-shape-complex-indic.cc  | 25 ++++++++++++++++++-------
+ src/hb-ot-shape-complex-misc.cc   | 21 +++++++++++++++------
+ src/hb-ot-shape-normalize.cc     | 13 ++++++-------
+ src/hb-set.cc                    |  2 +-
  5 files changed, 45 insertions(+), 23 deletions(-)
 
 commit d993e72331c6c4c783b803e01e4d4a02c8e3eb77
  5 files changed, 45 insertions(+), 23 deletions(-)
 
 commit d993e72331c6c4c783b803e01e4d4a02c8e3eb77
@@ -8952,8 +20439,8 @@ Date:    Sun May 13 16:04:36 2012 +0200
 
     Fix hb_face_set_index()
 
 
     Fix hb_face_set_index()
 
- src/hb-font.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 93345edcbea49bdf0e22f26b5b74a23e601dfab4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 93345edcbea49bdf0e22f26b5b74a23e601dfab4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8961,9 +20448,9 @@ Date:    Sun May 13 16:01:08 2012 +0200
 
     Fix warnings
 
 
     Fix warnings
 
- src/hb-fallback-shape.cc |    4 +-
- src/hb-private.hh       |   54
- +++++++++++++++++++++++-----------------------
+ src/hb-fallback-shape.cc |  4 ++--
+ src/hb-private.hh       | 54
+ ++++++++++++++++++++++++------------------------
  2 files changed, 29 insertions(+), 29 deletions(-)
 
 commit eace47b173807d94b29a6490d0bc3c9f8f6168d1
  2 files changed, 29 insertions(+), 29 deletions(-)
 
 commit eace47b173807d94b29a6490d0bc3c9f8f6168d1
@@ -8972,8 +20459,8 @@ Date:    Sun May 13 15:54:43 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 99c2695759a6af855d565f4994bbdf220570bb48
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 99c2695759a6af855d565f4994bbdf220570bb48
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -8981,15 +20468,15 @@ Date:  Sun May 13 15:45:18 2012 +0200
 
     Add accessort to buffer for current info, current pos, and prev info
 
 
     Add accessort to buffer for current info, current pos, and prev info
 
- src/hb-buffer-private.hh            |    9 +++++++
- src/hb-ot-layout-gpos-table.hh       |   44
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-table.hh       |   28 ++++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |   28 ++++++++++----------
- src/hb-ot-shape-complex-arabic.cc    |    4 +-
- src/hb-ot-shape-complex-misc.cc      |    5 ++-
- src/hb-ot-shape-normalize.cc        |   16 ++++++------
- src/hb-ot-shape.cc                  |    8 +++---
+ src/hb-buffer-private.hh            |  9 ++++++++
+ src/hb-ot-layout-gpos-table.hh       | 44
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-table.hh       | 28 +++++++++++------------
+ src/hb-ot-layout-gsubgpos-private.hh | 28 +++++++++++------------
+ src/hb-ot-shape-complex-arabic.cc    |  4 ++--
+ src/hb-ot-shape-complex-misc.cc      |  5 ++--
+ src/hb-ot-shape-normalize.cc        | 16 ++++++-------
+ src/hb-ot-shape.cc                  |  8 +++----
  8 files changed, 76 insertions(+), 66 deletions(-)
 
 commit 6736f3c5b09af6a71935afc04248b033e171a9b2
  8 files changed, 76 insertions(+), 66 deletions(-)
 
 commit 6736f3c5b09af6a71935afc04248b033e171a9b2
@@ -8998,8 +20485,8 @@ Date:    Sun May 13 15:21:06 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    7 +++----
- 1 files changed, 3 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
 
 commit 5df809b655bb1318115651fd87d4555cdd9b41cb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5df809b655bb1318115651fd87d4555cdd9b41cb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9011,10 +20498,10 @@ Date:  Sun May 13 15:17:51 2012 +0200
     and AOTS doesn't do it either.  It was inherited from old HarfBuzz.
     Remove it.
 
     and AOTS doesn't do it either.  It was inherited from old HarfBuzz.
     Remove it.
 
- src/hb-ot-layout-common-private.hh   |    1 -
- src/hb-ot-layout-gpos-table.hh       |    3 ---
- src/hb-ot-layout-gsub-table.hh       |    6 ++----
- src/hb-ot-layout-gsubgpos-private.hh |   32
+ src/hb-ot-layout-common-private.hh   |  1 -
+ src/hb-ot-layout-gpos-table.hh       |  3 ---
+ src/hb-ot-layout-gsub-table.hh       |  6 ++----
+ src/hb-ot-layout-gsubgpos-private.hh | 32
  +++++++++++---------------------
  4 files changed, 13 insertions(+), 29 deletions(-)
 
  +++++++++++---------------------
  4 files changed, 13 insertions(+), 29 deletions(-)
 
@@ -9024,8 +20511,8 @@ Date:    Sun May 13 15:04:00 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |   11 +++++------
- 1 files changed, 5 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
 
 commit 50f630c17ced1bd59b4da4f27728dcfbb876400a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 50f630c17ced1bd59b4da4f27728dcfbb876400a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9035,9 +20522,9 @@ Date:    Sun May 13 13:03:44 2012 +0200
 
     Ended up not using terminal size after all.
 
 
     Ended up not using terminal size after all.
 
- configure.ac      |    2 +-
- util/ansi-print.cc |  11 -----------
- 2 files changed, 1 insertions(+), 12 deletions(-)
+ configure.ac      |  2 +-
+ util/ansi-print.cc | 11 -----------
+ 2 files changed, 1 insertion(+), 12 deletions(-)
 
 commit db0de7cd616e1e9d6fde6659e52a541477fb0148
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db0de7cd616e1e9d6fde6659e52a541477fb0148
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9045,8 +20532,8 @@ Date:    Sun May 13 13:02:38 2012 +0200
 
     [util] Set ansi color only on color change
 
 
     [util] Set ansi color only on color change
 
- util/ansi-print.cc |  28 +++++++++++++++++++++++-----
- 1 files changed, 23 insertions(+), 5 deletions(-)
+ util/ansi-print.cc | 28 +++++++++++++++++++++++-----
+ 1 file changed, 23 insertions(+), 5 deletions(-)
 
 commit 912c5ff80a255edb8145b9db69e2ed828f8eab5c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 912c5ff80a255edb8145b9db69e2ed828f8eab5c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9054,8 +20541,8 @@ Date:    Sun May 13 12:51:02 2012 +0200
 
     Reduce default margin
 
 
     Reduce default margin
 
- util/options.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 52e7b1424a3613122e9ca30879298df42733acda
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52e7b1424a3613122e9ca30879298df42733acda
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9063,15 +20550,15 @@ Date:  Sun May 13 02:02:58 2012 +0200
 
     [util] Make hb-view print out Unicode art if stdout is a terminal
 
 
     [util] Make hb-view print out Unicode art if stdout is a terminal
 
- configure.ac             |    4 +-
- util/Makefile.am         |    4 +
- util/ansi-print.cc       |  411
- +++++++++++++++++++++++++++++++++++++++++++++
- util/ansi-print.hh       |   39 +++++
- util/helper-cairo-ansi.cc |  102 +++++++++++
- util/helper-cairo-ansi.hh |   39 +++++
- util/helper-cairo.cc     |   70 ++++++++-
- util/options.hh          |    3 +
+ configure.ac             |   4 +-
+ util/Makefile.am         |   4 +
+ util/ansi-print.cc       | 411
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ util/ansi-print.hh       |  39 +++++
+ util/helper-cairo-ansi.cc | 102 ++++++++++++
+ util/helper-cairo-ansi.hh |  39 +++++
+ util/helper-cairo.cc     |  70 +++++++-
+ util/options.hh          |   3 +
  8 files changed, 668 insertions(+), 4 deletions(-)
 
 commit 8b2753ce2bea8a21ea757186d86dc4a55d8c8b0c
  8 files changed, 668 insertions(+), 4 deletions(-)
 
 commit 8b2753ce2bea8a21ea757186d86dc4a55d8c8b0c
@@ -9080,8 +20567,8 @@ Date:    Sun May 13 00:54:07 2012 +0200
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 30874b4819a99cc84fa39e794266685e1b8735d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 30874b4819a99cc84fa39e794266685e1b8735d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9091,9 +20578,9 @@ Date:    Sat May 12 15:54:27 2012 +0200
 
     One less argument to type in typical testing workflow!
 
 
     One less argument to type in typical testing workflow!
 
- util/hb-view.hh |    4 +++-
- util/options.cc |   12 +++++-------
- util/options.hh |    2 +-
+ util/hb-view.hh |  4 +++-
+ util/options.cc | 12 +++++-------
+ util/options.hh |  2 +-
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 2097951110e33fe091ed9515ae77e2683c46c889
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 2097951110e33fe091ed9515ae77e2683c46c889
@@ -9106,8 +20593,8 @@ Date:    Sat May 12 15:41:48 2012 +0200
     testing / inspection.  Not having to type "--font-size 150" each time
     isn't such a bad idea...
 
     testing / inspection.  Not having to type "--font-size 150" each time
     isn't such a bad idea...
 
- util/options.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ util/options.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 737dded2e08fcc19935db51c05201a987184d337
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 737dded2e08fcc19935db51c05201a987184d337
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9115,8 +20602,8 @@ Date:    Sat May 12 15:40:11 2012 +0200
 
     Fix compiler warnings
 
 
     Fix compiler warnings
 
- src/hb-ot-shape-complex-indic.cc |    5 -----
- 1 files changed, 0 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 -----
+ 1 file changed, 5 deletions(-)
 
 commit f538fcb538f1decb4100ba89457eb83f2350d64b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f538fcb538f1decb4100ba89457eb83f2350d64b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9126,8 +20613,8 @@ Date:    Sat May 12 15:34:40 2012 +0200
 
     Just default to it.  Added "--help" instead to get usage.
 
 
     Just default to it.  Added "--help" instead to get usage.
 
- test/shaping/hb_test_tools.py |    9 ++++-----
- 1 files changed, 4 insertions(+), 5 deletions(-)
+ test/shaping/hb_test_tools.py | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
 
 commit a3273e30bb7ffd727ffc18af5716dfef705d3d94
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a3273e30bb7ffd727ffc18af5716dfef705d3d94
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9135,9 +20622,9 @@ Date:    Sat May 12 13:34:18 2012 +0200
 
     [Indic] Add more Malayalam tests
 
 
     [Indic] Add more Malayalam tests
 
- .../indic/script-malayalam/misc/misc.txt          |   38
- ++++++++++++++++++++
- 1 files changed, 38 insertions(+), 0 deletions(-)
+ .../indic/script-malayalam/misc/misc.txt          | 38
+ ++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
 
 commit 7f852b644b8143492a02edfc853114aaa23446bd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7f852b644b8143492a02edfc853114aaa23446bd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9145,8 +20632,8 @@ Date:    Fri May 11 23:10:31 2012 +0200
 
     Fix compiler warnings
 
 
     Fix compiler warnings
 
- src/hb-ot-shape-complex-indic.cc   |   2 +-
- src/hb-ot-shape-complex-private.hh |   2 +-
+ src/hb-ot-shape-complex-indic.cc   | 2 +-
+ src/hb-ot-shape-complex-private.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit f7e8dcfd4fc377e3d786b097beb656284240456d
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit f7e8dcfd4fc377e3d786b097beb656284240456d
@@ -9161,8 +20648,8 @@ Date:    Fri May 11 22:00:06 2012 +0200
     and
     letting me get commit points.
 
     and
     letting me get commit points.
 
- configure.ac                            |    2 +-
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
+ configure.ac                            | 2 +-
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 6a091df9b403b147ef78f3974610dedf4ce1e08a
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 6a091df9b403b147ef78f3974610dedf4ce1e08a
@@ -9173,9 +20660,9 @@ Date:    Fri May 11 21:42:27 2012 +0200
 
     Bengali is at *just* above 5% now.
 
 
     Bengali is at *just* above 5% now.
 
- src/hb-ot-shape-complex-indic-private.hh |   31
- ++++++++++++++---------------
- src/hb-ot-shape-complex-indic.cc        |   12 +++++-----
+ src/hb-ot-shape-complex-indic-private.hh | 31
+ +++++++++++++++----------------
+ src/hb-ot-shape-complex-indic.cc        | 12 ++++++------
  2 files changed, 21 insertions(+), 22 deletions(-)
 
 commit 9d0d319a4a7e85d922e58fade0f40caae1c9f109
  2 files changed, 21 insertions(+), 22 deletions(-)
 
 commit 9d0d319a4a7e85d922e58fade0f40caae1c9f109
@@ -9184,9 +20671,9 @@ Date:    Fri May 11 21:36:32 2012 +0200
 
     [Indic] Position Bengali Reph before matras
 
 
     [Indic] Position Bengali Reph before matras
 
- src/hb-ot-shape-complex-indic.cc |   62
- ++++++++++++++++++++++----------------
- 1 files changed, 36 insertions(+), 26 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 62
+ +++++++++++++++++++++++-----------------
+ 1 file changed, 36 insertions(+), 26 deletions(-)
 
 commit f89367251109af235f4f0446c13c261a5a4a6f72
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f89367251109af235f4f0446c13c261a5a4a6f72
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9194,9 +20681,9 @@ Date:    Fri May 11 21:10:03 2012 +0200
 
     [Indic] Start categorizing Reph per script
 
 
     [Indic] Start categorizing Reph per script
 
- src/hb-ot-shape-complex-indic.cc |   41
- ++++++++++++++++++++++++++++++++-----
- 1 files changed, 35 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 41
+ ++++++++++++++++++++++++++++++++++------
+ 1 file changed, 35 insertions(+), 6 deletions(-)
 
 commit a913b024d84973556094fd64ce5f0b7106fcc3b5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a913b024d84973556094fd64ce5f0b7106fcc3b5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9206,8 +20693,8 @@ Date:    Fri May 11 20:59:26 2012 +0200
 
     Error down from 20% to 7%.
 
 
     Error down from 20% to 7%.
 
- src/hb-ot-shape-complex-indic.cc |   15 +++++++++++++++
- 1 files changed, 15 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
 
 commit eed903b1644e087178438959664a6a57bebc398b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eed903b1644e087178438959664a6a57bebc398b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9217,9 +20704,9 @@ Date:    Fri May 11 20:50:53 2012 +0200
 
     Yep, on Bengali now!
 
 
     Yep, on Bengali now!
 
- src/hb-ot-shape-complex-indic.cc |   52
- ++++++++++++++++++++++++++-----------
- 1 files changed, 36 insertions(+), 16 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 52
+ +++++++++++++++++++++++++++-------------
+ 1 file changed, 36 insertions(+), 16 deletions(-)
 
 commit 18c06e189bd078affbb84c3bb5bb80687a227c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 18c06e189bd078affbb84c3bb5bb80687a227c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9232,9 +20719,9 @@ Date:    Fri May 11 20:02:14 2012 +0200
     possible
     sequence with 25CC at the end.
 
     possible
     sequence with 25CC at the end.
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 +++-
- src/hb-ot-shape-complex-indic-private.hh |    3 ++-
- src/hb-ot-shape-complex-indic.cc        |   20 ++++++++++++++++----
+ src/hb-ot-shape-complex-indic-machine.rl |  4 +++-
+ src/hb-ot-shape-complex-indic-private.hh |  3 ++-
+ src/hb-ot-shape-complex-indic.cc        | 20 ++++++++++++++++----
  3 files changed, 21 insertions(+), 6 deletions(-)
 
 commit 5b16de97bcc4b24da4c77ca6c1a42e814d8cdbd1
  3 files changed, 21 insertions(+), 6 deletions(-)
 
 commit 5b16de97bcc4b24da4c77ca6c1a42e814d8cdbd1
@@ -9243,9 +20730,10 @@ Date:   Fri May 11 19:55:42 2012 +0200
 
     [Indic] Add tests for dottedcircle
 
 
     [Indic] Add tests for dottedcircle
 
- .../indic/script-devanagari/misc/MANIFEST         |    1 +
- .../indic/script-devanagari/misc/dottedcircle.txt  |   7 +++++++
- 2 files changed, 8 insertions(+), 0 deletions(-)
+ .../in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST     | 1 +
+ .../shaper-indic/indic/script-devanagari/misc/dottedcircle.txt     |
+ 7 +++++++
+ 2 files changed, 8 insertions(+)
 
 commit 0831061efb78983b9c6e1e72574c977e56383c08
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0831061efb78983b9c6e1e72574c977e56383c08
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9253,8 +20741,8 @@ Date:    Fri May 11 19:07:58 2012 +0200
 
     [Indic] Refactoring
 
 
     [Indic] Refactoring
 
- src/hb-ot-shape-complex-indic.cc |   26 ++++++++++++++++++--------
- 1 files changed, 18 insertions(+), 8 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 26 ++++++++++++++++++--------
+ 1 file changed, 18 insertions(+), 8 deletions(-)
 
 commit 7ea58db311bfb0d8f804d1e9f4a1f004bd45075a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7ea58db311bfb0d8f804d1e9f4a1f004bd45075a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9262,8 +20750,8 @@ Date:    Fri May 11 18:58:57 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 9c09928989316e2befe00d52ed66e055637ccd36
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9c09928989316e2befe00d52ed66e055637ccd36
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9275,8 +20763,8 @@ Date:    Fri May 11 18:46:35 2012 +0200
     Tests:
     ↦       * U+0905,U+094D,U+092B,U+094D,930,94d,930
 
     Tests:
     ↦       * U+0905,U+094D,U+092B,U+094D,930,94d,930
 
- src/hb-ot-shape-complex-indic-machine.rl |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 8c0aa486f31e9b6cbb31ce295573b53b0a214124
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8c0aa486f31e9b6cbb31ce295573b53b0a214124
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9296,8 +20784,8 @@ Date:    Fri May 11 18:13:42 2012 +0200
            * U+0959,U+093C,U+093C,U+093C,U+0941
            * 915,93c,93c,,94d,U+0916,U+093C,U+093C,U+093e,93c,93c
 
            * U+0959,U+093C,U+093C,U+093C,U+0941
            * 915,93c,93c,,94d,U+0916,U+093C,U+093C,U+093e,93c,93c
 
- src/hb-ot-shape-complex-indic-machine.rl |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 3399a06e7033651ee926448737bdb18e553c1796
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3399a06e7033651ee926448737bdb18e553c1796
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9307,8 +20795,8 @@ Date:    Fri May 11 17:54:26 2012 +0200
 
     See comments.
 
 
     See comments.
 
- src/hb-ot-shape-complex-indic-machine.rl |    1 +
- src/hb-ot-shape-complex-indic.cc        |   16 +++++++++++-----
+ src/hb-ot-shape-complex-indic-machine.rl |  1 +
+ src/hb-ot-shape-complex-indic.cc        | 16 +++++++++++-----
  2 files changed, 12 insertions(+), 5 deletions(-)
 
 commit 11aa3ef18dbc6ac9561bd119f5ca2c1aa1209c3a
  2 files changed, 12 insertions(+), 5 deletions(-)
 
 commit 11aa3ef18dbc6ac9561bd119f5ca2c1aa1209c3a
@@ -9317,8 +20805,8 @@ Date:    Fri May 11 17:30:48 2012 +0200
 
     [Indic] Treat U+0951..U+0954 all similar to U+0952
 
 
     [Indic] Treat U+0951..U+0954 all similar to U+0952
 
- src/hb-ot-shape-complex-indic.cc |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 5f131d3226131df440d7f36655e57f6effcae204
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5f131d3226131df440d7f36655e57f6effcae204
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9331,8 +20819,8 @@ Date:    Fri May 11 17:29:40 2012 +0200
     This regresses tests right now.  And we are not sure whether this is
     the right thing to do for GPOS.  But we'll figure out.
 
     This regresses tests right now.  And we are not sure whether this is
     the right thing to do for GPOS.  But we'll figure out.
 
- src/hb-ot-layout-gsubgpos-private.hh |   18 ++++++++++++------
- 1 files changed, 12 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
 
 commit 8fd83aaf6e50c2c25002c51fee26d82847a61769
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8fd83aaf6e50c2c25002c51fee26d82847a61769
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9340,8 +20828,8 @@ Date:    Fri May 11 17:18:37 2012 +0200
 
     [GSUB/GPOS] Fix wrong buffer access in backward skippy mask matching
 
 
     [GSUB/GPOS] Fix wrong buffer access in backward skippy mask matching
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ff24d1081af08a887895975285d7e38f5d07bc37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ff24d1081af08a887895975285d7e38f5d07bc37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9349,8 +20837,8 @@ Date:    Fri May 11 17:07:08 2012 +0200
 
     [Indic] Don't use syllable serial value 0
 
 
     [Indic] Don't use syllable serial value 0
 
- src/hb-ot-shape-complex-indic-machine.rl |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 892eb7878238d810a2a70f9dadbf958207bfeaa1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 892eb7878238d810a2a70f9dadbf958207bfeaa1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9358,8 +20846,8 @@ Date:    Fri May 11 16:54:40 2012 +0200
 
     [Indic] Implement Uniscribe Reph+Matra+Halant bug feature
 
 
     [Indic] Implement Uniscribe Reph+Matra+Halant bug feature
 
- src/hb-ot-shape-complex-indic.cc |   14 +++++++++-----
- 1 files changed, 9 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
 
 commit 67ea29af49bb08ee679914076808327992cf6676
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 67ea29af49bb08ee679914076808327992cf6676
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9367,8 +20855,8 @@ Date:    Fri May 11 16:51:23 2012 +0200
 
     [Indic] Add example of different Uniscribe behavior
 
 
     [Indic] Add example of different Uniscribe behavior
 
- src/hb-ot-shape-complex-indic.cc |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit ebe29733d44fe0fa9fb30f946ab0dd7a40336a24
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ebe29733d44fe0fa9fb30f946ab0dd7a40336a24
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9382,9 +20870,9 @@ Date:    Fri May 11 16:43:12 2012 +0200
 
     Plus, LeftMatra+Halant "feature".
 
 
     Plus, LeftMatra+Halant "feature".
 
- src/hb-ot-shape-complex-indic.cc |   44
- ++++++++++++++++++++++++++++---------
- 1 files changed, 33 insertions(+), 11 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 44
+ ++++++++++++++++++++++++++++++----------
+ 1 file changed, 33 insertions(+), 11 deletions(-)
 
 commit 616e692e2950d326b6c46aba5b5bead3cc29d315
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 616e692e2950d326b6c46aba5b5bead3cc29d315
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9392,8 +20880,8 @@ Date:    Fri May 11 16:25:02 2012 +0200
 
     [Indic] Add #define UNISCRIBE_BUG_COMPATIBLE 1
 
 
     [Indic] Add #define UNISCRIBE_BUG_COMPATIBLE 1
 
- src/hb-ot-shape-complex-indic.cc |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 6782bdae3be0357da1dadc7b806a43ceefa67a90
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6782bdae3be0357da1dadc7b806a43ceefa67a90
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9403,8 +20891,8 @@ Date:    Fri May 11 16:23:43 2012 +0200
 
     As can be seen in: U+092B,U+093F,U+094D
 
 
     As can be seen in: U+092B,U+093F,U+094D
 
- src/hb-ot-shape-complex-indic.cc |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit 3c2ea9481b1028e927e615a5434ebf8edcb5f891
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3c2ea9481b1028e927e615a5434ebf8edcb5f891
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9412,9 +20900,9 @@ Date:    Fri May 11 16:23:38 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |   73
- +++++++++++++++++++------------------
- 1 files changed, 37 insertions(+), 36 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 73
+ ++++++++++++++++++++--------------------
+ 1 file changed, 37 insertions(+), 36 deletions(-)
 
 commit c071b99f150a9344a2056dfeba8c613f8a5602db
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c071b99f150a9344a2056dfeba8c613f8a5602db
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9425,8 +20913,9 @@ Date:    Fri May 11 16:22:46 2012 +0200
     Uniscribe doesn't move the Halant, we do.  And do a broken job of
     it now.
 
     Uniscribe doesn't move the Halant, we do.  And do a broken job of
     it now.
 
- .../script-devanagari/misc/tricky-reordering.txt   |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 203d71069c45048b6dd8fa22b61fd8f2c844b4f6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 203d71069c45048b6dd8fa22b61fd8f2c844b4f6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9434,8 +20923,8 @@ Date:    Fri May 11 16:01:44 2012 +0200
 
     [GSUB/GPOS] Check all glyph masks when matching input
 
 
     [GSUB/GPOS] Check all glyph masks when matching input
 
- src/hb-ot-layout-gsubgpos-private.hh |   18 ++++++++++++------
- 1 files changed, 12 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
 
 commit 668c6046c1b3af3bd316bda0cc8636f2a5e8df42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 668c6046c1b3af3bd316bda0cc8636f2a5e8df42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9445,8 +20934,8 @@ Date:    Fri May 11 15:34:13 2012 +0200
 
     Needed for upcoming changes to GSUB/GPOS mask matching.
 
 
     Needed for upcoming changes to GSUB/GPOS mask matching.
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 4be46bade26faf13f7b4d447e9cc608e183955dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4be46bade26faf13f7b4d447e9cc608e183955dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9454,9 +20943,9 @@ Date:    Fri May 11 14:39:01 2012 +0200
 
     [Indic] Fix state machine to backtrack
 
 
     [Indic] Fix state machine to backtrack
 
- src/hb-ot-shape-complex-indic-machine.rl |   42
- +++++++++++++----------------
- src/hb-private.hh                       |    2 +
+ src/hb-ot-shape-complex-indic-machine.rl | 42
+ +++++++++++++++-----------------
+ src/hb-private.hh                       |  2 ++
  2 files changed, 21 insertions(+), 23 deletions(-)
 
 commit cee7187447b76b22e1bb6136d137b35ac49c3a5d
  2 files changed, 21 insertions(+), 23 deletions(-)
 
 commit cee7187447b76b22e1bb6136d137b35ac49c3a5d
@@ -9467,14 +20956,14 @@ Date:  Fri May 11 11:41:39 2012 +0200
 
     This is to incorporate it into GSUB/GPOS processing.
 
 
     This is to incorporate it into GSUB/GPOS processing.
 
- src/hb-ot-layout-gpos-table.hh                  |    1 +
- src/hb-ot-layout-gsub-table.hh                  |    3 ++-
- src/hb-ot-layout-gsubgpos-private.hh    |    3 ---
- src/hb-ot-layout-private.hh             |    4 +---
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- src/hb-ot-shape-complex-indic-private.hh |    1 -
- src/hb-ot-shape-complex-indic.cc        |    8 +++-----
- src/hb-ot-shape-complex-private.hh      |   13 ++++++++-----
+ src/hb-ot-layout-gpos-table.hh                  |  1 +
+ src/hb-ot-layout-gsub-table.hh                  |  3 ++-
+ src/hb-ot-layout-gsubgpos-private.hh    |  3 ---
+ src/hb-ot-layout-private.hh             |  4 +---
+ src/hb-ot-shape-complex-indic-machine.rl |  2 +-
+ src/hb-ot-shape-complex-indic-private.hh |  1 -
+ src/hb-ot-shape-complex-indic.cc        |  8 +++-----
+ src/hb-ot-shape-complex-private.hh      | 13 ++++++++-----
  8 files changed, 16 insertions(+), 19 deletions(-)
 
 commit 3bf27a9f0e92aa31b464bd3b9fdea5933c9ae8b1
  8 files changed, 16 insertions(+), 19 deletions(-)
 
 commit 3bf27a9f0e92aa31b464bd3b9fdea5933c9ae8b1
@@ -9487,8 +20976,8 @@ Date:    Fri May 11 11:17:23 2012 +0200
     itself
     causes the ligature to fail to match anyway.
 
     itself
     causes the ligature to fail to match anyway.
 
- src/hb-ot-shape-complex-indic.cc |    7 +------
- 1 files changed, 1 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
 
 commit c6d904d67db589dd6209928e56504f04f6a07756
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c6d904d67db589dd6209928e56504f04f6a07756
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9498,8 +20987,8 @@ Date:    Fri May 11 11:07:40 2012 +0200
 
     Another 1000 down!
 
 
     Another 1000 down!
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 55fe2cf79b11d9a63ea33b3ee76bd0ebca345157
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 55fe2cf79b11d9a63ea33b3ee76bd0ebca345157
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9509,8 +20998,8 @@ Date:    Fri May 11 03:45:28 2012 +0200
 
     Yay!
 
 
     Yay!
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7bd2b04fea5649d77d796d58b7f4918fe0378ee5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7bd2b04fea5649d77d796d58b7f4918fe0378ee5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9518,8 +21007,8 @@ Date:    Fri May 11 03:40:58 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-object-private.hh |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-object-private.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit cf26510dbbd8d38486e6ba423800db6427ade332
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cf26510dbbd8d38486e6ba423800db6427ade332
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9529,8 +21018,8 @@ Date:    Fri May 11 03:35:08 2012 +0200
 
     Done.  I promise.
 
 
     Done.  I promise.
 
- src/hb-object-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-object-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 9659523ca32b0e254d0e5fe387d817208d9cb6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9659523ca32b0e254d0e5fe387d817208d9cb6bf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9538,8 +21027,8 @@ Date:    Fri May 11 03:33:36 2012 +0200
 
     More beauty in debug output!
 
 
     More beauty in debug output!
 
- src/hb-private.hh |   12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-private.hh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit cf26e88a5ab477295479f5b9450c2019b6430eaa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cf26e88a5ab477295479f5b9450c2019b6430eaa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9547,9 +21036,9 @@ Date:    Fri May 11 03:16:57 2012 +0200
 
     Finish off debug output beautification
 
 
     Finish off debug output beautification
 
- src/hb-open-type-private.hh |  58
- +++++++++++++++++++-----------------------
- 1 files changed, 26 insertions(+), 32 deletions(-)
+ src/hb-open-type-private.hh | 58
+ ++++++++++++++++++++-------------------------
+ 1 file changed, 26 insertions(+), 32 deletions(-)
 
 commit d7bba01a353efc7432c474dd8755a02db4abd2ae
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d7bba01a353efc7432c474dd8755a02db4abd2ae
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9557,8 +21046,8 @@ Date:    Fri May 11 02:46:26 2012 +0200
 
     Only print class name in debug output if there's one available
 
 
     Only print class name in debug output if there's one available
 
- src/hb-private.hh |   12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-private.hh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit 85f73fa8da1fbb864aef0f3a592b1d65e24d593d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 85f73fa8da1fbb864aef0f3a592b1d65e24d593d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9568,8 +21057,8 @@ Date:    Fri May 11 02:40:42 2012 +0200
 
     Makes debug output much more pleasant.
 
 
     Makes debug output much more pleasant.
 
- src/hb-private.hh |   8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-private.hh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 98619ce4fa650c593b030d06d2f89fec83a10015
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 98619ce4fa650c593b030d06d2f89fec83a10015
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9577,8 +21066,8 @@ Date:    Fri May 11 02:34:06 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit acea183e986dd378c6f95120fe0feb0586a8ef36
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit acea183e986dd378c6f95120fe0feb0586a8ef36
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9586,10 +21075,10 @@ Date:  Fri May 11 02:33:11 2012 +0200
 
     Add return annotation for APPLY
 
 
     Add return annotation for APPLY
 
- src/hb-ot-layout-gpos-table.hh       |  163
- ++++++++++++++--------------------
- src/hb-ot-layout-gsub-table.hh       |  114 ++++++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |   83 +++++++----------
+ src/hb-ot-layout-gpos-table.hh       | 163
+ +++++++++++++++--------------------
+ src/hb-ot-layout-gsub-table.hh       | 114 +++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh |  83 ++++++++----------
  3 files changed, 151 insertions(+), 209 deletions(-)
 
 commit 5ccfe8e2154ad0b58dabcc236bbe9478c17b02ab
  3 files changed, 151 insertions(+), 209 deletions(-)
 
 commit 5ccfe8e2154ad0b58dabcc236bbe9478c17b02ab
@@ -9598,8 +21087,8 @@ Date:    Fri May 11 02:19:41 2012 +0200
 
     /Minor/
 
 
     /Minor/
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0ab8c8621712d33e1e91dfdb4ad0b335e3d2a3fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0ab8c8621712d33e1e91dfdb4ad0b335e3d2a3fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9609,20 +21098,20 @@ Date:  Fri May 11 01:25:34 2012 +0200
 
     More to come, for APPLY, CLOSURE, etc.
 
 
     More to come, for APPLY, CLOSURE, etc.
 
- src/hb-open-file-private.hh         |   23 +++--
- src/hb-open-type-private.hh         |   49 +++++-----
- src/hb-ot-head-table.hh             |    4 +-
- src/hb-ot-hhea-table.hh             |    4 +-
- src/hb-ot-hmtx-table.hh             |    4 +-
- src/hb-ot-layout-common-private.hh   |   51 ++++------
- src/hb-ot-layout-gdef-table.hh       |   48 +++++-----
- src/hb-ot-layout-gpos-table.hh       |  180
- +++++++++++++++-------------------
- src/hb-ot-layout-gsub-table.hh       |  101 +++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |   88 ++++++++---------
- src/hb-ot-maxp-table.hh             |    7 +-
- src/hb-ot-name-table.hh             |   17 ++--
- src/hb-private.hh                   |   39 ++++++--
+ src/hb-open-file-private.hh         |  23 ++---
+ src/hb-open-type-private.hh         |  49 +++++-----
+ src/hb-ot-head-table.hh             |   4 +-
+ src/hb-ot-hhea-table.hh             |   4 +-
+ src/hb-ot-hmtx-table.hh             |   4 +-
+ src/hb-ot-layout-common-private.hh   |  51 +++++-----
+ src/hb-ot-layout-gdef-table.hh       |  48 +++++-----
+ src/hb-ot-layout-gpos-table.hh       | 180
+ ++++++++++++++++-------------------
+ src/hb-ot-layout-gsub-table.hh       | 101 +++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh |  88 ++++++++---------
+ src/hb-ot-maxp-table.hh             |   7 +-
+ src/hb-ot-name-table.hh             |  17 ++--
+ src/hb-private.hh                   |  39 ++++++--
  13 files changed, 299 insertions(+), 316 deletions(-)
 
 commit 829e814ff358c5e700ba4df54932696801aa9f65
  13 files changed, 299 insertions(+), 316 deletions(-)
 
 commit 829e814ff358c5e700ba4df54932696801aa9f65
@@ -9631,8 +21120,8 @@ Date:    Fri May 11 00:52:16 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-private.hh |   32 ++++++++++----------------------
- 1 files changed, 10 insertions(+), 22 deletions(-)
+ src/hb-private.hh | 32 ++++++++++----------------------
+ 1 file changed, 10 insertions(+), 22 deletions(-)
 
 commit 6eec6f406d2cc13dbca422e88492d3d498af02bf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6eec6f406d2cc13dbca422e88492d3d498af02bf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9640,8 +21129,8 @@ Date:    Fri May 11 00:50:38 2012 +0200
 
     Code reshuffling
 
 
     Code reshuffling
 
- src/hb-private.hh |   36 +++++++++++++++++++++++++-----------
- 1 files changed, 25 insertions(+), 11 deletions(-)
+ src/hb-private.hh | 36 +++++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 11 deletions(-)
 
 commit 1e08830b4fac3a60ae52349cab6e101d389d30cd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e08830b4fac3a60ae52349cab6e101d389d30cd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9649,9 +21138,9 @@ Date:    Fri May 11 00:16:40 2012 +0200
 
     Beautify debug output
 
 
     Beautify debug output
 
- src/hb-open-type-private.hh |  20 ++++++------
- src/hb-private.hh          |   74
- ++++++++++++++++++++++++++-----------------
+ src/hb-open-type-private.hh | 20 ++++++------
+ src/hb-private.hh          | 74
+ +++++++++++++++++++++++++++------------------
  2 files changed, 55 insertions(+), 39 deletions(-)
 
 commit 6f4553801729a06e506ffdde7b27c72780d4bb80
  2 files changed, 55 insertions(+), 39 deletions(-)
 
 commit 6f4553801729a06e506ffdde7b27c72780d4bb80
@@ -9660,9 +21149,9 @@ Date:    Thu May 10 23:24:43 2012 +0200
 
     More massaging trace messaging
 
 
     More massaging trace messaging
 
- src/hb-open-type-private.hh         |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- src/hb-private.hh                   |    4 ++--
+ src/hb-open-type-private.hh         | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ src/hb-private.hh                   | 4 ++--
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b5fa37cb694b01a7df3a656710391c40dd3fcc04
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b5fa37cb694b01a7df3a656710391c40dd3fcc04
@@ -9671,8 +21160,8 @@ Date:    Thu May 10 23:09:48 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-set-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-set-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 208109703c929428c684ddcf9310b8ba780c4c31
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 208109703c929428c684ddcf9310b8ba780c4c31
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9682,10 +21171,10 @@ Date:  Thu May 10 23:06:58 2012 +0200
 
     We have varargs in the trace interface now.  To be used soon...
 
 
     We have varargs in the trace interface now.  To be used soon...
 
- src/hb-open-type-private.hh         |   17 ++++-----
- src/hb-ot-layout-gsubgpos-private.hh |    4 +-
- src/hb-private.hh                   |   64
- +++++++++++++++++++++++++---------
+ src/hb-open-type-private.hh         | 17 ++++------
+ src/hb-ot-layout-gsubgpos-private.hh |  4 +--
+ src/hb-private.hh                   | 64
+ ++++++++++++++++++++++++++----------
  3 files changed, 56 insertions(+), 29 deletions(-)
 
 commit 02b2922fbf098c8282eb23dc2c54d5829cf67024
  3 files changed, 56 insertions(+), 29 deletions(-)
 
 commit 02b2922fbf098c8282eb23dc2c54d5829cf67024
@@ -9698,9 +21187,9 @@ Date:    Thu May 10 21:44:50 2012 +0200
     down.
     Not much left to go :-).
 
     down.
     Not much left to go :-).
 
- src/hb-ot-shape-complex-indic.cc |  111
- +++++++++++++++++++++++++++-----------
- 1 files changed, 80 insertions(+), 31 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 111
+ ++++++++++++++++++++++++++++-----------
+ 1 file changed, 80 insertions(+), 31 deletions(-)
 
 commit 74e54cf446bb979e488685e8c09eeed6b9d03c24
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 74e54cf446bb979e488685e8c09eeed6b9d03c24
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9711,8 +21200,8 @@ Date:    Thu May 10 21:20:37 2012 +0200
     We now check that the 'rphp' table exists before forming Reph, so
     we don't need to comment out Ra for those scripts.
 
     We now check that the 'rphp' table exists before forming Reph, so
     we don't need to comment out Ra for those scripts.
 
- src/hb-ot-shape-complex-indic-private.hh |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 2b70df5cc008617453b12bafeaac50e6d61b3224
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2b70df5cc008617453b12bafeaac50e6d61b3224
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9720,8 +21209,8 @@ Date:    Thu May 10 18:38:22 2012 +0200
 
     [Indic] Add note re Uniscribe clusters
 
 
     [Indic] Add note re Uniscribe clusters
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 21d2803133c2c424ed37a9f3d17c7fc4963e5a60
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 21d2803133c2c424ed37a9f3d17c7fc4963e5a60
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9731,8 +21220,8 @@ Date:    Thu May 10 18:34:34 2012 +0200
 
     Hindi Wikipedia failures down to 6639 (0.938381%)!
 
 
     Hindi Wikipedia failures down to 6639 (0.938381%)!
 
- src/hb-ot-shape-complex-indic.cc |   24 ++++++++++++++++++++----
- 1 files changed, 20 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 24 ++++++++++++++++++++----
+ 1 file changed, 20 insertions(+), 4 deletions(-)
 
 commit b20c9ebaf5176101fdfcffbe4714a2e619dd94b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b20c9ebaf5176101fdfcffbe4714a2e619dd94b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9744,9 +21233,11 @@ Date:   Thu May 10 18:31:17 2012 +0200
     We instead do: "{M+[N]+[H]}", which means we allow Nukta and Halant
     after all Matras, not just the last one.  It makes more sense.
 
     We instead do: "{M+[N]+[H]}", which means we allow Nukta and Halant
     after all Matras, not just the last one.  It makes more sense.
 
- .../indic/script-devanagari/misc/MANIFEST         |    1 +
- .../script-devanagari/misc/spec-deviations.txt     |   1 +
- 2 files changed, 2 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST
+ | 1 +
+ .../shaper-indic/indic/script-devanagari/misc/spec-deviations.txt
+ | 1 +
+ 2 files changed, 2 insertions(+)
 
 commit 8df5636968389ac7bf8620ccd091fd4872b0bbee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8df5636968389ac7bf8620ccd091fd4872b0bbee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9760,8 +21251,8 @@ Date:    Thu May 10 15:41:04 2012 +0200
     Sequence: <0930,094d,0915,094b,094d>
     In test suite already.
 
     Sequence: <0930,094d,0915,094b,094d>
     In test suite already.
 
- src/hb-ot-shape-complex-indic.cc |   12 ++++++++++++
- 1 files changed, 12 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
 
 commit daf3234bdc82c669302599a76d2b14f5e69989db
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit daf3234bdc82c669302599a76d2b14f5e69989db
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9772,8 +21263,8 @@ Date:    Thu May 10 15:28:27 2012 +0200
     This was removing the mandatory global 1 bit in the mask and hence
     disabling GPOS for Reph!
 
     This was removing the mandatory global 1 bit in the mask and hence
     disabling GPOS for Reph!
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7708ee23cbcc8c8edce13e73b6e549b77bd8c2d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7708ee23cbcc8c8edce13e73b6e549b77bd8c2d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9783,8 +21274,8 @@ Date:    Thu May 10 14:48:25 2012 +0200
 
     Move its dependents too.
 
 
     Move its dependents too.
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 61a58e26a5bda16851669404fc8206896e124740
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 61a58e26a5bda16851669404fc8206896e124740
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9796,9 +21287,11 @@ Date:   Thu May 10 14:43:53 2012 +0200
     where it is, but we want to move it with the Matra as that makes more
     logical sense.
 
     where it is, but we want to move it with the Matra as that makes more
     logical sense.
 
- .../indic/script-devanagari/misc/MANIFEST         |    1 +
- .../script-devanagari/misc/tricky-reordering.txt   |   4 ++++
- 2 files changed, 5 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST  |
+ 1 +
+ .../shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt   |
+ 4 ++++
+ 2 files changed, 5 insertions(+)
 
 commit dbb105883c6e9b83e78dc8b10766cd56b98cd7e1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dbb105883c6e9b83e78dc8b10766cd56b98cd7e1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9817,9 +21310,9 @@ Date:    Thu May 10 13:45:52 2012 +0200
     syllable
     boundaries.  That's coming after lunch!
 
     syllable
     boundaries.  That's coming after lunch!
 
- src/hb-ot-shape-complex-indic-private.hh |    2 -
- src/hb-ot-shape-complex-indic.cc        |  103
- ++++++++++++++++++-----------
+ src/hb-ot-shape-complex-indic-private.hh |   2 -
+ src/hb-ot-shape-complex-indic.cc        | 103
+ +++++++++++++++++++------------
  2 files changed, 64 insertions(+), 41 deletions(-)
 
 commit 4705a7026900e51f6430f03a73c87f2df035df92
  2 files changed, 64 insertions(+), 41 deletions(-)
 
 commit 4705a7026900e51f6430f03a73c87f2df035df92
@@ -9828,8 +21321,8 @@ Date:    Thu May 10 13:09:08 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 4ac9e98d9d2ea973dd612dc4063cf78496c643a0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ac9e98d9d2ea973dd612dc4063cf78496c643a0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9837,9 +21330,9 @@ Date:    Thu May 10 12:53:53 2012 +0200
 
     [Indic] Reorder left matras to be closer to base
 
 
     [Indic] Reorder left matras to be closer to base
 
- src/hb-ot-shape-complex-indic-private.hh |    4 --
- src/hb-ot-shape-complex-indic.cc        |   50
- +++++++++++++++++++++++++++--
+ src/hb-ot-shape-complex-indic-private.hh |  4 ---
+ src/hb-ot-shape-complex-indic.cc        | 50
+ +++++++++++++++++++++++++++++---
  2 files changed, 46 insertions(+), 8 deletions(-)
 
 commit 1a1fa8c655a082fc1439608457ba717306cc83ca
  2 files changed, 46 insertions(+), 8 deletions(-)
 
 commit 1a1fa8c655a082fc1439608457ba717306cc83ca
@@ -9848,8 +21341,8 @@ Date:    Thu May 10 12:20:21 2012 +0200
 
     [Indic] Treat the standalone cluster case reusing the consonant logic
 
 
     [Indic] Treat the standalone cluster case reusing the consonant logic
 
- src/hb-ot-shape-complex-indic.cc |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 190eb31a16178269aecaf5d2ecc9012f956749f4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 190eb31a16178269aecaf5d2ecc9012f956749f4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9857,8 +21350,8 @@ Date:    Thu May 10 12:17:16 2012 +0200
 
     [Indic] Minor
 
 
     [Indic] Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c5306b6861cfaa50af40e8ceb058791fa06d7981
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c5306b6861cfaa50af40e8ceb058791fa06d7981
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9868,8 +21361,8 @@ Date:    Thu May 10 12:07:33 2012 +0200
 
     Reusing the consonant logic!
 
 
     Reusing the consonant logic!
 
- src/hb-ot-shape-complex-indic-private.hh |    3 +--
- src/hb-ot-shape-complex-indic.cc        |   11 ++++++-----
+ src/hb-ot-shape-complex-indic-private.hh |  3 +--
+ src/hb-ot-shape-complex-indic.cc        | 11 ++++++-----
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 6d8e0cb74c02f6bc09cd4abe9e4bc82062e1b517
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 6d8e0cb74c02f6bc09cd4abe9e4bc82062e1b517
@@ -9878,8 +21371,8 @@ Date:    Thu May 10 11:41:51 2012 +0200
 
     [Indic] Simplify Reph logic
 
 
     [Indic] Simplify Reph logic
 
- src/hb-ot-shape-complex-indic.cc |   24 +++++-------------------
- 1 files changed, 5 insertions(+), 19 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 24 +++++-------------------
+ 1 file changed, 5 insertions(+), 19 deletions(-)
 
 commit 3d25079f8d6be81b9b4b91d3a97016b8a572f571
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3d25079f8d6be81b9b4b91d3a97016b8a572f571
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9887,9 +21380,9 @@ Date:    Thu May 10 11:37:42 2012 +0200
 
     [Indic] Don't form Reph is Ra is the only consonant in the syllable
 
 
     [Indic] Don't form Reph is Ra is the only consonant in the syllable
 
- src/hb-ot-shape-complex-indic-private.hh |    2 +-
- src/hb-ot-shape-complex-indic.cc        |   10 ++++++++++
- 2 files changed, 11 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh |  2 +-
+ src/hb-ot-shape-complex-indic.cc        | 10 ++++++++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
 
 commit b99d63ae114fb58f129562b293a8a66543d499ad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b99d63ae114fb58f129562b293a8a66543d499ad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9900,8 +21393,8 @@ Date:    Thu May 10 11:32:52 2012 +0200
     20 was way too low, one could hit a syllable with 7ish consonants
     with it.
 
     20 was way too low, one could hit a syllable with 7ish consonants
     with it.
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a391ff50b9a7b6ac3e58d199ea726b20ee6839bb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a391ff50b9a7b6ac3e58d199ea726b20ee6839bb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9909,8 +21402,8 @@ Date:    Thu May 10 11:31:20 2012 +0200
 
     [Indic] Adjust base after sorting
 
 
     [Indic] Adjust base after sorting
 
- src/hb-ot-shape-complex-indic.cc |   11 ++++++++++-
- 1 files changed, 10 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
 
 commit d3637edb248162970e202e9d0671540274192844
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d3637edb248162970e202e9d0671540274192844
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9918,8 +21411,8 @@ Date:    Thu May 10 10:51:38 2012 +0200
 
     [Indic] Don't return for long syllables.  Just not sort.
 
 
     [Indic] Don't return for long syllables.  Just not sort.
 
- src/hb-ot-shape-complex-indic.cc |    6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 commit dfa0cade7fce3791e47eaa7edcd23da76c7a0ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dfa0cade7fce3791e47eaa7edcd23da76c7a0ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9927,8 +21420,8 @@ Date:    Wed May 9 19:10:07 2012 +0200
 
     Fix Uniscribe clusters with multiple items
 
 
     Fix Uniscribe clusters with multiple items
 
- src/hb-uniscribe.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-uniscribe.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 86e5dd386a7989701da476db89be268e4ac1e219
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 86e5dd386a7989701da476db89be268e4ac1e219
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9936,8 +21429,8 @@ Date:    Wed May 9 18:57:37 2012 +0200
 
     [Indic] Don't give up syllable parsing upon junk
 
 
     [Indic] Don't give up syllable parsing upon junk
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit ef24cc8c8e2478a6352c340f4611a617646de4cc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ef24cc8c8e2478a6352c340f4611a617646de4cc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9945,12 +21438,12 @@ Date:  Wed May 9 17:56:03 2012 +0200
 
     [Indic] Towards multi-cluster syllables and final reordering
 
 
     [Indic] Towards multi-cluster syllables and final reordering
 
- src/hb-ot-shape-complex-arabic.cc       |    2 +-
- src/hb-ot-shape-complex-indic-machine.rl |   21 +++++++++----
- src/hb-ot-shape-complex-indic-private.hh |    1 +
- src/hb-ot-shape-complex-indic.cc        |   45
- ++++++++++++++++++++++--------
- src/hb-ot-shape-complex-private.hh      |    5 +--
+ src/hb-ot-shape-complex-arabic.cc       |  2 +-
+ src/hb-ot-shape-complex-indic-machine.rl | 21 ++++++++++-----
+ src/hb-ot-shape-complex-indic-private.hh |  1 +
+ src/hb-ot-shape-complex-indic.cc        | 45
+ +++++++++++++++++++++++---------
+ src/hb-ot-shape-complex-private.hh      |  5 ++--
  5 files changed, 51 insertions(+), 23 deletions(-)
 
 commit a9844d41c6cb30d8a2d733130a0e72f51b6c81c1
  5 files changed, 51 insertions(+), 23 deletions(-)
 
 commit a9844d41c6cb30d8a2d733130a0e72f51b6c81c1
@@ -9959,9 +21452,9 @@ Date:    Wed May 9 17:53:13 2012 +0200
 
     Combine lig_id and lig_comp into one byte, to free up one for Indic
 
 
     Combine lig_id and lig_comp into one byte, to free up one for Indic
 
- src/hb-ot-layout-gpos-table.hh       |   14 ++++++++------
- src/hb-ot-layout-gsub-table.hh       |   11 ++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   26 ++++++++++++++++++++++----
+ src/hb-ot-layout-gpos-table.hh       | 14 ++++++++------
+ src/hb-ot-layout-gsub-table.hh       | 11 ++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 26 ++++++++++++++++++++++----
  3 files changed, 34 insertions(+), 17 deletions(-)
 
 commit 92332e5116271a5d96e532005fe750e7552a6cbb
  3 files changed, 34 insertions(+), 17 deletions(-)
 
 commit 92332e5116271a5d96e532005fe750e7552a6cbb
@@ -9970,9 +21463,9 @@ Date:    Wed May 9 17:40:00 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |   41
- +++++++++++++++++++------------------
- 1 files changed, 21 insertions(+), 20 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 41
+ ++++++++++++++++++++--------------------
+ 1 file changed, 21 insertions(+), 20 deletions(-)
 
 commit dbccf87eef0d26838fa4bb3ae26410f6c4818836
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dbccf87eef0d26838fa4bb3ae26410f6c4818836
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -9980,9 +21473,9 @@ Date:    Wed May 9 17:24:39 2012 +0200
 
     [Indic] Make room for more reordering positions
 
 
     [Indic] Make room for more reordering positions
 
- src/hb-ot-shape-complex-indic-private.hh |  213
- +++++++++++++++---------------
- src/hb-ot-shape-complex-indic.cc        |   12 +-
+ src/hb-ot-shape-complex-indic-private.hh | 213
+ ++++++++++++++++---------------
+ src/hb-ot-shape-complex-indic.cc        |  12 +-
  2 files changed, 115 insertions(+), 110 deletions(-)
 
 commit d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8e
  2 files changed, 115 insertions(+), 110 deletions(-)
 
 commit d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8e
@@ -9993,10 +21486,10 @@ Date:  Wed May 9 15:56:35 2012 +0200
 
     Another 1.5% down.
 
 
     Another 1.5% down.
 
- src/hb-ot-shape-complex-indic-private.hh |   32
- ++++++++++++++++++-----------
- src/hb-ot-shape-complex-indic.cc        |    6 ++--
- src/indic.cc                            |    2 +-
+ src/hb-ot-shape-complex-indic-private.hh | 32
+ ++++++++++++++++++++------------
+ src/hb-ot-shape-complex-indic.cc        |  6 +++---
+ src/indic.cc                            |  2 +-
  3 files changed, 24 insertions(+), 16 deletions(-)
 
 commit 33c92e769563ec2a6c1249b57d8cac742eea6f88
  3 files changed, 24 insertions(+), 16 deletions(-)
 
 commit 33c92e769563ec2a6c1249b57d8cac742eea6f88
@@ -10005,8 +21498,8 @@ Date:   Wed May 9 15:41:51 2012 +0200
 
     [Indic] Categorize Anudatta
 
 
     [Indic] Categorize Anudatta
 
- src/hb-ot-shape-complex-indic.cc |    9 +++++++--
- 1 files changed, 7 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
 
 commit 3943293a9942201d8fc8d59212fcc8cca5132e3d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3943293a9942201d8fc8d59212fcc8cca5132e3d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10014,10 +21507,10 @@ Date: Wed May 9 15:27:56 2012 +0200
 
     [Indic] Add joiner test cases for Devanagari
 
 
     [Indic] Add joiner test cases for Devanagari
 
- .../indic/script-devanagari/misc/MANIFEST         |    1 +
- .../indic/script-devanagari/misc/joiners.txt      |   19
+ .../indic/script-devanagari/misc/MANIFEST            |  1 +
+ .../indic/script-devanagari/misc/joiners.txt         | 19
  +++++++++++++++++++
  +++++++++++++++++++
- 2 files changed, 20 insertions(+), 0 deletions(-)
+ 2 files changed, 20 insertions(+)
 
 commit 19d984edaa4f86c842345a9d4150597e045e1887
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 19d984edaa4f86c842345a9d4150597e045e1887
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10027,8 +21520,8 @@ Date:   Wed May 9 15:21:13 2012 +0200
 
     Another 12 thousand failures gone! (78 to go)
 
 
     Another 12 thousand failures gone! (78 to go)
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9034641333d7bfb41a0784cce72e43591faea083
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9034641333d7bfb41a0784cce72e43591faea083
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10036,8 +21529,8 @@ Date:   Wed May 9 15:04:58 2012 +0200
 
     [Indic] Keep Vedic signs at the right too
 
 
     [Indic] Keep Vedic signs at the right too
 
- src/hb-ot-shape-complex-indic.cc |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit d1deaa2f5bd028e8076265cba92cffa4fa2834ac
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d1deaa2f5bd028e8076265cba92cffa4fa2834ac
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10047,15 +21540,15 @@ Date: Wed May 9 15:04:13 2012 +0200
 
     Like Uniscribe does.
 
 
     Like Uniscribe does.
 
- src/hb-ot-shape-complex-arabic.cc  |   3 +-
- src/hb-ot-shape-complex-indic.cc   |  20 -----------------
- src/hb-ot-shape-complex-private.hh |   4 +-
- src/hb-ot-shape-normalize.cc      |   25 ++++++++--------------
- src/hb-ot-shape-private.hh        |   27 +++++++++++++++++++++++
- src/hb-ot-shape.cc                |   41
- +++++++++++++++++++++++------------
- src/hb-unicode-private.hh         |   38
- +++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc  |  3 ++-
+ src/hb-ot-shape-complex-indic.cc   | 20 -------------------
+ src/hb-ot-shape-complex-private.hh |  4 ++--
+ src/hb-ot-shape-normalize.cc      | 25 +++++++++--------------
+ src/hb-ot-shape-private.hh        | 27 +++++++++++++++++++++++++
+ src/hb-ot-shape.cc                | 41
+ +++++++++++++++++++++++++-------------
+ src/hb-unicode-private.hh         | 38
+ +++++++++++++++++++++++++++++++++++
  7 files changed, 105 insertions(+), 53 deletions(-)
 
 commit 49e5da1591b8d28f01e7ff9caac9d9ac53668bba
  7 files changed, 105 insertions(+), 53 deletions(-)
 
 commit 49e5da1591b8d28f01e7ff9caac9d9ac53668bba
@@ -10066,8 +21559,8 @@ Date:   Wed May 9 13:23:27 2012 +0200
 
     Shaping failures on Hindi Wikipedia go down from 25% to 14%!
 
 
     Shaping failures on Hindi Wikipedia go down from 25% to 14%!
 
- src/hb-ot-shape-complex-indic.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5b1260909350bffa3e3d06da346f9f86ce651dbb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5b1260909350bffa3e3d06da346f9f86ce651dbb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10075,8 +21568,8 @@ Date:   Wed May 9 12:37:27 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9ce939232bbce8f51e235195e3854d1e8bb961f8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ce939232bbce8f51e235195e3854d1e8bb961f8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10084,8 +21577,8 @@ Date:   Wed May 9 12:03:09 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic-private.hh |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-ot-shape-complex-indic-private.hh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 76b3409de6887c1cdd5c679939497b1b56f4554b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 76b3409de6887c1cdd5c679939497b1b56f4554b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10093,8 +21586,8 @@ Date:   Wed May 9 11:43:43 2012 +0200
 
     [indic] Better Reph matching
 
 
     [indic] Better Reph matching
 
- src/hb-ot-shape-complex-indic.cc |   21 +++++++++++++++------
- 1 files changed, 15 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
 
 commit df6d45c693c417bf311e6fa49f18a8558542e525
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit df6d45c693c417bf311e6fa49f18a8558542e525
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10102,8 +21595,8 @@ Date:   Wed May 9 11:38:31 2012 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 412b91889d9a1ae477e8b6907d0b9a76e78a6c91
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 412b91889d9a1ae477e8b6907d0b9a76e78a6c91
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10111,8 +21604,8 @@ Date:   Wed May 9 11:07:18 2012 +0200
 
     [indic] Apply Indic features in order
 
 
     [indic] Apply Indic features in order
 
- src/hb-ot-shape-complex-indic.cc |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 1ac075b227090a9ad930dcc1670236c176b27067
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1ac075b227090a9ad930dcc1670236c176b27067
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10122,8 +21615,8 @@ Date:   Wed May 9 11:06:47 2012 +0200
 
     Fixes 10% of the failures against all of Hindi Wikipedia!
 
 
     Fixes 10% of the failures against all of Hindi Wikipedia!
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2214a03900d32710573a1b05c7665195b3129761
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2214a03900d32710573a1b05c7665195b3129761
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10131,10 +21624,10 @@ Date: Wed May 9 09:54:54 2012 +0200
 
     Add hb-diff-ngrams
 
 
     Add hb-diff-ngrams
 
- test/shaping/Makefile.am      |    1 +
- test/shaping/hb-diff-ngrams   |    5 +++
- test/shaping/hb_test_tools.py |   71
- ++++++++++++++++++++++++++++++++++++++---
+ test/shaping/Makefile.am      |  1 +
+ test/shaping/hb-diff-ngrams   |  5 +++
+ test/shaping/hb_test_tools.py | 71
+ ++++++++++++++++++++++++++++++++++++++++---
  3 files changed, 72 insertions(+), 5 deletions(-)
 
 commit 178e6dce01ad28c8708bad62ce0fb79c46e836dc
  3 files changed, 72 insertions(+), 5 deletions(-)
 
 commit 178e6dce01ad28c8708bad62ce0fb79c46e836dc
@@ -10143,9 +21636,9 @@ Date:   Wed May 9 08:57:29 2012 +0200
 
     Add N-gram generator
 
 
     Add N-gram generator
 
- test/shaping/hb_test_tools.py |   72
- +++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 70 insertions(+), 2 deletions(-)
+ test/shaping/hb_test_tools.py | 72
+ +++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 70 insertions(+), 2 deletions(-)
 
 commit 98669ceb77657d60435f2cb2e3fc18272c0a2c6a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 98669ceb77657d60435f2cb2e3fc18272c0a2c6a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10153,8 +21646,8 @@ Date:   Wed May 9 08:16:15 2012 +0200
 
     Use groupby()
 
 
     Use groupby()
 
- test/shaping/hb_test_tools.py |   26 ++++++++------------------
- 1 files changed, 8 insertions(+), 18 deletions(-)
+ test/shaping/hb_test_tools.py | 26 ++++++++------------------
+ 1 file changed, 8 insertions(+), 18 deletions(-)
 
 commit c438a14b62433db488b5c90854a4a3934adf3305
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c438a14b62433db488b5c90854a4a3934adf3305
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10162,9 +21655,9 @@ Date:   Wed May 9 07:45:17 2012 +0200
 
     Add hb-diff-stat
 
 
     Add hb-diff-stat
 
- test/shaping/Makefile.am      |    1 +
- test/shaping/hb-diff-stat     |    5 +++++
- test/shaping/hb_test_tools.py |   22 ++++++++++++++++++++--
+ test/shaping/Makefile.am      |  1 +
+ test/shaping/hb-diff-stat     |  5 +++++
+ test/shaping/hb_test_tools.py | 22 ++++++++++++++++++++--
  3 files changed, 26 insertions(+), 2 deletions(-)
 
 commit 1058d031e2046eb80331b0950eaff75c2bf608dc
  3 files changed, 26 insertions(+), 2 deletions(-)
 
 commit 1058d031e2046eb80331b0950eaff75c2bf608dc
@@ -10173,8 +21666,8 @@ Date:   Wed May 9 07:30:07 2012 +0200
 
     Make hb-diff-filter-failtures retain all test info for failed tests
 
 
     Make hb-diff-filter-failtures retain all test info for failed tests
 
- test/shaping/hb_test_tools.py |   33 ++++++++++++++++++++++++++-------
- 1 files changed, 26 insertions(+), 7 deletions(-)
+ test/shaping/hb_test_tools.py | 33 ++++++++++++++++++++++++++-------
+ 1 file changed, 26 insertions(+), 7 deletions(-)
 
 commit f1eb008cc727370e1bd0dc32fdf301f62d9ff981
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f1eb008cc727370e1bd0dc32fdf301f62d9ff981
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10184,11 +21677,11 @@ Date: Tue May 8 23:41:41 2012 +0200
 
     Accepts --format=html now.
 
 
     Accepts --format=html now.
 
- test/shaping/Makefile.am      |    1 +
- test/shaping/hb-diff         |    4 +-
- test/shaping/hb-diff-colorize |    7 ++
- test/shaping/hb_test_tools.py |  158
- +++++++++++++++++++++++++----------------
+ test/shaping/Makefile.am      |   1 +
+ test/shaping/hb-diff         |   4 +-
+ test/shaping/hb-diff-colorize |   7 ++
+ test/shaping/hb_test_tools.py | 158
+ +++++++++++++++++++++++++-----------------
  4 files changed, 106 insertions(+), 64 deletions(-)
 
 commit 9155e4ffe00c96a2c14e14a300004b1038ca3a9c
  4 files changed, 106 insertions(+), 64 deletions(-)
 
 commit 9155e4ffe00c96a2c14e14a300004b1038ca3a9c
@@ -10200,8 +21693,8 @@ Date:   Tue May 8 22:44:21 2012 +0200
     Doesn't do --color anymore.  That will go into a new hb-diff-colorize
     tool.
 
     Doesn't do --color anymore.  That will go into a new hb-diff-colorize
     tool.
 
- test/shaping/hb-diff         |   10 +++-------
- test/shaping/hb_test_tools.py |   32 ++++++++++++++++++--------------
+ test/shaping/hb-diff         | 10 +++-------
+ test/shaping/hb_test_tools.py | 32 ++++++++++++++++++--------------
  2 files changed, 21 insertions(+), 21 deletions(-)
 
 commit 7d22135b4c3f8fb70552302bf8239df9976dddda
  2 files changed, 21 insertions(+), 21 deletions(-)
 
 commit 7d22135b4c3f8fb70552302bf8239df9976dddda
@@ -10210,8 +21703,8 @@ Date:   Tue May 8 19:38:49 2012 +0200
 
     Make hb-diff faster
 
 
     Make hb-diff faster
 
- test/shaping/hb_test_tools.py |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ test/shaping/hb_test_tools.py | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit a93e238e05a2f70a6e664e5d04ba25bbd54493dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a93e238e05a2f70a6e664e5d04ba25bbd54493dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10219,11 +21712,12 @@ Date: Tue May 8 18:55:29 2012 +0200
 
     More tests
 
 
     More tests
 
- .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
- .../shaper-arabic/script-mongolian/misc/poem.txt   |   4 ++++
- .../indic/script-bengali/misc/MANIFEST                    |    1 +
- .../indic/script-bengali/misc/reph.txt                    |   10 ++++++++++
- 4 files changed, 16 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST |  1 +
+ .../texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt |  4 ++++
+ .../in-tree/shaper-indic/indic/script-bengali/misc/MANIFEST   |  1 +
+ .../in-tree/shaper-indic/indic/script-bengali/misc/reph.txt   |
+ 10 ++++++++++
+ 4 files changed, 16 insertions(+)
 
 commit 1a2a4a0078dda834443edd421037a4bcbad18c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1a2a4a0078dda834443edd421037a4bcbad18c5e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10233,8 +21727,8 @@ Date:   Sat May 5 22:38:20 2012 +0200
 
     As reported by Jonathan Kew on the list.
 
 
     As reported by Jonathan Kew on the list.
 
- src/hb-set-private.hh |    2 +-
- src/main.cc          |    9 +++++----
+ src/hb-set-private.hh | 2 +-
+ src/main.cc          | 9 +++++----
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit a5e39fed85e069ba1afbf90408349ad99ceb0e1d
  2 files changed, 6 insertions(+), 5 deletions(-)
 
 commit a5e39fed85e069ba1afbf90408349ad99ceb0e1d
@@ -10243,9 +21737,9 @@ Date:   Wed Apr 25 00:14:46 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-set-private.hh |    2 ++
- src/hb-set.cc        |    2 ++
- 2 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-set-private.hh | 2 ++
+ src/hb-set.cc        | 2 ++
+ 2 files changed, 4 insertions(+)
 
 commit 1827dc208c867e433a95237d1ed3fc7a73d1d9a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1827dc208c867e433a95237d1ed3fc7a73d1d9a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10255,10 +21749,10 @@ Date: Tue Apr 24 16:56:37 2012 -0400
 
     Experimental API for now.
 
 
     Experimental API for now.
 
- src/hb-ot-map-private.hh |    7 ++++---
- src/hb-ot-shape.cc      |   35 +++++++++++++++++++++++++++++++++++
- src/hb-ot.h             |    8 ++++++++
- src/hb-set-private.hh   |    3 +++
+ src/hb-ot-map-private.hh |  7 ++++---
+ src/hb-ot-shape.cc      | 35 +++++++++++++++++++++++++++++++++++
+ src/hb-ot.h             |  8 ++++++++
+ src/hb-set-private.hh   |  3 +++
  4 files changed, 50 insertions(+), 3 deletions(-)
 
 commit bb09f0ec10216b11189b5e8584856adf0f14d1fc
  4 files changed, 50 insertions(+), 3 deletions(-)
 
 commit bb09f0ec10216b11189b5e8584856adf0f14d1fc
@@ -10267,8 +21761,8 @@ Date:   Tue Apr 24 16:02:12 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-unicode.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-unicode.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 29a7e306e30e894f7a38daf73eca9fc772c58158
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 29a7e306e30e894f7a38daf73eca9fc772c58158
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10276,8 +21770,8 @@ Date:   Tue Apr 24 16:01:30 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-normalize.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 585b107cdee7305920dacc83c9ee1f8eeff7afd1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 585b107cdee7305920dacc83c9ee1f8eeff7afd1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10294,8 +21788,9 @@ Date:   Tue Apr 24 16:00:50 2012 -0400
     We reached the consensus on the list to NOT implement dotted-circle
     in HarfBuzz.
 
     We reached the consensus on the list to NOT implement dotted-circle
     in HarfBuzz.
 
- .../indic/script-bengali/misc/misc.txt                    |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 6c6ccaf575392f6e6bb9a15534026e4ea462705b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6c6ccaf575392f6e6bb9a15534026e4ea462705b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10305,11 +21800,11 @@ Date: Tue Apr 24 14:21:15 2012 -0400
 
     TODO: Tests for hb_set_t.
 
 
     TODO: Tests for hb_set_t.
 
- src/hb-set-private.hh |   54
- +++++++++++++++++++++++++++++++++++++++++++++++-
- src/hb-set.cc        |   55
- +++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-set.h         |   34 +++++++++++++++++++++++++++--
+ src/hb-set-private.hh | 54
+ +++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-set.cc        | 55
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-set.h         | 34 ++++++++++++++++++++++++++++---
  3 files changed, 139 insertions(+), 4 deletions(-)
 
 commit 5caece67ab9eee322bdcdf6f4b607eadde297e56
  3 files changed, 139 insertions(+), 4 deletions(-)
 
 commit 5caece67ab9eee322bdcdf6f4b607eadde297e56
@@ -10318,12 +21813,12 @@ Date: Mon Apr 23 23:03:12 2012 -0400
 
     Make closure() return void
 
 
     Make closure() return void
 
- src/hb-ot-layout-gsub-table.hh       |  142 ++++++++++++-----------------
- src/hb-ot-layout-gsubgpos-private.hh |  165
- +++++++++++++++++-----------------
- src/hb-ot-layout.cc                 |   10 +-
- src/hb-ot-layout.h                  |    8 +-
- src/hb-set-private.hh               |   20 ++---
+ src/hb-ot-layout-gsub-table.hh       | 142 +++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos-private.hh | 165
+ ++++++++++++++++++-----------------
+ src/hb-ot-layout.cc                 |  10 +--
+ src/hb-ot-layout.h                  |   8 +-
+ src/hb-set-private.hh               |  20 ++---
  5 files changed, 157 insertions(+), 188 deletions(-)
 
 commit 0b08adb3539f2ec29682456b89c69e89ff5e9c03
  5 files changed, 157 insertions(+), 188 deletions(-)
 
 commit 0b08adb3539f2ec29682456b89c69e89ff5e9c03
@@ -10332,16 +21827,16 @@ Date: Mon Apr 23 22:41:09 2012 -0400
 
     Add hb_set_t
 
 
     Add hb_set_t
 
- TODO                              |    2 +
- src/Makefile.am                   |    3 +
- src/hb-ot-layout-common-private.hh |   1 +
- src/hb-ot-layout-private.hh       |   47 --------------
- src/hb-ot-layout.h                |    2 -
- src/hb-set-private.hh             |   95 ++++++++++++++++++++++++++++
- src/hb-set.cc                     |  120
- ++++++++++++++++++++++++++++++++++++
- src/hb-set.h                      |   91 +++++++++++++++++++++++++++
- src/hb.h                          |    1 +
+ TODO                              |   2 +
+ src/Makefile.am                   |   3 +
+ src/hb-ot-layout-common-private.hh |  1 +
+ src/hb-ot-layout-private.hh       |  47 ---------------
+ src/hb-ot-layout.h                |   2 -
+ src/hb-set-private.hh             |  95 +++++++++++++++++++++++++++++
+ src/hb-set.cc                     | 120
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-set.h                      |  91 ++++++++++++++++++++++++++++
+ src/hb.h                          |   1 +
  9 files changed, 313 insertions(+), 49 deletions(-)
 
 commit 5b93e8d94fb4c2474816304ae3f52e1c704882de
  9 files changed, 313 insertions(+), 49 deletions(-)
 
 commit 5b93e8d94fb4c2474816304ae3f52e1c704882de
@@ -10350,10 +21845,10 @@ Date: Mon Apr 23 22:26:13 2012 -0400
 
     Update copyright headers
 
 
     Update copyright headers
 
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gpos-table.hh       |    2 +-
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-layout-common-private.hh   | 2 +-
+ src/hb-ot-layout-gpos-table.hh       | 2 +-
+ src/hb-ot-layout-gsub-table.hh       | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 6a9be5bd3524dc3eb1e88d1063bde2e4d8b57011
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 6a9be5bd3524dc3eb1e88d1063bde2e4d8b57011
@@ -10362,13 +21857,13 @@ Date: Mon Apr 23 22:23:17 2012 -0400
 
     Rename hb_glyph_map_t to hb_set_t
 
 
     Rename hb_glyph_map_t to hb_set_t
 
- src/hb-ot-layout-common-private.hh   |   16 ++++++++--------
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
- src/hb-ot-layout-private.hh         |    2 +-
- src/hb-ot-layout.cc                 |    2 +-
- src/hb-ot-layout.h                  |    4 ++--
- src/hb-ot-map-private.hh            |    2 +-
- src/hb-ot-map.cc                    |    2 +-
+ src/hb-ot-layout-common-private.hh   | 16 ++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++------
+ src/hb-ot-layout-private.hh         |  2 +-
+ src/hb-ot-layout.cc                 |  2 +-
+ src/hb-ot-layout.h                  |  4 ++--
+ src/hb-ot-map-private.hh            |  2 +-
+ src/hb-ot-map.cc                    |  2 +-
  7 files changed, 20 insertions(+), 20 deletions(-)
 
 commit a4385f0b0a6949e2ce49e6a147ad4beaa724f6c3
  7 files changed, 20 insertions(+), 20 deletions(-)
 
 commit a4385f0b0a6949e2ce49e6a147ad4beaa724f6c3
@@ -10377,8 +21872,8 @@ Date:   Mon Apr 23 22:20:14 2012 -0400
 
     Improve clustering
 
 
     Improve clustering
 
- src/hb-ot-shape.cc |   5 ++---
- 1 files changed, 2 insertions(+), 3 deletions(-)
+ src/hb-ot-shape.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
 
 commit 8e3715f8a16b315c1c7dd4b256e7f68a36c53e7c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8e3715f8a16b315c1c7dd4b256e7f68a36c53e7c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10386,11 +21881,11 @@ Date: Mon Apr 23 22:18:54 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-buffer-private.hh         |    2 +-
- src/hb-buffer.cc                 |    2 +-
- src/hb-graphite2.cc              |    5 ++---
- src/hb-ot-shape-complex-arabic.cc |   4 ++--
- src/hb-ot-shape-complex-misc.cc   |   4 ++--
+ src/hb-buffer-private.hh         | 2 +-
+ src/hb-buffer.cc                 | 2 +-
+ src/hb-graphite2.cc              | 5 ++---
+ src/hb-ot-shape-complex-arabic.cc | 4 ++--
+ src/hb-ot-shape-complex-misc.cc   | 4 ++--
  5 files changed, 8 insertions(+), 9 deletions(-)
 
 commit d2984a241e4819474d827b1dd5d4b6d76596b3a5
  5 files changed, 8 insertions(+), 9 deletions(-)
 
 commit d2984a241e4819474d827b1dd5d4b6d76596b3a5
@@ -10399,9 +21894,9 @@ Date:   Mon Apr 23 17:21:14 2012 -0400
 
     Add map->substitute_closure()
 
 
     Add map->substitute_closure()
 
- src/hb-ot-map-private.hh |    3 +++
- src/hb-ot-map.cc        |   15 +++++++++++++++
- 2 files changed, 18 insertions(+), 0 deletions(-)
+ src/hb-ot-map-private.hh |  3 +++
+ src/hb-ot-map.cc        | 15 +++++++++++++++
+ 2 files changed, 18 insertions(+)
 
 commit 31081f7390e5130df72f89acc609ccab5dc77a48
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 31081f7390e5130df72f89acc609ccab5dc77a48
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10409,10 +21904,10 @@ Date: Mon Apr 23 16:54:58 2012 -0400
 
     Implement closure() for Context and ChainContext lookups
 
 
     Implement closure() for Context and ChainContext lookups
 
- src/hb-ot-layout-common-private.hh   |   54 ++++++
- src/hb-ot-layout-gsubgpos-private.hh |  347
- +++++++++++++++++++++++++++-------
- src/hb-ot-layout-private.hh         |   23 ++-
+ src/hb-ot-layout-common-private.hh   |  54 ++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 347
+ ++++++++++++++++++++++++++++-------
+ src/hb-ot-layout-private.hh         |  23 ++-
  3 files changed, 351 insertions(+), 73 deletions(-)
 
 commit c64ddab3c34897cd520d4d73a054866e649e8793
  3 files changed, 351 insertions(+), 73 deletions(-)
 
 commit c64ddab3c34897cd520d4d73a054866e649e8793
@@ -10423,11 +21918,11 @@ Date: Mon Apr 23 15:28:35 2012 -0400
 
     The GSUBGPOS part still missing.
 
 
     The GSUBGPOS part still missing.
 
- src/hb-ot-layout-common-private.hh |  61 ++++++++++++++------
- src/hb-ot-layout-gsub-table.hh     |  112
- ++++++++++++++++++++++++++++--------
- src/hb-ot-layout-private.hh       |   34 +++++++++++
- src/hb-ot-layout.h                |    2 +-
+ src/hb-ot-layout-common-private.hh |  61 ++++++++++++++------
+ src/hb-ot-layout-gsub-table.hh     | 112
+ ++++++++++++++++++++++++++++---------
+ src/hb-ot-layout-private.hh       |  34 +++++++++++
+ src/hb-ot-layout.h                |   2 +-
  4 files changed, 165 insertions(+), 44 deletions(-)
 
 commit 0da132bde4d576a03095d6738507954f7f85103d
  4 files changed, 165 insertions(+), 44 deletions(-)
 
 commit 0da132bde4d576a03095d6738507954f7f85103d
@@ -10436,8 +21931,8 @@ Date:   Mon Apr 23 14:21:33 2012 -0400
 
     Fix Coverage iters
 
 
     Fix Coverage iters
 
- src/hb-ot-layout-common-private.hh |  30 +++++++++++++++++++++---------
- 1 files changed, 21 insertions(+), 9 deletions(-)
+ src/hb-ot-layout-common-private.hh | 30 +++++++++++++++++++++---------
+ 1 file changed, 21 insertions(+), 9 deletions(-)
 
 commit 3e32cd9570fd8b09901fb790b80365ae425f681a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3e32cd9570fd8b09901fb790b80365ae425f681a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10445,10 +21940,10 @@ Date: Mon Apr 23 13:20:52 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |    1 -
- src/hb-ot-layout.cc                 |    6 +++---
- src/hb-ot-layout.h                  |    8 ++++++++
- src/hb-private.hh                   |    4 +++-
+ src/hb-ot-layout-gsubgpos-private.hh | 1 -
+ src/hb-ot-layout.cc                 | 6 +++---
+ src/hb-ot-layout.h                  | 8 ++++++++
+ src/hb-private.hh                   | 4 +++-
  4 files changed, 14 insertions(+), 5 deletions(-)
 
 commit 650ac00da3d2f988197393f34d40f0ba1a0fa093
  4 files changed, 14 insertions(+), 5 deletions(-)
 
 commit 650ac00da3d2f988197393f34d40f0ba1a0fa093
@@ -10457,11 +21952,11 @@ Date: Mon Apr 23 13:17:09 2012 -0400
 
     Minor refactoring
 
 
     Minor refactoring
 
- src/hb-ot-layout-gpos-table.hh       |   27 ++++++++++-------------
- src/hb-ot-layout-gsub-table.hh       |   39
- +++++++++++++++------------------
- src/hb-ot-layout-gsubgpos-private.hh |    8 +-----
- src/hb-ot-layout.cc                 |    6 +++-
+ src/hb-ot-layout-gpos-table.hh       | 27 +++++++++++--------------
+ src/hb-ot-layout-gsub-table.hh       | 39
+ +++++++++++++++++-------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  8 ++------
+ src/hb-ot-layout.cc                 |  6 ++++--
  4 files changed, 36 insertions(+), 44 deletions(-)
 
 commit f94b0aa64609654497ced9c00312c9643eb69053
  4 files changed, 36 insertions(+), 44 deletions(-)
 
 commit f94b0aa64609654497ced9c00312c9643eb69053
@@ -10472,10 +21967,10 @@ Date: Mon Apr 23 13:04:38 2012 -0400
 
     Filling in.
 
 
     Filling in.
 
- src/hb-ot-layout-gsub-table.hh       |  179
- ++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gsubgpos-private.hh |  110 ++++++++++++++++++++-
- src/hb-ot-layout.cc                 |    8 ++
+ src/hb-ot-layout-gsub-table.hh       | 179
+ +++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 110 ++++++++++++++++++++-
+ src/hb-ot-layout.cc                 |   8 ++
  3 files changed, 293 insertions(+), 4 deletions(-)
 
 commit 7d50d502635d7c95e6bd091e7d4cc993f0853f76
  3 files changed, 293 insertions(+), 4 deletions(-)
 
 commit 7d50d502635d7c95e6bd091e7d4cc993f0853f76
@@ -10484,9 +21979,9 @@ Date:   Mon Apr 23 13:02:14 2012 -0400
 
     Add Coverage iterators
 
 
     Add Coverage iterators
 
- src/hb-ot-layout-common-private.hh |  59
- ++++++++++++++++++++++++++++++++++++
- 1 files changed, 59 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-common-private.hh | 59
+ ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 59 insertions(+)
 
 commit 3ed4634ec349fa9e943ad23718c04be4dd4bba62
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ed4634ec349fa9e943ad23718c04be4dd4bba62
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10494,12 +21989,12 @@ Date: Thu Apr 19 22:34:06 2012 -0400
 
     Add Indic inspection tool
 
 
     Add Indic inspection tool
 
- src/Makefile.am                         |    7 +-
- src/hb-ot-shape-complex-indic-private.hh |  264
- ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc        |  229
+ src/Makefile.am                         |   7 +-
+ src/hb-ot-shape-complex-indic-private.hh | 264
+ +++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc        | 229
  +--------------------------
  +--------------------------
- src/indic.cc                            |   46 +++++
+ src/indic.cc                            |  46 ++++++
  4 files changed, 317 insertions(+), 229 deletions(-)
 
 commit a06411ecf93c7e5256e363eef3ef69554896dd55
  4 files changed, 317 insertions(+), 229 deletions(-)
 
 commit a06411ecf93c7e5256e363eef3ef69554896dd55
@@ -10510,8 +22005,8 @@ Date:   Thu Apr 19 22:28:25 2012 -0400
 
     Should have no visible effect.
 
 
     Should have no visible effect.
 
- src/hb-ot-shape-complex-indic.cc |   30 +++++++++++++++++-------------
- 1 files changed, 17 insertions(+), 13 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 30 +++++++++++++++++-------------
+ 1 file changed, 17 insertions(+), 13 deletions(-)
 
 commit 36608941f3cc530fea57282fa175e4cc3b4c66c6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 36608941f3cc530fea57282fa175e4cc3b4c66c6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10521,9 +22016,9 @@ Date:   Thu Apr 19 22:21:38 2012 -0400
 
     To be used in the Indic shaper later.  Unused for now.
 
 
     To be used in the Indic shaper later.  Unused for now.
 
- src/hb-ot-layout-gsub-table.hh |  140
- +++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 138 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 140
+ ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 138 insertions(+), 2 deletions(-)
 
 commit a0d4caeb91fa5e5f2090db4efc35c64ff9a64789
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a0d4caeb91fa5e5f2090db4efc35c64ff9a64789
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10531,8 +22026,8 @@ Date:   Tue Apr 17 13:42:30 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ TODO | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit a5e40542ab9508f0ba6f822f1262d93fccb71f45
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a5e40542ab9508f0ba6f822f1262d93fccb71f45
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10540,8 +22035,8 @@ Date:   Tue Apr 17 12:37:19 2012 -0400
 
     Make font immutable in hb_shape()
 
 
     Make font immutable in hb_shape()
 
- src/hb-shape.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-shape.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 3cde23664fbbe9cd2ac1b8fd5eb2ea288309cc9c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3cde23664fbbe9cd2ac1b8fd5eb2ea288309cc9c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10549,8 +22044,8 @@ Date:   Tue Apr 17 11:44:49 2012 -0400
 
     Minor note re Graphite
 
 
     Minor note re Graphite
 
- src/hb-graphite2.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-graphite2.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 4dc2449d92308f8dd366142831c0b85bd30ea5a9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4dc2449d92308f8dd366142831c0b85bd30ea5a9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10558,8 +22053,8 @@ Date:   Tue Apr 17 11:39:48 2012 -0400
 
     Fix leak in graphite
 
 
     Fix leak in graphite
 
- src/hb-graphite2.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-graphite2.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 0290bbf8611aa881daed907f22256a431250c90a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0290bbf8611aa881daed907f22256a431250c90a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10567,8 +22062,8 @@ Date:   Tue Apr 17 10:28:21 2012 -0400
 
     Add another Thai test
 
 
     Add another Thai test
 
.../texts/in-tree/shaper-thai/misc/misc.txt       |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
test/shaping/texts/in-tree/shaper-thai/misc/misc.txt | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 9ceca3aeb14cc096f5f87660cf7351bc35073084
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ceca3aeb14cc096f5f87660cf7351bc35073084
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10578,8 +22073,8 @@ Date:   Mon Apr 16 21:05:51 2012 -0400
 
     As reported by datao zhang on the mailing list.
 
 
     As reported by datao zhang on the mailing list.
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b870afcd1b436614af95db6dc297e54c8f03f0cd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b870afcd1b436614af95db6dc297e54c8f03f0cd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10589,8 +22084,8 @@ Date:   Mon Apr 16 21:05:11 2012 -0400
 
     https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx
 
 
     https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 95cefdf96efe43a44133aa8a186155cf4e63e2b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 95cefdf96efe43a44133aa8a186155cf4e63e2b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10600,14 +22095,14 @@ Date: Mon Apr 16 18:08:20 2012 -0400
 
     Also fix cairo cluster generation.
 
 
     Also fix cairo cluster generation.
 
- util/hb-shape.cc     |    8 +++++---
- util/hb-view.hh      |    2 +-
- util/helper-cairo.cc |   22 +++++++++++++++++-----
- util/helper-cairo.hh |    3 ++-
- util/options.cc      |   19 ++++++++++++++-----
- util/options.hh      |   26 ++++++++++++++++----------
- util/view-cairo.cc   |    5 +++--
- util/view-cairo.hh   |    3 ++-
+ util/hb-shape.cc     |  8 +++++---
+ util/hb-view.hh      |  2 +-
+ util/helper-cairo.cc | 22 +++++++++++++++++-----
+ util/helper-cairo.hh |  3 ++-
+ util/options.cc      | 19 ++++++++++++++-----
+ util/options.hh      | 26 ++++++++++++++++----------
+ util/view-cairo.cc   |  5 +++--
+ util/view-cairo.hh   |  3 ++-
  8 files changed, 60 insertions(+), 28 deletions(-)
 
 commit effb42e5c520128bdc2e29398ed801730c5c0f52
  8 files changed, 60 insertions(+), 28 deletions(-)
 
 commit effb42e5c520128bdc2e29398ed801730c5c0f52
@@ -10618,8 +22113,8 @@ Date:   Mon Apr 16 16:04:07 2012 -0400
 
     Better catches cluster errors.
 
 
     Better catches cluster errors.
 
- util/view-cairo.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/view-cairo.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 799cfdd15ab369580b2283200c3aca6866214b59
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 799cfdd15ab369580b2283200c3aca6866214b59
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10627,8 +22122,8 @@ Date:   Mon Apr 16 16:00:36 2012 -0400
 
     Make page progression be right to left for vertical text
 
 
     Make page progression be right to left for vertical text
 
- util/view-cairo.cc |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ util/view-cairo.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit a5f1834f57ea3fb254f5c7d372747de316fcc8f1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a5f1834f57ea3fb254f5c7d372747de316fcc8f1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10639,8 +22134,8 @@ Date:   Mon Apr 16 15:55:13 2012 -0400
     Apparently that's what Kazuraki uses to form vertical ligatures,
     which suggests that it's what Adobe does.
 
     Apparently that's what Kazuraki uses to form vertical ligatures,
     which suggests that it's what Adobe does.
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4d85252bda25cddd1fbdd744687e449888f0b5fa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4d85252bda25cddd1fbdd744687e449888f0b5fa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10648,13 +22143,13 @@ Date: Mon Apr 16 15:54:26 2012 -0400
 
     Add Japanese test data from Adobe's Kazuraki font ligatures
 
 
     Add Japanese test data from Adobe's Kazuraki font ligatures
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
- .../shaper-default/script-japanese/MANIFEST       |    1 +
- .../shaper-default/script-japanese/misc/MANIFEST   |   2 +
- .../script-japanese/misc/kazuraki-liga-lines.txt   |   8 +++
- .../script-japanese/misc/kazuraki-liga.txt        |   53
- ++++++++++++++++++++
- 5 files changed, 65 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |  1 +
+ .../shaper-default/script-japanese/MANIFEST       |  1 +
+ .../shaper-default/script-japanese/misc/MANIFEST   |  2 +
+ .../script-japanese/misc/kazuraki-liga-lines.txt   |  8 ++++
+ .../script-japanese/misc/kazuraki-liga.txt        | 53
+ ++++++++++++++++++++++
+ 5 files changed, 65 insertions(+)
 
 commit e74616b8898b5f18d9bf82b9e81aefad056c1e36
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e74616b8898b5f18d9bf82b9e81aefad056c1e36
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10662,8 +22157,8 @@ Date:   Sun Apr 15 14:12:13 2012 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-private.hh |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 683b503f30bba29d57a93d7e8ac7138c2e7f49f1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 683b503f30bba29d57a93d7e8ac7138c2e7f49f1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10671,9 +22166,9 @@ Date:   Sat Apr 14 20:47:14 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |   11 +++++++++--
- src/hb-ot-shape-private.hh   |    9 ---------
- src/hb-ot-shape.cc          |    9 ++++++++-
+ src/hb-ot-shape-normalize.cc | 11 +++++++++--
+ src/hb-ot-shape-private.hh   |  9 ---------
+ src/hb-ot-shape.cc          |  9 ++++++++-
  3 files changed, 17 insertions(+), 12 deletions(-)
 
 commit b9f199c8e38cc5ed0d73845568630f3bcbdd4374
  3 files changed, 17 insertions(+), 12 deletions(-)
 
 commit b9f199c8e38cc5ed0d73845568630f3bcbdd4374
@@ -10682,9 +22177,9 @@ Date:   Sat Apr 14 20:23:58 2012 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-shape-private.hh |  40 ---------------------------------------
- src/hb-ot-shape.cc        |   45
- ++++++++++++++++++++++++++++++++++++++++---
+ src/hb-ot-shape-private.hh | 40 ----------------------------------------
+ src/hb-ot-shape.cc        | 45
+ +++++++++++++++++++++++++++++++++++++++++----
  2 files changed, 41 insertions(+), 44 deletions(-)
 
 commit 38a83019e6a7f4aa47662fd557344f62ae001abe
  2 files changed, 41 insertions(+), 44 deletions(-)
 
 commit 38a83019e6a7f4aa47662fd557344f62ae001abe
@@ -10693,8 +22188,8 @@ Date:   Sat Apr 14 19:40:18 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-common.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-common.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit d4adade217a61007dd2da5cd9eccf889f79a019a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d4adade217a61007dd2da5cd9eccf889f79a019a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10702,8 +22197,8 @@ Date:   Sat Apr 14 19:23:17 2012 -0400
 
     Add assert
 
 
     Add assert
 
- src/hb-ot-shape.cc |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit fe28b997fbbeb2cfeab62ac453993ccffe3e6719
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fe28b997fbbeb2cfeab62ac453993ccffe3e6719
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10711,9 +22206,9 @@ Date:   Sat Apr 14 19:19:26 2012 -0400
 
     Add HB_DIRECTION_IS_VALID
 
 
     Add HB_DIRECTION_IS_VALID
 
- src/hb-common.h       |    1 +
- test/api/test-common.c |    7 +++++++
- 2 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-common.h       | 1 +
+ test/api/test-common.c | 7 +++++++
+ 2 files changed, 8 insertions(+)
 
 commit 5e88aa66822ba64324b4428c9ffbe06a43b4f310
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5e88aa66822ba64324b4428c9ffbe06a43b4f310
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10724,9 +22219,9 @@ Date:   Sat Apr 14 18:51:50 2012 -0400
     As was reported to me, glib-mkenum does not understand named enums,
     so remove for now.
 
     As was reported to me, glib-mkenum does not understand named enums,
     so remove for now.
 
- src/hb-blob.h              |    2 +-
- src/hb-common.h            |    6 +++---
- src/hb-ot-layout-private.hh |   2 +-
+ src/hb-blob.h              | 2 +-
+ src/hb-common.h            | 6 +++---
+ src/hb-ot-layout-private.hh | 2 +-
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 08569c0eaab026c7122c0dc29922cf44011c4d10
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 08569c0eaab026c7122c0dc29922cf44011c4d10
@@ -10735,8 +22230,8 @@ Date:   Sat Apr 14 18:47:07 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 4bf90f648313e35d21b427a956aa1fe762bae757
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4bf90f648313e35d21b427a956aa1fe762bae757
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10747,9 +22242,9 @@ Date:   Thu Apr 12 17:38:23 2012 -0400
     This changes all the HB_DIRECTION_* enum member values, but is
     nicer, in preparation for making hb_segment_properties_t public.
 
     This changes all the HB_DIRECTION_* enum member values, but is
     nicer, in preparation for making hb_segment_properties_t public.
 
- src/hb-common.cc      |    7 ++++---
- src/hb-common.h       |   20 ++++++++++----------
- test/api/test-common.c |    9 +++++++--
+ src/hb-common.cc      |  7 ++++---
+ src/hb-common.h       | 20 ++++++++++----------
+ test/api/test-common.c |  9 +++++++--
  3 files changed, 21 insertions(+), 15 deletions(-)
 
 commit d01402da9c756f90a84bfb1f964fd56caf2b35c3
  3 files changed, 21 insertions(+), 15 deletions(-)
 
 commit d01402da9c756f90a84bfb1f964fd56caf2b35c3
@@ -10758,8 +22253,8 @@ Date:   Thu Apr 12 17:38:02 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |    6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ TODO | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit 69b84a8f6c789726815261c2e86692de7a65d6e8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 69b84a8f6c789726815261c2e86692de7a65d6e8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10770,10 +22265,10 @@ Date: Thu Apr 12 15:50:40 2012 -0400
     For some reason it doesn't quite work with IranianNastaliq, but
     that looks like a font issue.
 
     For some reason it doesn't quite work with IranianNastaliq, but
     that looks like a font issue.
 
- util/helper-cairo.hh |    5 +++--
- util/options.hh      |    7 +++++++
- util/view-cairo.cc   |   31 +++++++++++++++++++++----------
- util/view-cairo.hh   |    1 +
+ util/helper-cairo.hh |  5 +++--
+ util/options.hh      |  7 +++++++
+ util/view-cairo.cc   | 31 +++++++++++++++++++++----------
+ util/view-cairo.hh   |  1 +
  4 files changed, 32 insertions(+), 12 deletions(-)
 
 commit 6bd9b479b8b2befbb0847282e93beade197c8038
  4 files changed, 32 insertions(+), 12 deletions(-)
 
 commit 6bd9b479b8b2befbb0847282e93beade197c8038
@@ -10787,24 +22282,24 @@ Date: Thu Apr 12 14:53:53 2012 -0400
 
     More shaper API coming in preparation for plan/planned API.
 
 
     More shaper API coming in preparation for plan/planned API.
 
- configure.ac                    |    6 ++--
- src/Makefile.am                 |   11 ++++----
- src/hb-fallback-shape-private.hh |    9 +++----
- src/hb-fallback-shape.cc        |    9 +++----
- src/hb-graphite2-private.hh     |   42 +++++++++++++++++++++++++++++++++
- src/hb-graphite2.cc             |    5 +--
- src/hb-graphite2.h              |    7 -----
- src/hb-ot-shape-private.hh      |    8 ++++-
- src/hb-ot-shape.cc              |   11 +++-----
- src/hb-ot-shape.h               |   48
- --------------------------------------
- src/hb-ot.h                     |    1 -
- src/hb-shape.cc                 |   24 +++++++------------
- src/hb-shape.h                          |    1 -
- src/hb-uniscribe-private.hh     |   42 +++++++++++++++++++++++++++++++++
- src/hb-uniscribe.cc             |    9 +++----
- src/hb-uniscribe.h              |    7 -----
- util/options.hh                 |    2 +-
+ configure.ac                    |  6 ++---
+ src/Makefile.am                 | 11 +++++----
+ src/hb-fallback-shape-private.hh |  9 ++++----
+ src/hb-fallback-shape.cc        |  9 ++++----
+ src/hb-graphite2-private.hh     | 42 +++++++++++++++++++++++++++++++++++
+ src/hb-graphite2.cc             |  5 ++---
+ src/hb-graphite2.h              |  7 ------
+ src/hb-ot-shape-private.hh      |  8 +++++--
+ src/hb-ot-shape.cc              | 11 ++++-----
+ src/hb-ot-shape.h               | 48
+ ----------------------------------------
+ src/hb-ot.h                     |  1 -
+ src/hb-shape.cc                 | 24 ++++++++------------
+ src/hb-shape.h                          |  1 -
+ src/hb-uniscribe-private.hh     | 42 +++++++++++++++++++++++++++++++++++
+ src/hb-uniscribe.cc             |  9 ++++----
+ src/hb-uniscribe.h              |  7 ------
+ util/options.hh                 |  2 +-
  17 files changed, 126 insertions(+), 116 deletions(-)
 
 commit c6035cf802c60f0526f421f39a55886061df94ee
  17 files changed, 126 insertions(+), 116 deletions(-)
 
 commit c6035cf802c60f0526f421f39a55886061df94ee
@@ -10816,13 +22311,13 @@ Date: Thu Apr 12 13:23:59 2012 -0400
     gdb was showing <anonymous enum> instead of useful stuff, so name
     all our enums.
 
     gdb was showing <anonymous enum> instead of useful stuff, so name
     all our enums.
 
- src/hb-blob.h                     |    2 +-
- src/hb-common.h                   |    6 +++---
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gdef-table.hh     |   2 +-
- src/hb-ot-layout-gpos-table.hh     |   5 ++---
- src/hb-ot-layout-gsub-table.hh     |   2 +-
- src/hb-ot-layout-private.hh       |    2 +-
+ src/hb-blob.h                     | 2 +-
+ src/hb-common.h                   | 6 +++---
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-ot-layout-gdef-table.hh     | 2 +-
+ src/hb-ot-layout-gpos-table.hh     | 5 ++---
+ src/hb-ot-layout-gsub-table.hh     | 2 +-
+ src/hb-ot-layout-private.hh       | 2 +-
  7 files changed, 10 insertions(+), 11 deletions(-)
 
 commit d1c9eb458c843215da8df84b596bfae51fee135b
  7 files changed, 10 insertions(+), 11 deletions(-)
 
 commit d1c9eb458c843215da8df84b596bfae51fee135b
@@ -10835,25 +22330,25 @@ Date: Thu Apr 12 13:17:44 2012 -0400
     never things like hb-shape.h directly.  This makes it easier to
     refactor headers later on without breaking compatibility.
 
     never things like hb-shape.h directly.  This makes it easier to
     refactor headers later on without breaking compatibility.
 
- src/hb-blob.h      |    4 ++++
- src/hb-buffer.h     |   4 ++++
- src/hb-common.h     |   4 ++++
- src/hb-font.h      |    4 ++++
- src/hb-ft.h        |    2 --
- src/hb-glib.h      |    1 +
- src/hb-gobject.h    |   1 +
- src/hb-graphite2.h  |   5 +++--
- src/hb-icu.h       |    1 +
- src/hb-ot-layout.h  |   8 +++++---
- src/hb-ot-shape.h   |   9 +++++----
- src/hb-ot-tag.h     |   6 +++++-
- src/hb-ot.h        |    2 ++
- src/hb-private.hh   |   5 ++++-
- src/hb-shape.h      |   4 ++++
- src/hb-unicode.h    |   4 ++++
- src/hb-uniscribe.h  |   3 +--
- src/hb-version.h.in |   4 ++++
- src/hb.h           |    2 ++
+ src/hb-blob.h      | 4 ++++
+ src/hb-buffer.h     | 4 ++++
+ src/hb-common.h     | 4 ++++
+ src/hb-font.h      | 4 ++++
+ src/hb-ft.h        | 2 --
+ src/hb-glib.h      | 1 +
+ src/hb-gobject.h    | 1 +
+ src/hb-graphite2.h  | 5 +++--
+ src/hb-icu.h       | 1 +
+ src/hb-ot-layout.h  | 8 +++++---
+ src/hb-ot-shape.h   | 9 +++++----
+ src/hb-ot-tag.h     | 6 +++++-
+ src/hb-ot.h        | 2 ++
+ src/hb-private.hh   | 5 ++++-
+ src/hb-shape.h      | 4 ++++
+ src/hb-unicode.h    | 4 ++++
+ src/hb-uniscribe.h  | 3 +--
+ src/hb-version.h.in | 4 ++++
+ src/hb.h           | 2 ++
  19 files changed, 58 insertions(+), 15 deletions(-)
 
 commit 323190c27b80cddc9b3c42d19f1f243e2acb2411
  19 files changed, 58 insertions(+), 15 deletions(-)
 
 commit 323190c27b80cddc9b3c42d19f1f243e2acb2411
@@ -10862,8 +22357,8 @@ Date:   Thu Apr 12 12:29:10 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ft.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ft.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 0e3361464b00b76aa7375515163e0710a691db0c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e3361464b00b76aa7375515163e0710a691db0c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10874,8 +22369,8 @@ Date:   Thu Apr 12 10:06:52 2012 -0400
     Fixes Mongolian shaping issue:
     https://bugs.freedesktop.org/show_bug.cgi?id=45695
 
     Fixes Mongolian shaping issue:
     https://bugs.freedesktop.org/show_bug.cgi?id=45695
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f9746b600a6e14dbe48aabfc17df8f12a5b46b11
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f9746b600a6e14dbe48aabfc17df8f12a5b46b11
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10883,8 +22378,9 @@ Date:   Thu Apr 12 09:59:26 2012 -0400
 
     Minor
 
 
     Minor
 
- .../shaper-arabic/script-mongolian/misc/misc.txt   |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt |
+ 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 7470b0ff805e4ff59d23d7a1808888fafdf550eb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7470b0ff805e4ff59d23d7a1808888fafdf550eb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10892,12 +22388,17 @@ Date: Thu Apr 12 09:44:27 2012 -0400
 
     Add Mongolian test case
 
 
     Add Mongolian test case
 
- test/shaping/texts/in-tree/MANIFEST               |    1 +
- .../shaper-arabic/script-mongolian/misc/MANIFEST   |   1 +
- .../shaper-arabic/script-mongolian/misc/misc.txt   |   4 ++++
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |   1 +
- .../texts/in-tree/shaper-thai/misc/MANIFEST       |    1 +
- 5 files changed, 8 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/MANIFEST                                  |
+ 1 +
+ .../texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST        |
+ 1 +
+ .../texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt        |
+ 4 ++++
+ test/shaping/texts/in-tree/shaper-thai/MANIFEST                      |
+ 1 +
+ test/shaping/texts/in-tree/shaper-thai/misc/MANIFEST                 |
+ 1 +
+ 5 files changed, 8 insertions(+)
 
 commit c65662b71e6160f5adfb6226d97589ca457d98b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c65662b71e6160f5adfb6226d97589ca457d98b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10908,8 +22409,8 @@ Date:   Thu Apr 12 09:31:55 2012 -0400
     Fixes 200 failures out of previous 4290 cases in the OO.o Indic
     dictionary (of ~16000 entries).
 
     Fixes 200 failures out of previous 4290 cases in the OO.o Indic
     dictionary (of ~16000 entries).
 
- src/hb-ot-shape-complex-indic.cc |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 6d16403bfaa4d710d80c93298eca7211ecaa419f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6d16403bfaa4d710d80c93298eca7211ecaa419f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10917,8 +22418,8 @@ Date:   Wed Apr 11 22:04:42 2012 -0400
 
     Adjust TODO
 
 
     Adjust TODO
 
- TODO |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ TODO | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 029a82d81d8ffa1b6771d19018d592fec1dbc934
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 029a82d81d8ffa1b6771d19018d592fec1dbc934
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10932,8 +22433,8 @@ Date:   Wed Apr 11 22:00:46 2012 -0400
 
     Lets call Hangul done for now.
 
 
     Lets call Hangul done for now.
 
- src/hb-ot-shape-complex-misc.cc |    9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-misc.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 3baae2440de69577d330209edb708e7d2bb2231d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3baae2440de69577d330209edb708e7d2bb2231d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10941,8 +22442,8 @@ Date:   Wed Apr 11 21:54:37 2012 -0400
 
     Update TODO
 
 
     Update TODO
 
- TODO |   28 +++++++++++++++-------------
- 1 files changed, 15 insertions(+), 13 deletions(-)
+ TODO | 28 +++++++++++++++-------------
+ 1 file changed, 15 insertions(+), 13 deletions(-)
 
 commit a4976447cd1a1feffdecd0d501a2690716b1cf4b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a4976447cd1a1feffdecd0d501a2690716b1cf4b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10950,8 +22451,9 @@ Date:   Wed Apr 11 17:48:40 2012 -0400
 
     Add Hangul test
 
 
     Add Hangul test
 
- .../shaper-hangul/script-hangul/misc/misc.txt     |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt |
+ 1 +
+ 1 file changed, 1 insertion(+)
 
 commit e95d912b3b0af027c4384553f95236db822e5acc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e95d912b3b0af027c4384553f95236db822e5acc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10959,8 +22461,8 @@ Date:   Wed Apr 11 17:33:02 2012 -0400
 
     Fix diff tool
 
 
     Fix diff tool
 
- test/shaping/hb_test_tools.py |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ test/shaping/hb_test_tools.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 41ae674f6871f43d0a6e4ca67a747074d63ae576
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 41ae674f6871f43d0a6e4ca67a747074d63ae576
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10973,9 +22475,9 @@ Date:   Wed Apr 11 17:11:05 2012 -0400
     But reminds me that optimizing this codebase without profiling first
     is simply not going to work.  Oh well...
 
     But reminds me that optimizing this codebase without profiling first
     is simply not going to work.  Oh well...
 
- src/hb-ot-layout-gpos-table.hh       |   24 ++++++------------------
- src/hb-ot-layout-gsub-table.hh       |   26 +++++++-------------------
- src/hb-ot-layout-gsubgpos-private.hh |   22 ++++++++++++++++++++++
+ src/hb-ot-layout-gpos-table.hh       | 24 ++++++------------------
+ src/hb-ot-layout-gsub-table.hh       | 26 +++++++-------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 22 ++++++++++++++++++++++
  3 files changed, 35 insertions(+), 37 deletions(-)
 
 commit 4a1e02ef7979d58fe0c726ee7c665b2420c42ddd
  3 files changed, 35 insertions(+), 37 deletions(-)
 
 commit 4a1e02ef7979d58fe0c726ee7c665b2420c42ddd
@@ -10986,8 +22488,8 @@ Date:   Wed Apr 11 14:37:53 2012 -0400
 
     As reported by Jonathan Kew on the list.
 
 
     As reported by Jonathan Kew on the list.
 
- src/hb-ot-shape-complex-arabic.cc |   9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 6062f5f01436b4044be729890ed00b9b62737824
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6062f5f01436b4044be729890ed00b9b62737824
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -10997,8 +22499,8 @@ Date:   Wed Apr 11 14:19:55 2012 -0400
 
     As reported by Jonathan Kew on the list.
 
 
     As reported by Jonathan Kew on the list.
 
- src/hb-ot-shape-complex-misc.cc |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-misc.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit acd88e659fdb2fa1cbf7171f0a1c7fbc81b9f298
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit acd88e659fdb2fa1cbf7171f0a1c7fbc81b9f298
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11006,11 +22508,11 @@ Date: Tue Apr 10 18:02:20 2012 -0400
 
     In Arabic fallback shaping, check that the font has glyph for new char
 
 
     In Arabic fallback shaping, check that the font has glyph for new char
 
- src/hb-ot-shape-complex-arabic.cc  |  12 +++++++-----
- src/hb-ot-shape-complex-indic.cc   |   2 +-
- src/hb-ot-shape-complex-misc.cc    |   6 +++---
- src/hb-ot-shape-complex-private.hh |   7 ++++---
- src/hb-ot-shape.cc                |    2 +-
+ src/hb-ot-shape-complex-arabic.cc  | 12 +++++++-----
+ src/hb-ot-shape-complex-indic.cc   |  2 +-
+ src/hb-ot-shape-complex-misc.cc    |  6 +++---
+ src/hb-ot-shape-complex-private.hh |  7 ++++---
+ src/hb-ot-shape.cc                |  2 +-
  5 files changed, 16 insertions(+), 13 deletions(-)
 
 commit 7752aa73e72301a46c64c533c1e423ff5987cc05
  5 files changed, 16 insertions(+), 13 deletions(-)
 
 commit 7752aa73e72301a46c64c533c1e423ff5987cc05
@@ -11019,9 +22521,9 @@ Date:   Tue Apr 10 17:22:14 2012 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-private.hh |   1 -
- src/hb-ot-shape.cc        |   10 ----------
- 2 files changed, 0 insertions(+), 11 deletions(-)
+ src/hb-ot-shape-private.hh |  1 -
+ src/hb-ot-shape.cc        | 10 ----------
+ 2 files changed, 11 deletions(-)
 
 commit 939c010211b063f78874a3b72b032c1ed9a13b87
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 939c010211b063f78874a3b72b032c1ed9a13b87
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11029,12 +22531,12 @@ Date: Tue Apr 10 17:20:05 2012 -0400
 
     Implement Arabic fallback shaping mandatory ligatures
 
 
     Implement Arabic fallback shaping mandatory ligatures
 
- src/gen-arabic-table.py                |   32
- +++++++++++++++++++++---------
- src/hb-ot-shape-complex-arabic-table.hh |   28 ++++++++++++++++++--------
- src/hb-ot-shape-complex-arabic.cc      |   31
- ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-misc.cc        |    4 +-
+ src/gen-arabic-table.py                | 32
+ ++++++++++++++++++++++----------
+ src/hb-ot-shape-complex-arabic-table.hh | 28 +++++++++++++++++++---------
+ src/hb-ot-shape-complex-arabic.cc      | 31
+ +++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-misc.cc        |  4 ++--
  4 files changed, 74 insertions(+), 21 deletions(-)
 
 commit b7d04eb606800100faa11100d2adf559e297a4ee
  4 files changed, 74 insertions(+), 21 deletions(-)
 
 commit b7d04eb606800100faa11100d2adf559e297a4ee
@@ -11043,9 +22545,9 @@ Date:   Tue Apr 10 16:44:38 2012 -0400
 
     Do Arabic fallback shaping
 
 
     Do Arabic fallback shaping
 
- src/hb-ot-shape-complex-arabic.cc |   38
- ++++++++++++++++++++++++++++++++----
- 1 files changed, 33 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 38
+ +++++++++++++++++++++++++++++++++-----
+ 1 file changed, 33 insertions(+), 5 deletions(-)
 
 commit ae4a2b9365051c23c9a299cf76f3ab7e661999b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae4a2b9365051c23c9a299cf76f3ab7e661999b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11055,11 +22557,11 @@ Date: Tue Apr 10 16:25:08 2012 -0400
 
     Not hooked up yet.
 
 
     Not hooked up yet.
 
- src/Makefile.am                        |    6 +-
- src/gen-arabic-table.py                |  220
- ++++++++++++++++++++++---------
- src/gen-indic-table.py                         |    4 +-
- src/hb-ot-shape-complex-arabic-table.hh |  205
+ src/Makefile.am                        |   6 +-
+ src/gen-arabic-table.py                | 220
+ +++++++++++++++++++++++---------
+ src/gen-indic-table.py                         |   4 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 205
  ++++++++++++++++++++++++++++-
  4 files changed, 367 insertions(+), 68 deletions(-)
 
  ++++++++++++++++++++++++++++-
  4 files changed, 367 insertions(+), 68 deletions(-)
 
@@ -11071,11 +22573,11 @@ Date: Tue Apr 10 10:52:07 2012 -0400
 
     That's not in the OpenType spec, but it's what MS and Adobe do.
 
 
     That's not in the OpenType spec, but it's what MS and Adobe do.
 
- src/hb-buffer.cc                  |    1 +
- src/hb-ot-shape-complex-misc.cc    |  104
- +++++++++++++++++++++++++++++++++++-
- src/hb-ot-shape-complex-private.hh |   8 +++
- 3 files changed, 112 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc                  |   1 +
+ src/hb-ot-shape-complex-misc.cc    | 104
+ ++++++++++++++++++++++++++++++++++++-
+ src/hb-ot-shape-complex-private.hh |  8 +++
+ 3 files changed, 112 insertions(+), 1 deletion(-)
 
 commit 0b6d2ac6a1d04877ae4542fc2a3b920185547053
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0b6d2ac6a1d04877ae4542fc2a3b920185547053
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11083,8 +22585,8 @@ Date:   Tue Apr 10 10:52:03 2012 -0400
 
     Minor
 
 
     Minor
 
- TODO |   10 ++++------
- 1 files changed, 4 insertions(+), 6 deletions(-)
+ TODO | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
 
 commit e099dd6592b4ea887696330f4718efb572494d93
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e099dd6592b4ea887696330f4718efb572494d93
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11092,9 +22594,9 @@ Date:   Tue Apr 10 10:47:33 2012 -0400
 
     Add Thai test case for SARA AM decomposition
 
 
     Add Thai test case for SARA AM decomposition
 
- test/shaping/texts/in-tree/shaper-hangul/MANIFEST  |   1 +
.../texts/in-tree/shaper-thai/misc/misc.txt       |    5 +++++
- 2 files changed, 6 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-hangul/MANIFEST    | 1 +
test/shaping/texts/in-tree/shaper-thai/misc/misc.txt | 5 +++++
+ 2 files changed, 6 insertions(+)
 
 commit 4450dc9354b18cd68980b0891b24ea8efa4f38b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4450dc9354b18cd68980b0891b24ea8efa4f38b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11102,14 +22604,22 @@ Date: Sat Apr 7 22:07:23 2012 -0400
 
     Move around
 
 
     Move around
 
- test/shaping/texts/in-tree/MANIFEST               |    1 +
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 -
- .../in-tree/shaper-default/script-hangul/MANIFEST  |   1 -
- .../shaper-default/script-hangul/misc/MANIFEST     |   1 -
- .../shaper-default/script-hangul/misc/misc.txt     |   2 --
- .../in-tree/shaper-hangul/script-hangul/MANIFEST   |   1 +
- .../shaper-hangul/script-hangul/misc/MANIFEST     |    1 +
- .../shaper-hangul/script-hangul/misc/misc.txt     |    2 ++
+ test/shaping/texts/in-tree/MANIFEST                                  |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/MANIFEST                   |
+ 1 -
+ test/shaping/texts/in-tree/shaper-default/script-hangul/MANIFEST      |
+ 1 -
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/MANIFEST |
+ 1 -
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/misc.txt |
+ 2 --
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/MANIFEST       |
+ 1 +
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/MANIFEST  |
+ 1 +
+ test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt  |
+ 2 ++
  8 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d4cc44716c1e098f8abbc0e495404598026ef242
  8 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d4cc44716c1e098f8abbc0e495404598026ef242
@@ -11118,9 +22628,9 @@ Date:   Sat Apr 7 21:52:28 2012 -0400
 
     Move code around, in prep for Thai/Lao shaper
 
 
     Move code around, in prep for Thai/Lao shaper
 
- src/hb-buffer-private.hh                |    5 +++++
- src/hb-buffer.cc                        |   23 +++++++++++++++++++++++
- src/hb-ot-shape-complex-indic-machine.rl |   14 +-------------
+ src/hb-buffer-private.hh                |  5 +++++
+ src/hb-buffer.cc                        | 23 +++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic-machine.rl | 14 +-------------
  3 files changed, 29 insertions(+), 13 deletions(-)
 
 commit c9a841f4452921c5361b8f5697bbff7736ce60cd
  3 files changed, 29 insertions(+), 13 deletions(-)
 
 commit c9a841f4452921c5361b8f5697bbff7736ce60cd
@@ -11142,8 +22652,8 @@ Date:   Sat Apr 7 15:06:55 2012 -0400
     I have no idea how the 'ljmo', 'vjmo', 'tjmo' features are supposed to
     work.  Maybe someone can explain them to me?
 
     I have no idea how the 'ljmo', 'vjmo', 'tjmo' features are supposed to
     work.  Maybe someone can explain them to me?
 
- src/hb-ot-shape-complex-misc.cc    |  16 ++++++++++++++++
- src/hb-ot-shape-complex-private.hh |  15 +++++++++++++--
+ src/hb-ot-shape-complex-misc.cc    | 16 ++++++++++++++++
+ src/hb-ot-shape-complex-private.hh | 15 +++++++++++++--
  2 files changed, 29 insertions(+), 2 deletions(-)
 
 commit 968318455304804dc53045e8ba0cd4d76800c02d
  2 files changed, 29 insertions(+), 2 deletions(-)
 
 commit 968318455304804dc53045e8ba0cd4d76800c02d
@@ -11156,8 +22666,8 @@ Date:   Sat Apr 7 14:57:21 2012 -0400
     In this mode we try composing CCC=0 with CCC=0 characters. Useful for
     Hangul.
 
     In this mode we try composing CCC=0 with CCC=0 characters. Useful for
     Hangul.
 
- src/hb-ot-shape-normalize.cc |   21 +++++++++++++--------
- 1 files changed, 13 insertions(+), 8 deletions(-)
+ src/hb-ot-shape-normalize.cc | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
 
 commit bec2ac4fde1ba0dd6dba02adbb836ce569a5cf6f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bec2ac4fde1ba0dd6dba02adbb836ce569a5cf6f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11167,8 +22677,8 @@ Date:   Sat Apr 7 14:51:17 2012 -0400
 
     No logical difference so far.
 
 
     No logical difference so far.
 
- src/hb-ot-shape-normalize.cc |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-normalize.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit e02d9257863b49e33ab5942971266349d3c548f6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e02d9257863b49e33ab5942971266349d3c548f6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11176,9 +22686,8 @@ Date:   Sat Apr 7 14:49:13 2012 -0400
 
     Flip logic around
 
 
     Flip logic around
 
- src/hb-ot-shape-normalize.cc |   38
- +++++++++++++-------------------------
- 1 files changed, 13 insertions(+), 25 deletions(-)
+ src/hb-ot-shape-normalize.cc | 38 +++++++++++++-------------------------
+ 1 file changed, 13 insertions(+), 25 deletions(-)
 
 commit aaa25d5f458127f53f4b5ecdeb986ae91fabbad3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aaa25d5f458127f53f4b5ecdeb986ae91fabbad3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11188,11 +22697,15 @@ Date: Thu Apr 5 17:27:23 2012 -0400
 
     Composed, and decomposed, of the same text.
 
 
     Composed, and decomposed, of the same text.
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
- .../in-tree/shaper-default/script-hangul/MANIFEST  |   1 +
- .../shaper-default/script-hangul/misc/MANIFEST     |   1 +
- .../shaper-default/script-hangul/misc/misc.txt     |   2 ++
- 4 files changed, 5 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-default/MANIFEST                   |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-hangul/MANIFEST      |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/MANIFEST |
+ 1 +
+ test/shaping/texts/in-tree/shaper-default/script-hangul/misc/misc.txt |
+ 2 ++
+ 4 files changed, 5 insertions(+)
 
 commit 11138ccff71f442da1fcf64faa0e1d22e083e775
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 11138ccff71f442da1fcf64faa0e1d22e083e775
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11202,17 +22715,17 @@ Date: Thu Apr 5 17:25:19 2012 -0400
 
     In preparation for Hangul shaper.
 
 
     In preparation for Hangul shaper.
 
- src/Makefile.am                     |    1 +
- src/hb-ot-layout-common-private.hh   |    1 -
- src/hb-ot-shape-complex-arabic.cc    |    6 +-
- src/hb-ot-shape-complex-indic.cc     |    6 +-
- src/hb-ot-shape-complex-misc.cc      |    8 ++--
- src/hb-ot-shape-complex-private.hh   |   13 +++---
- src/hb-ot-shape-normalize-private.hh |   46 +++++++++++++++++++++
- src/hb-ot-shape-normalize.cc        |   73
- ++++++++++++++++-----------------
- src/hb-ot-shape-private.hh          |    7 +--
- src/hb-ot-shape.cc                  |    2 +-
+ src/Makefile.am                     |  1 +
+ src/hb-ot-layout-common-private.hh   |  1 -
+ src/hb-ot-shape-complex-arabic.cc    |  6 +--
+ src/hb-ot-shape-complex-indic.cc     |  6 +--
+ src/hb-ot-shape-complex-misc.cc      |  8 ++--
+ src/hb-ot-shape-complex-private.hh   | 13 ++++---
+ src/hb-ot-shape-normalize-private.hh | 46 +++++++++++++++++++++++
+ src/hb-ot-shape-normalize.cc        | 73
+ +++++++++++++++++-------------------
+ src/hb-ot-shape-private.hh          |  7 +---
+ src/hb-ot-shape.cc                  |  2 +-
  10 files changed, 102 insertions(+), 61 deletions(-)
 
 commit 6769f21d579a354e32577ec57348e97d2cb1b438
  10 files changed, 102 insertions(+), 61 deletions(-)
 
 commit 6769f21d579a354e32577ec57348e97d2cb1b438
@@ -11221,10 +22734,10 @@ Date: Thu Apr 5 16:46:46 2012 -0400
 
     More moving code around
 
 
     More moving code around
 
- src/hb-ot-shape-normalize.cc |    2 +-
- src/hb-ot-shape-private.hh   |    8 --------
- src/hb-ot-shape.cc          |    2 +-
- src/hb-unicode-private.hh    |    8 ++++++++
+ src/hb-ot-shape-normalize.cc | 2 +-
+ src/hb-ot-shape-private.hh   | 8 --------
+ src/hb-ot-shape.cc          | 2 +-
+ src/hb-unicode-private.hh    | 8 ++++++++
  4 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 2db2a566826ed4763ce69629194ec656bd48b0bd
  4 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 2db2a566826ed4763ce69629194ec656bd48b0bd
@@ -11233,11 +22746,11 @@ Date: Thu Apr 5 16:40:37 2012 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-shape-private.hh |  53
- ------------------------------------------
- src/hb-unicode-private.hh  |   3 ++
- src/hb-unicode.cc         |   55
- ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-private.hh | 53
+ --------------------------------------------
+ src/hb-unicode-private.hh  |  3 +++
+ src/hb-unicode.cc         | 55
+ ++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 58 insertions(+), 53 deletions(-)
 
 commit cad3821f3d5b68d490b0728bd37bd57428ec809c
  3 files changed, 58 insertions(+), 53 deletions(-)
 
 commit cad3821f3d5b68d490b0728bd37bd57428ec809c
@@ -11248,10 +22761,10 @@ Date: Wed Mar 7 17:13:25 2012 -0500
 
     This is the most convenient way to browse scripts.
 
 
     This is the most convenient way to browse scripts.
 
- src/hb-common.cc                  |    2 +-
- src/hb-common.h                   |    2 +-
- src/hb-ot-shape-complex-private.hh |  94
- ++++++++++++++++++++++++++---------
+ src/hb-common.cc                  |  2 +-
+ src/hb-common.h                   |  2 +-
+ src/hb-ot-shape-complex-private.hh | 94
+ ++++++++++++++++++++++++++++----------
  3 files changed, 72 insertions(+), 26 deletions(-)
 
 commit 317b9504d7a4faa70dcf21e5c2aff4792dbd201a
  3 files changed, 72 insertions(+), 26 deletions(-)
 
 commit 317b9504d7a4faa70dcf21e5c2aff4792dbd201a
@@ -11260,8 +22773,8 @@ Date:   Wed Mar 7 16:51:29 2012 -0500
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |  10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
 
 commit fa2673c1ee954ddbbfbfca7cced7b839d7776fc0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fa2673c1ee954ddbbfbfca7cced7b839d7776fc0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11271,8 +22784,8 @@ Date:   Wed Mar 7 15:52:02 2012 -0500
 
     Cross-checked with Mark Davis's spreadsheet at http://goo.gl/x9ilM
 
 
     Cross-checked with Mark Davis's spreadsheet at http://goo.gl/x9ilM
 
- src/hb-common.cc |    8 ++++++++
- src/hb-common.h  |   52
+ src/hb-common.cc |  8 ++++++++
+ src/hb-common.h  | 52
  +++++++++++++++++++++++++++++-----------------------
  2 files changed, 37 insertions(+), 23 deletions(-)
 
  +++++++++++++++++++++++++++++-----------------------
  2 files changed, 37 insertions(+), 23 deletions(-)
 
@@ -11282,10 +22795,10 @@ Date: Wed Mar 7 15:33:14 2012 -0500
 
     Make src tests pass again
 
 
     Make src tests pass again
 
- src/gen-arabic-table.py                |   11 ++++++-----
- src/gen-indic-table.py                         |    9 +++++----
- src/hb-ot-shape-complex-arabic-table.hh |    6 ++++++
- src/hb-ot-shape-complex-indic-table.hh  |    4 ++++
+ src/gen-arabic-table.py                | 11 ++++++-----
+ src/gen-indic-table.py                         |  9 +++++----
+ src/hb-ot-shape-complex-arabic-table.hh |  6 ++++++
+ src/hb-ot-shape-complex-indic-table.hh  |  4 ++++
  4 files changed, 21 insertions(+), 9 deletions(-)
 
 commit 7da435f08cc406080a5ee9b1ab5351db6a93acae
  4 files changed, 21 insertions(+), 9 deletions(-)
 
 commit 7da435f08cc406080a5ee9b1ab5351db6a93acae
@@ -11294,8 +22807,8 @@ Date:   Wed Mar 7 15:20:20 2012 -0500
 
     Separate Unicode 3.1 and Unicode 3.2 additions
 
 
     Separate Unicode 3.1 and Unicode 3.2 additions
 
- src/hb-common.h |   14 +++++++++-----
- 1 files changed, 9 insertions(+), 5 deletions(-)
+ src/hb-common.h | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
 
 commit f91136cb528e298651c4a8a8a1d6dc54136e09ce
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f91136cb528e298651c4a8a8a1d6dc54136e09ce
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11303,8 +22816,8 @@ Date:   Wed Mar 7 12:56:22 2012 -0500
 
     Route three Unicode 6.1 scripts through Indic shaper
 
 
     Route three Unicode 6.1 scripts through Indic shaper
 
- src/hb-ot-shape-complex-private.hh |   7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit f32c0012ad794cd2df669dfc7b0438fafbe38b2d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f32c0012ad794cd2df669dfc7b0438fafbe38b2d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11312,9 +22825,9 @@ Date:   Wed Mar 7 12:53:34 2012 -0500
 
     Add Unicode 6.1.0 scripts
 
 
     Add Unicode 6.1.0 scripts
 
- src/hb-common.h |    9 +++++++++
- src/hb-glib.cc  |   11 ++++++++++-
- 2 files changed, 19 insertions(+), 1 deletions(-)
+ src/hb-common.h |  9 +++++++++
+ src/hb-glib.cc  | 11 ++++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
 
 commit 50e810cd0e55c25fddb0a2fd0861c51fbf65700e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 50e810cd0e55c25fddb0a2fd0861c51fbf65700e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11322,8 +22835,8 @@ Date:   Wed Mar 7 12:49:08 2012 -0500
 
     Lydian and Kharoshthi are right-to-left
 
 
     Lydian and Kharoshthi are right-to-left
 
- src/hb-common.cc |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-common.cc | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit a52835635e4a2a12715aff2febb561515a10cd5a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a52835635e4a2a12715aff2febb561515a10cd5a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11331,9 +22844,9 @@ Date:   Wed Mar 7 12:38:39 2012 -0500
 
     Whitespace
 
 
     Whitespace
 
- src/hb-common.h |  194
- +++++++++++++++++++++++++++---------------------------
- 1 files changed, 97 insertions(+), 97 deletions(-)
+ src/hb-common.h | 194
+ ++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 97 insertions(+), 97 deletions(-)
 
 commit 183224684a45d7dcd7d28510d4383a7a7cb3dff3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 183224684a45d7dcd7d28510d4383a7a7cb3dff3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11348,8 +22861,8 @@ Date:   Wed Mar 7 12:21:28 2012 -0500
     data for some scripts in the Indic shaper that are not even going
     through that shaper.  Need to find a better way...
 
     data for some scripts in the Indic shaper that are not even going
     through that shaper.  Need to find a better way...
 
- src/hb-ot-shape-complex-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit cdc8b491a8e7cec5082ca2ad0346c1f41fdd5c92
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdc8b491a8e7cec5082ca2ad0346c1f41fdd5c92
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11357,11 +22870,11 @@ Date: Wed Mar 7 12:08:33 2012 -0500
 
     Update Indic table to Unicode 6.1 data
 
 
     Update Indic table to Unicode 6.1 data
 
- src/Makefile.am                        |   15 +++
- src/gen-indic-table.py                         |   20 ++--
- src/hb-ot-shape-complex-arabic-table.hh |   35 ------
- src/hb-ot-shape-complex-indic-table.hh  |  178
- +++++++++++++++++++------------
+ src/Makefile.am                        |  15 +++
+ src/gen-indic-table.py                         |  20 ++--
+ src/hb-ot-shape-complex-arabic-table.hh |  35 -------
+ src/hb-ot-shape-complex-indic-table.hh  | 178
+ +++++++++++++++++++-------------
  4 files changed, 134 insertions(+), 114 deletions(-)
 
 commit e3b2e077f549b04779c08a9fedb1f35b9f11075c
  4 files changed, 134 insertions(+), 114 deletions(-)
 
 commit e3b2e077f549b04779c08a9fedb1f35b9f11075c
@@ -11370,8 +22883,8 @@ Date:   Wed Mar 7 10:21:24 2012 -0500
 
     Typo
 
 
     Typo
 
- src/hb-ot-shape-normalize.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-normalize.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c346671b6b9b05fa51b95c16212eb29ac69510fa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c346671b6b9b05fa51b95c16212eb29ac69510fa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11379,8 +22892,8 @@ Date:   Tue Mar 6 20:47:50 2012 -0500
 
     Minor doc fixes
 
 
     Minor doc fixes
 
- src/hb-ot-shape-normalize.cc |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-normalize.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit 406044986a68676f3050f9350ccc448c615fc685
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 406044986a68676f3050f9350ccc448c615fc685
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11391,11 +22904,12 @@ Date: Tue Mar 6 20:24:31 2012 -0500
     From:
     https://bugzilla.mozilla.org/show_bug.cgi?id=662055
 
     From:
     https://bugzilla.mozilla.org/show_bug.cgi?id=662055
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
- .../in-tree/shaper-default/script-hebrew/MANIFEST  |   1 +
- .../shaper-default/script-hebrew/misc/MANIFEST     |   1 +
- .../script-hebrew/misc/diacritics.txt             |   15 +++++++++++++++
- 4 files changed, 18 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-default/MANIFEST       |  1 +
+ .../texts/in-tree/shaper-default/script-hebrew/MANIFEST   |  1 +
+ .../in-tree/shaper-default/script-hebrew/misc/MANIFEST    |  1 +
+ .../shaper-default/script-hebrew/misc/diacritics.txt     | 15
+ +++++++++++++++
+ 4 files changed, 18 insertions(+)
 
 commit 461b9b6347e4f58589f5be82c40a2df61da2c715
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 461b9b6347e4f58589f5be82c40a2df61da2c715
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11408,8 +22922,8 @@ Date:   Thu Mar 1 18:11:19 2012 -0800
 
     Mozilla Bug 729626 - ASAN: heap-buffer-overflow HTML
 
 
     Mozilla Bug 729626 - ASAN: heap-buffer-overflow HTML
 
- src/hb-ot-shape-complex-indic-machine.rl |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit bc71ad4973842f25216b48842a46d6c9cbce6aa3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bc71ad4973842f25216b48842a46d6c9cbce6aa3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11420,8 +22934,8 @@ Date:   Thu Mar 1 17:30:29 2012 -0800
     The OSAtomicAdd32Barrier operator returns the new value, we want the
     old value.
 
     The OSAtomicAdd32Barrier operator returns the new value, we want the
     old value.
 
- src/hb-blob.cc                  |    2 +-
- src/hb-object-private.hh |    2 +-
+ src/hb-blob.cc                  | 2 +-
+ src/hb-object-private.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a1970d9afc15b2c6b7513b923019bb223bd95154
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit a1970d9afc15b2c6b7513b923019bb223bd95154
@@ -11437,8 +22951,8 @@ Date:   Fri Feb 24 13:51:09 2012 -0500
     negligible
     performance boost too.
 
     negligible
     performance boost too.
 
- src/hb-mutex-private.hh  |   14 +++++++++-----
- src/hb-object-private.hh |   15 ++++++++++-----
+ src/hb-mutex-private.hh  | 14 +++++++++-----
+ src/hb-object-private.hh | 15 ++++++++++-----
  2 files changed, 19 insertions(+), 10 deletions(-)
 
 commit 8004429102d7d3a8c42e1cbfe231835de4d3d782
  2 files changed, 19 insertions(+), 10 deletions(-)
 
 commit 8004429102d7d3a8c42e1cbfe231835de4d3d782
@@ -11450,8 +22964,8 @@ Date:   Thu Feb 23 18:47:17 2012 -0500
     Apparently it can't be implemented on OS X.  We weren't using
     it anyway.
 
     Apparently it can't be implemented on OS X.  We weren't using
     it anyway.
 
- src/hb-object-private.hh |    4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ src/hb-object-private.hh | 4 ----
+ 1 file changed, 4 deletions(-)
 
 commit 45227c10e416894ba7f84fdf72d849cecdb9b898
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 45227c10e416894ba7f84fdf72d849cecdb9b898
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11459,9 +22973,9 @@ Date:   Thu Feb 23 19:47:43 2012 -0500
 
     Add hb-warning.cc. Oops!
 
 
     Add hb-warning.cc. Oops!
 
- src/hb-warning.cc |   53
+ src/hb-warning.cc | 53
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 53 insertions(+), 0 deletions(-)
+ 1 file changed, 53 insertions(+)
 
 commit bd7ff1dec5b92ee59fa060e793f88499adcd8c11
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd7ff1dec5b92ee59fa060e793f88499adcd8c11
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11476,9 +22990,9 @@ Date:   Thu Feb 23 15:06:16 2012 -0500
     Mozilla Bug 666661 - gfx/harfbuzz/src/hb-prive.h - compiler warnings
     on mac
 
     Mozilla Bug 666661 - gfx/harfbuzz/src/hb-prive.h - compiler warnings
     on mac
 
- src/Makefile.am         |    1 +
- src/hb-mutex-private.hh  |    6 +++---
- src/hb-object-private.hh |   11 +++--------
+ src/Makefile.am         |  1 +
+ src/hb-mutex-private.hh  |  6 +++---
+ src/hb-object-private.hh | 11 +++--------
  3 files changed, 7 insertions(+), 11 deletions(-)
 
 commit 634c9e3423a9c23793400d1f56e98070e00b6056
  3 files changed, 7 insertions(+), 11 deletions(-)
 
 commit 634c9e3423a9c23793400d1f56e98070e00b6056
@@ -11487,9 +23001,9 @@ Date:   Wed Feb 22 16:43:21 2012 -0500
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-private.hh |  69
- +++++++++++++++++++++++++-------------------
- 1 files changed, 39 insertions(+), 30 deletions(-)
+ src/hb-ot-shape-private.hh | 69
+ ++++++++++++++++++++++++++--------------------
+ 1 file changed, 39 insertions(+), 30 deletions(-)
 
 commit 514b6f88668da4eab85103c536dabe24b7bc457b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 514b6f88668da4eab85103c536dabe24b7bc457b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11502,8 +23016,8 @@ Date:   Wed Feb 22 16:34:37 2012 -0500
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order.
 
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order.
 
- src/hb-ot-shape-private.hh |  20 ++++++++++----------
- 1 files changed, 10 insertions(+), 10 deletions(-)
+ src/hb-ot-shape-private.hh | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
 
 commit 6e78607ea71e3e5306f88f227ddba76133d16ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6e78607ea71e3e5306f88f227ddba76133d16ed0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11516,8 +23030,8 @@ Date:   Wed Feb 22 16:31:15 2012 -0500
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order
 
     Bug 662055 - advanced Hebrew diacritics are shown correctly only in
     particular order
 
- src/hb-ot-shape-private.hh |  28 ++++++++++++++++++++++++++++
- 1 files changed, 28 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-private.hh | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
 
 commit 7a70ca78e06c676befe1ae17199fff1f000f8188
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7a70ca78e06c676befe1ae17199fff1f000f8188
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11525,9 +23039,11 @@ Date:  Tue Feb 21 11:31:47 2012 -0500
 
     Add test case from https://bugzilla.mozilla.org/show_bug.cgi?id=714067
 
 
     Add test case from https://bugzilla.mozilla.org/show_bug.cgi?id=714067
 
- .../shaper-arabic/script-arabic/misc/MANIFEST     |    1 +
- .../script-arabic/misc/ligature-diacritics.txt     |   1 +
- 2 files changed, 2 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/MANIFEST
+ | 1 +
+ .../in-tree/shaper-arabic/script-arabic/misc/ligature-diacritics.txt
+ | 1 +
+ 2 files changed, 2 insertions(+)
 
 commit f51e167436a51b890ffe3f7f7920498fa287acd9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f51e167436a51b890ffe3f7f7920498fa287acd9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11535,8 +23051,8 @@ Date:   Mon Jan 30 09:48:33 2012 -0500
 
     Minor error handling
 
 
     Minor error handling
 
- util/options.cc |    6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ util/options.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit bee74efbdebc4e46ce57daa8a88bcf06b13411fe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bee74efbdebc4e46ce57daa8a88bcf06b13411fe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11544,8 +23060,8 @@ Date:   Fri Jan 27 02:14:08 2012 -0500
 
     Update git.mk to new upstream
 
 
     Update git.mk to new upstream
 
- git.mk |   44 +++++++++++++++++++++++++++++++++-----------
- 1 files changed, 33 insertions(+), 11 deletions(-)
+ git.mk | 44 +++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 33 insertions(+), 11 deletions(-)
 
 commit 134aa7bc7e3f9b9de76c9de2ed4b7344a7b323f9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 134aa7bc7e3f9b9de76c9de2ed4b7344a7b323f9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11553,8 +23069,8 @@ Date:   Fri Jan 27 02:09:40 2012 -0500
 
     Make checks more OS X friendly
 
 
     Make checks more OS X friendly
 
- src/check-internal-symbols.sh |   21 +++++++++++++--------
- src/check-libstdc++.sh        |   21 +++++++++++++--------
+ src/check-internal-symbols.sh | 21 +++++++++++++--------
+ src/check-libstdc++.sh        | 21 +++++++++++++--------
  2 files changed, 26 insertions(+), 16 deletions(-)
 
 commit 6152199368399bf98368ea3c794fa760b49756ba
  2 files changed, 26 insertions(+), 16 deletions(-)
 
 commit 6152199368399bf98368ea3c794fa760b49756ba
@@ -11563,8 +23079,8 @@ Date:   Fri Jan 27 01:57:59 2012 -0500
 
     Fix check-header-guards on OS X
 
 
     Fix check-header-guards on OS X
 
- src/check-header-guards.sh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/check-header-guards.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c62e41b6aad1fc56225d0e53d6d4abd0f005fe3b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c62e41b6aad1fc56225d0e53d6d4abd0f005fe3b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11572,8 +23088,8 @@ Date:   Fri Jan 27 02:20:58 2012 -0500
 
     Minor
 
 
     Minor
 
- configure.ac |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ configure.ac | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 1a5a91dc0d8bf4b72a2f22dc6300b06ad7000b79
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1a5a91dc0d8bf4b72a2f22dc6300b06ad7000b79
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11581,9 +23097,10 @@ Date:  Sun Jan 22 19:57:00 2012 -0500
 
     Add a few more tests
 
 
     Add a few more tests
 
- .../indic/script-devanagari/misc/misc.txt         |    3 +++
- .../south-east-asian/script-thai/misc/misc.txt     |   9 +++++++++
- 2 files changed, 12 insertions(+), 0 deletions(-)
+ .../in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt   | 3 +++
+ .../shaper-indic/south-east-asian/script-thai/misc/misc.txt     |
+ 9 +++++++++
+ 2 files changed, 12 insertions(+)
 
 commit 1795f3a222a85cdf80c78a0e9181d23dd1673876
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1795f3a222a85cdf80c78a0e9181d23dd1673876
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11591,11 +23108,15 @@ Date: Sun Jan 22 19:29:45 2012 -0500
 
     Add a couple Thai test cases from Thep
 
 
     Add a couple Thai test cases from Thep
 
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
- .../south-east-asian/script-thai/MANIFEST         |    1 +
- .../south-east-asian/script-thai/misc/MANIFEST     |   1 +
- .../south-east-asian/script-thai/misc/misc.txt     |   2 ++
- 4 files changed, 5 insertions(+), 0 deletions(-)
+ test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST      |
+ 1 +
+ .../texts/in-tree/shaper-indic/south-east-asian/script-thai/MANIFEST   |
+ 1 +
+ .../in-tree/shaper-indic/south-east-asian/script-thai/misc/MANIFEST    |
+ 1 +
+ .../in-tree/shaper-indic/south-east-asian/script-thai/misc/misc.txt    |
+ 2 ++
+ 4 files changed, 5 insertions(+)
 
 commit ec3f506682fc6e2d7d7455e49d6c82ac9dd0c660
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec3f506682fc6e2d7d7455e49d6c82ac9dd0c660
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11603,8 +23124,9 @@ Date:   Sun Jan 22 19:10:55 2012 -0500
 
     Add Devanagari test from Tom Hacohen
 
 
     Add Devanagari test from Tom Hacohen
 
- .../indic/script-devanagari/misc/misc.txt         |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt
+ | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 71be4ca3dd5eaaca31957e34fef11f6aeb4aebdf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71be4ca3dd5eaaca31957e34fef11f6aeb4aebdf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11612,8 +23134,8 @@ Date:   Sun Jan 22 16:26:49 2012 -0500
 
     Also ignore "ChangeLog" in manifests
 
 
     Also ignore "ChangeLog" in manifests
 
- test/shaping/hb_test_tools.py |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/shaping/hb_test_tools.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3c9a39ecd65990f2c7b29bb741c6a538fa425531
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3c9a39ecd65990f2c7b29bb741c6a538fa425531
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11621,8 +23143,8 @@ Date:   Sun Jan 22 16:21:19 2012 -0500
 
     Remove newline
 
 
     Remove newline
 
- test/shaping/hb_test_tools.py |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ test/shaping/hb_test_tools.py | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit e4ccbfe276db5ed098ddcf78a7bb8f2da4263128
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e4ccbfe276db5ed098ddcf78a7bb8f2da4263128
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11633,8 +23155,8 @@ Date:   Sun Jan 22 16:07:32 2012 -0500
     Not that useful right now as we don't escape < and >.  Perhaps
     another tool can be added to convert the ANSI output to HTML.
 
     Not that useful right now as we don't escape < and >.  Perhaps
     another tool can be added to convert the ANSI output to HTML.
 
- test/shaping/hb-diff         |    2 +-
- test/shaping/hb_test_tools.py |   22 +++++++++++++++++-----
+ test/shaping/hb-diff         |  2 +-
+ test/shaping/hb_test_tools.py | 22 +++++++++++++++++-----
  2 files changed, 18 insertions(+), 6 deletions(-)
 
 commit 71632c96daa4ba15e13f4d9e7f2c121d0162614e
  2 files changed, 18 insertions(+), 6 deletions(-)
 
 commit 71632c96daa4ba15e13f4d9e7f2c121d0162614e
@@ -11670,8 +23192,8 @@ Date:   Sun Jan 22 15:31:44 2012 -0500
 
     JK
 
 
     JK
 
- src/hb-ot-layout.cc |   9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-ot-layout.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 8f80f93491be73f05eba908591c856339acda51e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f80f93491be73f05eba908591c856339acda51e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11679,9 +23201,9 @@ Date:   Sat Jan 21 20:03:25 2012 -0500
 
     More shoveling around
 
 
     More shoveling around
 
- test/shaping/hb-diff-filter-failures |    2 +-
- test/shaping/hb-manifest-read       |    2 +-
- test/shaping/hb_test_tools.py       |   27 ++++++++++++++++-----------
+ test/shaping/hb-diff-filter-failures |  2 +-
+ test/shaping/hb-manifest-read       |  2 +-
+ test/shaping/hb_test_tools.py       | 27 ++++++++++++++++-----------
  3 files changed, 18 insertions(+), 13 deletions(-)
 
 commit c78c6e9844a23144ce7fa29afbf57b74587bfcd0
  3 files changed, 18 insertions(+), 13 deletions(-)
 
 commit c78c6e9844a23144ce7fa29afbf57b74587bfcd0
@@ -11690,8 +23212,8 @@ Date:   Sat Jan 21 19:55:16 2012 -0500
 
     Cleanup
 
 
     Cleanup
 
- test/shaping/hb-manifest-read |    2 +-
- test/shaping/hb_test_tools.py |   13 ++++++++-----
+ test/shaping/hb-manifest-read |  2 +-
+ test/shaping/hb_test_tools.py | 13 ++++++++-----
  2 files changed, 9 insertions(+), 6 deletions(-)
 
 commit ab94a9c542f7ec9143335b73493ccb75d4586a3a
  2 files changed, 9 insertions(+), 6 deletions(-)
 
 commit ab94a9c542f7ec9143335b73493ccb75d4586a3a
@@ -11700,8 +23222,8 @@ Date:   Sat Jan 21 19:43:58 2012 -0500
 
     Distribute testing tools
 
 
     Distribute testing tools
 
- test/shaping/Makefile.am |   24 ++++++++++++++++++++++++
- 1 files changed, 24 insertions(+), 0 deletions(-)
+ test/shaping/Makefile.am | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
 
 commit 3e86feb54c94e46b60168fd2a4773183eb1354b4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3e86feb54c94e46b60168fd2a4773183eb1354b4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11709,8 +23231,8 @@ Date:   Sat Jan 21 19:40:30 2012 -0500
 
     Speed up colorless diff
 
 
     Speed up colorless diff
 
- test/shaping/hb_test_tools.py |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ test/shaping/hb_test_tools.py | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 1e58df603457cb4b57da78b5d4a8df66aa7d7be4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e58df603457cb4b57da78b5d4a8df66aa7d7be4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11718,8 +23240,8 @@ Date:   Sat Jan 21 19:37:31 2012 -0500
 
     Cleanup manifest code
 
 
     Cleanup manifest code
 
- test/shaping/hb_test_tools.py |   18 ++++++++++++------
- 1 files changed, 12 insertions(+), 6 deletions(-)
+ test/shaping/hb_test_tools.py | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
 
 commit 956d552e108eeb50bb3ad21588830af7a2f3862a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 956d552e108eeb50bb3ad21588830af7a2f3862a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11727,8 +23249,8 @@ Date:   Sat Jan 21 19:31:51 2012 -0500
 
     Port hb-manifest-update to Python
 
 
     Port hb-manifest-update to Python
 
- test/shaping/hb-manifest-update |   23 +++--------------------
- test/shaping/hb_test_tools.py  |   38
+ test/shaping/hb-manifest-update | 23 +++--------------------
+ test/shaping/hb_test_tools.py  | 38
  ++++++++++++++++++++++++++++++--------
  2 files changed, 33 insertions(+), 28 deletions(-)
 
  ++++++++++++++++++++++++++++++--------
  2 files changed, 33 insertions(+), 28 deletions(-)
 
@@ -11738,9 +23260,9 @@ Date:   Sat Jan 21 19:15:41 2012 -0500
 
     Ignore Broken Pipe errors
 
 
     Ignore Broken Pipe errors
 
- test/shaping/hb_test_tools.py |   76
- ++++++++++++++++++++++++++---------------
- 1 files changed, 48 insertions(+), 28 deletions(-)
+ test/shaping/hb_test_tools.py | 76
+ +++++++++++++++++++++++++++----------------
+ 1 file changed, 48 insertions(+), 28 deletions(-)
 
 commit d5300241680844f5625f32792f7dd7181ed05f9b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d5300241680844f5625f32792f7dd7181ed05f9b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11754,8 +23276,8 @@ Date:   Sat Jan 21 19:07:22 2012 -0500
 
     Will add an option for byte indices later.
 
 
     Will add an option for byte indices later.
 
- util/options.cc |    7 +++++--
- util/options.hh |   12 ++++++++++++
+ util/options.cc |  7 +++++--
+ util/options.hh | 12 ++++++++++++
  2 files changed, 17 insertions(+), 2 deletions(-)
 
 commit 0f68f4a0b5ee78cbdb2a89a9a1a9125afe72ed2f
  2 files changed, 17 insertions(+), 2 deletions(-)
 
 commit 0f68f4a0b5ee78cbdb2a89a9a1a9125afe72ed2f
@@ -11764,8 +23286,8 @@ Date:   Sat Jan 21 18:59:48 2012 -0500
 
     Correctly print out Unicode strings
 
 
     Correctly print out Unicode strings
 
- util/options.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f22089ac24f43ff048c2a0f1c1f604ae3a96be8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f22089ac24f43ff048c2a0f1c1f604ae3a96be8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11773,8 +23295,8 @@ Date:   Fri Jan 20 21:21:47 2012 -0500
 
     Misc fixes
 
 
     Misc fixes
 
- test/shaping/hb-diff         |    8 ++++----
- test/shaping/hb_test_tools.py |    4 ++--
+ test/shaping/hb-diff         | 8 ++++----
+ test/shaping/hb_test_tools.py | 4 ++--
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 96968bfae5ce61a0a098bf0e6acd2210a309a499
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 96968bfae5ce61a0a098bf0e6acd2210a309a499
@@ -11783,10 +23305,10 @@ Date: Fri Jan 20 21:16:34 2012 -0500
 
     Port hb-manifest-read to Python
 
 
     Port hb-manifest-read to Python
 
- test/shaping/hb-diff-filter-failures |    2 +-
- test/shaping/hb-manifest-read       |   37 ++-----------------------
- test/shaping/hb_test_tools.py       |   49
- ++++++++++++++++++++++++++++++---
+ test/shaping/hb-diff-filter-failures |  2 +-
+ test/shaping/hb-manifest-read       | 37 +++------------------------
+ test/shaping/hb_test_tools.py       | 49
+ ++++++++++++++++++++++++++++++++----
  3 files changed, 48 insertions(+), 40 deletions(-)
 
 commit a59ed46fa4f7b76605f8ce6e75783ead406468f5
  3 files changed, 48 insertions(+), 40 deletions(-)
 
 commit a59ed46fa4f7b76605f8ce6e75783ead406468f5
@@ -11795,18 +23317,20 @@ Date: Fri Jan 20 20:56:32 2012 -0500
 
     Add final residues from test-shape-complex
 
 
     Add final residues from test-shape-complex
 
- .../in-tree/shaper-arabic/script-nko/misc/MANIFEST |   1 +
- .../in-tree/shaper-arabic/script-nko/misc/misc.txt |   5 +++++
- test/shaping/texts/in-tree/shaper-default/MANIFEST |   1 +
- .../shaper-default/script-linear-b/MANIFEST       |    1 +
- .../shaper-default/script-linear-b/misc/MANIFEST   |   1 +
- .../shaper-default/script-linear-b/misc/misc.txt   |   1 +
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
- .../in-tree/shaper-indic/south-east-asian/MANIFEST |   1 +
- .../south-east-asian/script-khmer/MANIFEST        |    1 +
- .../south-east-asian/script-khmer/misc/MANIFEST    |   1 +
- .../south-east-asian/script-khmer/misc/misc.txt    |   9 +++++++++
- 11 files changed, 23 insertions(+), 0 deletions(-)
+ .../shaping/texts/in-tree/shaper-arabic/script-nko/misc/MANIFEST | 1 +
+ .../shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt |
+ 5 +++++
+ test/shaping/texts/in-tree/shaper-default/MANIFEST              | 1 +
+ .../texts/in-tree/shaper-default/script-linear-b/MANIFEST       | 1 +
+ .../texts/in-tree/shaper-default/script-linear-b/misc/MANIFEST   | 1 +
+ .../texts/in-tree/shaper-default/script-linear-b/misc/misc.txt   | 1 +
+ test/shaping/texts/in-tree/shaper-indic/MANIFEST                | 1 +
+ .../shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST | 1 +
+ .../in-tree/shaper-indic/south-east-asian/script-khmer/MANIFEST  | 1 +
+ .../shaper-indic/south-east-asian/script-khmer/misc/MANIFEST    | 1 +
+ .../shaper-indic/south-east-asian/script-khmer/misc/misc.txt    |
+ 9 +++++++++
+ 11 files changed, 23 insertions(+)
 
 commit 820e0ed318d9b187a131baa9491d5d390ec33ef4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 820e0ed318d9b187a131baa9491d5d390ec33ef4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11814,9 +23338,11 @@ Date:  Fri Jan 20 20:51:52 2012 -0500
 
     Add Punjabi tests from test-shape-complex also
 
 
     Add Punjabi tests from test-shape-complex also
 
- .../indic/script-punjabi/misc/MANIFEST                    |    1 +
- .../indic/script-punjabi/misc/misc.txt                    |    1 +
- 2 files changed, 2 insertions(+), 0 deletions(-)
+ .../texts/in-tree/shaper-indic/indic/script-punjabi/misc/MANIFEST
+ | 1 +
+ .../texts/in-tree/shaper-indic/indic/script-punjabi/misc/misc.txt
+ | 1 +
+ 2 files changed, 2 insertions(+)
 
 commit a7d71c105772fb612871b4cae59bdae47bbc8751
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a7d71c105772fb612871b4cae59bdae47bbc8751
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11824,10 +23350,10 @@ Date: Fri Jan 20 20:50:09 2012 -0500
 
     Add Tamil test data from Muguntharaj Subramanian
 
 
     Add Tamil test data from Muguntharaj Subramanian
 
- .../shaper-indic/indic/script-tamil/misc/MANIFEST  |   1 +
- .../shaper-indic/indic/script-tamil/misc/misc.txt  |  43
- ++++++++++++++++++++
- 2 files changed, 44 insertions(+), 0 deletions(-)
+ .../shaper-indic/indic/script-tamil/misc/MANIFEST  |  1 +
+ .../shaper-indic/indic/script-tamil/misc/misc.txt  | 43
+ ++++++++++++++++++++++
+ 2 files changed, 44 insertions(+)
 
 commit 5992a9941e7f19181df1e34e79e514ccedc3d284
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5992a9941e7f19181df1e34e79e514ccedc3d284
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11835,38 +23361,47 @@ Date: Fri Jan 20 20:48:14 2012 -0500
 
     Import test data from late test-shape-complex
 
 
     Import test data from late test-shape-complex
 
- .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   1 +
- .../in-tree/shaper-arabic/script-mandaic/MANIFEST  |   1 +
- .../shaper-arabic/script-mongolian/MANIFEST       |    1 +
- .../in-tree/shaper-arabic/script-nko/MANIFEST     |    1 +
- .../in-tree/shaper-arabic/script-syriac/MANIFEST   |   1 +
- .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
- .../shaper-indic/indic/script-bengali/MANIFEST     |   1 +
- .../indic/script-bengali/misc/MANIFEST                    |    1 +
- .../indic/script-bengali/misc/misc.txt                    |   48
- ++++++++++++++++++++
- .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 +
- .../indic/script-devanagari/misc/MANIFEST         |    1 +
- .../indic/script-devanagari/misc/misc.txt         |   23 +++++++++
- .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 +
- .../shaper-indic/indic/script-kannada/MANIFEST     |   1 +
- .../indic/script-kannada/misc/MANIFEST                    |    1 +
- .../indic/script-kannada/misc/misc.txt                    |   17 +++++++
- .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 +
- .../indic/script-malayalam/misc/MANIFEST          |    1 +
- .../indic/script-malayalam/misc/misc.txt          |   22 +++++++++
- .../shaper-indic/indic/script-oriya/MANIFEST      |    1 +
- .../shaper-indic/indic/script-oriya/misc/MANIFEST  |   1 +
- .../shaper-indic/indic/script-oriya/misc/misc.txt  |  28 +++++++++++
- .../shaper-indic/indic/script-punjabi/MANIFEST     |   1 +
- .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 +
- .../indic/script-sinhala/misc/MANIFEST                    |    1 +
- .../indic/script-sinhala/misc/misc.txt                    |    6 +++
- .../shaper-indic/indic/script-tamil/MANIFEST      |    1 +
- .../shaper-indic/indic/script-telugu/MANIFEST     |    1 +
- .../shaper-indic/indic/script-telugu/misc/MANIFEST |   1 +
- .../shaper-indic/indic/script-telugu/misc/misc.txt |  11 +++++
- 30 files changed, 178 insertions(+), 0 deletions(-)
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |  1 +
+ .../shaper-arabic/script-arabic/misc/MANIFEST     |  0
+ .../in-tree/shaper-arabic/script-mandaic/MANIFEST  |  1 +
+ .../shaper-arabic/script-mandaic/misc/MANIFEST     |  0
+ .../shaper-arabic/script-mongolian/MANIFEST       |  1 +
+ .../shaper-arabic/script-mongolian/misc/MANIFEST   |  0
+ .../in-tree/shaper-arabic/script-nko/MANIFEST     |  1 +
+ .../in-tree/shaper-arabic/script-nko/misc/MANIFEST |  0
+ .../in-tree/shaper-arabic/script-syriac/MANIFEST   |  1 +
+ .../shaper-arabic/script-syriac/misc/MANIFEST     |  0
+ .../shaper-indic/indic/script-assamese/MANIFEST    |  1 +
+ .../indic/script-assamese/misc/MANIFEST           |  0
+ .../shaper-indic/indic/script-bengali/MANIFEST     |  1 +
+ .../indic/script-bengali/misc/MANIFEST                    |  1 +
+ .../indic/script-bengali/misc/misc.txt                    | 48
+ ++++++++++++++++++++++
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |  1 +
+ .../indic/script-devanagari/misc/MANIFEST         |  1 +
+ .../indic/script-devanagari/misc/misc.txt         | 23 +++++++++++
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |  1 +
+ .../indic/script-gujarati/misc/MANIFEST           |  0
+ .../shaper-indic/indic/script-kannada/MANIFEST     |  1 +
+ .../indic/script-kannada/misc/MANIFEST                    |  1 +
+ .../indic/script-kannada/misc/misc.txt                    | 17 ++++++++
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |  1 +
+ .../indic/script-malayalam/misc/MANIFEST          |  1 +
+ .../indic/script-malayalam/misc/misc.txt          | 22 ++++++++++
+ .../shaper-indic/indic/script-oriya/MANIFEST      |  1 +
+ .../shaper-indic/indic/script-oriya/misc/MANIFEST  |  1 +
+ .../shaper-indic/indic/script-oriya/misc/misc.txt  | 28 +++++++++++++
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |  1 +
+ .../indic/script-punjabi/misc/MANIFEST                    |  0
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |  1 +
+ .../indic/script-sinhala/misc/MANIFEST                    |  1 +
+ .../indic/script-sinhala/misc/misc.txt                    |  6 +++
+ .../shaper-indic/indic/script-tamil/MANIFEST      |  1 +
+ .../shaper-indic/indic/script-tamil/misc/MANIFEST  |  0
+ .../shaper-indic/indic/script-telugu/MANIFEST     |  1 +
+ .../shaper-indic/indic/script-telugu/misc/MANIFEST |  1 +
+ .../shaper-indic/indic/script-telugu/misc/misc.txt | 11 +++++
+ 39 files changed, 178 insertions(+)
 
 commit 46ac45647760984c6220f04ba4521038e628b169
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46ac45647760984c6220f04ba4521038e628b169
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11874,8 +23409,8 @@ Date:   Fri Jan 20 19:32:17 2012 -0500
 
     Fix Unicode encoding issue
 
 
     Fix Unicode encoding issue
 
- test/shaping/hb_test_tools.py |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ test/shaping/hb_test_tools.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit ad34e39a4a320310b1edd9fc4d7e740373510c69
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ad34e39a4a320310b1edd9fc4d7e740373510c69
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11885,8 +23420,8 @@ Date:   Fri Jan 20 18:39:27 2012 -0500
 
     By bypassing readlines() buffering.
 
 
     By bypassing readlines() buffering.
 
- test/shaping/hb_test_tools.py |   33 +++++++++++++++++++++++++++------
- 1 files changed, 27 insertions(+), 6 deletions(-)
+ test/shaping/hb_test_tools.py | 33 +++++++++++++++++++++++++++------
+ 1 file changed, 27 insertions(+), 6 deletions(-)
 
 commit 91540a7d97051a3d6e97fdcd1e98af23e0780cdd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 91540a7d97051a3d6e97fdcd1e98af23e0780cdd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11896,13 +23431,13 @@ Date: Fri Jan 20 18:27:52 2012 -0500
 
     The actual utils are one-liners now.
 
 
     The actual utils are one-liners now.
 
- test/shaping/hb-diff                |   77 ++-------------
- test/shaping/hb-diff-filter-failures |   27 +-----
- test/shaping/hb-unicode-decode       |   18 +---
- test/shaping/hb-unicode-encode       |   21 +----
- test/shaping/hb-unicode-prettyname   |   53 +----------
- test/shaping/hb_test_tools.py       |  180
- ++++++++++++++++++++++++++++++++++
+ test/shaping/hb-diff                |  77 ++-------------
+ test/shaping/hb-diff-filter-failures |  27 +-----
+ test/shaping/hb-unicode-decode       |  18 +---
+ test/shaping/hb-unicode-encode       |  21 +---
+ test/shaping/hb-unicode-prettyname   |  53 +----------
+ test/shaping/hb_test_tools.py       | 180
+ +++++++++++++++++++++++++++++++++++
  6 files changed, 197 insertions(+), 179 deletions(-)
 
 commit 66aa080033dcff07b8bb5e7b1f0e3511f067d6c1
  6 files changed, 197 insertions(+), 179 deletions(-)
 
 commit 66aa080033dcff07b8bb5e7b1f0e3511f067d6c1
@@ -11917,7 +23452,7 @@ Date:   Fri Jan 20 17:36:10 2012 -0500
  test/api/test-shape-complex.c     | 1237
  ------------------------------------
  test/shaping/hb-unicode-prettyname |   1 +
  test/api/test-shape-complex.c     | 1237
  ------------------------------------
  test/shaping/hb-unicode-prettyname |   1 +
- 3 files changed, 1 insertions(+), 1243 deletions(-)
+ 3 files changed, 1 insertion(+), 1243 deletions(-)
 
 commit ed459bfb63c58b59fc0dbe25021c396e8ef8683c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ed459bfb63c58b59fc0dbe25021c396e8ef8683c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11925,8 +23460,8 @@ Date:   Fri Jan 20 17:24:05 2012 -0500
 
     Add hb-unicode-encode
 
 
     Add hb-unicode-encode
 
- test/shaping/hb-unicode-encode |   22 ++++++++++++++++++++++
- 1 files changed, 22 insertions(+), 0 deletions(-)
+ test/shaping/hb-unicode-encode | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
 
 commit d8134bc017ca3383e0978ddee57070eb3aab8964
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d8134bc017ca3383e0978ddee57070eb3aab8964
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11934,8 +23469,8 @@ Date:   Fri Jan 20 17:18:59 2012 -0500
 
     [hb-shape] Add parantheses around --show-text output
 
 
     [hb-shape] Add parantheses around --show-text output
 
- util/options.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ util/options.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit b12c4d43614199f8910a06507603f6c431d9df67
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b12c4d43614199f8910a06507603f6c431d9df67
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11943,8 +23478,8 @@ Date:   Fri Jan 20 17:17:44 2012 -0500
 
     Add hb-diff-filter-failures
 
 
     Add hb-diff-filter-failures
 
- test/shaping/hb-diff-filter-failures |   28 ++++++++++++++++++++++++++++
- 1 files changed, 28 insertions(+), 0 deletions(-)
+ test/shaping/hb-diff-filter-failures | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
 
 commit d4bffbc55bf4c23ab5c7f46af613aeecc79ac515
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d4bffbc55bf4c23ab5c7f46af613aeecc79ac515
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -11955,6 +23490,12 @@ Date:  Fri Jan 20 17:16:35 2012 -0500
  test/shaping/texts/MANIFEST                       |    4 +-
  test/shaping/texts/in-tree/MANIFEST               |    3 +
  test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |   5 +
  test/shaping/texts/MANIFEST                       |    4 +-
  test/shaping/texts/in-tree/MANIFEST               |    3 +
  test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |   5 +
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   0
+ .../in-tree/shaper-arabic/script-mandaic/MANIFEST  |   0
+ .../shaper-arabic/script-mongolian/MANIFEST       |    0
+ .../in-tree/shaper-arabic/script-nko/MANIFEST     |    0
+ .../in-tree/shaper-arabic/script-syriac/MANIFEST   |   0
+ test/shaping/texts/in-tree/shaper-default/MANIFEST |   0
  test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
  .../texts/in-tree/shaper-indic/indic/MANIFEST     |   11 +
  .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
  test/shaping/texts/in-tree/shaper-indic/MANIFEST   |   1 +
  .../texts/in-tree/shaper-indic/indic/MANIFEST     |   11 +
  .../shaper-indic/indic/script-assamese/MANIFEST    |   1 +
@@ -12161,6 +23702,12 @@ Date:  Fri Jan 20 17:16:35 2012 -0500
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
  test/shaping/texts/shaper-arabic/MANIFEST         |    5 -
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
  test/shaping/texts/shaper-arabic/MANIFEST         |    5 -
+ .../texts/shaper-arabic/script-arabic/MANIFEST     |   0
+ .../texts/shaper-arabic/script-mandaic/MANIFEST    |   0
+ .../texts/shaper-arabic/script-mongolian/MANIFEST  |   0
+ .../texts/shaper-arabic/script-nko/MANIFEST       |    0
+ .../texts/shaper-arabic/script-syriac/MANIFEST     |   0
+ test/shaping/texts/shaper-default/MANIFEST        |    0
  test/shaping/texts/shaper-indic/MANIFEST          |    1 -
  test/shaping/texts/shaper-indic/indic/MANIFEST     |  11 -
  .../shaper-indic/indic/script-assamese/MANIFEST    |   1 -
  test/shaping/texts/shaper-indic/MANIFEST          |    1 -
  test/shaping/texts/shaper-indic/indic/MANIFEST     |  11 -
  .../shaper-indic/indic/script-assamese/MANIFEST    |   1 -
@@ -12366,7 +23913,7 @@ Date:   Fri Jan 20 17:16:35 2012 -0500
  .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 -
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ----
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 -
  .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 -
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ----
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 -
- 410 files changed, 7601 insertions(+), 7600 deletions(-)
+ 422 files changed, 7601 insertions(+), 7600 deletions(-)
 
 commit 45f640c98d752161e51eda63061d70fad9ab9f68
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 45f640c98d752161e51eda63061d70fad9ab9f68
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12374,8 +23921,8 @@ Date:   Fri Jan 20 14:24:21 2012 -0500
 
     Minor
 
 
     Minor
 
- test/shaping/hb-diff |   35 ++++++++++++++++++++---------------
- 1 files changed, 20 insertions(+), 15 deletions(-)
+ test/shaping/hb-diff | 35 ++++++++++++++++++++---------------
+ 1 file changed, 20 insertions(+), 15 deletions(-)
 
 commit 47ca766a9cbdfb304f60e23a4dee0a155075a277
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 47ca766a9cbdfb304f60e23a4dee0a155075a277
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12383,8 +23930,8 @@ Date:   Fri Jan 20 14:21:53 2012 -0500
 
     Minor
 
 
     Minor
 
- test/shaping/hb-unicode-decode     |   2 +-
- test/shaping/hb-unicode-prettyname |   5 ++---
+ test/shaping/hb-unicode-decode     | 2 +-
+ test/shaping/hb-unicode-prettyname | 5 ++---
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 8f1db07894674b02c36ca9352e666b4618ee8832
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 8f1db07894674b02c36ca9352e666b4618ee8832
@@ -12599,7 +24146,7 @@ Date:   Fri Jan 20 13:57:57 2012 -0500
  .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 +
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
  .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 +
  .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ++++
  .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 +
- 202 files changed, 7581 insertions(+), 1 deletions(-)
+ 202 files changed, 7581 insertions(+), 1 deletion(-)
 
 commit 11267aef364b1cc5683ce65aaf544b7f2a127fb3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 11267aef364b1cc5683ce65aaf544b7f2a127fb3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12607,8 +24154,8 @@ Date:   Fri Jan 20 13:57:14 2012 -0500
 
     Fix
 
 
     Fix
 
- test/shaping/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/shaping/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4e84ce48d5d41cf1bad2fb8774e5c66745b0e75e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4e84ce48d5d41cf1bad2fb8774e5c66745b0e75e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12616,11 +24163,11 @@ Date: Fri Jan 20 13:50:55 2012 -0500
 
     Move hb-diff to test/shaping/
 
 
     Move hb-diff to test/shaping/
 
- test/shaping/hb-diff |   70
- ++++++++++++++++++++++++++++++++++++++++++++++++++
- util/Makefile.am     |    2 -
- util/hb-diff        |   70
- --------------------------------------------------
+ test/shaping/hb-diff | 70
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/Makefile.am     |  2 --
+ util/hb-diff        | 70
+ ----------------------------------------------------
  3 files changed, 70 insertions(+), 72 deletions(-)
 
 commit f868e1b84d2f73688d4d6558d44610b1ac75ec13
  3 files changed, 70 insertions(+), 72 deletions(-)
 
 commit f868e1b84d2f73688d4d6558d44610b1ac75ec13
@@ -12629,13 +24176,13 @@ Date: Fri Jan 20 13:50:05 2012 -0500
 
     Add hb-unicode-decode
 
 
     Add hb-unicode-decode
 
- test/shaping/hb-manifest-read   |   36
+ test/shaping/hb-manifest-read   | 36
  ++++++++++++++++++++++++++++++++++++
  ++++++++++++++++++++++++++++++++++++
- test/shaping/hb-manifest-update  |   22 ++++++++++++++++++++++
- test/shaping/hb-read-manifest   |   36
+ test/shaping/hb-manifest-update  | 22 ++++++++++++++++++++++
+ test/shaping/hb-read-manifest   | 36
  ------------------------------------
  ------------------------------------
- test/shaping/hb-unicode-decode   |   19 +++++++++++++++++++
- test/shaping/hb-update-manifests |   22 ----------------------
+ test/shaping/hb-unicode-decode   | 19 +++++++++++++++++++
+ test/shaping/hb-update-manifests | 22 ----------------------
  5 files changed, 77 insertions(+), 58 deletions(-)
 
 commit 9ab23ef4749b51e60464b9ef2a92739cdc2b36ba
  5 files changed, 77 insertions(+), 58 deletions(-)
 
 commit 9ab23ef4749b51e60464b9ef2a92739cdc2b36ba
@@ -12644,8 +24191,8 @@ Date:   Fri Jan 20 13:49:56 2012 -0500
 
     Minor
 
 
     Minor
 
- test/shaping/hb-unicode-prettyname |   5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ test/shaping/hb-unicode-prettyname | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit c8d81db03335192f20f08ab8fabe9869fd7350a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c8d81db03335192f20f08ab8fabe9869fd7350a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12653,8 +24200,8 @@ Date:   Fri Jan 20 13:39:27 2012 -0500
 
     Recognize more characters
 
 
     Recognize more characters
 
- test/shaping/hb-unicode-prettyname |   7 +++++++
- 1 files changed, 7 insertions(+), 0 deletions(-)
+ test/shaping/hb-unicode-prettyname | 7 +++++++
+ 1 file changed, 7 insertions(+)
 
 commit 0016d4662d486fa32c2191df801a2792f44b273c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0016d4662d486fa32c2191df801a2792f44b273c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12662,8 +24209,8 @@ Date:   Fri Jan 20 13:31:59 2012 -0500
 
     [test] Make hb-unicode-prettyname take a --stdin option
 
 
     [test] Make hb-unicode-prettyname take a --stdin option
 
- test/shaping/hb-unicode-prettyname |  15 +++++++++------
- 1 files changed, 9 insertions(+), 6 deletions(-)
+ test/shaping/hb-unicode-prettyname | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
 
 commit ad8c6446f2e0d21d065203924467f6a2c418401e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ad8c6446f2e0d21d065203924467f6a2c418401e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12671,9 +24218,9 @@ Date:   Thu Jan 19 20:28:31 2012 -0500
 
     [test/shaping] Add hb-unicode-prettyname
 
 
     [test/shaping] Add hb-unicode-prettyname
 
- test/shaping/hb-unicode-prettyname |  38
- ++++++++++++++++++++++++++++++++++++
- 1 files changed, 38 insertions(+), 0 deletions(-)
+ test/shaping/hb-unicode-prettyname | 38
+ ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
 
 commit e900869b0f373d25b72d966338beb6cbc53e6446
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e900869b0f373d25b72d966338beb6cbc53e6446
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12681,8 +24228,8 @@ Date:   Thu Jan 19 20:28:15 2012 -0500
 
     [test/shaping] Add hb-read-manifest
 
 
     [test/shaping] Add hb-read-manifest
 
- test/shaping/hb-read-manifest |   36 ++++++++++++++++++++++++++++++++++++
- 1 files changed, 36 insertions(+), 0 deletions(-)
+ test/shaping/hb-read-manifest | 36 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
 
 commit a211cd3ffce3aa100e92d837384bbaa9decf6b09
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a211cd3ffce3aa100e92d837384bbaa9decf6b09
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12690,8 +24237,8 @@ Date:   Thu Jan 19 20:27:53 2012 -0500
 
     Ignore AUTHORS also
 
 
     Ignore AUTHORS also
 
- test/shaping/hb-update-manifests |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/shaping/hb-update-manifests | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c91c4fa47140c0d6191241a832fc534b1c1514ce
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c91c4fa47140c0d6191241a832fc534b1c1514ce
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12702,8 +24249,8 @@ Date:   Thu Jan 19 17:51:57 2012 -0500
     Sorry for the disruption but I need this to differentiate from the
     Unicode string.
 
     Sorry for the disruption but I need this to differentiate from the
     Unicode string.
 
- util/options.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ util/options.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 36fe87d1b4bf8317074a597501d1ee52c0bec38d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 36fe87d1b4bf8317074a597501d1ee52c0bec38d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12711,9 +24258,9 @@ Date:   Thu Jan 19 16:55:26 2012 -0500
 
     More Indic tests from Pravin
 
 
     More Indic tests from Pravin
 
- test/api/test-shape-complex.c |   48
- +++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 48 insertions(+), 0 deletions(-)
+ test/api/test-shape-complex.c | 48
+ +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 48 insertions(+)
 
 commit a33e46cf7d9862856fd7ecb04e047cc58a9785c8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a33e46cf7d9862856fd7ecb04e047cc58a9785c8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12721,10 +24268,10 @@ Date: Thu Jan 19 15:43:48 2012 -0500
 
     [test/shaping] Add hb-update-manifests
 
 
     [test/shaping] Add hb-update-manifests
 
- test/shaping/Makefile.am                      |    6 ++----
- test/shaping/hb-update-manifests              |   22
+ test/shaping/Makefile.am                      |  6 ++----
+ test/shaping/hb-update-manifests              | 22
  ++++++++++++++++++++++
  ++++++++++++++++++++++
- test/shaping/texts/shaper-indic/indic/MANIFEST |    1 +
+ test/shaping/texts/shaper-indic/indic/MANIFEST |  1 +
  3 files changed, 25 insertions(+), 4 deletions(-)
 
 commit d4de562adf691425b15e3e9c0eec035feaa60413
  3 files changed, 25 insertions(+), 4 deletions(-)
 
 commit d4de562adf691425b15e3e9c0eec035feaa60413
@@ -12733,14 +24280,32 @@ Date: Thu Jan 19 15:21:04 2012 -0500
 
     Start adding new shaping test suite together
 
 
     Start adding new shaping test suite together
 
- configure.ac                                  |    1 +
- test/Makefile.am                              |    2 +-
- test/shaping/Makefile.am                      |   10 ++++++++++
- test/shaping/texts/MANIFEST                   |    3 +++
- test/shaping/texts/shaper-arabic/MANIFEST     |    5 +++++
- test/shaping/texts/shaper-indic/MANIFEST      |    1 +
- test/shaping/texts/shaper-indic/indic/MANIFEST |   10 ++++++++++
- 7 files changed, 31 insertions(+), 1 deletions(-)
+ configure.ac                                                  |  1 +
+ test/Makefile.am                                              |  2 +-
+ test/shaping/Makefile.am                                      |
+ 10 ++++++++++
+ test/shaping/texts/MANIFEST                                   |  3 +++
+ test/shaping/texts/shaper-arabic/MANIFEST                     |  5 +++++
+ test/shaping/texts/shaper-arabic/script-arabic/MANIFEST       |  0
+ test/shaping/texts/shaper-arabic/script-mandaic/MANIFEST      |  0
+ test/shaping/texts/shaper-arabic/script-mongolian/MANIFEST    |  0
+ test/shaping/texts/shaper-arabic/script-nko/MANIFEST          |  0
+ test/shaping/texts/shaper-arabic/script-syriac/MANIFEST       |  0
+ test/shaping/texts/shaper-default/MANIFEST                    |  0
+ test/shaping/texts/shaper-indic/MANIFEST                      |  1 +
+ test/shaping/texts/shaper-indic/indic/MANIFEST                        |
+ 10 ++++++++++
+ test/shaping/texts/shaper-indic/indic/script-assamese/MANIFEST |  0
+ test/shaping/texts/shaper-indic/indic/script-bengali/MANIFEST |  0
+ .../texts/shaper-indic/indic/script-devanagari/MANIFEST       |  0
+ test/shaping/texts/shaper-indic/indic/script-gujarati/MANIFEST |  0
+ test/shaping/texts/shaper-indic/indic/script-kannada/MANIFEST |  0
+ .../shaping/texts/shaper-indic/indic/script-malayalam/MANIFEST |  0
+ test/shaping/texts/shaper-indic/indic/script-oriya/MANIFEST   |  0
+ test/shaping/texts/shaper-indic/indic/script-punjabi/MANIFEST |  0
+ test/shaping/texts/shaper-indic/indic/script-tamil/MANIFEST   |  0
+ test/shaping/texts/shaper-indic/indic/script-telugu/MANIFEST  |  0
+ 23 files changed, 31 insertions(+), 1 deletion(-)
 
 commit 7a4a848db27d1605195f677c9c8632cde558aa05
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7a4a848db27d1605195f677c9c8632cde558aa05
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12748,8 +24313,8 @@ Date:   Thu Jan 19 15:15:21 2012 -0500
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-private.hh |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 4d6dafd47f4271549e528d2e8047d50562aef399
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4d6dafd47f4271549e528d2e8047d50562aef399
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12758,14 +24323,14 @@ Date: Thu Jan 19 14:52:02 2012 -0500
     Rename test/ to test/api/
 
  configure.ac                 |    1 +
     Rename test/ to test/api/
 
  configure.ac                 |    1 +
- test/Makefile.am             |  128 +-----
+ test/Makefile.am             |  128 +----
  test/api/Makefile.am         |  131 +++++
  test/api/hb-test.h           |  265 +++++++++
  test/api/test-blob.c         |  301 +++++++++++
  test/api/test-buffer.c        |  783 +++++++++++++++++++++++++++
  test/api/test-c.c            |   58 ++
  test/api/test-common.c        |  213 ++++++++
  test/api/Makefile.am         |  131 +++++
  test/api/hb-test.h           |  265 +++++++++
  test/api/test-blob.c         |  301 +++++++++++
  test/api/test-buffer.c        |  783 +++++++++++++++++++++++++++
  test/api/test-c.c            |   58 ++
  test/api/test-common.c        |  213 ++++++++
- test/api/test-cplusplus.cc    |   30 +
+ test/api/test-cplusplus.cc    |   30 ++
  test/api/test-font.c         |  502 +++++++++++++++++
  test/api/test-object.c        |  367 +++++++++++++
  test/api/test-ot-tag.c        |  241 +++++++++
  test/api/test-font.c         |  502 +++++++++++++++++
  test/api/test-object.c        |  367 +++++++++++++
  test/api/test-ot-tag.c        |  241 +++++++++
@@ -12779,7 +24344,7 @@ Date:   Thu Jan 19 14:52:02 2012 -0500
  test/test-buffer.c           |  783 ---------------------------
  test/test-c.c                |   58 --
  test/test-common.c           |  213 --------
  test/test-buffer.c           |  783 ---------------------------
  test/test-c.c                |   58 --
  test/test-common.c           |  213 --------
- test/test-cplusplus.cc        |   30 -
+ test/test-cplusplus.cc        |   30 --
  test/test-font.c             |  502 -----------------
  test/test-object.c           |  367 -------------
  test/test-ot-tag.c           |  241 ---------
  test/test-font.c             |  502 -----------------
  test/test-object.c           |  367 -------------
  test/test-ot-tag.c           |  241 ---------
@@ -12798,10 +24363,10 @@ Date: Thu Jan 19 14:28:11 2012 -0500
 
     Not really useful.
 
 
     Not really useful.
 
- src/Makefile.am |    6 +--
- src/test.cc    |  132
- -------------------------------------------------------
- 2 files changed, 1 insertions(+), 137 deletions(-)
+ src/Makefile.am |   6 +--
+ src/test.cc    | 132
+ --------------------------------------------------------
+ 2 files changed, 1 insertion(+), 137 deletions(-)
 
 commit 4983feebbbb25e79201bf34035e4d58e61218758
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4983feebbbb25e79201bf34035e4d58e61218758
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12809,8 +24374,8 @@ Date:   Thu Jan 19 13:54:52 2012 -0500
 
     [hb-diff] Clean up
 
 
     [hb-diff] Clean up
 
- util/hb-diff |   41 ++++++++++++++++++++++++++---------------
- 1 files changed, 26 insertions(+), 15 deletions(-)
+ util/hb-diff | 41 ++++++++++++++++++++++++++---------------
+ 1 file changed, 26 insertions(+), 15 deletions(-)
 
 commit cdc673d97c5ffedb386865a81f54a5cedcbad27c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdc673d97c5ffedb386865a81f54a5cedcbad27c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12820,9 +24385,9 @@ Date:   Thu Jan 19 12:46:18 2012 -0500
 
     Ok, much more useful as a test suite driver now.
 
 
     Ok, much more useful as a test suite driver now.
 
- util/hb-shape.cc |   24 +++++-------------------
- util/options.cc  |   34 ++++++++++++++++++++++++++++++++++
- util/options.hh  |   25 ++++++++++++++++++++-----
+ util/hb-shape.cc | 24 +++++-------------------
+ util/options.cc  | 34 ++++++++++++++++++++++++++++++++++
+ util/options.hh  | 25 ++++++++++++++++++++-----
  3 files changed, 59 insertions(+), 24 deletions(-)
 
 commit cc4d9810d6318ca2e4de3b8d62f03b51cc21ee05
  3 files changed, 59 insertions(+), 24 deletions(-)
 
 commit cc4d9810d6318ca2e4de3b8d62f03b51cc21ee05
@@ -12831,9 +24396,9 @@ Date:   Thu Jan 19 12:32:20 2012 -0500
 
     [hb-shape] Add --show-text and --show-unicode options
 
 
     [hb-shape] Add --show-text and --show-unicode options
 
- util/hb-shape.cc |   19 ++++++++++++++++++-
- util/options.cc  |   26 +++++++++++++++++++++++---
- util/options.hh  |   12 +++++++++---
+ util/hb-shape.cc | 19 ++++++++++++++++++-
+ util/options.cc  | 26 +++++++++++++++++++++++---
+ util/options.hh  | 12 +++++++++---
  3 files changed, 50 insertions(+), 7 deletions(-)
 
 commit 27c36af411c7c4d75dd25d79fc76dd92c6bb9643
  3 files changed, 50 insertions(+), 7 deletions(-)
 
 commit 27c36af411c7c4d75dd25d79fc76dd92c6bb9643
@@ -12842,8 +24407,8 @@ Date:   Thu Jan 19 12:30:43 2012 -0500
 
     Fix OOB in hb-shape
 
 
     Fix OOB in hb-shape
 
- util/options.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8d2781d69274672303e30522e222bd01c6b5e781
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8d2781d69274672303e30522e222bd01c6b5e781
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12851,8 +24416,8 @@ Date:   Thu Jan 19 11:36:39 2012 -0500
 
     [test] Add two Indic test cases from Bernard Massot
 
 
     [test] Add two Indic test cases from Bernard Massot
 
- test/test-shape-complex.c |   16 ++++++++++++++++
- 1 files changed, 16 insertions(+), 0 deletions(-)
+ test/test-shape-complex.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
 
 commit 8750abaf8410005facbea8c886c592bead7f959b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8750abaf8410005facbea8c886c592bead7f959b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12862,8 +24427,8 @@ Date:   Wed Jan 18 22:47:44 2012 -0500
 
     Patch from Khaled Hosny.
 
 
     Patch from Khaled Hosny.
 
- util/options.cc |   42 +++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 41 insertions(+), 1 deletions(-)
+ util/options.cc | 42 +++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 41 insertions(+), 1 deletion(-)
 
 commit 889caa52fa1bef61013ec1d127f84d7d5907ef1e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 889caa52fa1bef61013ec1d127f84d7d5907ef1e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12871,8 +24436,8 @@ Date:   Wed Jan 18 22:32:52 2012 -0500
 
     [icu] Use U_FAILURE
 
 
     [icu] Use U_FAILURE
 
- src/hb-icu.cc |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-icu.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 36a4f4a482456ee816dcb59befa0b0538ba487df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 36a4f4a482456ee816dcb59befa0b0538ba487df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12882,8 +24447,8 @@ Date:   Wed Jan 18 22:16:49 2012 -0500
 
     The latter is what I meant.
 
 
     The latter is what I meant.
 
- src/hb-icu.cc |    8 +++-----
- 1 files changed, 3 insertions(+), 5 deletions(-)
+ src/hb-icu.cc | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
 
 commit 055fb24d03ae518fa0aa6c2860a03f3cb6a5ef0d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 055fb24d03ae518fa0aa6c2860a03f3cb6a5ef0d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12893,8 +24458,8 @@ Date:   Wed Jan 18 21:58:34 2012 -0500
 
     As reported by Kenichi Ishibashi on 2011-10-28.
 
 
     As reported by Kenichi Ishibashi on 2011-10-28.
 
- test/test-unicode.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-unicode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c521e793bd6c1dafacb94253a45b9c70ab38525e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c521e793bd6c1dafacb94253a45b9c70ab38525e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12904,8 +24469,8 @@ Date:   Wed Jan 18 21:51:05 2012 -0500
 
     Patch from Kenichi Ishibashi.
 
 
     Patch from Kenichi Ishibashi.
 
- src/hb-buffer.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 03408ce73d003ed4e58e3f8472f9445e72b86bee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 03408ce73d003ed4e58e3f8472f9445e72b86bee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12915,8 +24480,8 @@ Date:   Wed Jan 18 21:28:34 2012 -0500
 
     I have this function, but can't clean up it to my satisfaction.
 
 
     I have this function, but can't clean up it to my satisfaction.
 
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit 7d479900cd11bc88148cd601ee43bc5492ce5843
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7d479900cd11bc88148cd601ee43bc5492ce5843
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12924,8 +24489,8 @@ Date:   Wed Jan 18 21:19:32 2012 -0500
 
     Refactor the two remaining uses of _hb_ot_layout_skip_mark()
 
 
     Refactor the two remaining uses of _hb_ot_layout_skip_mark()
 
- src/hb-ot-layout-gsub-table.hh       |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    7 +++++--
+ src/hb-ot-layout-gsub-table.hh       | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 7 +++++--
  2 files changed, 6 insertions(+), 3 deletions(-)
 
 commit 506ffeb8e77a668fa305139582d215c32e46bb03
  2 files changed, 6 insertions(+), 3 deletions(-)
 
 commit 506ffeb8e77a668fa305139582d215c32e46bb03
@@ -12936,8 +24501,8 @@ Date:   Wed Jan 18 16:07:53 2012 -0500
 
     We should be in good shape now.
 
 
     We should be in good shape now.
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit a4a48fe6d4f884a37e720430347d10dbe3562a79
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a4a48fe6d4f884a37e720430347d10dbe3562a79
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12947,8 +24512,8 @@ Date:   Tue Jan 17 18:08:41 2012 -0500
 
     Ouch!
 
 
     Ouch!
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4ab97311541225906f6b737a2b47de252224cc09
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ab97311541225906f6b737a2b47de252224cc09
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -12956,10 +24521,10 @@ Date: Mon Jan 16 22:05:08 2012 -0500
 
     Refactor mark skipping
 
 
     Refactor mark skipping
 
- src/hb-ot-layout-gpos-table.hh       |   95 ++++++++++----------------
- src/hb-ot-layout-gsub-table.hh       |   21 +++---
- src/hb-ot-layout-gsubgpos-private.hh |  125
- ++++++++++++++++++++++++++--------
+ src/hb-ot-layout-gpos-table.hh       |  95 ++++++++++----------------
+ src/hb-ot-layout-gsub-table.hh       |  21 +++---
+ src/hb-ot-layout-gsubgpos-private.hh | 125
+ +++++++++++++++++++++++++++--------
  3 files changed, 143 insertions(+), 98 deletions(-)
 
 commit 370f03e9c69d98d735eafb7e72b13b17f42cbaa9
  3 files changed, 143 insertions(+), 98 deletions(-)
 
 commit 370f03e9c69d98d735eafb7e72b13b17f42cbaa9
@@ -12968,8 +24533,8 @@ Date:   Mon Jan 16 17:03:55 2012 -0500
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-table.hh       |    5 ++---
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++----
+ src/hb-ot-layout-gsub-table.hh       | 5 ++---
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ++----
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 4d3aeb8cb2bc1ca7cdd03ba28ba8c334f12d4c03
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 4d3aeb8cb2bc1ca7cdd03ba28ba8c334f12d4c03
@@ -12982,11 +24547,11 @@ Date: Mon Jan 16 16:43:26 2012 -0500
 
     Patch from Jonathan Kew.
 
 
     Patch from Jonathan Kew.
 
- src/hb-ot-layout-gpos-table.hh       |   42
- ++++++++++++++++----------------
- src/hb-ot-layout-gsub-table.hh       |   21 ++++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   45
+ src/hb-ot-layout-gpos-table.hh       | 42
  ++++++++++++++++-----------------
  ++++++++++++++++-----------------
+ src/hb-ot-layout-gsub-table.hh       | 21 +++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh | 45
+ ++++++++++++++++++------------------
  3 files changed, 54 insertions(+), 54 deletions(-)
 
 commit e8eedf2687f05372bf5476e84139d01ba67c9f73
  3 files changed, 54 insertions(+), 54 deletions(-)
 
 commit e8eedf2687f05372bf5476e84139d01ba67c9f73
@@ -12997,8 +24562,8 @@ Date:   Mon Jan 16 16:39:40 2012 -0500
 
     Based on patch from Jonathan Kew.
 
 
     Based on patch from Jonathan Kew.
 
- src/hb-ot-shape-complex-indic.cc   |   4 ++--
- src/hb-ot-shape-complex-private.hh |   2 ++
+ src/hb-ot-shape-complex-indic.cc   | 4 ++--
+ src/hb-ot-shape-complex-private.hh | 2 ++
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 3d0ddd12801689b4093ffca97da4dd9ca669b64a
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 3d0ddd12801689b4093ffca97da4dd9ca669b64a
@@ -13007,8 +24572,8 @@ Date:   Sun Jan 15 15:55:52 2012 -0500
 
     Require glib >= 2.16 for the gobject option
 
 
     Require glib >= 2.16 for the gobject option
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 95ab82a992ab916046c2e6205db7cadeec88d206
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 95ab82a992ab916046c2e6205db7cadeec88d206
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13018,8 +24583,8 @@ Date:   Sun Jan 15 14:56:56 2012 -0500
 
     We don't have any docs yet.
 
 
     We don't have any docs yet.
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 299ae0c3a367c84a835eadbd1276ca284d2720c0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 299ae0c3a367c84a835eadbd1276ca284d2720c0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13027,8 +24592,8 @@ Date:   Sat Jan 14 21:29:45 2012 -0500
 
     [icu] Remove glib-ism
 
 
     [icu] Remove glib-ism
 
- src/hb-icu.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-icu.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit a097043f9a81e6c20caf69a5dabdf9e00438d79b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a097043f9a81e6c20caf69a5dabdf9e00438d79b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13036,8 +24601,8 @@ Date:   Sat Jan 14 17:55:51 2012 -0500
 
     Allow space in one more place when parsing features
 
 
     Allow space in one more place when parsing features
 
- util/options.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ util/options.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit af92135424b994062648f4fb7e26af0bd970a4b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit af92135424b994062648f4fb7e26af0bd970a4b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13045,8 +24610,8 @@ Date:   Fri Oct 21 09:18:43 2011 -0700
 
     Minor
 
 
     Minor
 
- src/hb-object-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 89d89646e8163b6c0874b9a3c14d4da974ea8219
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 89d89646e8163b6c0874b9a3c14d4da974ea8219
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13056,8 +24621,8 @@ Date:   Mon Oct 17 11:50:54 2011 -0700
 
     Reported by Jonathan Kew.
 
 
     Reported by Jonathan Kew.
 
- src/hb-object-private.hh |    6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-object-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit af913c5788e600e36d29f44fe4e77db84cf8c442
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit af913c5788e600e36d29f44fe4e77db84cf8c442
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13067,8 +24632,8 @@ Date:   Mon Oct 17 11:39:28 2011 -0700
 
     Reported by Jonathan Kew.
 
 
     Reported by Jonathan Kew.
 
- src/hb-ot-shape-normalize.cc |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-normalize.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit fd528c17b7b5ac912f1ac980e1d9981f561c3b46
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fd528c17b7b5ac912f1ac980e1d9981f561c3b46
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13076,8 +24641,8 @@ Date:   Wed Oct 12 15:03:58 2011 -0400
 
     [util] Add --list-shapers to hb-view and hb-shape
 
 
     [util] Add --list-shapers to hb-view and hb-shape
 
- util/options.cc |   17 ++++++++++++++++-
- 1 files changed, 16 insertions(+), 1 deletions(-)
+ util/options.cc | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
 
 commit a17554bfd51dc8a37b1674d1ede63e616618e0a6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a17554bfd51dc8a37b1674d1ede63e616618e0a6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13088,8 +24653,8 @@ Date:   Wed Sep 28 16:57:34 2011 -0400
     This will make sure we test that C code can actually link to the
     library.
 
     This will make sure we test that C code can actually link to the
     library.
 
- test/test-c.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-c.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 55deff7595ef357d000fef83559c74c9f8acad00
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 55deff7595ef357d000fef83559c74c9f8acad00
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13097,8 +24662,8 @@ Date:   Wed Sep 28 16:20:09 2011 -0400
 
     Add comments
 
 
     Add comments
 
- src/hb-ot-shape-normalize.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-normalize.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit a240d5a0a3ccc71902e7a341b6d531995319999d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a240d5a0a3ccc71902e7a341b6d531995319999d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13106,8 +24671,8 @@ Date:   Tue Sep 27 13:50:45 2011 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 52ebdff49d13f239efc886de935d47be9860f6e5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52ebdff49d13f239efc886de935d47be9860f6e5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13115,8 +24680,8 @@ Date:   Tue Sep 27 12:38:16 2011 -0400
 
     Fix GSUB lookuptype 1 subtype 1 delta wrapping
 
 
     Fix GSUB lookuptype 1 subtype 1 delta wrapping
 
- src/hb-ot-layout-gsub-table.hh |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-table.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 5857720cd35078d1c3906c8b2db3190b5166b66f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5857720cd35078d1c3906c8b2db3190b5166b66f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13124,8 +24689,8 @@ Date:   Tue Sep 27 12:36:26 2011 -0400
 
     [util] s/%d/%u/ when printing glyph ids and clusters
 
 
     [util] s/%d/%u/ when printing glyph ids and clusters
 
- util/options.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ util/options.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit b95324cdd217f44c40c5fd44898e659500f19511
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b95324cdd217f44c40c5fd44898e659500f19511
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13133,8 +24698,8 @@ Date:   Wed Sep 21 16:50:39 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-blob.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-blob.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0cd33592ab4bb486ffc438ba0efdac2fa7a1bb7f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0cd33592ab4bb486ffc438ba0efdac2fa7a1bb7f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13142,8 +24707,8 @@ Date:   Wed Sep 21 16:49:33 2011 -0400
 
     Fix possible leaks
 
 
     Fix possible leaks
 
- src/hb-font.cc |   16 +++++++++++++---
- 1 files changed, 13 insertions(+), 3 deletions(-)
+ src/hb-font.cc | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
 
 commit d3f3690b485e1d240fec4f204aef54e07853a244
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d3f3690b485e1d240fec4f204aef54e07853a244
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13153,8 +24718,8 @@ Date:   Wed Sep 21 16:41:43 2011 -0400
 
     Ie. write "86" instead of "gid86".
 
 
     Ie. write "86" instead of "gid86".
 
- util/options.cc |   11 +++++++----
- 1 files changed, 7 insertions(+), 4 deletions(-)
+ util/options.cc | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
 
 commit 088c1e27c0fc0cdef999cf1f567e4d5eb2cfb2e4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 088c1e27c0fc0cdef999cf1f567e4d5eb2cfb2e4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13166,9 +24731,9 @@ Date:   Tue Sep 20 14:43:55 2011 -0400
 
     C++ auto casts fails you in mysterious ways...
 
 
     C++ auto casts fails you in mysterious ways...
 
- util/helper-cairo.cc |    2 +-
- util/options.cc      |    3 ++-
- util/options.hh      |   14 +++++++-------
+ util/helper-cairo.cc |  2 +-
+ util/options.cc      |  3 ++-
+ util/options.hh      | 14 +++++++-------
  3 files changed, 10 insertions(+), 9 deletions(-)
 
 commit d606daa4cca323c8977b2e52e6863dc0f1b72fa9
  3 files changed, 10 insertions(+), 9 deletions(-)
 
 commit d606daa4cca323c8977b2e52e6863dc0f1b72fa9
@@ -13177,8 +24742,8 @@ Date:   Tue Sep 20 14:34:06 2011 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/gen-arabic-table.py |    2 +-
- src/gen-indic-table.py  |    2 +-
+ src/gen-arabic-table.py | 2 +-
+ src/gen-indic-table.py  | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit e700bce1189465a159a7c3c179f231be224f31cc
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit e700bce1189465a159a7c3c179f231be224f31cc
@@ -13199,10 +24764,10 @@ Date: Tue Sep 20 11:20:53 2011 -0400
 
     You can pipe the colored output to 'less -r'.
 
 
     You can pipe the colored output to 'less -r'.
 
- util/Makefile.am |    2 +
- util/hb-diff    |   59
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 61 insertions(+), 0 deletions(-)
+ util/Makefile.am |  2 ++
+ util/hb-diff    | 59
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+)
 
 commit 880c1f0e4ede65890592d28dfb38bb06f5b57500
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 880c1f0e4ede65890592d28dfb38bb06f5b57500
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13212,8 +24777,8 @@ Date:   Mon Sep 19 23:10:22 2011 -0400
 
     At least works for cross-compiling now...
 
 
     At least works for cross-compiling now...
 
- configure.ac |   26 +++++++++++++++-----------
- 1 files changed, 15 insertions(+), 11 deletions(-)
+ configure.ac | 26 +++++++++++++++-----------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
 
 commit f83f0f4836691b04306c2ef80979f2e1d76a2f28
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f83f0f4836691b04306c2ef80979f2e1d76a2f28
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13221,8 +24786,8 @@ Date:   Mon Sep 19 18:51:48 2011 -0400
 
     [graphite] Add note about graphite shaker brokenness
 
 
     [graphite] Add note about graphite shaker brokenness
 
- src/hb-graphite2.cc |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-graphite2.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 422558142aabb996d8ad1848df7ea4d5a8ade98a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 422558142aabb996d8ad1848df7ea4d5a8ade98a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13230,9 +24795,9 @@ Date:   Mon Sep 19 17:57:02 2011 -0400
 
     [util] Account for line-space in surface size
 
 
     [util] Account for line-space in surface size
 
- util/options.cc    |   2 +-
- util/options.hh    |   1 -
- util/view-cairo.cc |   2 +-
+ util/options.cc    | 2 +-
+ util/options.hh    | 1 -
+ util/view-cairo.cc | 2 +-
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit b5afd8f78e6b372f1bbed469329c1554adb20eea
  3 files changed, 2 insertions(+), 3 deletions(-)
 
 commit b5afd8f78e6b372f1bbed469329c1554adb20eea
@@ -13242,8 +24807,8 @@ Date:   Mon Sep 19 16:56:21 2011 -0400
     [util] Rename --output to --output_file, and --format to
     --output-format
 
     [util] Rename --output to --output_file, and --format to
     --output-format
 
- util/options.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ util/options.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 0a965eee880428a43ad7f9d1317c344666247dd7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0a965eee880428a43ad7f9d1317c344666247dd7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13251,8 +24816,8 @@ Date:   Mon Sep 19 16:53:47 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 466393c2f04fb5b3dcb3e81ea9609905fa8c9648
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 466393c2f04fb5b3dcb3e81ea9609905fa8c9648
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13260,8 +24825,8 @@ Date:   Mon Sep 19 16:50:18 2011 -0400
 
     Really fix build this time
 
 
     Really fix build this time
 
- util/hb-view.hh |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ util/hb-view.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit fe1605db4f28ed75d5debe0db45a19aa77f0585f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fe1605db4f28ed75d5debe0db45a19aa77f0585f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13269,8 +24834,8 @@ Date:   Mon Sep 19 16:49:03 2011 -0400
 
     Fix dist
 
 
     Fix dist
 
- util/Makefile.am |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ util/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 8b8b19056decaf09e4e0ccd9412ee1aeb30f4de7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8b8b19056decaf09e4e0ccd9412ee1aeb30f4de7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13282,21 +24847,21 @@ Date: Mon Sep 19 16:41:17 2011 -0400
 
     The output format is kinda cryptic.  Suggestions welcome.
 
 
     The output format is kinda cryptic.  Suggestions welcome.
 
- configure.ac        |    6 -
- util/Makefile.am     |   44 ++++--
- util/common.cc       |   43 ------
- util/common.hh       |   57 --------
- util/hb-shape.cc     |   78 ++++++++++
- util/hb-view.cc      |   44 +------
- util/hb-view.hh      |   79 +++++++++++
- util/helper-cairo.cc |  375
- +++++++++++++++++++++++++++++++++++++++++++++++++
- util/helper-cairo.hh |   79 +++++++++++
- util/options.cc      |   79 +++++++++++
- util/options.hh      |   53 +++++++-
- util/view-cairo.cc   |  381
- ++------------------------------------------------
- util/view-cairo.hh   |    8 +-
+ configure.ac        |   6 -
+ util/Makefile.am     |  44 +++---
+ util/common.cc       |  43 ------
+ util/common.hh       |  57 --------
+ util/hb-shape.cc     |  78 +++++++++++
+ util/hb-view.cc      |  44 +-----
+ util/hb-view.hh      |  79 +++++++++++
+ util/helper-cairo.cc | 375
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/helper-cairo.hh |  79 +++++++++++
+ util/options.cc      |  79 +++++++++++
+ util/options.hh      |  53 ++++++-
+ util/view-cairo.cc   | 381
+ ++-------------------------------------------------
+ util/view-cairo.hh   |   8 +-
  13 files changed, 785 insertions(+), 541 deletions(-)
 
 commit eb2d8be7a8ede0c0f5e346cf06516792f83f36f7
  13 files changed, 785 insertions(+), 541 deletions(-)
 
 commit eb2d8be7a8ede0c0f5e346cf06516792f83f36f7
@@ -13305,8 +24870,8 @@ Date:   Mon Sep 19 16:15:22 2011 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit f6496663c2f6849a944e41afcf9511f378477532
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f6496663c2f6849a944e41afcf9511f378477532
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13314,9 +24879,9 @@ Date:   Mon Sep 19 15:45:52 2011 -0400
 
     [util] If no text is provided, simply call cairo_show_glyphs()
 
 
     [util] If no text is provided, simply call cairo_show_glyphs()
 
- util/view-cairo.cc |  92
- +++++++++++++++++++++++++++++-----------------------
- 1 files changed, 51 insertions(+), 41 deletions(-)
+ util/view-cairo.cc | 92
+ ++++++++++++++++++++++++++++++------------------------
+ 1 file changed, 51 insertions(+), 41 deletions(-)
 
 commit 5c299343118d1eaff32ffb2a5dac077cfff67dee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c299343118d1eaff32ffb2a5dac077cfff67dee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13324,8 +24889,8 @@ Date:   Mon Sep 19 14:53:26 2011 -0400
 
     [uniscribe] Various improvements
 
 
     [uniscribe] Various improvements
 
- src/hb-uniscribe.cc |  30 +++++++++++++++++++-----------
- 1 files changed, 19 insertions(+), 11 deletions(-)
+ src/hb-uniscribe.cc | 30 +++++++++++++++++++-----------
+ 1 file changed, 19 insertions(+), 11 deletions(-)
 
 commit 11e51993ab562d4c7460eb7c43d0e97404e628e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 11e51993ab562d4c7460eb7c43d0e97404e628e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13333,9 +24898,9 @@ Date:   Mon Sep 19 09:58:55 2011 -0400
 
     [util] Move font-size into view-options
 
 
     [util] Move font-size into view-options
 
- util/options.cc    |   2 +-
- util/options.hh    |   7 +++----
- util/view-cairo.cc |   4 ++--
+ util/options.cc    | 2 +-
+ util/options.hh    | 7 +++----
+ util/view-cairo.cc | 4 ++--
  3 files changed, 6 insertions(+), 7 deletions(-)
 
 commit 0fe296019746689551d224a5f6fb7e0ebe1b91dc
  3 files changed, 6 insertions(+), 7 deletions(-)
 
 commit 0fe296019746689551d224a5f6fb7e0ebe1b91dc
@@ -13346,8 +24911,8 @@ Date:   Sat Sep 17 09:59:58 2011 -0400
 
     Bug 40953 - fail compile git: make[2]: *** [hb_view-options.o] Error 1
 
 
     Bug 40953 - fail compile git: make[2]: *** [hb_view-options.o] Error 1
 
- configure.ac   |    2 +-
- util/options.cc |    8 ++++----
+ configure.ac   | 2 +-
+ util/options.cc | 8 ++++----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d2b3ab9ecebbf46cb9dac1f09c17379c50ea4575
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d2b3ab9ecebbf46cb9dac1f09c17379c50ea4575
@@ -13356,8 +24921,8 @@ Date:   Fri Sep 16 16:59:17 2011 -0400
 
     Fix "[util] Fix hb-view crash with bogus font."
 
 
     Fix "[util] Fix hb-view crash with bogus font."
 
- util/view-cairo.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/view-cairo.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit da4a2a1426ee3aa9d9678ec12c9ba4dfcba0bcf8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da4a2a1426ee3aa9d9678ec12c9ba4dfcba0bcf8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13365,8 +24930,8 @@ Date:   Fri Sep 16 16:56:34 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- util/view-cairo.cc |  31 +++++++++++++++++++++++--------
- 1 files changed, 23 insertions(+), 8 deletions(-)
+ util/view-cairo.cc | 31 +++++++++++++++++++++++--------
+ 1 file changed, 23 insertions(+), 8 deletions(-)
 
 commit 4274ed7ab6fb03fbf8eaaa43ab06647dc0beed79
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4274ed7ab6fb03fbf8eaaa43ab06647dc0beed79
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13374,8 +24939,8 @@ Date:   Fri Sep 16 16:52:26 2011 -0400
 
     [util] Fix hb-view crash with bogus font
 
 
     [util] Fix hb-view crash with bogus font
 
- util/view-cairo.cc |   8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ util/view-cairo.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 commit 5ddd9cc499f2470eca239ae357a5c8a3626c0809
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5ddd9cc499f2470eca239ae357a5c8a3626c0809
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13383,11 +24948,11 @@ Date: Fri Sep 16 16:40:44 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-private.hh        |    2 +-
- src/hb-unicode-private.hh |   4 ++--
- src/test.cc              |    4 ++--
- util/common.hh                   |    2 +-
- util/options.cc          |    8 ++++----
+ src/hb-private.hh        | 2 +-
+ src/hb-unicode-private.hh | 4 ++--
+ src/test.cc              | 4 ++--
+ util/common.hh                   | 2 +-
+ util/options.cc          | 8 ++++----
  5 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 652d64aa8d32d914bf3ee2f2c451de103fea8fa9
  5 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 652d64aa8d32d914bf3ee2f2c451de103fea8fa9
@@ -13396,8 +24961,8 @@ Date:   Fri Sep 16 16:34:39 2011 -0400
 
     TODO items
 
 
     TODO items
 
- TODO |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ TODO | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 947c9a778c0d4b428b58806f98c34ede59b7439c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 947c9a778c0d4b428b58806f98c34ede59b7439c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13405,8 +24970,8 @@ Date:   Fri Sep 16 16:33:18 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-normalize.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit d5476a30a10da5e54783c8dbf04340225a9a00d7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d5476a30a10da5e54783c8dbf04340225a9a00d7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13414,8 +24979,8 @@ Date:   Fri Sep 16 12:30:50 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-object-private.hh |   26 +++++++++++++++-----------
- 1 files changed, 15 insertions(+), 11 deletions(-)
+ src/hb-object-private.hh | 26 +++++++++++++++-----------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
 
 commit 55aeb0490454cc1ba93a42f307ed1230f59dee4b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 55aeb0490454cc1ba93a42f307ed1230f59dee4b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13423,10 +24988,10 @@ Date: Fri Sep 16 02:08:36 2011 -0400
 
     Fix reading text from stdin
 
 
     Fix reading text from stdin
 
- util/options.cc    |  76
- ++++++++++++++++++++++++++++++++++------------------
- util/options.hh    |  16 +++++++----
- util/view-cairo.cc |   6 +++-
+ util/options.cc    | 76
+ +++++++++++++++++++++++++++++++++++-------------------
+ util/options.hh    | 16 +++++++-----
+ util/view-cairo.cc |  6 +++--
  3 files changed, 64 insertions(+), 34 deletions(-)
 
 commit a75c1b125159f6cfb6b652a9ec40803f7c7e3f71
  3 files changed, 64 insertions(+), 34 deletions(-)
 
 commit a75c1b125159f6cfb6b652a9ec40803f7c7e3f71
@@ -13435,8 +25000,8 @@ Date:   Fri Sep 16 01:16:41 2011 -0400
 
     Move code around
 
 
     Move code around
 
- util/options.cc |   27 +++++++++++++++++++++++++--
- util/options.hh |   20 +-------------------
+ util/options.cc | 27 +++++++++++++++++++++++++--
+ util/options.hh | 20 +-------------------
  2 files changed, 26 insertions(+), 21 deletions(-)
 
 commit 7bf6ecd3bfb1ccf5d9ac6fe274efa74b46885fea
  2 files changed, 26 insertions(+), 21 deletions(-)
 
 commit 7bf6ecd3bfb1ccf5d9ac6fe274efa74b46885fea
@@ -13447,9 +25012,9 @@ Date:   Fri Sep 16 01:11:30 2011 -0400
 
     Fixes bug with uniscribe not handling GIGANTIC sizes.
 
 
     Fixes bug with uniscribe not handling GIGANTIC sizes.
 
- util/options.cc    |   2 +-
- util/view-cairo.cc |   8 ++++----
- util/view-cairo.hh |   2 +-
+ util/options.cc    | 2 +-
+ util/view-cairo.cc | 8 ++++----
+ util/view-cairo.hh | 2 +-
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 674ee58d9bc9f825d769220d77f58513edae4558
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 674ee58d9bc9f825d769220d77f58513edae4558
@@ -13458,8 +25023,8 @@ Date:   Fri Sep 16 00:54:05 2011 -0400
 
     Minor
 
 
     Minor
 
- util/options.cc |    4 +---
- 1 files changed, 1 insertions(+), 3 deletions(-)
+ util/options.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
 
 commit 4451168e5d1ea26560899e9a9733b3a3f1853050
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4451168e5d1ea26560899e9a9733b3a3f1853050
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13470,11 +25035,11 @@ Date: Fri Sep 16 00:38:19 2011 -0400
     Make --font-file accept "-" to mean stdin, and have it work
     in Windows too!
 
     Make --font-file accept "-" to mean stdin, and have it work
     in Windows too!
 
- configure.ac   |    2 +-
- util/common.hh  |    5 ++++
- util/options.cc |   64
- +++++++++++++++++++++++++++++++++++++++++++++---------
- util/options.hh |   10 +++++++-
+ configure.ac   |  2 +-
+ util/common.hh  |  5 +++++
+ util/options.cc | 64
+ +++++++++++++++++++++++++++++++++++++++++++++++----------
+ util/options.hh | 10 +++++++--
  4 files changed, 67 insertions(+), 14 deletions(-)
 
 commit 639b5957d9c7b6d8bef6784e3467ccc055ddeea4
  4 files changed, 67 insertions(+), 14 deletions(-)
 
 commit 639b5957d9c7b6d8bef6784e3467ccc055ddeea4
@@ -13483,8 +25048,8 @@ Date:   Thu Sep 15 18:09:49 2011 -0400
 
     Minor
 
 
     Minor
 
- util/options.cc |    5 +++--
- util/options.hh |    4 ++--
+ util/options.cc | 5 +++--
+ util/options.hh | 4 ++--
  2 files changed, 5 insertions(+), 4 deletions(-)
 
 commit f7e2ef74f856ee13d6fd6cf3f1e04bc162203bc2
  2 files changed, 5 insertions(+), 4 deletions(-)
 
 commit f7e2ef74f856ee13d6fd6cf3f1e04bc162203bc2
@@ -13496,10 +25061,10 @@ Date: Thu Sep 15 17:52:00 2011 -0400
     Apparently there's no equivalent to "/dev/stdout", so write using
     stdio to be able to output to stdout.
 
     Apparently there's no equivalent to "/dev/stdout", so write using
     stdio to be able to output to stdout.
 
- util/common.hh     |   1 +
- util/options.hh    |  31 ++++++++++++++++----
- util/view-cairo.cc |  79
- +++++++++++++++++++++++++++++++++++-----------------
+ util/common.hh     |  1 +
+ util/options.hh    | 31 ++++++++++++++++-----
+ util/view-cairo.cc | 79
+ ++++++++++++++++++++++++++++++++++++------------------
  3 files changed, 78 insertions(+), 33 deletions(-)
 
 commit 36b10f58cc70ce9570d17b30616f9cb27423e03b
  3 files changed, 78 insertions(+), 33 deletions(-)
 
 commit 36b10f58cc70ce9570d17b30616f9cb27423e03b
@@ -13508,8 +25073,8 @@ Date:   Thu Sep 15 16:29:51 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-normalize.cc |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-normalize.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit c4611cb66f8e3a133ec00e3ace62ef19d9b95b28
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c4611cb66f8e3a133ec00e3ace62ef19d9b95b28
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13517,10 +25082,10 @@ Date: Tue Sep 13 13:33:11 2011 -0400
 
     Fix test
 
 
     Fix test
 
- src/hb-graphite2.h |   1 +
- src/hb-ot-shape.h  |   1 +
- src/hb-uniscribe.h |   1 +
- 3 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-graphite2.h | 1 +
+ src/hb-ot-shape.h  | 1 +
+ src/hb-uniscribe.h | 1 +
+ 3 files changed, 3 insertions(+)
 
 commit b9b10ad78b1f977494a3a42b58f8040fe16505a3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b9b10ad78b1f977494a3a42b58f8040fe16505a3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13530,16 +25095,16 @@ Date: Tue Sep 13 13:30:39 2011 -0400
 
     Now we can use the same code to do other utils...
 
 
     Now we can use the same code to do other utils...
 
- configure.ac      |    2 +
- util/Makefile.am   |   2 +
- util/common.cc     |   7 +-
- util/common.hh     |   2 +-
- util/hb-view.cc    |  244 ++++-------------------------
- util/options.cc    |  321 +++++++++++++++++++++++++++-----------
- util/options.hh    |  179 +++++++++++++++++++---
- util/view-cairo.cc |  440
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- util/view-cairo.hh |  63 ++++++++
+ configure.ac      |   2 +
+ util/Makefile.am   |  2 +
+ util/common.cc     |  7 +-
+ util/common.hh     |  2 +-
+ util/hb-view.cc    | 244 ++++-------------------------
+ util/options.cc    | 321 ++++++++++++++++++++++++++------------
+ util/options.hh    | 179 +++++++++++++++++++---
+ util/view-cairo.cc | 440
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/view-cairo.hh |  63 ++++++++
  9 files changed, 927 insertions(+), 333 deletions(-)
 
 commit bc4b07b05ea9e39eb9f966eb2c3e1c737efa77ff
  9 files changed, 927 insertions(+), 333 deletions(-)
 
 commit bc4b07b05ea9e39eb9f966eb2c3e1c737efa77ff
@@ -13548,10 +25113,10 @@ Date: Thu Sep 8 17:08:32 2011 -0400
 
     More reshuffling
 
 
     More reshuffling
 
- util/hb-view.cc |    4 +-
- util/options.cc |   64
- +++++++++++++++++++++++++++++-------------------------
- util/options.hh |   13 ++++++-----
+ util/hb-view.cc |  4 ++--
+ util/options.cc | 64
+ ++++++++++++++++++++++++++++++---------------------------
+ util/options.hh | 13 ++++++------
  3 files changed, 43 insertions(+), 38 deletions(-)
 
 commit 516857eb51bbb79ff4adf44e3fefbf460f9ee8f8
  3 files changed, 43 insertions(+), 38 deletions(-)
 
 commit 516857eb51bbb79ff4adf44e3fefbf460f9ee8f8
@@ -13560,8 +25125,8 @@ Date:   Thu Sep 8 16:50:24 2011 -0400
 
     [util] Simplify more
 
 
     [util] Simplify more
 
- util/options.hh |    9 +++------
- 1 files changed, 3 insertions(+), 6 deletions(-)
+ util/options.hh | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
 
 commit 4f4b114a5592c2f5d128ee795f159b438ad97829
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4f4b114a5592c2f5d128ee795f159b438ad97829
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13569,8 +25134,8 @@ Date:   Thu Sep 8 16:49:02 2011 -0400
 
     [util] Move code around
 
 
     [util] Move code around
 
- util/hb-view.cc |    8 +-------
- util/options.hh |   14 ++++++++++++++
+ util/hb-view.cc |  8 +-------
+ util/options.hh | 14 ++++++++++++++
  2 files changed, 15 insertions(+), 7 deletions(-)
 
 commit 46d86a73a103b061144018c3fe947b57548fc58f
  2 files changed, 15 insertions(+), 7 deletions(-)
 
 commit 46d86a73a103b061144018c3fe947b57548fc58f
@@ -13581,8 +25146,8 @@ Date:   Thu Sep 8 16:43:15 2011 -0400
 
     We now support using -1 for NUL-terminated strings.
 
 
     We now support using -1 for NUL-terminated strings.
 
- util/hb-view.cc |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ util/hb-view.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 90e312cb85df7a6dc350cb62138ab950790e3d15
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 90e312cb85df7a6dc350cb62138ab950790e3d15
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13590,8 +25155,8 @@ Date:   Thu Sep 8 16:42:37 2011 -0400
 
     [util] Move code around
 
 
     [util] Move code around
 
- util/hb-view.cc |    5 -----
- util/options.hh |    4 ++++
+ util/hb-view.cc | 5 -----
+ util/options.hh | 4 ++++
  2 files changed, 4 insertions(+), 5 deletions(-)
 
 commit 109cb382898f491eed733dba4ef5ba12de94aaf6
  2 files changed, 4 insertions(+), 5 deletions(-)
 
 commit 109cb382898f491eed733dba4ef5ba12de94aaf6
@@ -13600,9 +25165,9 @@ Date:   Thu Sep 8 16:00:04 2011 -0400
 
     [util] Further refactor option parsing
 
 
     [util] Further refactor option parsing
 
- util/options.cc |   80
- ++++++++++++++++++++++++++++++++++++++++++++++---------
- util/options.hh |   20 +++++++++++---
+ util/options.cc | 80
+ +++++++++++++++++++++++++++++++++++++++++++++++----------
+ util/options.hh | 20 ++++++++++++---
  2 files changed, 83 insertions(+), 17 deletions(-)
 
 commit bc187e5ac7433f5561b0e97e8c62172c73883f3f
  2 files changed, 83 insertions(+), 17 deletions(-)
 
 commit bc187e5ac7433f5561b0e97e8c62172c73883f3f
@@ -13611,9 +25176,9 @@ Date:   Thu Sep 8 13:35:17 2011 -0400
 
     Refine Indic scripts, following Martin Hosken's recommendation
 
 
     Refine Indic scripts, following Martin Hosken's recommendation
 
- src/hb-ot-shape-complex-private.hh |  56
- ++++++++++++++++++++++--------------
- 1 files changed, 34 insertions(+), 22 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 56
+ +++++++++++++++++++++++---------------
+ 1 file changed, 34 insertions(+), 22 deletions(-)
 
 commit 738d096a06822e63b3894bd817ecb90e5fb94f73
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 738d096a06822e63b3894bd817ecb90e5fb94f73
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13625,9 +25190,9 @@ Date:   Fri Sep 2 13:31:19 2011 -0400
     language is three letters long, use it directly as OpenType language
     tag (after case conversion and padding).
 
     language is three letters long, use it directly as OpenType language
     tag (after case conversion and padding).
 
- src/hb-ot-tag.cc   |   8 ++++++++
- test/test-ot-tag.c |   5 +++++
- 2 files changed, 13 insertions(+), 0 deletions(-)
+ src/hb-ot-tag.cc   | 8 ++++++++
+ test/test-ot-tag.c | 5 +++++
+ 2 files changed, 13 insertions(+)
 
 commit ea02cbf03c084b3ead6e9e4c9af07b3b47608d5b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ea02cbf03c084b3ead6e9e4c9af07b3b47608d5b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13637,8 +25202,8 @@ Date:   Fri Sep 2 12:39:20 2011 -0400
 
     Doesn't seem to be slower.
 
 
     Doesn't seem to be slower.
 
- src/hb-graphite2.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-graphite2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 210a06f3d7bd2df55ebd1743da74f327c5a7a967
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 210a06f3d7bd2df55ebd1743da74f327c5a7a967
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13646,9 +25211,9 @@ Date:   Fri Aug 26 13:39:49 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-graphite2.h |  12 ++++++------
- src/hb-ot-shape.h  |   1 -
- src/hb-uniscribe.h |   1 -
+ src/hb-graphite2.h | 12 ++++++------
+ src/hb-ot-shape.h  |  1 -
+ src/hb-uniscribe.h |  1 -
  3 files changed, 6 insertions(+), 8 deletions(-)
 
 commit 4a8d2e379a34b19bccc72bc3e2d9ace3fdd27733
  3 files changed, 6 insertions(+), 8 deletions(-)
 
 commit 4a8d2e379a34b19bccc72bc3e2d9ace3fdd27733
@@ -13657,8 +25222,8 @@ Date:   Fri Aug 26 09:40:54 2011 +0200
 
     [graphite2] Chop a few more lines
 
 
     [graphite2] Chop a few more lines
 
- src/hb-graphite2.cc |  13 ++++---------
- 1 files changed, 4 insertions(+), 9 deletions(-)
+ src/hb-graphite2.cc | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
 
 commit 81ec289da799bd2f50da9382507c606d2c779ab9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81ec289da799bd2f50da9382507c606d2c779ab9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13666,8 +25231,8 @@ Date:   Fri Aug 26 09:33:06 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-graphite2.cc |  24 ++++++++++++------------
- 1 files changed, 12 insertions(+), 12 deletions(-)
+ src/hb-graphite2.cc | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
 commit 3380de5abbaff535e1cf57ea7e5c2a7c4fdcfe66
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3380de5abbaff535e1cf57ea7e5c2a7c4fdcfe66
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13675,8 +25240,8 @@ Date:   Fri Aug 26 09:30:49 2011 +0200
 
     [graphite] Use buffer->replace_glyphs()
 
 
     [graphite] Use buffer->replace_glyphs()
 
- src/hb-graphite2.cc |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-graphite2.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 9ebe8c0286856d46430ae184ba7303bd34485883
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ebe8c0286856d46430ae184ba7303bd34485883
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13684,9 +25249,9 @@ Date:   Fri Aug 26 09:29:42 2011 +0200
 
     Add buffer->replace_glyphs()
 
 
     Add buffer->replace_glyphs()
 
- src/hb-buffer-private.hh |    3 +++
- src/hb-buffer.cc        |   26 ++++++++++++++++++++++++++
- 2 files changed, 29 insertions(+), 0 deletions(-)
+ src/hb-buffer-private.hh |  3 +++
+ src/hb-buffer.cc        | 26 ++++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
 
 commit a5edb1031c204464da4f852ba3d90e8cc20cd20e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a5edb1031c204464da4f852ba3d90e8cc20cd20e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13694,8 +25259,8 @@ Date:   Fri Aug 26 09:27:13 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-graphite2.cc |   9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
+ src/hb-graphite2.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
 
 commit 290e3ee51727df75d136ccfff79831b94d1583b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 290e3ee51727df75d136ccfff79831b94d1583b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13711,8 +25276,8 @@ Date:   Fri Aug 26 09:25:04 2011 +0200
     2) Padding.  IMO, tag padding is always with spaces, but Martin was
     talking about NUL bytes.
 
     2) Padding.  IMO, tag padding is always with spaces, but Martin was
     talking about NUL bytes.
 
- src/hb-graphite2.cc |   5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-graphite2.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 4c9fe88d30036340fe592bcbc375049b84602b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c9fe88d30036340fe592bcbc375049b84602b8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13731,17 +25296,17 @@ Date: Fri Aug 26 09:18:53 2011 +0200
        hb_language_from_string()
        hb_script_from_string()
 
        hb_language_from_string()
        hb_script_from_string()
 
- src/hb-common.cc    |  29 ++++++++++++------
- src/hb-common.h     |  12 +++++--
- src/hb-graphite2.cc |   2 +-
- src/hb-icu.cc      |    2 +-
- src/hb-ot-tag.cc    |   8 ++--
- test/test-buffer.c  |   4 +-
- test/test-common.c  |  79
- +++++++++++++++++++++++++++++---------------------
- test/test-ot-tag.c  |  22 +++++++-------
- util/hb-view.cc     |   6 ++--
- util/options.cc     |   5 +--
+ src/hb-common.cc    | 29 +++++++++++++-------
+ src/hb-common.h     | 12 +++++---
+ src/hb-graphite2.cc | 2 +-
+ src/hb-icu.cc      |  2 +-
+ src/hb-ot-tag.cc    | 8 +++---
+ test/test-buffer.c  | 4 +--
+ test/test-common.c  | 79
+ +++++++++++++++++++++++++++++++----------------------
+ test/test-ot-tag.c  | 22 +++++++--------
+ util/hb-view.cc     | 6 ++--
+ util/options.cc     | 5 +---
  10 files changed, 96 insertions(+), 73 deletions(-)
 
 commit a499bdea5cc5097dec62eeafdef58d08ba534be0
  10 files changed, 96 insertions(+), 73 deletions(-)
 
 commit a499bdea5cc5097dec62eeafdef58d08ba534be0
@@ -13750,8 +25315,8 @@ Date:   Thu Aug 25 22:46:21 2011 +0200
 
     [graphite2] Bail if grface is NULL
 
 
     [graphite2] Bail if grface is NULL
 
- src/hb-graphite2.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-graphite2.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3007ffa9e53e6100a761c2363f50a2b19a0764fc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3007ffa9e53e6100a761c2363f50a2b19a0764fc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13779,8 +25344,8 @@ Date:   Thu Aug 25 09:08:53 2011 +0200
     http://unicode.org/faq/normalization.html#8
     http://unicode.org/faq/normalization.html#9
 
     http://unicode.org/faq/normalization.html#8
     http://unicode.org/faq/normalization.html#9
 
- src/hb-ot-shape-private.hh |  18 +++++++++++++++++-
- 1 files changed, 17 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-private.hh | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
 
 commit 74ef81a0b0f9adddfb42c3cb87f08f8156054519
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 74ef81a0b0f9adddfb42c3cb87f08f8156054519
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13788,8 +25353,8 @@ Date:   Wed Aug 24 19:16:13 2011 +0200
 
     Fix make distcheck
 
 
     Fix make distcheck
 
- src/Makefile.am             |   15 ++++++++-------
- src/hb-gobject-enums.cc.tmpl |    2 +-
+ src/Makefile.am             | 15 ++++++++-------
+ src/hb-gobject-enums.cc.tmpl |  2 +-
  2 files changed, 9 insertions(+), 8 deletions(-)
 
 commit 24bcdbcc0639ca9e9c0fde1a71cbbf1c3d2ef98d
  2 files changed, 9 insertions(+), 8 deletions(-)
 
 commit 24bcdbcc0639ca9e9c0fde1a71cbbf1c3d2ef98d
@@ -13800,9 +25365,9 @@ Date:   Wed Aug 24 19:13:15 2011 +0200
 
     Oops!
 
 
     Oops!
 
- src/hb-ot-hmtx-table.hh |   86
- +++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 86 insertions(+), 0 deletions(-)
+ src/hb-ot-hmtx-table.hh | 86
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 86 insertions(+)
 
 commit a3bd8a0e1862212a2d4141b973039bd000a3054f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a3bd8a0e1862212a2d4141b973039bd000a3054f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13810,9 +25375,9 @@ Date:   Wed Aug 24 03:22:49 2011 +0200
 
     [graphite] Rewrite properly
 
 
     [graphite] Rewrite properly
 
- src/hb-graphite2.cc | 633
- ++++++++++++++++++++++-----------------------------
- src/hb-uniscribe.cc |   2 +
+ src/hb-graphite2.cc | 633
+ ++++++++++++++++++++++------------------------------
+ src/hb-uniscribe.cc |  2 +
  2 files changed, 273 insertions(+), 362 deletions(-)
 
 commit 5072934c35bddc23d6bcb07a41010da51eb1b090
  2 files changed, 273 insertions(+), 362 deletions(-)
 
 commit 5072934c35bddc23d6bcb07a41010da51eb1b090
@@ -13821,8 +25386,8 @@ Date:   Wed Aug 24 02:24:27 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-uniscribe.cc |  14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-uniscribe.cc | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 46377396accf6b43792ffba553dcd9847608aa86
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46377396accf6b43792ffba553dcd9847608aa86
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13830,8 +25395,8 @@ Date:   Wed Aug 24 02:12:05 2011 +0200
 
     [configure] Fix graphite bits
 
 
     [configure] Fix graphite bits
 
- configure.ac |    9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
+ configure.ac | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
 
 commit 71388b3ee71c7d3b79f842db7588bd683691797c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71388b3ee71c7d3b79f842db7588bd683691797c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13839,8 +25404,8 @@ Date:   Wed Aug 24 02:09:04 2011 +0200
 
     [uniscribe] Minor
 
 
     [uniscribe] Minor
 
- src/hb-uniscribe.cc |  19 +++++++++----------
- 1 files changed, 9 insertions(+), 10 deletions(-)
+ src/hb-uniscribe.cc | 19 +++++++++----------
+ 1 file changed, 9 insertions(+), 10 deletions(-)
 
 commit cd2b901027bd154e31aa509c0cb2d86633e36398
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd2b901027bd154e31aa509c0cb2d86633e36398
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13848,8 +25413,8 @@ Date:   Wed Aug 24 01:47:25 2011 +0200
 
     [graphite] Minor
 
 
     [graphite] Minor
 
- src/hb-graphite2.cc |  10 ++++------
- src/hb-shape.cc     |   1 -
+ src/hb-graphite2.cc | 10 ++++------
+ src/hb-shape.cc     | 1 -
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 834af3b48a1aca3e53811d1eb4ca09b582b8e598
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 834af3b48a1aca3e53811d1eb4ca09b582b8e598
@@ -13860,9 +25425,9 @@ Date:   Wed Aug 24 01:45:47 2011 +0200
 
     I don't see how this function can be useful.
 
 
     I don't see how this function can be useful.
 
- src/hb-graphite2.cc |  10 ----------
- src/hb-graphite2.h  |   2 --
- 2 files changed, 0 insertions(+), 12 deletions(-)
+ src/hb-graphite2.cc | 10 ----------
+ src/hb-graphite2.h  | 2 --
+ 2 files changed, 12 deletions(-)
 
 commit 1f49cf32c96cb45a4d8ba2c210aeb7a8076b4762
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1f49cf32c96cb45a4d8ba2c210aeb7a8076b4762
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13872,16 +25437,16 @@ Date: Wed Aug 24 01:29:25 2011 +0200
 
     To be modified, a lot.
 
 
     To be modified, a lot.
 
- configure.ac                     |    9 +-
- contrib/python/lib/harfbuzz.pyx   |   20 +-
- contrib/python/runpy             |    2 -
- contrib/python/scripts/hbtestfont |   4 +-
- contrib/python/setup.py          |   18 ++-
- src/Makefile.am                  |    7 +
- src/hb-graphite2.cc              |  446
- +++++++++++++++++++++++++++++++++++++
- src/hb-graphite2.h               |   47 ++++
- src/hb-shape.cc                  |    7 +
+ configure.ac                     |   9 +-
+ contrib/python/lib/harfbuzz.pyx   |  20 +-
+ contrib/python/runpy             |   2 -
+ contrib/python/scripts/hbtestfont |   4 +-
+ contrib/python/setup.py          |  18 +-
+ src/Makefile.am                  |   7 +
+ src/hb-graphite2.cc              | 446
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-graphite2.h               |  47 ++++
+ src/hb-shape.cc                  |   7 +
  9 files changed, 542 insertions(+), 18 deletions(-)
 
 commit 0e6d36d8a3f9f533cb6eb04408af62bfd1ad83da
  9 files changed, 542 insertions(+), 18 deletions(-)
 
 commit 0e6d36d8a3f9f533cb6eb04408af62bfd1ad83da
@@ -13890,11 +25455,11 @@ Date: Wed Aug 24 01:31:29 2011 +0200
 
     Minor
 
 
     Minor
 
- src/Makefile.am          |    2 +-
- src/hb-uniscribe-shape.cc |  454
- ---------------------------------------------
- src/hb-uniscribe.cc      |  454
- +++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am          |   2 +-
+ src/hb-uniscribe-shape.cc | 454
+ ----------------------------------------------
+ src/hb-uniscribe.cc      | 454
+ ++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 455 insertions(+), 455 deletions(-)
 
 commit efde8113258b117ec0a7fbffe6d681442d045c41
  3 files changed, 455 insertions(+), 455 deletions(-)
 
 commit efde8113258b117ec0a7fbffe6d681442d045c41
@@ -13905,8 +25470,8 @@ Date:   Tue Aug 23 00:04:57 2011 +0200
 
     Fixes build with MSVC.
 
 
     Fixes build with MSVC.
 
- src/hb-private.hh |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit d75333f166d21e9b9f2341c3bc8a9ef8a886f4b3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d75333f166d21e9b9f2341c3bc8a9ef8a886f4b3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13917,12 +25482,12 @@ Date: Fri Aug 19 19:59:24 2011 +0200
     need to figure out the naming.  The generated code doesn't have the
     right name.
 
     need to figure out the naming.  The generated code doesn't have the
     right name.
 
- configure.ac                |    2 +
- src/Makefile.am             |   13 ++++++--
- src/hb-gobject-enums.cc.tmpl |   74
- ++++++++++++++++++++++++++++++++++++++++++
- src/hb-gobject-structs.cc    |   63 +++++++++++++++++++++++++++++++++++
- src/hb-gobject.cc           |   63 -----------------------------------
+ configure.ac                |  2 ++
+ src/Makefile.am             | 13 ++++++--
+ src/hb-gobject-enums.cc.tmpl | 74
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-gobject-structs.cc    | 63 +++++++++++++++++++++++++++++++++++++
+ src/hb-gobject.cc           | 63 -------------------------------------
  5 files changed, 149 insertions(+), 66 deletions(-)
 
 commit 7d235d272f4c9213f54c9c807fb8fba5068c45b0
  5 files changed, 149 insertions(+), 66 deletions(-)
 
 commit 7d235d272f4c9213f54c9c807fb8fba5068c45b0
@@ -13931,8 +25496,8 @@ Date:   Wed Aug 17 23:55:29 2011 +0200
 
     Flesh out tt funcs a bit
 
 
     Flesh out tt funcs a bit
 
- src/hb-tt-font.cc |   36 +++++++++++++++++++++++++++++++++++-
- 1 files changed, 35 insertions(+), 1 deletions(-)
+ src/hb-tt-font.cc | 36 +++++++++++++++++++++++++++++++++++-
+ 1 file changed, 35 insertions(+), 1 deletion(-)
 
 commit b9415e76d7b41da203b9ae85e38b6dc777481184
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b9415e76d7b41da203b9ae85e38b6dc777481184
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13940,9 +25505,9 @@ Date:   Wed Aug 17 19:21:44 2011 +0200
 
     [API] Add hb_font_set_funcs_data()
 
 
     [API] Add hb_font_set_funcs_data()
 
- src/hb-font.cc |   15 +++++++++++++++
- src/hb-font.h |    6 ++++++
- 2 files changed, 21 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 15 +++++++++++++++
+ src/hb-font.h |  6 ++++++
+ 2 files changed, 21 insertions(+)
 
 commit e6c09cdf43201ff1b7f38e411ae1f9977e4f9271
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6c09cdf43201ff1b7f38e411ae1f9977e4f9271
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13959,14 +25524,14 @@ Date: Wed Aug 17 19:07:59 2011 +0200
     makes the
     API cleaner.
 
     makes the
     API cleaner.
 
- src/hb-buffer.cc         |    7 +------
- src/hb-buffer.h          |    2 +-
- src/test.cc              |    2 +-
- test/test-buffer.c       |    9 ++++-----
- test/test-object.c       |    4 ++--
- test/test-shape-complex.c |   2 +-
- test/test-shape.c        |    2 +-
- util/hb-view.cc          |    2 +-
+ src/hb-buffer.cc         | 7 +------
+ src/hb-buffer.h          | 2 +-
+ src/test.cc              | 2 +-
+ test/test-buffer.c       | 9 ++++-----
+ test/test-object.c       | 4 ++--
+ test/test-shape-complex.c | 2 +-
+ test/test-shape.c        | 2 +-
+ util/hb-view.cc          | 2 +-
  8 files changed, 12 insertions(+), 18 deletions(-)
 
 commit 187bdeaa6c82fcb95fdd546da9c78b843e1dea0e
  8 files changed, 12 insertions(+), 18 deletions(-)
 
 commit 187bdeaa6c82fcb95fdd546da9c78b843e1dea0e
@@ -13975,9 +25540,9 @@ Date:   Wed Aug 17 19:03:06 2011 +0200
 
     Do (nothing for) hmtx sanitize
 
 
     Do (nothing for) hmtx sanitize
 
- src/hb-ot-hhea-table.hh |    1 -
- src/hb-tt-font.cc      |    1 +
- 2 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-hhea-table.hh | 1 -
+ src/hb-tt-font.cc      | 1 +
+ 2 files changed, 1 insertion(+), 1 deletion(-)
 
 commit d6016e49108be183ab2dc9c226447d1db3a09b90
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d6016e49108be183ab2dc9c226447d1db3a09b90
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13985,8 +25550,8 @@ Date:   Wed Aug 17 14:47:41 2011 +0200
 
     Fix name-table sanitize
 
 
     Fix name-table sanitize
 
- src/hb-ot-name-table.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-name-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit ae9877dea6a1aed3566d9b87a75ede84259deaca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae9877dea6a1aed3566d9b87a75ede84259deaca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -13994,17 +25559,17 @@ Date: Wed Aug 17 14:43:45 2011 +0200
 
     Add hhea-table support
 
 
     Add hhea-table support
 
- src/Makefile.am               |    1 +
- src/hb-open-type-private.hh   |    6 +
- src/hb-ot-head-table.hh       |    2 +-
- src/hb-ot-hhea-table.hh       |   93 ++++++++++++++++++
- src/hb-ot-layout-gdef-table.hh |    2 +-
- src/hb-ot-layout-gpos-table.hh |    2 +-
- src/hb-ot-layout-gsub-table.hh |    2 +-
- src/hb-ot-maxp-table.hh       |    2 +-
- src/hb-ot-name-table.hh       |    3 +-
- src/hb-tt-font.cc             |  207
- ++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am               |   1 +
+ src/hb-open-type-private.hh   |   6 ++
+ src/hb-ot-head-table.hh       |   2 +-
+ src/hb-ot-hhea-table.hh       |  93 ++++++++++++++++++
+ src/hb-ot-layout-gdef-table.hh |   2 +-
+ src/hb-ot-layout-gpos-table.hh |   2 +-
+ src/hb-ot-layout-gsub-table.hh |   2 +-
+ src/hb-ot-maxp-table.hh       |   2 +-
+ src/hb-ot-name-table.hh       |   3 +-
+ src/hb-tt-font.cc             | 207
+ +++++++++++++++++++++++++++++++++++++++++
  10 files changed, 314 insertions(+), 6 deletions(-)
 
 commit 7a750ac33ec482e2c4856c19ea607f3563741c24
  10 files changed, 314 insertions(+), 6 deletions(-)
 
 commit 7a750ac33ec482e2c4856c19ea607f3563741c24
@@ -14044,9 +25609,9 @@ Date:   Mon Aug 15 20:41:59 2011 +0200
     Using graphite2's comparerenderer suggests that this makes hb-ft 15
     times faster.  No caching layer needed anymore.
 
     Using graphite2's comparerenderer suggests that this makes hb-ft 15
     times faster.  No caching layer needed anymore.
 
- configure.ac  |    2 +-
- src/hb-ft.cc  |   19 +++++++++++++------
- util/common.hh |    4 +++-
+ configure.ac  |  2 +-
+ src/hb-ft.cc  | 19 +++++++++++++------
+ util/common.hh |  4 +++-
  3 files changed, 17 insertions(+), 8 deletions(-)
 
 commit 97796453aab56873809a15b5e316cba8acea7449
  3 files changed, 17 insertions(+), 8 deletions(-)
 
 commit 97796453aab56873809a15b5e316cba8acea7449
@@ -14055,8 +25620,8 @@ Date:   Mon Aug 15 19:03:43 2011 +0200
 
     Fix falloffs of the GOption conversion
 
 
     Fix falloffs of the GOption conversion
 
- util/options.cc |    8 ++++----
- util/options.hh |    4 ++--
+ util/options.cc | 8 ++++----
+ util/options.hh | 4 ++--
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4e9ff1dd6ee3ea63fd91a76a91d9725a10a294a0
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4e9ff1dd6ee3ea63fd91a76a91d9725a10a294a0
@@ -14068,8 +25633,8 @@ Date:   Mon Aug 15 16:21:22 2011 +0200
     We do a conservative estimate of the number of characters, but still,
     this limits the number of buffer reallocs to a small constant.
 
     We do a conservative estimate of the number of characters, but still,
     this limits the number of buffer reallocs to a small constant.
 
- src/hb-buffer.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 553bc3de82cfda8d83db26a93205e0d39440cbd1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 553bc3de82cfda8d83db26a93205e0d39440cbd1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14077,8 +25642,8 @@ Date:   Mon Aug 15 16:21:06 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-ft.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ft.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 254142bb67a5c520a304142301479eb5292592d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 254142bb67a5c520a304142301479eb5292592d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14086,8 +25651,8 @@ Date:   Mon Aug 15 16:15:44 2011 +0200
 
     [ft] FT_Select_Charmap() when we create face
 
 
     [ft] FT_Select_Charmap() when we create face
 
- src/hb-ft.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ft.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit a4cbd03dd17990783d8fd4c6be0c9c0d3d9cae5b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a4cbd03dd17990783d8fd4c6be0c9c0d3d9cae5b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14101,8 +25666,8 @@ Date:   Mon Aug 15 09:52:05 2011 +0200
     Mozilla Bug 667166 - wrong shape of letter when it comes at the end of
     word in the arabic version of Firefox 5.0
 
     Mozilla Bug 667166 - wrong shape of letter when it comes at the end of
     word in the arabic version of Firefox 5.0
 
- src/hb-ot-shape-complex-arabic.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit c214cff55ce539d004d069a484dac3988953cb11
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c214cff55ce539d004d069a484dac3988953cb11
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14110,14 +25675,14 @@ Date: Sun Aug 14 15:17:16 2011 +0200
 
     Start adding gobject-introspection support
 
 
     Start adding gobject-introspection support
 
- configure.ac     |   13 +++++++++-
- src/Makefile.am   |   43 ++++++++++++++------------------
- src/hb-common.h   |   1 +
- src/hb-glib.cc    |   3 --
- src/hb-gobject.cc |   63
- +++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-gobject.h  |   68
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac     | 13 ++++++++++-
+ src/Makefile.am   | 43 ++++++++++++++++-------------------
+ src/hb-common.h   |  1 +
+ src/hb-glib.cc    |  3 ---
+ src/hb-gobject.cc | 63
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-gobject.h  | 68
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6 files changed, 163 insertions(+), 28 deletions(-)
 
 commit 9527fb200ffbbd839334e99b51d9671752d393db
  6 files changed, 163 insertions(+), 28 deletions(-)
 
 commit 9527fb200ffbbd839334e99b51d9671752d393db
@@ -14126,8 +25691,8 @@ Date:   Sat Aug 13 19:03:48 2011 +0200
 
     Fix missing return
 
 
     Fix missing return
 
- src/hb-ft.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ft.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 77a328769545f6b2970d8491fe77fe98781961cf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 77a328769545f6b2970d8491fe77fe98781961cf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14135,8 +25700,8 @@ Date:   Sat Aug 13 17:16:45 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-common.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-common.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3bb300ee78a40f9ded21ab19283863b733aeb677
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3bb300ee78a40f9ded21ab19283863b733aeb677
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14144,13 +25709,13 @@ Date: Thu Aug 11 11:54:31 2011 +0200
 
     Refactor hb-view code
 
 
     Refactor hb-view code
 
- util/Makefile.am |   26 ++++-
- util/common.cc   |   40 ++++++
- util/common.hh   |   49 +++++++
- util/hb-view.cc  |  387
- ++++--------------------------------------------------
- util/options.cc  |  318 ++++++++++++++++++++++++++++++++++++++++++++
- util/options.hh  |   86 ++++++++++++
+ util/Makefile.am |  26 +++-
+ util/common.cc   |  40 ++++++
+ util/common.hh   |  49 +++++++
+ util/hb-view.cc  | 387
+ ++++---------------------------------------------------
+ util/options.cc  | 318 +++++++++++++++++++++++++++++++++++++++++++++
+ util/options.hh  |  86 +++++++++++++
  6 files changed, 541 insertions(+), 365 deletions(-)
 
 commit d6660356dd81358033743f72d8a5fbf2fc70eaf7
  6 files changed, 541 insertions(+), 365 deletions(-)
 
 commit d6660356dd81358033743f72d8a5fbf2fc70eaf7
@@ -14159,8 +25724,8 @@ Date:   Wed Aug 10 22:08:36 2011 +0200
 
     Add uniscribe font getters
 
 
     Add uniscribe font getters
 
- src/hb-uniscribe-shape.cc |   24 +++++++++++++++++++++---
- src/hb-uniscribe.h       |    8 ++++++++
+ src/hb-uniscribe-shape.cc | 24 +++++++++++++++++++++---
+ src/hb-uniscribe.h       |  8 ++++++++
  2 files changed, 29 insertions(+), 3 deletions(-)
 
 commit 01ec13a1d9ae380305b593e1c52cebb0e8327cb6
  2 files changed, 29 insertions(+), 3 deletions(-)
 
 commit 01ec13a1d9ae380305b593e1c52cebb0e8327cb6
@@ -14169,9 +25734,9 @@ Date:   Wed Aug 10 22:00:35 2011 +0200
 
     Implement hb_ft_font_get_face
 
 
     Implement hb_ft_font_get_face
 
- src/hb-ft.cc |   15 ++++++++++++++-
- src/hb-ft.h  |    2 ++
- 2 files changed, 16 insertions(+), 1 deletions(-)
+ src/hb-ft.cc | 15 ++++++++++++++-
+ src/hb-ft.h  |  2 ++
+ 2 files changed, 16 insertions(+), 1 deletion(-)
 
 commit 36a4fe037df201f85b7a544eb30d75dc3585a1b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 36a4fe037df201f85b7a544eb30d75dc3585a1b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14179,8 +25744,8 @@ Date:   Wed Aug 10 21:54:22 2011 +0200
 
     Fix charset conversion
 
 
     Fix charset conversion
 
- util/hb-view.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ util/hb-view.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 25c4830593064f023e296aa795b72ddcaa1c9322
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 25c4830593064f023e296aa795b72ddcaa1c9322
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14190,9 +25755,9 @@ Date:   Wed Aug 10 16:28:38 2011 +0200
 
     If the specified shapers fail, hb-shape will fail immediately
 
 
     If the specified shapers fail, hb-shape will fail immediately
 
- util/hb-view.cc |   57
- +++++++++++++++++++++++++++++++-----------------------
- 1 files changed, 33 insertions(+), 24 deletions(-)
+ util/hb-view.cc | 57
+ +++++++++++++++++++++++++++++++++------------------------
+ 1 file changed, 33 insertions(+), 24 deletions(-)
 
 commit 0501573deda3a8dcdfcea491392f554f21ed0154
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0501573deda3a8dcdfcea491392f554f21ed0154
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14200,14 +25765,14 @@ Date: Wed Aug 10 16:25:56 2011 +0200
 
     Fix const correctness in the API
 
 
     Fix const correctness in the API
 
- src/hb-fallback-shape-private.hh |    2 +-
- src/hb-fallback-shape.cc        |    2 +-
- src/hb-ot-shape.cc              |    2 +-
- src/hb-ot-shape.h               |    2 +-
- src/hb-shape.cc                 |   14 +++++++-------
- src/hb-shape.h                          |   12 ++++++------
- src/hb-uniscribe-shape.cc       |    2 +-
- src/hb-uniscribe.h              |    2 +-
+ src/hb-fallback-shape-private.hh |  2 +-
+ src/hb-fallback-shape.cc        |  2 +-
+ src/hb-ot-shape.cc              |  2 +-
+ src/hb-ot-shape.h               |  2 +-
+ src/hb-shape.cc                 | 14 +++++++-------
+ src/hb-shape.h                          | 12 ++++++------
+ src/hb-uniscribe-shape.cc       |  2 +-
+ src/hb-uniscribe.h              |  2 +-
  8 files changed, 19 insertions(+), 19 deletions(-)
 
 commit a21add6c0da067173d51792d716d6e38379f138f
  8 files changed, 19 insertions(+), 19 deletions(-)
 
 commit a21add6c0da067173d51792d716d6e38379f138f
@@ -14216,8 +25781,8 @@ Date:   Wed Aug 10 16:07:49 2011 +0200
 
     Reformat
 
 
     Reformat
 
- util/hb-view.cc |   49 ++++++++++++++++++-------------------------------
- 1 files changed, 18 insertions(+), 31 deletions(-)
+ util/hb-view.cc | 49 ++++++++++++++++++-------------------------------
+ 1 file changed, 18 insertions(+), 31 deletions(-)
 
 commit 8df90c81187db58eee6b90426cd16c32feef6be3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8df90c81187db58eee6b90426cd16c32feef6be3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14225,9 +25790,9 @@ Date:   Wed Aug 10 15:26:41 2011 +0200
 
     [util] Port hb-view to GOption
 
 
     [util] Port hb-view to GOption
 
- util/hb-view.cc |  267
- ++++++++++++++++++++++++++++++++-----------------------
- 1 files changed, 156 insertions(+), 111 deletions(-)
+ util/hb-view.cc | 267
+ +++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 156 insertions(+), 111 deletions(-)
 
 commit 511a136f0c092880b19250a5df53bcf9f4b043ca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 511a136f0c092880b19250a5df53bcf9f4b043ca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14235,14 +25800,14 @@ Date: Tue Aug 9 15:03:00 2011 +0200
 
     Move hb-view into util/
 
 
     Move hb-view into util/
 
- Makefile.am     |    3 +-
- configure.ac    |    1 +
- src/Makefile.am  |   13 --
- src/hb-view.cc   |  568
- ------------------------------------------------------
- util/Makefile.am |   24 +++
- util/hb-view.cc  |  568
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Makefile.am     |   3 +-
+ configure.ac    |   1 +
+ src/Makefile.am  |  13 --
+ src/hb-view.cc   | 568
+ -------------------------------------------------------
+ util/Makefile.am |  24 +++
+ util/hb-view.cc  | 568
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6 files changed, 594 insertions(+), 583 deletions(-)
 
 commit d753ac78da5619a0a545cdaf7a8e65787e996570
  6 files changed, 594 insertions(+), 583 deletions(-)
 
 commit d753ac78da5619a0a545cdaf7a8e65787e996570
@@ -14251,8 +25816,8 @@ Date:   Tue Aug 9 14:03:12 2011 +0200
 
     [uniscribe] Remove zerowidth glyphs from output
 
 
     [uniscribe] Remove zerowidth glyphs from output
 
- src/hb-uniscribe-shape.cc |   7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ src/hb-uniscribe-shape.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit 217cc81cd9c3de30b2ef226983ec43c0f78b5c7d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 217cc81cd9c3de30b2ef226983ec43c0f78b5c7d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14260,8 +25825,8 @@ Date:   Tue Aug 9 14:00:44 2011 +0200
 
     [test/shape-complex] Print cluster and position info in --verbose
 
 
     [test/shape-complex] Print cluster and position info in --verbose
 
- test/test-shape-complex.c |   20 +++++++++++++++++---
- 1 files changed, 17 insertions(+), 3 deletions(-)
+ test/test-shape-complex.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
 
 commit 708403e7f3e4a5cf9b0d2bd764fb74b148af7adb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 708403e7f3e4a5cf9b0d2bd764fb74b148af7adb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14269,8 +25834,8 @@ Date:   Tue Aug 9 13:52:36 2011 +0200
 
     Fix warnings with old glib
 
 
     Fix warnings with old glib
 
- test/hb-test.h |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ test/hb-test.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit ddd247b0c528cdb8bdf5f8063180abe884afa305
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ddd247b0c528cdb8bdf5f8063180abe884afa305
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14278,8 +25843,8 @@ Date:   Tue Aug 9 11:44:42 2011 +0200
 
     Minor
 
 
     Minor
 
- src/test.cc |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/test.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 1b8196c98638ba05ae0ebcb8ba7aa99ed9c08e0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1b8196c98638ba05ae0ebcb8ba7aa99ed9c08e0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14287,8 +25852,8 @@ Date:   Tue Aug 9 11:37:46 2011 +0200
 
     Add fallback shaper
 
 
     Add fallback shaper
 
- src/hb-fallback-shape.cc |   23 +++++++++++++++++++++--
- 1 files changed, 21 insertions(+), 2 deletions(-)
+ src/hb-fallback-shape.cc | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
 
 commit 13a601fe99f237b08b7166448e386eaea0b77294
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13a601fe99f237b08b7166448e386eaea0b77294
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14296,8 +25861,8 @@ Date:   Tue Aug 9 11:36:54 2011 +0200
 
     [FT] Don't make font immutable
 
 
     [FT] Don't make font immutable
 
- src/hb-ft.cc |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ft.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 38b2118724600521c6ad1e49df0667dcdf863634
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 38b2118724600521c6ad1e49df0667dcdf863634
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14313,13 +25878,13 @@ Date: Tue Aug 9 10:51:24 2011 +0200
     then call this on the font (after having set font scale).  This
     internally creates an FT_Face and attached to the font.
 
     then call this on the font (after having set font scale).  This
     internally creates an FT_Face and attached to the font.
 
- src/Makefile.am    |   4 +-
- src/hb-ft.cc      |   76
- +++++++++++++++++++++++++++++++++++++++++++++++++--
- src/hb-ft.h       |   10 +++++--
- src/test.cc       |    7 +++++
- test/Makefile.am   |   8 -----
- test/test-object.c |   9 ------
+ src/Makefile.am    |  4 +--
+ src/hb-ft.cc      | 76
+ +++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/hb-ft.h       | 10 ++++---
+ src/test.cc       |  7 +++++
+ test/Makefile.am   |  8 ------
+ test/test-object.c |  9 -------
  6 files changed, 89 insertions(+), 25 deletions(-)
 
 commit 255f176fdcd42ab94f9c3c54e2bffb55d0b1a8f5
  6 files changed, 89 insertions(+), 25 deletions(-)
 
 commit 255f176fdcd42ab94f9c3c54e2bffb55d0b1a8f5
@@ -14328,8 +25893,8 @@ Date:   Tue Aug 9 08:35:07 2011 +0200
 
     Minor
 
 
     Minor
 
- src/hb-uniscribe-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-uniscribe-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a9057eb3f38018faa1ece53c4aaeeba798b41fd1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a9057eb3f38018faa1ece53c4aaeeba798b41fd1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14337,8 +25902,8 @@ Date:   Tue Aug 9 00:47:55 2011 +0200
 
     [uniscribe] Unbreak
 
 
     [uniscribe] Unbreak
 
- src/hb-uniscribe-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-uniscribe-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit c0975e12315b7167b92411584d2f00a751bbc204
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c0975e12315b7167b92411584d2f00a751bbc204
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14346,8 +25911,8 @@ Date:   Tue Aug 9 00:46:18 2011 +0200
 
     Fix build again
 
 
     Fix build again
 
- test/Makefile.am |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ test/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 33ccc77902660ed4b49184e5ec99f4fd0ef63175
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 33ccc77902660ed4b49184e5ec99f4fd0ef63175
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14358,20 +25923,20 @@ Date: Tue Aug 9 00:43:24 2011 +0200
     We need this to set data on objects safely without worrying that some
     other thread unsets it by setting it at the same time.
 
     We need this to set data on objects safely without worrying that some
     other thread unsets it by setting it at the same time.
 
- src/hb-blob.cc                   |    5 +++--
- src/hb-blob.h            |    3 ++-
- src/hb-buffer.cc         |    5 +++--
- src/hb-buffer.h          |    3 ++-
- src/hb-common.cc         |   13 ++++++++-----
- src/hb-font.cc                   |   15 +++++++++------
- src/hb-font.h            |    9 ++++++---
- src/hb-object-private.hh  |   13 ++++++++-----
- src/hb-private.hh        |   16 +++++++++++-----
- src/hb-shape.cc          |    2 +-
- src/hb-unicode.cc        |    5 +++--
- src/hb-unicode.h         |    3 ++-
- src/hb-uniscribe-shape.cc |   18 ++++++++++++++----
- test/test-object.c       |   33 +++++++++++++++++----------------
+ src/hb-blob.cc                   |  5 +++--
+ src/hb-blob.h            |  3 ++-
+ src/hb-buffer.cc         |  5 +++--
+ src/hb-buffer.h          |  3 ++-
+ src/hb-common.cc         | 13 ++++++++-----
+ src/hb-font.cc                   | 15 +++++++++------
+ src/hb-font.h            |  9 ++++++---
+ src/hb-object-private.hh  | 13 ++++++++-----
+ src/hb-private.hh        | 16 +++++++++++-----
+ src/hb-shape.cc          |  2 +-
+ src/hb-unicode.cc        |  5 +++--
+ src/hb-unicode.h         |  3 ++-
+ src/hb-uniscribe-shape.cc | 18 ++++++++++++++----
+ test/test-object.c       | 33 +++++++++++++++++----------------
  14 files changed, 89 insertions(+), 54 deletions(-)
 
 commit 944b2ba1ce076385f985212bbdf2df96a8a995f0
  14 files changed, 89 insertions(+), 54 deletions(-)
 
 commit 944b2ba1ce076385f985212bbdf2df96a8a995f0
@@ -14382,10 +25947,10 @@ Date: Tue Aug 9 00:23:58 2011 +0200
 
     Since we already switched to accepting -1 as 'zero-terminated'.
 
 
     Since we already switched to accepting -1 as 'zero-terminated'.
 
- src/hb-buffer.cc    |  12 ++++++------
- src/hb-buffer.h     |  12 ++++++------
- src/hb-ot-layout.cc |   2 --
- src/main.cc        |    1 -
+ src/hb-buffer.cc    | 12 ++++++------
+ src/hb-buffer.h     | 12 ++++++------
+ src/hb-ot-layout.cc | 2 --
+ src/main.cc        |  1 -
  4 files changed, 12 insertions(+), 15 deletions(-)
 
 commit de1e1cf9bccfd116d495804e230dc2e12b733a2d
  4 files changed, 12 insertions(+), 15 deletions(-)
 
 commit de1e1cf9bccfd116d495804e230dc2e12b733a2d
@@ -14394,8 +25959,8 @@ Date:   Tue Aug 9 00:19:38 2011 +0200
 
     [FT] Adapt to new face API
 
 
     [FT] Adapt to new face API
 
- src/hb-ft.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ft.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 458c89a85695220d43b69dbae36fc93e3fe78d89
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 458c89a85695220d43b69dbae36fc93e3fe78d89
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14403,8 +25968,8 @@ Date:   Tue Aug 9 00:19:19 2011 +0200
 
     Minor
 
 
     Minor
 
- test/test-c.c |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ test/test-c.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit bf3eef540f81fdeba1c36263d7d5b2ec4c5f07b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bf3eef540f81fdeba1c36263d7d5b2ec4c5f07b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14412,9 +25977,9 @@ Date:   Tue Aug 9 00:13:24 2011 +0200
 
     [uniscribe] Cleanup backend
 
 
     [uniscribe] Cleanup backend
 
- TODO                     |    2 +
- src/hb-uniscribe-shape.cc |  161
- ++++++++++++++++++++++++++++++++++-----------
+ TODO                     |   2 +
+ src/hb-uniscribe-shape.cc | 161
+ ++++++++++++++++++++++++++++++++++------------
  2 files changed, 123 insertions(+), 40 deletions(-)
 
 commit f1f848e2e46ac54ff08aca7cd83390af31c7c9ef
  2 files changed, 123 insertions(+), 40 deletions(-)
 
 commit f1f848e2e46ac54ff08aca7cd83390af31c7c9ef
@@ -14423,8 +25988,8 @@ Date:   Mon Aug 8 23:41:06 2011 +0200
 
     Fix build
 
 
     Fix build
 
- test/Makefile.am |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ test/Makefile.am | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit 3897335c7620c37e9a0224b0c42ade0dfdce4053
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3897335c7620c37e9a0224b0c42ade0dfdce4053
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14439,14 +26004,14 @@ Date: Mon Aug 8 23:37:41 2011 +0200
 
     hb_face_set_upem() added.
 
 
     hb_face_set_upem() added.
 
- src/hb-font-private.hh      |   3 +-
- src/hb-font.cc                     |   67
- ++++++++++++++++++++++++++++++++++---------
- src/hb-font.h              |   17 +++++++++--
- src/hb-ft.cc               |    3 +-
- src/hb-ot-layout-private.hh |   9 ------
- src/hb-ot-layout.cc        |   21 -------------
- src/hb-uniscribe-shape.cc   |   3 +-
+ src/hb-font-private.hh      | 3 +-
+ src/hb-font.cc                     | 67
+ +++++++++++++++++++++++++++++++++++----------
+ src/hb-font.h              | 17 ++++++++++--
+ src/hb-ft.cc               |  3 +-
+ src/hb-ot-layout-private.hh | 9 ------
+ src/hb-ot-layout.cc        | 21 --------------
+ src/hb-uniscribe-shape.cc   | 3 +-
  7 files changed, 72 insertions(+), 51 deletions(-)
 
 commit e715784be35f0846c0e084b7c53c7556ce933a45
  7 files changed, 72 insertions(+), 51 deletions(-)
 
 commit e715784be35f0846c0e084b7c53c7556ce933a45
@@ -14455,10 +26020,10 @@ Date: Mon Aug 8 21:42:02 2011 +0200
 
     Rename get_table to reference_table in all API
 
 
     Rename get_table to reference_table in all API
 
- src/hb-font-private.hh |    6 +++---
- src/hb-font.cc                |   20 ++++++++++----------
- src/hb-font.h         |    8 ++++----
- src/hb-ft.cc          |    4 ++--
+ src/hb-font-private.hh |  6 +++---
+ src/hb-font.cc                | 20 ++++++++++----------
+ src/hb-font.h         |  8 ++++----
+ src/hb-ft.cc          |  4 ++--
  4 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 670c873499f7f03fdfc07b8a0567b041628c6ab0
  4 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 670c873499f7f03fdfc07b8a0567b041628c6ab0
@@ -14467,9 +26032,9 @@ Date:   Mon Aug 8 21:36:24 2011 +0200
 
     Fix shaper ordering logic
 
 
     Fix shaper ordering logic
 
- src/hb-shape.cc |   80
- +++++++++++++++++++++++-------------------------------
- 1 files changed, 34 insertions(+), 46 deletions(-)
+ src/hb-shape.cc | 80
+ ++++++++++++++++++++++++---------------------------------
+ 1 file changed, 34 insertions(+), 46 deletions(-)
 
 commit cc797e0d5368b2f5732d77eb3e3882283bd87cf7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc797e0d5368b2f5732d77eb3e3882283bd87cf7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14477,8 +26042,8 @@ Date:   Mon Aug 8 03:49:30 2011 +0200
 
     Minor
 
 
     Minor
 
- TODO           |    2 --
- src/hb-shape.cc |    2 ++
+ TODO           | 2 --
+ src/hb-shape.cc | 2 ++
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 826e22732dd8697600a1392f48af21b7b3ce6271
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 826e22732dd8697600a1392f48af21b7b3ce6271
@@ -14487,8 +26052,8 @@ Date:   Sun Aug 7 03:53:42 2011 -0400
 
     [uniscribe] Fix blob lifecycles
 
 
     [uniscribe] Fix blob lifecycles
 
- src/hb-uniscribe-shape.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-uniscribe-shape.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit ff199ba356f0eb5bc6252203eea18a1d1fd28934
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ff199ba356f0eb5bc6252203eea18a1d1fd28934
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14496,8 +26061,8 @@ Date:   Sun Aug 7 03:43:46 2011 -0400
 
     Fix shaper_list manipulation, aaaaaaaaaaaaargh
 
 
     Fix shaper_list manipulation, aaaaaaaaaaaaargh
 
- src/hb-shape.cc |   16 +++++++++-------
- 1 files changed, 9 insertions(+), 7 deletions(-)
+ src/hb-shape.cc | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
 
 commit 206e32934592b915b1f3052aecf014c6ced729e1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 206e32934592b915b1f3052aecf014c6ced729e1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14506,8 +26071,8 @@ Date:   Sun Aug 7 01:10:55 2011 -0400
     [test] test-object is not FreeType-specific, move it to the right
     place
 
     [test] test-object is not FreeType-specific, move it to the right
     place
 
- test/Makefile.am |    8 +++-----
- 1 files changed, 3 insertions(+), 5 deletions(-)
+ test/Makefile.am | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
 
 commit 577326b86af80cc137eea81f4cc1e30adf9232b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 577326b86af80cc137eea81f4cc1e30adf9232b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14515,8 +26080,8 @@ Date:   Sun Aug 7 01:04:40 2011 -0400
 
     [uniscribe] Fix cluster calculation
 
 
     [uniscribe] Fix cluster calculation
 
- src/hb-uniscribe-shape.cc |   6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-uniscribe-shape.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit f6d83b2dcf120f9d6f0a28c6f5de2da7addf9089
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f6d83b2dcf120f9d6f0a28c6f5de2da7addf9089
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14524,8 +26089,8 @@ Date:   Sun Aug 7 00:59:58 2011 -0400
 
     Minor
 
 
     Minor
 
- src/test.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/test.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 2eb474afb4a09f4da8f14b444bd6066769010224
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2eb474afb4a09f4da8f14b444bd6066769010224
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14535,8 +26100,8 @@ Date:   Sun Aug 7 00:59:38 2011 -0400
 
     It's kinda working finally!
 
 
     It's kinda working finally!
 
- src/hb-uniscribe-shape.cc |   9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/hb-uniscribe-shape.cc | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit f22e661147691ebc9d531aa28a850988e6503f9b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f22e661147691ebc9d531aa28a850988e6503f9b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14544,8 +26109,8 @@ Date:   Sun Aug 7 00:59:12 2011 -0400
 
     [glib] Protect against invalid characters
 
 
     [glib] Protect against invalid characters
 
- src/hb-glib.cc |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-glib.cc | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 144cd49a0eb3ccc749325d0ee14b3ebf4367c971
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 144cd49a0eb3ccc749325d0ee14b3ebf4367c971
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14556,8 +26121,8 @@ Date:   Sun Aug 7 00:51:50 2011 -0400
     A -1 text_length means: zero-terminated string.
     A -1 item_length means: to the end of string.
 
     A -1 text_length means: zero-terminated string.
     A -1 item_length means: to the end of string.
 
- src/hb-buffer.cc |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit e9c71fab30fd1d5b163c8a072f9e2d3eb8ba3a92
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e9c71fab30fd1d5b163c8a072f9e2d3eb8ba3a92
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14567,9 +26132,9 @@ Date:   Sun Aug 7 00:00:27 2011 -0400
 
     Oops!
 
 
     Oops!
 
- src/hb-ot-name-private.hh |   2 +-
- src/hb-uniscribe-shape.cc |   2 ++
- 2 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-name-private.hh | 2 +-
+ src/hb-uniscribe-shape.cc | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
 
 commit 3fd2b5bece28c81e3e379352f09eee39d19ac372
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3fd2b5bece28c81e3e379352f09eee39d19ac372
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14577,8 +26142,8 @@ Date:   Sat Aug 6 22:59:54 2011 -0400
 
     [uniscribe] Use font size directly
 
 
     [uniscribe] Use font size directly
 
- src/hb-uniscribe-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-uniscribe-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 892eb2e462b40451b8f73879eab66310d884386a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 892eb2e462b40451b8f73879eab66310d884386a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14588,9 +26153,9 @@ Date:   Sat Aug 6 22:06:52 2011 -0400
 
     Not tested yet.
 
 
     Not tested yet.
 
- src/hb-ot-name-private.hh |   37 +++++++++++++++++++++++++++++++++++++
- src/hb-uniscribe-shape.cc |   30 +++++++++++++++++++++++-------
- src/test.cc              |    1 -
+ src/hb-ot-name-private.hh | 37 +++++++++++++++++++++++++++++++++++++
+ src/hb-uniscribe-shape.cc | 30 +++++++++++++++++++++++-------
+ src/test.cc              |  1 -
  3 files changed, 60 insertions(+), 8 deletions(-)
 
 commit b492299eb3c398701557e452f6c2c9bd370fbbf3
  3 files changed, 60 insertions(+), 8 deletions(-)
 
 commit b492299eb3c398701557e452f6c2c9bd370fbbf3
@@ -14599,10 +26164,10 @@ Date: Fri Aug 5 20:34:50 2011 -0400
 
     Start implementing the 'name' table
 
 
     Start implementing the 'name' table
 
- src/Makefile.am          |    3 +-
- src/hb-ot-name-private.hh |   91
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-uniscribe-shape.cc |   12 +++--
+ src/Makefile.am          |  3 +-
+ src/hb-ot-name-private.hh | 91
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-uniscribe-shape.cc | 12 ++++---
  3 files changed, 100 insertions(+), 6 deletions(-)
 
 commit 4538efacca84329a60ff69851de70027d9b4f567
  3 files changed, 100 insertions(+), 6 deletions(-)
 
 commit 4538efacca84329a60ff69851de70027d9b4f567
@@ -14613,8 +26178,8 @@ Date:   Fri Aug 5 20:11:06 2011 -0400
 
     automake test runner understands this.
 
 
     automake test runner understands this.
 
- src/check-internal-symbols.sh |    3 ++-
- src/check-libstdc++.sh        |    3 ++-
+ src/check-internal-symbols.sh | 3 ++-
+ src/check-libstdc++.sh        | 3 ++-
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 54eb65538da0a6ab0389d09944c90e12a913157d
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 54eb65538da0a6ab0389d09944c90e12a913157d
@@ -14623,8 +26188,8 @@ Date:   Fri Aug 5 20:09:25 2011 -0400
 
     Fix check on OS X sh
 
 
     Fix check on OS X sh
 
- src/check-header-guards.sh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/check-header-guards.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9da554504e30a326fc57b28cdb0e57108bfa9555
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9da554504e30a326fc57b28cdb0e57108bfa9555
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14632,11 +26197,11 @@ Date: Fri Aug 5 19:48:49 2011 -0400
 
     Add hb_shape_list_shapers()
 
 
     Add hb_shape_list_shapers()
 
- src/hb-shape.cc   |   22 ++++++++++++++++++----
- src/hb-shape.h    |   3 +++
- test/Makefile.am  |   2 ++
- test/test-c.c    |    8 ++++++++
- test/test-shape.c |   15 +++++++++++++++
+ src/hb-shape.cc   | 22 ++++++++++++++++++----
+ src/hb-shape.h    |  3 +++
+ test/Makefile.am  |  2 ++
+ test/test-c.c    |  8 ++++++++
+ test/test-shape.c | 15 +++++++++++++++
  5 files changed, 46 insertions(+), 4 deletions(-)
 
 commit d7bf473ef222ab420456ff155ffaa09bacb3a394
  5 files changed, 46 insertions(+), 4 deletions(-)
 
 commit d7bf473ef222ab420456ff155ffaa09bacb3a394
@@ -14645,8 +26210,8 @@ Date:   Fri Aug 5 18:18:21 2011 -0400
 
     Minor
 
 
     Minor
 
- src/check-header-guards.sh  |   1 -
- src/hb-open-type-private.hh |  10 +++++-----
+ src/check-header-guards.sh  | 1 -
+ src/hb-open-type-private.hh | 10 +++++-----
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit c62a8f10f3b9a4ac3ac6b686464ac734ebfa2f7f
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit c62a8f10f3b9a4ac3ac6b686464ac734ebfa2f7f
@@ -14655,8 +26220,8 @@ Date:   Fri Aug 5 18:02:30 2011 -0400
 
     Free all static memory upon exit
 
 
     Free all static memory upon exit
 
- src/hb-common.cc |    8 +++++---
- src/hb-shape.cc  |    4 ++--
+ src/hb-common.cc | 8 +++++---
+ src/hb-shape.cc  | 4 ++--
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit c4d63ef744f79701458ab7af2055afb87ffe8de3
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit c4d63ef744f79701458ab7af2055afb87ffe8de3
@@ -14667,8 +26232,8 @@ Date:   Fri Aug 5 17:54:25 2011 -0400
 
     Also changed the separator to comma instead of colon.
 
 
     Also changed the separator to comma instead of colon.
 
- src/hb-shape.cc |   34 +++++++++++++++++++++++++---------
- 1 files changed, 25 insertions(+), 9 deletions(-)
+ src/hb-shape.cc | 34 +++++++++++++++++++++++++---------
+ 1 file changed, 25 insertions(+), 9 deletions(-)
 
 commit 3931837bebd79c5eb1bd5b24ff12e2c8e7d3f24c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3931837bebd79c5eb1bd5b24ff12e2c8e7d3f24c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14680,8 +26245,8 @@ Date:   Fri Aug 5 17:22:19 2011 -0400
     returning a bool now.  So, reverted.  Added new API for the extra
     functionality.
 
     returning a bool now.  So, reverted.  Added new API for the extra
     functionality.
 
- src/hb-view.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-view.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3ca6c4ecc299295b6682fa2b6b9f83b213223bad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ca6c4ecc299295b6682fa2b6b9f83b213223bad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14693,10 +26258,10 @@ Date: Fri Aug 5 17:22:19 2011 -0400
     returning a bool now.  So, reverted.  Added new API for the extra
     functionality.
 
     returning a bool now.  So, reverted.  Added new API for the extra
     functionality.
 
- src/hb-shape.cc   |   21 +++++++++++++++------
- src/hb-shape.h    |   14 ++++++++++----
- src/test.cc      |    2 +-
- test/test-shape.c |   2 +-
+ src/hb-shape.cc   | 21 +++++++++++++++------
+ src/hb-shape.h    | 14 ++++++++++----
+ src/test.cc      |  2 +-
+ test/test-shape.c |  2 +-
  4 files changed, 27 insertions(+), 12 deletions(-)
 
 commit 02aeca985b570763342c35e99af90025bfa088d5
  4 files changed, 27 insertions(+), 12 deletions(-)
 
 commit 02aeca985b570763342c35e99af90025bfa088d5
@@ -14731,24 +26296,24 @@ Date: Thu Aug 4 22:31:05 2011 -0400
 
     New API hb_buffer_guess_properties() added.
 
 
     New API hb_buffer_guess_properties() added.
 
- TODO                            |    2 -
- configure.ac                    |    9 +++
- src/Makefile.am                 |   14 +++--
- src/hb-buffer-private.hh        |    1 +
- src/hb-buffer.cc                |   35 ++++++++++
- src/hb-buffer.h                 |    3 +
- src/hb-fallback-shape-private.hh |   48 +++++++++++++
- src/hb-fallback-shape.cc        |   43 ++++++++++++
- src/hb-ot-shape.cc              |    9 ++-
- src/hb-ot-shape.h               |    5 +-
- src/hb-shape.cc                 |  135
- +++++++++++++++++++++++---------------
- src/hb-shape.h                          |   13 ++--
- src/hb-uniscribe-shape.cc       |   52 ++++++---------
- src/hb-uniscribe.h              |    5 +-
- src/hb-view.cc                          |    2 +-
- src/test.cc                     |    3 +-
- test/test-shape.c               |    2 +-
+ TODO                            |   2 -
+ configure.ac                    |   9 +++
+ src/Makefile.am                 |  14 ++--
+ src/hb-buffer-private.hh        |   1 +
+ src/hb-buffer.cc                |  35 ++++++++++
+ src/hb-buffer.h                 |   3 +
+ src/hb-fallback-shape-private.hh |  48 ++++++++++++++
+ src/hb-fallback-shape.cc        |  43 +++++++++++++
+ src/hb-ot-shape.cc              |   9 ++-
+ src/hb-ot-shape.h               |   5 +-
+ src/hb-shape.cc                 | 135
+ +++++++++++++++++++++++----------------
+ src/hb-shape.h                          |  13 ++--
+ src/hb-uniscribe-shape.cc       |  52 ++++++---------
+ src/hb-uniscribe.h              |   5 +-
+ src/hb-view.cc                          |   2 +-
+ src/test.cc                     |   3 +-
+ test/test-shape.c               |   2 +-
  17 files changed, 274 insertions(+), 107 deletions(-)
 
 commit 57692adf1294a6db4627d0de7c671e4aa01d2a8f
  17 files changed, 274 insertions(+), 107 deletions(-)
 
 commit 57692adf1294a6db4627d0de7c671e4aa01d2a8f
@@ -14759,8 +26324,8 @@ Date:   Thu Aug 4 20:49:16 2011 -0400
 
     Hardcoded to the uniscribe backend for now.  Will fix soon.
 
 
     Hardcoded to the uniscribe backend for now.  Will fix soon.
 
- src/test.cc |  38 ++++++++++++++++++++++++++++++++++----
- 1 files changed, 34 insertions(+), 4 deletions(-)
+ src/test.cc | 38 ++++++++++++++++++++++++++++++++++----
+ 1 file changed, 34 insertions(+), 4 deletions(-)
 
 commit c605bbbb6d4b2a98b1f40ca818760088d991f7d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c605bbbb6d4b2a98b1f40ca818760088d991f7d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14770,50 +26335,50 @@ Date: Thu Aug 4 20:00:53 2011 -0400
 
     Where causing issues for people with MSVC.
 
 
     Where causing issues for people with MSVC.
 
- src/check-c-linkage-decls.sh           |    3 +--
- src/hb-blob.cc                                 |    2 --
- src/hb-buffer-private.hh               |    2 --
- src/hb-buffer.cc                       |    2 --
- src/hb-common.cc                       |    2 --
- src/hb-font-private.hh                         |    2 --
- src/hb-font.cc                                 |    2 --
- src/hb-ft.cc                           |    2 --
- src/hb-glib.cc                                 |    2 --
- src/hb-icu.cc                          |    2 --
- src/hb-mutex-private.hh                |    2 --
- src/hb-object-private.hh               |    4 ----
- src/hb-open-file-private.hh            |    2 --
- src/hb-open-type-private.hh            |    4 ----
- src/hb-ot-head-private.hh              |    2 --
- src/hb-ot-layout-common-private.hh     |    4 ----
- src/hb-ot-layout-gdef-private.hh       |    2 --
- src/hb-ot-layout-gpos-private.hh       |    4 ----
- src/hb-ot-layout-gsub-private.hh       |    4 ----
- src/hb-ot-layout-gsubgpos-private.hh   |    6 ------
- src/hb-ot-layout-private.hh            |    2 --
- src/hb-ot-layout.cc                    |    2 --
- src/hb-ot-map-private.hh               |    2 --
- src/hb-ot-map.cc                       |    2 --
- src/hb-ot-maxp-private.hh              |    2 --
- src/hb-ot-shape-complex-arabic-table.hh |    2 --
- src/hb-ot-shape-complex-arabic.cc      |    2 --
- src/hb-ot-shape-complex-indic-table.hh  |    2 --
- src/hb-ot-shape-complex-indic.cc       |    2 --
- src/hb-ot-shape-complex-misc.cc        |    2 --
- src/hb-ot-shape-complex-private.hh     |    2 --
- src/hb-ot-shape-normalize.cc           |    2 --
- src/hb-ot-shape-private.hh             |    2 --
- src/hb-ot-shape.cc                     |    2 --
- src/hb-ot-tag.cc                       |    2 --
- src/hb-private.hh                      |    8 --------
- src/hb-shape.cc                        |    2 --
- src/hb-unicode-private.hh              |    2 --
- src/hb-unicode.cc                      |    2 --
- src/hb-uniscribe-shape.cc              |    2 --
- src/hb-view.cc                                 |    2 --
- src/main.cc                            |    2 --
- src/test.cc                            |    2 --
- 43 files changed, 1 insertions(+), 106 deletions(-)
+ src/check-c-linkage-decls.sh           | 3 +--
+ src/hb-blob.cc                                 | 2 --
+ src/hb-buffer-private.hh               | 2 --
+ src/hb-buffer.cc                       | 2 --
+ src/hb-common.cc                       | 2 --
+ src/hb-font-private.hh                         | 2 --
+ src/hb-font.cc                                 | 2 --
+ src/hb-ft.cc                           | 2 --
+ src/hb-glib.cc                                 | 2 --
+ src/hb-icu.cc                          | 2 --
+ src/hb-mutex-private.hh                | 2 --
+ src/hb-object-private.hh               | 4 ----
+ src/hb-open-file-private.hh            | 2 --
+ src/hb-open-type-private.hh            | 4 ----
+ src/hb-ot-head-private.hh              | 2 --
+ src/hb-ot-layout-common-private.hh     | 4 ----
+ src/hb-ot-layout-gdef-private.hh       | 2 --
+ src/hb-ot-layout-gpos-private.hh       | 4 ----
+ src/hb-ot-layout-gsub-private.hh       | 4 ----
+ src/hb-ot-layout-gsubgpos-private.hh   | 6 ------
+ src/hb-ot-layout-private.hh            | 2 --
+ src/hb-ot-layout.cc                    | 2 --
+ src/hb-ot-map-private.hh               | 2 --
+ src/hb-ot-map.cc                       | 2 --
+ src/hb-ot-maxp-private.hh              | 2 --
+ src/hb-ot-shape-complex-arabic-table.hh | 2 --
+ src/hb-ot-shape-complex-arabic.cc      | 2 --
+ src/hb-ot-shape-complex-indic-table.hh  | 2 --
+ src/hb-ot-shape-complex-indic.cc       | 2 --
+ src/hb-ot-shape-complex-misc.cc        | 2 --
+ src/hb-ot-shape-complex-private.hh     | 2 --
+ src/hb-ot-shape-normalize.cc           | 2 --
+ src/hb-ot-shape-private.hh             | 2 --
+ src/hb-ot-shape.cc                     | 2 --
+ src/hb-ot-tag.cc                       | 2 --
+ src/hb-private.hh                      | 8 --------
+ src/hb-shape.cc                        | 2 --
+ src/hb-unicode-private.hh              | 2 --
+ src/hb-unicode.cc                      | 2 --
+ src/hb-uniscribe-shape.cc              | 2 --
+ src/hb-view.cc                                 | 2 --
+ src/main.cc                            | 2 --
+ src/test.cc                            | 2 --
+ 43 files changed, 1 insertion(+), 106 deletions(-)
 
 commit 8336186a52813b53e90b4399dc462d55750e2d37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8336186a52813b53e90b4399dc462d55750e2d37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14821,8 +26386,8 @@ Date:   Thu Aug 4 19:49:05 2011 -0400
 
     Zero map objects
 
 
     Zero map objects
 
- src/hb-ot-map-private.hh |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-map-private.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit ecd3b6e4ad253cf9d0dae1ed2da8ba6caed16b85
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ecd3b6e4ad253cf9d0dae1ed2da8ba6caed16b85
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14830,8 +26395,8 @@ Date:   Thu Aug 4 01:57:40 2011 -0400
 
     More build fixes
 
 
     More build fixes
 
- configure.ac |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit c747f509bcc4e6a34ced04e9e79ed414a44437b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c747f509bcc4e6a34ced04e9e79ed414a44437b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14839,8 +26404,8 @@ Date:   Thu Aug 4 01:51:30 2011 -0400
 
     More out-of-tree build fixes
 
 
     More out-of-tree build fixes
 
- src/check-c-linkage-decls.sh |    3 +--
- src/check-header-guards.sh   |    8 ++++----
+ src/check-c-linkage-decls.sh | 3 +--
+ src/check-header-guards.sh   | 8 ++++----
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 0530ca9a180edc330ab801c535907cefa4a0c298
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 0530ca9a180edc330ab801c535907cefa4a0c298
@@ -14849,8 +26414,8 @@ Date:   Thu Aug 4 01:42:59 2011 -0400
 
     Fix out-of-tree build
 
 
     Fix out-of-tree build
 
- test/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ddbf4edc5d09a645351b1bd1722b068aba6a6dec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ddbf4edc5d09a645351b1bd1722b068aba6a6dec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14858,8 +26423,8 @@ Date:   Thu Aug 4 01:38:37 2011 -0400
 
     Minor
 
 
     Minor
 
- configure.ac |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 20dde6101662fd9ebe5f613631ea468f4c0a995f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20dde6101662fd9ebe5f613631ea468f4c0a995f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14867,8 +26432,8 @@ Date:   Thu Aug 4 01:07:33 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-uniscribe.h |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-uniscribe.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 44b4f50d05fd51d8056a78e359fbb00fbcac43a0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 44b4f50d05fd51d8056a78e359fbb00fbcac43a0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14876,8 +26441,8 @@ Date:   Thu Aug 4 00:52:20 2011 -0400
 
     Fix typo
 
 
     Fix typo
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0fbb2dc83132a89201ad8b56c6909610437d2da0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0fbb2dc83132a89201ad8b56c6909610437d2da0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14890,13 +26455,13 @@ Date: Wed Aug 3 19:55:04 2011 -0400
     This is not supposed to be a production backend, more like a testing
     backend.
 
     This is not supposed to be a production backend, more like a testing
     backend.
 
- configure.ac             |    9 ++
- src/Makefile.am          |   11 ++
- src/hb-private.hh        |    4 +-
- src/hb-uniscribe-shape.cc |  325
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-uniscribe.h       |   46 +++++++
- 5 files changed, 394 insertions(+), 1 deletions(-)
+ configure.ac             |   9 ++
+ src/Makefile.am          |  11 ++
+ src/hb-private.hh        |   4 +-
+ src/hb-uniscribe-shape.cc | 325
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-uniscribe.h       |  46 +++++++
+ 5 files changed, 394 insertions(+), 1 deletion(-)
 
 commit 0d7d4824b2edc7aeeb995077655a9a89b5c360a9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0d7d4824b2edc7aeeb995077655a9a89b5c360a9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14904,8 +26469,8 @@ Date:   Wed Aug 3 17:39:24 2011 -0400
 
     Minor
 
 
     Minor
 
- configure.ac |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ configure.ac | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit e62df43649e31b7815c272f01808b3f726c7d07d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e62df43649e31b7815c272f01808b3f726c7d07d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14913,9 +26478,9 @@ Date:   Wed Aug 3 17:38:54 2011 -0400
 
     Add internal hb_buffer_t::get_scratch_buffer()
 
 
     Add internal hb_buffer_t::get_scratch_buffer()
 
- src/hb-buffer-private.hh |    2 ++
- src/hb-buffer.cc        |   10 ++++++++++
- 2 files changed, 12 insertions(+), 0 deletions(-)
+ src/hb-buffer-private.hh |  2 ++
+ src/hb-buffer.cc        | 10 ++++++++++
+ 2 files changed, 12 insertions(+)
 
 commit 71e7936fcadfd375a8bdc47987ef8b1b2b542df5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71e7936fcadfd375a8bdc47987ef8b1b2b542df5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14923,8 +26488,8 @@ Date:   Wed Aug 3 17:38:34 2011 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit bf8c57ba745c02370c38198adfdcd8075ba38b13
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bf8c57ba745c02370c38198adfdcd8075ba38b13
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14934,9 +26499,9 @@ Date:   Wed Aug 3 17:38:04 2011 -0400
 
     Need to think more about it.
 
 
     Need to think more about it.
 
- src/hb-font.cc |   10 ++++++++++
- src/hb-font.h |    3 +++
- 2 files changed, 13 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 10 ++++++++++
+ src/hb-font.h |  3 +++
+ 2 files changed, 13 insertions(+)
 
 commit 2118fdb9f584e6735e904638e48bae48314372fa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2118fdb9f584e6735e904638e48bae48314372fa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14946,8 +26511,8 @@ Date:   Tue Aug 2 14:06:51 2011 -0400
 
     Broke it a few commits ago.
 
 
     Broke it a few commits ago.
 
- src/hb-ot-shape.cc |   8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-ot-shape.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 199abbd0f15bd295c3a56845c71b38dd20af1332
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 199abbd0f15bd295c3a56845c71b38dd20af1332
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14955,8 +26520,8 @@ Date:   Tue Aug 2 13:59:47 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-unicode.c |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ test/test-unicode.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 4f052b93c0b17d92b9f0adddf64ef77518bf2ac4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4f052b93c0b17d92b9f0adddf64ef77518bf2ac4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14964,8 +26529,8 @@ Date:   Tue Aug 2 13:44:24 2011 -0400
 
     Fix build with glib but not freetype
 
 
     Fix build with glib but not freetype
 
- test/Makefile.am |    7 +++----
- 1 files changed, 3 insertions(+), 4 deletions(-)
+ test/Makefile.am | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
 
 commit c21be799daa85d5edb2d831ac985d3e43c8755ec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c21be799daa85d5edb2d831ac985d3e43c8755ec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14973,8 +26538,8 @@ Date:   Tue Aug 2 12:05:49 2011 -0400
 
     Minor
 
 
     Minor
 
- test/Makefile.am |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ test/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit e9c2341b1384c161bbab9871411af0bc9f6c3cf4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e9c2341b1384c161bbab9871411af0bc9f6c3cf4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14982,8 +26547,8 @@ Date:   Tue Aug 2 11:40:44 2011 -0400
 
     Don't use icu-config when cross-compiling
 
 
     Don't use icu-config when cross-compiling
 
- configure.ac |   17 ++++++++++-------
- 1 files changed, 10 insertions(+), 7 deletions(-)
+ configure.ac | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
 
 commit 390dab49b6cf34f263b67d20a13f0752ada57bcc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 390dab49b6cf34f263b67d20a13f0752ada57bcc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -14991,8 +26556,8 @@ Date:   Tue Aug 2 11:29:55 2011 -0400
 
     Unbreak icu-config results a bit
 
 
     Unbreak icu-config results a bit
 
- configure.ac |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit b301478a69d961c724a4875b839a81fb458d1153
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b301478a69d961c724a4875b839a81fb458d1153
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15002,8 +26567,8 @@ Date:   Tue Aug 2 11:25:13 2011 -0400
 
     (and revert change have_icu change I mistakenly pushed out)
 
 
     (and revert change have_icu change I mistakenly pushed out)
 
- autogen.sh   |   10 ++++++++--
- configure.ac |    1 -
+ autogen.sh   | 10 ++++++++--
+ configure.ac |  1 -
  2 files changed, 8 insertions(+), 3 deletions(-)
 
 commit f60271c0c2b0101e7b2725f9a9ad950c277a616c
  2 files changed, 8 insertions(+), 3 deletions(-)
 
 commit f60271c0c2b0101e7b2725f9a9ad950c277a616c
@@ -15016,11 +26581,11 @@ Date: Tue Aug 2 09:56:30 2011 -0400
 
     ./configure --host=i586-mingw32msvc  && make
 
 
     ./configure --host=i586-mingw32msvc  && make
 
- configure.ac               |    1 +
- src/hb-mutex-private.hh     |   4 ++--
- src/hb-open-type-private.hh |   5 +++++
- src/hb-private.hh          |    6 +++++-
- src/main.cc                |    1 +
+ configure.ac               | 1 +
+ src/hb-mutex-private.hh     | 4 ++--
+ src/hb-open-type-private.hh | 5 +++++
+ src/hb-private.hh          | 6 +++++-
+ src/main.cc                | 1 +
  5 files changed, 14 insertions(+), 3 deletions(-)
 
 commit 1264b23e4a4ae1c9831a3009e1c7ab8e65a5b434
  5 files changed, 14 insertions(+), 3 deletions(-)
 
 commit 1264b23e4a4ae1c9831a3009e1c7ab8e65a5b434
@@ -15029,8 +26594,8 @@ Date:   Mon Aug 1 16:39:32 2011 -0400
 
     Bug 39702 - configure check for ragel
 
 
     Bug 39702 - configure check for ragel
 
- autogen.sh |  18 +++++++++++++-----
- 1 files changed, 13 insertions(+), 5 deletions(-)
+ autogen.sh | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
 
 commit f5414cf0a220d6e6f3d4b6e8221cd583b4684187
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f5414cf0a220d6e6f3d4b6e8221cd583b4684187
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15038,8 +26603,8 @@ Date:   Mon Aug 1 16:34:16 2011 -0400
 
     Use missing script for calling ragel
 
 
     Use missing script for calling ragel
 
- src/Makefile.am |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit a91c58bf98258a34e5f7c1ad39a38db58fadc4b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a91c58bf98258a34e5f7c1ad39a38db58fadc4b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15049,8 +26614,8 @@ Date:   Mon Aug 1 16:30:11 2011 -0400
 
     Read comment.
 
 
     Read comment.
 
- src/hb-ot-shape-complex-indic.cc |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit 5e72071062c015237b79fbd0521341a63166a204
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5e72071062c015237b79fbd0521341a63166a204
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15064,8 +26629,8 @@ Date:   Sun Jul 31 17:51:50 2011 -0400
 
     test-shape-complex failures are down from 48 to 46.  Meh.
 
 
     test-shape-complex failures are down from 48 to 46.  Meh.
 
- src/hb-ot-shape-complex-indic.cc |   11 +++++++++--
- 1 files changed, 9 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
 
 commit 281683995a46ed37aeeb84061249758c59822457
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 281683995a46ed37aeeb84061249758c59822457
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15073,8 +26638,8 @@ Date:   Sun Jul 31 16:00:35 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-shape-complex-indic.cc |   23 +++++++++++++++--------
- 1 files changed, 15 insertions(+), 8 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
 
 commit 6b37bc80843e38ca7b62500f95fd70c08af68d62
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b37bc80843e38ca7b62500f95fd70c08af68d62
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15085,8 +26650,8 @@ Date:   Sun Jul 31 15:57:00 2011 -0400
     Not quite working just yet.  False alarm re 10 failures.  It was
     crashing.  Ouch!  Back to 48 failures.
 
     Not quite working just yet.  False alarm re 10 failures.  It was
     crashing.  Ouch!  Back to 48 failures.
 
- src/hb-ot-shape-complex-indic.cc |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit e7be05702447ae270d797398132c1930cd3a9b86
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e7be05702447ae270d797398132c1930cd3a9b86
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15096,9 +26661,9 @@ Date:   Sun Jul 31 15:18:57 2011 -0400
 
     Not applied yet.
 
 
     Not applied yet.
 
- src/hb-ot-shape-complex-indic.cc |   86
- ++++++++++++++++++++++++++++++++++++-
- 1 files changed, 83 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 86
+ ++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 83 insertions(+), 3 deletions(-)
 
 commit cfd4382ec1af91640129551697de36fd42c0849a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cfd4382ec1af91640129551697de36fd42c0849a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15106,8 +26671,8 @@ Date:   Sun Jul 31 15:07:11 2011 -0400
 
     [Indic] Handle Reph when determining base consonant
 
 
     [Indic] Handle Reph when determining base consonant
 
- src/hb-ot-shape-complex-indic.cc |   24 +++++++++++++++---------
- 1 files changed, 15 insertions(+), 9 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 24 +++++++++++++++---------
+ 1 file changed, 15 insertions(+), 9 deletions(-)
 
 commit 97158392a5899ddb739afaac925128f33f699bd7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 97158392a5899ddb739afaac925128f33f699bd7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15115,8 +26680,8 @@ Date:   Sun Jul 31 15:01:28 2011 -0400
 
     [Indic] Ra is a consonant too
 
 
     [Indic] Ra is a consonant too
 
- src/hb-ot-shape-complex-indic.cc |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 0d8f8a177c4bfd4dc642a353bab8d03674e839ac
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0d8f8a177c4bfd4dc642a353bab8d03674e839ac
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15124,8 +26689,8 @@ Date:   Sun Jul 31 14:57:59 2011 -0400
 
     [Indic] Fix reph inhibition logic
 
 
     [Indic] Fix reph inhibition logic
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 9da0487cd452d780673e24329ce03e174a4ef83b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9da0487cd452d780673e24329ce03e174a4ef83b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15137,9 +26702,9 @@ Date:   Sun Jul 31 13:46:44 2011 -0400
 
     I hereby declare harfbuzz-ng supporting Indic!
 
 
     I hereby declare harfbuzz-ng supporting Indic!
 
- src/hb-ot-shape-complex-indic.cc |   57
- ++++++++++++++++++++++++++++++++------
- 1 files changed, 48 insertions(+), 9 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 57
+ +++++++++++++++++++++++++++++++++-------
+ 1 file changed, 48 insertions(+), 9 deletions(-)
 
 commit 9ee27a928a989c71923cef82a9e9828f8e9ca051
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ee27a928a989c71923cef82a9e9828f8e9ca051
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15147,8 +26712,8 @@ Date:   Sun Jul 31 11:10:14 2011 -0400
 
     [Indic] Suppress reph formation upon joiners
 
 
     [Indic] Suppress reph formation upon joiners
 
- src/hb-ot-shape-complex-indic.cc |    8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 commit 8354e004e553856d7d743e0f0b4de4668484026a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8354e004e553856d7d743e0f0b4de4668484026a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15158,8 +26723,8 @@ Date:   Sun Jul 31 02:24:51 2011 -0400
 
     But I'm not sure...  Down from 54 failures to 52.
 
 
     But I'm not sure...  Down from 54 failures to 52.
 
- src/hb-ot-shape-complex-indic.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 07cedd81f48907b2e372cd2e963716bbded9ce29
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 07cedd81f48907b2e372cd2e963716bbded9ce29
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15167,8 +26732,8 @@ Date:   Sat Jul 30 21:16:51 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape-complex.c |   21 +++++++++++----------
- 1 files changed, 11 insertions(+), 10 deletions(-)
+ test/test-shape-complex.c | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
 
 commit ba7e85c104e68b4685c1b3b5c9a260fe0f6879df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ba7e85c104e68b4685c1b3b5c9a260fe0f6879df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15176,8 +26741,8 @@ Date:   Sat Jul 30 21:11:53 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-shape-complex-indic.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit f5bc2725cb892264ba223e0a49f7fd2c622a0730
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f5bc2725cb892264ba223e0a49f7fd2c622a0730
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15191,9 +26756,9 @@ Date:   Sat Jul 30 21:08:10 2011 -0400
 
     Brings test-shape-complex failures down from 88 to 54.  Getting there!
 
 
     Brings test-shape-complex failures down from 88 to 54.  Getting there!
 
- src/hb-ot-map-private.hh        |    3 +++
- src/hb-ot-shape-complex-indic.cc |   20 ++++++++++++++++++++
- 2 files changed, 23 insertions(+), 0 deletions(-)
+ src/hb-ot-map-private.hh        |  3 +++
+ src/hb-ot-shape-complex-indic.cc | 20 ++++++++++++++++++++
+ 2 files changed, 23 insertions(+)
 
 commit c47a31fb4793b825f4be57e9cb1b10db352b9512
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c47a31fb4793b825f4be57e9cb1b10db352b9512
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15201,10 +26766,10 @@ Date: Sat Jul 30 20:57:01 2011 -0400
 
     [OT] Save chosen script tag
 
 
     [OT] Save chosen script tag
 
- src/hb-ot-layout.cc     |   20 ++++++++++++++++----
- src/hb-ot-layout.h      |    3 ++-
- src/hb-ot-map-private.hh |    1 +
- src/hb-ot-map.cc        |    2 +-
+ src/hb-ot-layout.cc     | 20 ++++++++++++++++----
+ src/hb-ot-layout.h      |  3 ++-
+ src/hb-ot-map-private.hh |  1 +
+ src/hb-ot-map.cc        |  2 +-
  4 files changed, 20 insertions(+), 6 deletions(-)
 
 commit 3a9b14dfdfc278b432890e1537672a4ca141a3b0
  4 files changed, 20 insertions(+), 6 deletions(-)
 
 commit 3a9b14dfdfc278b432890e1537672a4ca141a3b0
@@ -15213,8 +26778,8 @@ Date:   Sat Jul 30 20:23:55 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape-complex.c |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ test/test-shape-complex.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 8613193bbf28fe8951c900b68c4418a6fb929626
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8613193bbf28fe8951c900b68c4418a6fb929626
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15228,8 +26793,8 @@ Date:   Sat Jul 30 20:21:40 2011 -0400
 
     Failures down from 92 to 88.
 
 
     Failures down from 92 to 88.
 
- test/test-shape-complex.c |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ test/test-shape-complex.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit fd06bf56110e73826b3d5c73ac964e2609450d46
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fd06bf56110e73826b3d5c73ac964e2609450d46
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15239,8 +26804,8 @@ Date:   Sat Jul 30 20:14:44 2011 -0400
 
     Brings test-shape-complex failures down from 104 to 92.  Way to go!
 
 
     Brings test-shape-complex failures down from 104 to 92.  Way to go!
 
- src/hb-ot-shape-complex-indic.cc |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit ee58f3bc75d2d071a71b94063bf12205a5871acb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ee58f3bc75d2d071a71b94063bf12205a5871acb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15248,8 +26813,8 @@ Date:   Sat Jul 30 19:15:53 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |   23 ++++++++++++-----------
- 1 files changed, 12 insertions(+), 11 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
 
 commit 352372ae5ea0998e40cf9fe43c22b6b610a5764e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 352372ae5ea0998e40cf9fe43c22b6b610a5764e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15259,8 +26824,8 @@ Date:   Sat Jul 30 19:04:02 2011 -0400
 
     Is the categorization correct?  I don't know.
 
 
     Is the categorization correct?  I don't know.
 
- src/hb-ot-shape-complex-indic.cc |   31 ++++++++++++++++++++++++++++++-
- 1 files changed, 30 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 31 ++++++++++++++++++++++++++++++-
+ 1 file changed, 30 insertions(+), 1 deletion(-)
 
 commit 45d6f29f15f1d2323bcaa2498aed23ff0c8a1567
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 45d6f29f15f1d2323bcaa2498aed23ff0c8a1567
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15272,9 +26837,9 @@ Date:   Sat Jul 30 14:44:30 2011 -0400
 
     Next: Add Ra handling and it's fair to say we kinda support Indic :).
 
 
     Next: Add Ra handling and it's fair to say we kinda support Indic :).
 
- src/hb-ot-shape-complex-indic.cc |   29 +++++++++++++++++++++++++++--
- src/hb-ot-shape-normalize.cc    |   26 ++++++++++----------------
- src/hb-private.hh               |   36
+ src/hb-ot-shape-complex-indic.cc | 29 +++++++++++++++++++++++++++--
+ src/hb-ot-shape-normalize.cc    | 26 ++++++++++----------------
+ src/hb-private.hh               | 36
  ++++++++++++++++++++++++++++++------
  3 files changed, 67 insertions(+), 24 deletions(-)
 
  ++++++++++++++++++++++++++++++------
  3 files changed, 67 insertions(+), 24 deletions(-)
 
@@ -15284,8 +26849,8 @@ Date:   Sat Jul 30 11:16:00 2011 -0400
 
     Bug 39686 - Add '-no-undefined' to libharfbuzz LDFLAGS
 
 
     Bug 39686 - Add '-no-undefined' to libharfbuzz LDFLAGS
 
- src/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8f0b64fb6988f9502d2c5e39768a9af133d9a83f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f0b64fb6988f9502d2c5e39768a9af133d9a83f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15293,8 +26858,8 @@ Date:   Fri Jul 29 17:02:48 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-arabic.cc |   6 +++---
- src/hb-private.hh                |    8 ++++++--
+ src/hb-ot-shape-complex-arabic.cc | 6 +++---
+ src/hb-private.hh                | 8 ++++++--
  2 files changed, 9 insertions(+), 5 deletions(-)
 
 commit 743807a3ce1b2229e5307a8aea074a7544623d8d
  2 files changed, 9 insertions(+), 5 deletions(-)
 
 commit 743807a3ce1b2229e5307a8aea074a7544623d8d
@@ -15311,9 +26876,9 @@ Date:   Fri Jul 29 16:37:02 2011 -0400
 
     Next: reorder matras.
 
 
     Next: reorder matras.
 
- src/hb-ot-shape-complex-indic-machine.rl |   35 ++++--
- src/hb-ot-shape-complex-indic.cc        |  209
- +++++++++++++++++++++++++++---
+ src/hb-ot-shape-complex-indic-machine.rl |  35 ++++--
+ src/hb-ot-shape-complex-indic.cc        | 209
+ ++++++++++++++++++++++++++++---
  2 files changed, 212 insertions(+), 32 deletions(-)
 
 commit 1a1b5013159369b343d0c32df02c9c419277aead
  2 files changed, 212 insertions(+), 32 deletions(-)
 
 commit 1a1b5013159369b343d0c32df02c9c419277aead
@@ -15322,8 +26887,8 @@ Date:   Fri Jul 29 16:36:46 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape-complex.c |   8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ test/test-shape-complex.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit dd5546de15e63c0320b7db2bf42b0f15271f7915
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dd5546de15e63c0320b7db2bf42b0f15271f7915
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15331,8 +26896,8 @@ Date:   Fri Jul 29 16:27:31 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape-complex.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-shape-complex.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9f9bcceca6321d5a5812f878de1de39901349a78
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9f9bcceca6321d5a5812f878de1de39901349a78
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15340,9 +26905,9 @@ Date:   Thu Jul 28 17:06:46 2011 -0400
 
     Register buffer vars in Indic shaper
 
 
     Register buffer vars in Indic shaper
 
- src/hb-ot-shape-complex-indic.cc |    6 ++++++
- src/hb-ot-shape.cc              |    2 ++
- 2 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 6 ++++++
+ src/hb-ot-shape.cc              | 2 ++
+ 2 files changed, 8 insertions(+)
 
 commit be09bf6b799cafc2ff54a28915b307ffe99661b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit be09bf6b799cafc2ff54a28915b307ffe99661b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15350,8 +26915,8 @@ Date:   Thu Jul 28 17:03:43 2011 -0400
 
     Oops.  This should have gone into the previous commit
 
 
     Oops.  This should have gone into the previous commit
 
- src/hb-ot-layout-gsub-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b65c06025d2b54a44f716e030d4b10072c65bea8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b65c06025d2b54a44f716e030d4b10072c65bea8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15359,16 +26924,16 @@ Date: Thu Jul 28 16:48:43 2011 -0400
 
     Formalize buffer var allocations
 
 
     Formalize buffer var allocations
 
- src/hb-buffer-private.hh          |   25 +++++---------
- src/hb-buffer.cc                  |   15 +++++----
- src/hb-ot-layout-gpos-private.hh   |  14 +++++---
- src/hb-ot-layout-gsub-private.hh   |   5 ++-
- src/hb-ot-shape-complex-arabic.cc  |   6 +++-
- src/hb-ot-shape-complex-indic.cc   |   4 +-
- src/hb-ot-shape-complex-private.hh |  10 +++++-
- src/hb-ot-shape.cc                |   60
- +++++++++++++++++++++--------------
- src/hb-private.hh                 |    1 +
+ src/hb-buffer-private.hh          | 25 ++++++----------
+ src/hb-buffer.cc                  | 15 +++++-----
+ src/hb-ot-layout-gpos-private.hh   | 14 +++++----
+ src/hb-ot-layout-gsub-private.hh   |  5 +++-
+ src/hb-ot-shape-complex-arabic.cc  |  6 +++-
+ src/hb-ot-shape-complex-indic.cc   |  4 +--
+ src/hb-ot-shape-complex-private.hh | 10 ++++++-
+ src/hb-ot-shape.cc                | 60
+ +++++++++++++++++++++++---------------
+ src/hb-private.hh                 |  1 +
  9 files changed, 83 insertions(+), 57 deletions(-)
 
 commit a9ad3d3460ba863a8d8f3766ccbeab288c3c6822
  9 files changed, 83 insertions(+), 57 deletions(-)
 
 commit a9ad3d3460ba863a8d8f3766ccbeab288c3c6822
@@ -15379,12 +26944,11 @@ Date: Thu Jul 28 15:42:18 2011 -0400
 
     Buffer var allocation coming into shape
 
 
     Buffer var allocation coming into shape
 
- src/hb-buffer-private.hh        |    1 +
- src/hb-buffer.cc                |   35
- +++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gpos-private.hh |    7 +++++++
- src/hb-ot-layout-gsub-private.hh |   18 ++++++++++++++++++
- src/hb-ot-layout.cc             |    8 +++-----
+ src/hb-buffer-private.hh        |  1 +
+ src/hb-buffer.cc                | 35 +++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gpos-private.hh |  7 +++++++
+ src/hb-ot-layout-gsub-private.hh | 18 ++++++++++++++++++
+ src/hb-ot-layout.cc             |  8 +++-----
  5 files changed, 64 insertions(+), 5 deletions(-)
 
 commit cc06c243d8be3ebb1190281653d2dba504c16c0f
  5 files changed, 64 insertions(+), 5 deletions(-)
 
 commit cc06c243d8be3ebb1190281653d2dba504c16c0f
@@ -15393,12 +26957,12 @@ Date: Mon Jul 25 20:25:44 2011 -0400
 
     Streamline debugging infrastructure even more
 
 
     Streamline debugging infrastructure even more
 
- src/hb-blob.cc                              |   26 ++++----
- src/hb-object-private.hh            |    8 +-
- src/hb-open-type-private.hh         |   64 ++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-private.hh                   |  109
- ++++++++++++++++++++++++++++++---
+ src/hb-blob.cc                              |  26 ++++-----
+ src/hb-object-private.hh            |   8 +--
+ src/hb-open-type-private.hh         |  64 ++++++--------------
+ src/hb-ot-layout-gsubgpos-private.hh |   2 +-
+ src/hb-private.hh                   | 109
+ +++++++++++++++++++++++++++++++----
  5 files changed, 136 insertions(+), 73 deletions(-)
 
 commit 43ff203d8ea3e1b09e316e3aae1a4e5ec15bfdd2
  5 files changed, 136 insertions(+), 73 deletions(-)
 
 commit 43ff203d8ea3e1b09e316e3aae1a4e5ec15bfdd2
@@ -15409,11 +26973,11 @@ Date: Mon Jul 25 17:35:24 2011 -0400
 
     Looks *so* much nicer!
 
 
     Looks *so* much nicer!
 
- src/hb-blob.cc                     |   26 +++++++-------
- src/hb-object-private.hh    |   8 ++--
- src/hb-open-type-private.hh |  75
- +++++++++++++++++++-----------------------
- src/hb-private.hh          |    7 +++-
+ src/hb-blob.cc                     | 26 ++++++++--------
+ src/hb-object-private.hh    | 8 ++---
+ src/hb-open-type-private.hh | 75
+ ++++++++++++++++++++-------------------------
+ src/hb-private.hh          |  7 +++--
  4 files changed, 56 insertions(+), 60 deletions(-)
 
 commit decd4e3e16424dc311e9fb5b663170414a11556a
  4 files changed, 56 insertions(+), 60 deletions(-)
 
 commit decd4e3e16424dc311e9fb5b663170414a11556a
@@ -15424,11 +26988,11 @@ Date: Mon Jul 25 16:47:02 2011 -0400
 
     Buffer debugging coming soon.
 
 
     Buffer debugging coming soon.
 
- src/hb-blob.cc                     |   35 ++++++++++++---------------------
- src/hb-object-private.hh    |   9 +++----
- src/hb-open-type-private.hh |  44
- +++++++++++++++++++++---------------------
- src/hb-private.hh          |    7 ++++-
+ src/hb-blob.cc                     | 35 +++++++++++++----------------------
+ src/hb-object-private.hh    | 9 ++++-----
+ src/hb-open-type-private.hh | 44
+ ++++++++++++++++++++++----------------------
+ src/hb-private.hh          |  7 +++++--
  4 files changed, 44 insertions(+), 51 deletions(-)
 
 commit 3a81b1db89beba91fb91791918b9fdd9f8fc9fa0
  4 files changed, 44 insertions(+), 51 deletions(-)
 
 commit 3a81b1db89beba91fb91791918b9fdd9f8fc9fa0
@@ -15437,8 +27001,8 @@ Date:   Mon Jul 25 16:30:32 2011 -0400
 
     Minor, fix leak from my previous refactorings
 
 
     Minor, fix leak from my previous refactorings
 
- src/hb-buffer.cc |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-buffer.cc | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit f4a579bc42fb811ff5c391a0e97b7d8656ef59b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f4a579bc42fb811ff5c391a0e97b7d8656ef59b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15446,8 +27010,8 @@ Date:   Mon Jul 25 16:20:16 2011 -0400
 
     Add internal API for buffer var allocation
 
 
     Add internal API for buffer var allocation
 
- src/hb-buffer-private.hh |   25 +++++++++++++++++++++++--
- src/hb-buffer.cc        |   22 ++++++++++++++++++++++
+ src/hb-buffer-private.hh | 25 +++++++++++++++++++++++--
+ src/hb-buffer.cc        | 22 ++++++++++++++++++++++
  2 files changed, 45 insertions(+), 2 deletions(-)
 
 commit 651e8dd79ec8eaca5ab75a61e8ce961ff7bd26eb
  2 files changed, 45 insertions(+), 2 deletions(-)
 
 commit 651e8dd79ec8eaca5ab75a61e8ce961ff7bd26eb
@@ -15462,10 +27026,10 @@ Date: Mon Jul 25 14:54:08 2011 -0400
     going to add some internal API to track those such that mistakes
     are discovered as soon as they are introduced.
 
     going to add some internal API to track those such that mistakes
     are discovered as soon as they are introduced.
 
- src/hb-ot-layout-gsubgpos-private.hh |    1 -
- src/hb-ot-layout.cc                 |    1 +
- src/hb-ot-shape.cc                  |   10 ----------
- 3 files changed, 1 insertions(+), 11 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh |  1 -
+ src/hb-ot-layout.cc                 |  1 +
+ src/hb-ot-shape.cc                  | 10 ----------
+ 3 files changed, 1 insertion(+), 11 deletions(-)
 
 commit c86f932015bdf5803572b0904d343d3bc033e009
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c86f932015bdf5803572b0904d343d3bc033e009
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15473,9 +27037,9 @@ Date:   Mon Jul 25 00:44:50 2011 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-shape.cc |  85
- +++++++++++++++++++++++++--------------------------
- 1 files changed, 42 insertions(+), 43 deletions(-)
+ src/hb-ot-shape.cc | 85
+ +++++++++++++++++++++++++++---------------------------
+ 1 file changed, 42 insertions(+), 43 deletions(-)
 
 commit 18c42850c9327ab4479ff150660a76d4ff6f3e9c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 18c42850c9327ab4479ff150660a76d4ff6f3e9c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15487,8 +27051,8 @@ Date:   Mon Jul 25 00:36:58 2011 -0400
     process.
     We can use the freed space in the shapers now.
 
     process.
     We can use the freed space in the shapers now.
 
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit d8787493c9aa420544096cef07c29a591a0c1a99
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d8787493c9aa420544096cef07c29a591a0c1a99
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15496,8 +27060,8 @@ Date:   Mon Jul 25 00:36:01 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsub-private.hh     |    6 ------
- src/hb-ot-layout-gsubgpos-private.hh |    7 +++++++
+ src/hb-ot-layout-gsub-private.hh     | 6 ------
+ src/hb-ot-layout-gsubgpos-private.hh | 7 +++++++
  2 files changed, 7 insertions(+), 6 deletions(-)
 
 commit c311d852080b50ffc85e80168de62abb05a6be59
  2 files changed, 7 insertions(+), 6 deletions(-)
 
 commit c311d852080b50ffc85e80168de62abb05a6be59
@@ -15506,9 +27070,9 @@ Date:   Sat Jul 23 23:43:54 2011 -0400
 
     Keep Unicode props updated as we go so we avoid a scan later
 
 
     Keep Unicode props updated as we go so we avoid a scan later
 
- src/hb-ot-shape-normalize.cc |   54
- ++++++++++++++++++++---------------------
- 1 files changed, 26 insertions(+), 28 deletions(-)
+ src/hb-ot-shape-normalize.cc | 54
+ +++++++++++++++++++++-----------------------
+ 1 file changed, 26 insertions(+), 28 deletions(-)
 
 commit 5389ff4dbc46c76c9483e3c95f22524b60e21166
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5389ff4dbc46c76c9483e3c95f22524b60e21166
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15518,9 +27082,9 @@ Date:   Fri Jul 22 20:22:49 2011 -0400
 
     Fallback normalization is complete and working now!
 
 
     Fallback normalization is complete and working now!
 
- src/hb-ot-shape-normalize.cc |   49
- +++++++++++++++++++++++++++++++++++++++--
- 1 files changed, 46 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-normalize.cc | 49
+ +++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 46 insertions(+), 3 deletions(-)
 
 commit dcdc51cdc0ba9d9fb75f84dd5fa7a49aa0b24ea0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dcdc51cdc0ba9d9fb75f84dd5fa7a49aa0b24ea0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15528,8 +27092,8 @@ Date:   Fri Jul 22 17:14:46 2011 -0400
 
     Handle singleton decompositions
 
 
     Handle singleton decompositions
 
- src/hb-ot-shape-normalize.cc |   12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-ot-shape-normalize.cc | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit 34c22f816808d061a980cffca12de03beb437fa0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34c22f816808d061a980cffca12de03beb437fa0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15537,10 +27101,10 @@ Date: Fri Jul 22 17:04:20 2011 -0400
 
     Implement Unicode Canonical Reordering Algorithm
 
 
     Implement Unicode Canonical Reordering Algorithm
 
- src/hb-ot-shape-normalize.cc |   80
- +++++++++++++++++++++++++++++++++++------
- src/hb-ot-shape-private.hh   |    2 +
- src/hb-ot-shape.cc          |    6 ++--
+ src/hb-ot-shape-normalize.cc | 80
+ +++++++++++++++++++++++++++++++++++++-------
+ src/hb-ot-shape-private.hh   |  2 ++
+ src/hb-ot-shape.cc          |  6 ++--
  3 files changed, 73 insertions(+), 15 deletions(-)
 
 commit 4ff0d2d9dfc4f7e4880a4e964ca9872624508ea0
  3 files changed, 73 insertions(+), 15 deletions(-)
 
 commit 4ff0d2d9dfc4f7e4880a4e964ca9872624508ea0
@@ -15549,9 +27113,9 @@ Date:   Fri Jul 22 16:15:32 2011 -0400
 
     Decomposition works now!
 
 
     Decomposition works now!
 
- src/hb-ot-shape-normalize.cc |  109
- ++++++++++++++++++++++++++----------------
- src/hb-ot-shape.cc          |    3 +-
+ src/hb-ot-shape-normalize.cc | 109
+ +++++++++++++++++++++++++++----------------
+ src/hb-ot-shape.cc          |   3 +-
  2 files changed, 70 insertions(+), 42 deletions(-)
 
 commit 468e9cb25c9bc14781b7013e447d763f93bf76a3
  2 files changed, 70 insertions(+), 42 deletions(-)
 
 commit 468e9cb25c9bc14781b7013e447d763f93bf76a3
@@ -15560,14 +27124,14 @@ Date: Fri Jul 22 11:28:07 2011 -0400
 
     Move buffer methods into the object
 
 
     Move buffer methods into the object
 
- src/hb-buffer-private.hh            |  110 +++----
- src/hb-buffer.cc                    |  605
- +++++++++++++++++-----------------
- src/hb-ot-layout-gpos-private.hh     |   88 +++---
- src/hb-ot-layout-gsub-private.hh     |   58 ++--
- src/hb-ot-layout-gsubgpos-private.hh |   50 ++--
- src/hb-ot-shape-normalize.cc        |   16 +-
- src/hb-ot-shape.cc                  |   14 +-
+ src/hb-buffer-private.hh            | 110 +++----
+ src/hb-buffer.cc                    | 605
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gpos-private.hh     |  88 ++---
+ src/hb-ot-layout-gsub-private.hh     |  58 ++--
+ src/hb-ot-layout-gsubgpos-private.hh |  50 +--
+ src/hb-ot-shape-normalize.cc        |  16 +-
+ src/hb-ot-shape.cc                  |  14 +-
  7 files changed, 456 insertions(+), 485 deletions(-)
 
 commit 45412523dc295cb5ee12e096bfacb282cc925843
  7 files changed, 456 insertions(+), 485 deletions(-)
 
 commit 45412523dc295cb5ee12e096bfacb282cc925843
@@ -15576,10 +27140,10 @@ Date: Fri Jul 22 11:07:05 2011 -0400
 
     More normalization kick
 
 
     More normalization kick
 
- src/hb-ot-shape-normalize.cc |   54
- ++++++++++++++++++++++++++++--------------
- src/hb-ot-shape-private.hh   |    8 +++++-
- src/hb-ot-shape.cc          |   13 ++-------
+ src/hb-ot-shape-normalize.cc | 54
+ +++++++++++++++++++++++++++++---------------
+ src/hb-ot-shape-private.hh   |  8 ++++++-
+ src/hb-ot-shape.cc          | 13 +++--------
  3 files changed, 46 insertions(+), 29 deletions(-)
 
 commit 63c0ef4a0763e579c9c80887bbfbd2651de05067
  3 files changed, 46 insertions(+), 29 deletions(-)
 
 commit 63c0ef4a0763e579c9c80887bbfbd2651de05067
@@ -15591,9 +27155,9 @@ Date:   Thu Jul 21 20:58:42 2011 -0400
 
     Add tests.
 
 
     Add tests.
 
- src/hb-glib.cc      |  10 +++++-----
- src/hb-icu.cc      |   20 +++++++++++++-------
- test/test-unicode.c |  11 ++++++++---
+ src/hb-glib.cc      | 10 +++++-----
+ src/hb-icu.cc      | 20 +++++++++++++-------
+ test/test-unicode.c | 11 ++++++++---
  3 files changed, 26 insertions(+), 15 deletions(-)
 
 commit 5d90a342e319068716429bf7af76c3896b61a0e5
  3 files changed, 26 insertions(+), 15 deletions(-)
 
 commit 5d90a342e319068716429bf7af76c3896b61a0e5
@@ -15602,10 +27166,10 @@ Date: Thu Jul 21 15:25:01 2011 -0400
 
     Document normalization design
 
 
     Document normalization design
 
- src/hb-ot-shape-normalize.cc |   78
- +++++++++++++++++++++++++++++++++--------
- src/hb-ot-shape-private.hh   |    2 +-
- src/hb-ot-shape.cc          |    6 ++-
+ src/hb-ot-shape-normalize.cc | 78
+ +++++++++++++++++++++++++++++++++++---------
+ src/hb-ot-shape-private.hh   |  2 +-
+ src/hb-ot-shape.cc          |  6 ++--
  3 files changed, 67 insertions(+), 19 deletions(-)
 
 commit 02cdf743c2ec345a44d4fcf865594b6ac13fccd0
  3 files changed, 67 insertions(+), 19 deletions(-)
 
 commit 02cdf743c2ec345a44d4fcf865594b6ac13fccd0
@@ -15619,10 +27183,10 @@ Date: Thu Jul 21 12:23:12 2011 -0400
     handle split matra for free.  Other shapers prefer precomposed
     characters.
 
     handle split matra for free.  Other shapers prefer precomposed
     characters.
 
- src/hb-ot-shape-complex-arabic.cc  |   6 ++++++
- src/hb-ot-shape-complex-indic.cc   |   7 +++++++
- src/hb-ot-shape-complex-misc.cc    |   6 ++++++
- src/hb-ot-shape-complex-private.hh |  31 +++++++++++++++++++++++++++++--
+ src/hb-ot-shape-complex-arabic.cc  |  6 ++++++
+ src/hb-ot-shape-complex-indic.cc   |  7 +++++++
+ src/hb-ot-shape-complex-misc.cc    |  6 ++++++
+ src/hb-ot-shape-complex-private.hh | 31 +++++++++++++++++++++++++++++--
  4 files changed, 48 insertions(+), 2 deletions(-)
 
 commit d6b9c6d20041b4f4fa11befc179aee757c41904d
  4 files changed, 48 insertions(+), 2 deletions(-)
 
 commit d6b9c6d20041b4f4fa11befc179aee757c41904d
@@ -15631,8 +27195,8 @@ Date:   Thu Jul 21 12:16:45 2011 -0400
 
     More kicking
 
 
     More kicking
 
- src/hb-ot-shape-normalize.cc |   17 ++++++++++++++---
- 1 files changed, 14 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-normalize.cc | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
 
 commit 192445aef2e50087049243ce54ce7059ec441ffa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 192445aef2e50087049243ce54ce7059ec441ffa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15642,8 +27206,8 @@ Date:   Thu Jul 21 12:13:04 2011 -0400
 
     Lets not worry about performance for now...
 
 
     Lets not worry about performance for now...
 
- src/hb-ot-shape-normalize.cc |    3 ++-
- src/hb-ot-shape-private.hh   |    2 --
+ src/hb-ot-shape-normalize.cc | 3 ++-
+ src/hb-ot-shape-private.hh   | 2 --
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit d63adfc7d09b26764d9166da97372b21257e7611
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit d63adfc7d09b26764d9166da97372b21257e7611
@@ -15652,8 +27216,8 @@ Date:   Thu Jul 21 11:48:57 2011 -0400
 
     No need to handle variation-selectors seperately, they are GC=Mn
 
 
     No need to handle variation-selectors seperately, they are GC=Mn
 
- src/hb-ot-shape.cc |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit aa7264123a088936f2043b45d4d41ca7413fabe5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa7264123a088936f2043b45d4d41ca7413fabe5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15665,8 +27229,8 @@ Date:   Thu Jul 21 11:34:59 2011 -0400
     minimal now.  Combining marks get their own cluster value most of
     the time.
 
     minimal now.  Combining marks get their own cluster value most of
     the time.
 
- src/hb-ot-shape.cc |  45 ++++++++++++++++++++++-----------------------
- 1 files changed, 22 insertions(+), 23 deletions(-)
+ src/hb-ot-shape.cc | 45 ++++++++++++++++++++++-----------------------
+ 1 file changed, 22 insertions(+), 23 deletions(-)
 
 commit 5c6f5982d78e2d7fadc2fbb8b4f3a4be9420c59a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c6f5982d78e2d7fadc2fbb8b4f3a4be9420c59a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15674,9 +27238,9 @@ Date:   Thu Jul 21 11:31:08 2011 -0400
 
     Towards normalization
 
 
     Towards normalization
 
- src/hb-ot-shape-normalize.cc |   33 ++++++++++++++++++++++-----------
- src/hb-ot-shape-private.hh   |    3 ++-
- src/hb-ot-shape.cc          |    4 +++-
+ src/hb-ot-shape-normalize.cc | 33 ++++++++++++++++++++++-----------
+ src/hb-ot-shape-private.hh   |  3 ++-
+ src/hb-ot-shape.cc          |  4 +++-
  3 files changed, 27 insertions(+), 13 deletions(-)
 
 commit ad903e66b1cc4ec1b8160f93b3ab2b5e636f8d62
  3 files changed, 27 insertions(+), 13 deletions(-)
 
 commit ad903e66b1cc4ec1b8160f93b3ab2b5e636f8d62
@@ -15685,8 +27249,8 @@ Date:   Thu Jul 21 10:17:22 2011 -0400
 
     s/COMBINING_MARK/SPACING_MARK/ here too.  Oops!
 
 
     s/COMBINING_MARK/SPACING_MARK/ here too.  Oops!
 
- test/test-unicode.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-unicode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit cf7f43ec3382cac2af11f5637c840500daabf889
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cf7f43ec3382cac2af11f5637c840500daabf889
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15694,8 +27258,8 @@ Date:   Thu Jul 21 01:12:26 2011 -0400
 
     Remove stale comment
 
 
     Remove stale comment
 
- src/hb-ot-shape.cc |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 54d1a0d2b2c4ffe15494967122c6422ecb1fc80b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 54d1a0d2b2c4ffe15494967122c6422ecb1fc80b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15706,8 +27270,8 @@ Date:   Thu Jul 21 01:11:09 2011 -0400
     This is essential as ensure_native_direction uses cluster info that
     is set by form_clusters().
 
     This is essential as ensure_native_direction uses cluster info that
     is set by form_clusters().
 
- src/hb-ot-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 9111b21ef99d5e53348176f683261b0101eb427f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9111b21ef99d5e53348176f683261b0101eb427f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15715,9 +27279,9 @@ Date:   Thu Jul 21 00:58:29 2011 -0400
 
     Add _hb_buffer_output_glyph() and _hb_buffer_skip_glyph()
 
 
     Add _hb_buffer_output_glyph() and _hb_buffer_skip_glyph()
 
- src/hb-buffer-private.hh |   10 ++++++++++
- src/hb-buffer.cc        |   19 ++++++++++++++++---
- src/hb-ot-shape.cc      |    2 +-
+ src/hb-buffer-private.hh | 10 ++++++++++
+ src/hb-buffer.cc        | 19 ++++++++++++++++---
+ src/hb-ot-shape.cc      |  2 +-
  3 files changed, 27 insertions(+), 4 deletions(-)
 
 commit 655586fe5e1fadf2a2ef7826e61ee9a445ffa37a
  3 files changed, 27 insertions(+), 4 deletions(-)
 
 commit 655586fe5e1fadf2a2ef7826e61ee9a445ffa37a
@@ -15726,11 +27290,11 @@ Date: Thu Jul 21 00:51:18 2011 -0400
 
     Towards normalization
 
 
     Towards normalization
 
- src/Makefile.am             |    1 +
- src/hb-ot-shape-normalize.cc |   71
- ++++++++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape-private.hh   |   12 +++++++
- src/hb-ot-shape.cc          |   10 +-----
+ src/Makefile.am             |  1 +
+ src/hb-ot-shape-normalize.cc | 71
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-private.hh   | 12 ++++++++
+ src/hb-ot-shape.cc          | 10 ++-----
  4 files changed, 86 insertions(+), 8 deletions(-)
 
 commit 49741c86334d12fa08a5bfa2110ff3b9adcba1c7
  4 files changed, 86 insertions(+), 8 deletions(-)
 
 commit 49741c86334d12fa08a5bfa2110ff3b9adcba1c7
@@ -15739,8 +27303,8 @@ Date:   Thu Jul 21 00:35:37 2011 -0400
 
     Include variation-selectors in cluster calculation
 
 
     Include variation-selectors in cluster calculation
 
- src/hb-ot-shape.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit dd89d958c139d85efb776fffaf314eead3952c78
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dd89d958c139d85efb776fffaf314eead3952c78
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15748,8 +27312,8 @@ Date:   Thu Jul 21 00:28:57 2011 -0400
 
     Fix cluster calculation for non-LTR text
 
 
     Fix cluster calculation for non-LTR text
 
- TODO            |    6 ------
- src/hb-buffer.cc |    5 +++++
+ TODO            | 6 ------
+ src/hb-buffer.cc | 5 +++++
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 4a68684654e645882095c1189477146287ce9437
  2 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 4a68684654e645882095c1189477146287ce9437
@@ -15758,8 +27322,8 @@ Date:   Thu Jul 21 00:14:01 2011 -0400
 
     When forming clusters, participate all mark types
 
 
     When forming clusters, participate all mark types
 
- src/hb-ot-shape.cc |   6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit 5157e12a55f943b7fc5be7dce0b2ee1bcacca6ec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5157e12a55f943b7fc5be7dce0b2ee1bcacca6ec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15771,8 +27335,8 @@ Date:   Thu Jul 21 00:12:33 2011 -0400
     Spacing_Mark is the current Unicode long-name for this property value.
     The previous name was wrongly carried from glib.
 
     Spacing_Mark is the current Unicode long-name for this property value.
     The previous name was wrongly carried from glib.
 
- src/hb-common.h |    2 +-
- src/hb-icu.cc  |    2 +-
+ src/hb-common.h | 2 +-
+ src/hb-icu.cc  | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 7b08b0a7f2057937dfc3ab2ec191656bf2386463
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 7b08b0a7f2057937dfc3ab2ec191656bf2386463
@@ -15781,8 +27345,8 @@ Date:   Wed Jul 20 23:59:07 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-arabic.cc |   8 ++++----
- src/hb-private.hh                |   19 +++++++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc |  8 ++++----
+ src/hb-private.hh                | 19 +++++++++++++++++++
  2 files changed, 23 insertions(+), 4 deletions(-)
 
 commit 498e1a9be673bb02c00aac3f12bb4c6993a85910
  2 files changed, 23 insertions(+), 4 deletions(-)
 
 commit 498e1a9be673bb02c00aac3f12bb4c6993a85910
@@ -15791,9 +27355,9 @@ Date:   Wed Jul 20 23:19:49 2011 -0400
 
     [icu] Implement compose()/decompose()
 
 
     [icu] Implement compose()/decompose()
 
- src/hb-icu.cc      |   87
- +++++++++++++++++++++++++++++++++++++++++++++++++-
- test/test-unicode.c |   1 +
+ src/hb-icu.cc      | 87
+ +++++++++++++++++++++++++++++++++++++++++++++++++++--
+ test/test-unicode.c | 1 +
  2 files changed, 86 insertions(+), 2 deletions(-)
 
 commit ffd4a436f7baccb68a0c3602f94ea0246e32844f
  2 files changed, 86 insertions(+), 2 deletions(-)
 
 commit ffd4a436f7baccb68a0c3602f94ea0246e32844f
@@ -15806,10 +27370,10 @@ Date: Wed Jul 20 22:30:29 2011 -0400
 
     The tests are not hooked up for ICU yet.
 
 
     The tests are not hooked up for ICU yet.
 
- src/hb-glib.cc      |  17 +++++++++++-
- src/hb-unicode.cc   |   2 +-
- test/test-unicode.c |  66
- +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-glib.cc      | 17 ++++++++++++--
+ src/hb-unicode.cc   | 2 +-
+ test/test-unicode.c | 66
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 82 insertions(+), 3 deletions(-)
 
 commit fca0923b04aeff9369849da97d247a647611f346
  3 files changed, 82 insertions(+), 3 deletions(-)
 
 commit fca0923b04aeff9369849da97d247a647611f346
@@ -15818,9 +27382,9 @@ Date:   Wed Jul 20 22:16:13 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-icu.cc |   62
- ++++++++++++++++++++++++++++++++++----------------------
- 1 files changed, 38 insertions(+), 24 deletions(-)
+ src/hb-icu.cc | 62
+ ++++++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 38 insertions(+), 24 deletions(-)
 
 commit 26b6024962b254b624d4f22088b6c87745074743
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 26b6024962b254b624d4f22088b6c87745074743
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15828,8 +27392,8 @@ Date:   Wed Jul 20 21:58:14 2011 -0400
 
     [glib] Use g_unicode_script_to/from_iso15924() if available
 
 
     [glib] Use g_unicode_script_to/from_iso15924() if available
 
- src/hb-glib.cc |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ src/hb-glib.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit 22fdc66712464bdb02e45eed49e4be57e79b442f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 22fdc66712464bdb02e45eed49e4be57e79b442f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15837,9 +27401,9 @@ Date:   Wed Jul 20 21:51:37 2011 -0400
 
     [glib] Add compose() and decompose() implementations with fallback
 
 
     [glib] Add compose() and decompose() implementations with fallback
 
- src/hb-glib.cc    |  126
- +++++++++++++++++++++++++++++++++++++++++++----------
- src/hb-unicode.cc |   6 ++-
+ src/hb-glib.cc    | 126
+ +++++++++++++++++++++++++++++++++++++++++++-----------
+ src/hb-unicode.cc |   6 ++-
  2 files changed, 106 insertions(+), 26 deletions(-)
 
 commit a54a5505a35eef5315a8e2e7a79502901e3eff5f
  2 files changed, 106 insertions(+), 26 deletions(-)
 
 commit a54a5505a35eef5315a8e2e7a79502901e3eff5f
@@ -15848,8 +27412,8 @@ Date:   Wed Jul 20 16:42:10 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape-complex-indic.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 23db8d5c92c96a34c716b68e1aa6819c5a20477a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 23db8d5c92c96a34c716b68e1aa6819c5a20477a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15857,8 +27421,8 @@ Date:   Tue Jul 12 12:02:26 2011 -0400
 
     [test] Work around glib <= 2.30 API
 
 
     [test] Work around glib <= 2.30 API
 
- test/hb-test.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ test/hb-test.h | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 22989c5ffc8cce1ea05d729cdf33661c35a52334
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 22989c5ffc8cce1ea05d729cdf33661c35a52334
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15866,8 +27430,8 @@ Date:   Tue Jul 12 11:54:58 2011 -0400
 
     Distribute hb-ot-shape-complex-indic-machine.rl
 
 
     Distribute hb-ot-shape-complex-indic-machine.rl
 
- src/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit f6fd3780e12b23ff7ed3743497c8996e71dcb064
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f6fd3780e12b23ff7ed3743497c8996e71dcb064
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15881,9 +27445,9 @@ Date:   Fri Jul 8 00:22:40 2011 -0400
 
     Also add stub for Indic's final_reordering().
 
 
     Also add stub for Indic's final_reordering().
 
- src/hb-ot-shape-complex-arabic.cc |   2 ++
- src/hb-ot-shape-complex-indic.cc  |   16 ++++++++++++++++
- src/hb-ot-shape.cc               |    7 +------
+ src/hb-ot-shape-complex-arabic.cc |  2 ++
+ src/hb-ot-shape-complex-indic.cc  | 16 ++++++++++++++++
+ src/hb-ot-shape.cc               |  7 +------
  3 files changed, 19 insertions(+), 6 deletions(-)
 
 commit c4641723fbf6532b2e80a662e15573b31276bc73
  3 files changed, 19 insertions(+), 6 deletions(-)
 
 commit c4641723fbf6532b2e80a662e15573b31276bc73
@@ -15903,16 +27467,16 @@ Date: Thu Jul 7 23:47:19 2011 -0400
     Eg, hb_unicode_get_script_func_t is now hb_unicode_script_func_t,
     and hb_unicode_get_script() is hb_unicode_script() now.
 
     Eg, hb_unicode_get_script_func_t is now hb_unicode_script_func_t,
     and hb_unicode_get_script() is hb_unicode_script() now.
 
- TODO                     |    4 ++-
- src/hb-glib.cc                   |    6 +++-
- src/hb-icu.cc            |    6 +++-
- src/hb-ot-shape.cc       |    6 ++--
- src/hb-shape.cc          |    2 +-
- src/hb-unicode-private.hh |   8 +++--
- src/hb-unicode.cc        |   85
- ++++++++++++++++++++++++++++++++------------
- src/hb-unicode.h         |   70 ++++++++++++++++++++++++++----------
- test/test-unicode.c      |   21 ++++++-----
+ TODO                     |  4 ++-
+ src/hb-glib.cc                   |  6 +++-
+ src/hb-icu.cc            |  6 +++-
+ src/hb-ot-shape.cc       |  6 ++--
+ src/hb-shape.cc          |  2 +-
+ src/hb-unicode-private.hh |  8 +++--
+ src/hb-unicode.cc        | 85
+ ++++++++++++++++++++++++++++++++++-------------
+ src/hb-unicode.h         | 70 +++++++++++++++++++++++++++-----------
+ test/test-unicode.c      | 21 +++++++-----
  9 files changed, 146 insertions(+), 62 deletions(-)
 
 commit d05dded1676924e8894c90f7a7c3527b492bcdff
  9 files changed, 146 insertions(+), 62 deletions(-)
 
 commit d05dded1676924e8894c90f7a7c3527b492bcdff
@@ -15921,9 +27485,9 @@ Date:   Thu Jul 7 23:42:40 2011 -0400
 
     More code generation through preprocessor
 
 
     More code generation through preprocessor
 
- src/hb-ot-shape-complex-private.hh |  46
- ++++++++++++++++++++++-------------
- 1 files changed, 29 insertions(+), 17 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 46
+ ++++++++++++++++++++++++--------------
+ 1 file changed, 29 insertions(+), 17 deletions(-)
 
 commit 891c4755baae6cd59fad59d27fd8933e5f548a74
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 891c4755baae6cd59fad59d27fd8933e5f548a74
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15933,11 +27497,11 @@ Date: Thu Jul 7 23:19:27 2011 -0400
 
     In preparation for adding more advanced unicode funcs.
 
 
     In preparation for adding more advanced unicode funcs.
 
- src/hb-ot-shape.cc       |    6 ++--
- src/hb-shape.cc          |    2 +-
- src/hb-unicode-private.hh |   36 ++++++++++++------------
- src/hb-unicode.cc        |   65
- +++++++++++++++++++++++++++++++++------------
+ src/hb-ot-shape.cc       |  6 ++---
+ src/hb-shape.cc          |  2 +-
+ src/hb-unicode-private.hh | 36 +++++++++++++-------------
+ src/hb-unicode.cc        | 65
+ ++++++++++++++++++++++++++++++++++-------------
  4 files changed, 70 insertions(+), 39 deletions(-)
 
 commit 4b6317c4f426cfaf21e509dbf6ee6d4e0422cdac
  4 files changed, 70 insertions(+), 39 deletions(-)
 
 commit 4b6317c4f426cfaf21e509dbf6ee6d4e0422cdac
@@ -15946,11 +27510,11 @@ Date: Thu Jul 7 23:14:42 2011 -0400
 
     More code shuffling
 
 
     More code shuffling
 
- src/hb-font-private.hh    |   16 +++---
- src/hb-font.cc                   |    3 +-
- src/hb-unicode-private.hh |   42 +++++++-------
- src/hb-unicode.cc        |  140
- +++++++++++++++++----------------------------
+ src/hb-font-private.hh    |  16 +++---
+ src/hb-font.cc                   |   3 +-
+ src/hb-unicode-private.hh |  42 +++++++-------
+ src/hb-unicode.cc        | 140
+ +++++++++++++++++-----------------------------
  4 files changed, 82 insertions(+), 119 deletions(-)
 
 commit 3361c9a323575309d9fd55fe076697a3e22073c0
  4 files changed, 82 insertions(+), 119 deletions(-)
 
 commit 3361c9a323575309d9fd55fe076697a3e22073c0
@@ -15959,10 +27523,10 @@ Date: Thu Jul 7 22:35:17 2011 -0400
 
     Minor
 
 
     Minor
 
- src/Makefile.am                   |    1 +
- src/hb-ot-shape-complex-misc.cc    |  51
- ++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-private.hh |  12 +++++---
+ src/Makefile.am                   |  1 +
+ src/hb-ot-shape-complex-misc.cc    | 51
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh | 12 ++++++---
  3 files changed, 60 insertions(+), 4 deletions(-)
 
 commit 76f76812ac7cca8ac6935952a2360d5e151480fa
  3 files changed, 60 insertions(+), 4 deletions(-)
 
 commit 76f76812ac7cca8ac6935952a2360d5e151480fa
@@ -15971,13 +27535,13 @@ Date: Thu Jul 7 22:25:25 2011 -0400
 
     Shuffle code around, remove shape_plan from complex shapers
 
 
     Shuffle code around, remove shape_plan from complex shapers
 
- src/hb-ot-shape-complex-arabic.cc       |   36 ++++++++++++------------
- src/hb-ot-shape-complex-indic-machine.rl |   12 ++++----
- src/hb-ot-shape-complex-indic.cc        |   25 ++++++++---------
- src/hb-ot-shape-complex-private.hh      |   44
- +++++++++++++++++++----------
- src/hb-ot-shape-private.hh              |   13 +-------
- src/hb-ot-shape.cc                      |    4 +-
+ src/hb-ot-shape-complex-arabic.cc       | 36 +++++++++++++-------------
+ src/hb-ot-shape-complex-indic-machine.rl | 12 ++++-----
+ src/hb-ot-shape-complex-indic.cc        | 25 +++++++++---------
+ src/hb-ot-shape-complex-private.hh      | 44
+ +++++++++++++++++++++-----------
+ src/hb-ot-shape-private.hh              | 13 ++--------
+ src/hb-ot-shape.cc                      |  4 +--
  6 files changed, 69 insertions(+), 65 deletions(-)
 
 commit e88bff9b4d77dc86c04832163081effbff752216
  6 files changed, 69 insertions(+), 65 deletions(-)
 
 commit e88bff9b4d77dc86c04832163081effbff752216
@@ -15986,8 +27550,8 @@ Date:   Thu Jul 7 22:03:02 2011 -0400
 
     Minor, use function typedefs
 
 
     Minor, use function typedefs
 
- src/hb-ot-shape-complex-private.hh |  10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit 359dcaa0d33271025ca42a5f54ecbac7ae3b56d3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 359dcaa0d33271025ca42a5f54ecbac7ae3b56d3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -15995,10 +27559,10 @@ Date: Thu Jul 7 21:55:05 2011 -0400
 
     Update copyright headers
 
 
     Update copyright headers
 
- src/hb-ot-map-private.hh          |    2 +-
- src/hb-ot-map.cc                  |    2 +-
- src/hb-ot-shape-complex-private.hh |   2 +-
- src/hb-ot-shape.cc                |    2 +-
+ src/hb-ot-map-private.hh          | 2 +-
+ src/hb-ot-map.cc                  | 2 +-
+ src/hb-ot-shape-complex-private.hh | 2 +-
+ src/hb-ot-shape.cc                | 2 +-
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit d8d0c480c85246a74d47dd5297019c7e39391ab0
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit d8d0c480c85246a74d47dd5297019c7e39391ab0
@@ -16007,9 +27571,9 @@ Date:   Thu Jul 7 21:22:08 2011 -0400
 
     Refactor some code common to GSUB and GPOS
 
 
     Refactor some code common to GSUB and GPOS
 
- src/hb-ot-map-private.hh |   29 +++++++++++++++++-------
- src/hb-ot-map.cc        |   54
- ++++++++-------------------------------------
+ src/hb-ot-map-private.hh | 29 ++++++++++++++++++--------
+ src/hb-ot-map.cc        | 54
+ +++++++++---------------------------------------
  2 files changed, 30 insertions(+), 53 deletions(-)
 
 commit b70c96dbe41d6512b80fe3d966a1942e1ef64a4b
  2 files changed, 30 insertions(+), 53 deletions(-)
 
 commit b70c96dbe41d6512b80fe3d966a1942e1ef64a4b
@@ -16028,11 +27592,11 @@ Date: Thu Jul 7 21:07:41 2011 -0400
     shaper can use the same facility to pause and do reordering in the
     callback.
 
     shaper can use the same facility to pause and do reordering in the
     callback.
 
- src/hb-ot-map-private.hh         |   50 +++++++++++---
- src/hb-ot-map.cc                 |  132
- ++++++++++++++++++++++++++++++++-----
- src/hb-ot-shape-complex-arabic.cc |   24 ++++++-
- src/hb-private.hh                |    5 ++
+ src/hb-ot-map-private.hh         |  50 +++++++++++----
+ src/hb-ot-map.cc                 | 132
+ +++++++++++++++++++++++++++++++++-----
+ src/hb-ot-shape-complex-arabic.cc |  24 ++++++-
+ src/hb-private.hh                |   5 ++
  4 files changed, 181 insertions(+), 30 deletions(-)
 
 commit f6d7a9bb4c19e605f1f16d9ca40adefba138c37e
  4 files changed, 181 insertions(+), 30 deletions(-)
 
 commit f6d7a9bb4c19e605f1f16d9ca40adefba138c37e
@@ -16041,9 +27605,9 @@ Date:   Thu Jul 7 16:20:35 2011 -0400
 
     Shuffle code around
 
 
     Shuffle code around
 
- src/hb-ot-map-private.hh |   68
- +++++++++++++++++++++++-----------------------
- 1 files changed, 34 insertions(+), 34 deletions(-)
+ src/hb-ot-map-private.hh | 68
+ ++++++++++++++++++++++++------------------------
+ 1 file changed, 34 insertions(+), 34 deletions(-)
 
 commit fc551edbf236d71a522ae7c2c9461aa71c5f7d66
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fc551edbf236d71a522ae7c2c9461aa71c5f7d66
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16053,8 +27617,8 @@ Date:   Thu Jul 7 16:09:38 2011 -0400
 
     I'm too lazy to fix the tests now.
 
 
     I'm too lazy to fix the tests now.
 
- test/test-shape.c |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ test/test-shape.c | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 2e18c6dbdfbbfdec0490260bb7cb5213551b2188
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2e18c6dbdfbbfdec0490260bb7cb5213551b2188
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16065,8 +27629,8 @@ Date:   Wed Jul 6 16:05:45 2011 -0400
     Mozilla Bug 669175 - Slow rendering of text sometimes in this case,
     using direction: rtl
 
     Mozilla Bug 669175 - Slow rendering of text sometimes in this case,
     using direction: rtl
 
- src/hb-buffer.cc |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ src/hb-buffer.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit fa2befa46f215d8c33a54dfc57889928a628164c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fa2befa46f215d8c33a54dfc57889928a628164c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16074,8 +27638,8 @@ Date:   Mon Jul 4 17:18:57 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-view.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-view.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit d69d5ceaa0ad30e8d4b9783507c59c6d4221de4f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d69d5ceaa0ad30e8d4b9783507c59c6d4221de4f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16085,8 +27649,8 @@ Date:   Mon Jul 4 12:56:38 2011 -0400
 
     Still not much there.
 
 
     Still not much there.
 
- src/hb-ot-shape-complex-indic-machine.rl |    4 +++-
- src/hb-ot-shape-complex-indic.cc        |    9 ++++++++-
+ src/hb-ot-shape-complex-indic-machine.rl | 4 +++-
+ src/hb-ot-shape-complex-indic.cc        | 9 ++++++++-
  2 files changed, 11 insertions(+), 2 deletions(-)
 
 commit 253a57fb5ab211f67140e6139d183e49483a9074
  2 files changed, 11 insertions(+), 2 deletions(-)
 
 commit 253a57fb5ab211f67140e6139d183e49483a9074
@@ -16098,8 +27662,8 @@ Date:   Tue Jun 28 17:26:03 2011 -0400
     They are outdated with respect to the DejaVu Sans I'm using.
     We need to add font version checking to the tests.
 
     They are outdated with respect to the DejaVu Sans I'm using.
     We need to add font version checking to the tests.
 
- test/test-shape-complex.c |   17 -----------------
- 1 files changed, 0 insertions(+), 17 deletions(-)
+ test/test-shape-complex.c | 17 -----------------
+ 1 file changed, 17 deletions(-)
 
 commit afa74bf90405fb121d3132982b87762c1686d80c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit afa74bf90405fb121d3132982b87762c1686d80c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16110,8 +27674,8 @@ Date:   Tue Jun 28 17:25:17 2011 -0400
 
     One has to run the test with --verbose to see that right now.
 
 
     One has to run the test with --verbose to see that right now.
 
- test/test-shape-complex.c |   25 ++++++++++++++++++++++---
- 1 files changed, 22 insertions(+), 3 deletions(-)
+ test/test-shape-complex.c | 25 ++++++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
 
 commit 42d453b0236f67239342df2003b7abce6e2c51ea
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 42d453b0236f67239342df2003b7abce6e2c51ea
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16119,9 +27683,9 @@ Date:   Tue Jun 28 16:59:16 2011 -0400
 
     [test] Name tests after their input string
 
 
     [test] Name tests after their input string
 
- test/Makefile.am         |    2 +-
- test/test-shape-complex.c |  150
- +++++++++++++++++++++++++++++---------------
+ test/Makefile.am         |   2 +-
+ test/test-shape-complex.c | 150
+ ++++++++++++++++++++++++++++++----------------
  2 files changed, 100 insertions(+), 52 deletions(-)
 
 commit 27413169782fdf79e278dd6552c8e194b3bc4eaa
  2 files changed, 100 insertions(+), 52 deletions(-)
 
 commit 27413169782fdf79e278dd6552c8e194b3bc4eaa
@@ -16132,8 +27696,8 @@ Date:   Tue Jun 28 16:21:31 2011 -0400
 
     Towards a better test runner.
 
 
     Towards a better test runner.
 
- test/test-shape-complex.c |   10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
+ test/test-shape-complex.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
 
 commit cc674cbf7fb9972975dc0499974e5e7fb4ae3c81
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc674cbf7fb9972975dc0499974e5e7fb4ae3c81
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16141,8 +27705,8 @@ Date:   Tue Jun 28 16:17:16 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape-complex.c |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ test/test-shape-complex.c | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 20d8a3982ae320035edd6a04b402cefc9a5e5779
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20d8a3982ae320035edd6a04b402cefc9a5e5779
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16152,9 +27716,9 @@ Date:   Tue Jun 28 16:16:21 2011 -0400
 
     We'd add normalization and decomposition tests later.
 
 
     We'd add normalization and decomposition tests later.
 
- test/test-shape-complex.c |   92
- ---------------------------------------------
- 1 files changed, 0 insertions(+), 92 deletions(-)
+ test/test-shape-complex.c | 92
+ -----------------------------------------------
+ 1 file changed, 92 deletions(-)
 
 commit 9704f0ca6c2defed52640da77506c80bc67b4f56
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9704f0ca6c2defed52640da77506c80bc67b4f56
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16162,9 +27726,9 @@ Date:   Tue Jun 28 16:15:46 2011 -0400
 
     [test] Restructure shape test data a bit
 
 
     [test] Restructure shape test data a bit
 
- test/test-shape-complex.c |   75
- +++++++++++++++++++++++++-------------------
- 1 files changed, 43 insertions(+), 32 deletions(-)
+ test/test-shape-complex.c | 75
+ +++++++++++++++++++++++++++--------------------
+ 1 file changed, 43 insertions(+), 32 deletions(-)
 
 commit 4ec30aec3014be6effc09cbbc88dcd075f3826df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ec30aec3014be6effc09cbbc88dcd075f3826df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16172,8 +27736,8 @@ Date:   Tue Jun 28 14:13:38 2011 -0400
 
     [Indic] Optimize Indic table storage
 
 
     [Indic] Optimize Indic table storage
 
- src/hb-ot-shape-complex-indic.cc |    8 +++++---
- src/hb-private.hh               |    1 +
+ src/hb-ot-shape-complex-indic.cc | 8 +++++---
+ src/hb-private.hh               | 1 +
  2 files changed, 6 insertions(+), 3 deletions(-)
 
 commit c4a59de6d8c1e581b5c155319232be9e805e5cba
  2 files changed, 6 insertions(+), 3 deletions(-)
 
 commit c4a59de6d8c1e581b5c155319232be9e805e5cba
@@ -16182,9 +27746,9 @@ Date:   Tue Jun 28 14:03:29 2011 -0400
 
     [Indic] Generate a single data table instead of multiple ones
 
 
     [Indic] Generate a single data table instead of multiple ones
 
- src/gen-indic-table.py                        |   30 +++++++++------
- src/hb-ot-shape-complex-indic-table.hh |   62
- +++++++++++++++----------------
+ src/gen-indic-table.py                        | 30 +++++++++-------
+ src/hb-ot-shape-complex-indic-table.hh | 62
+ ++++++++++++++++------------------
  2 files changed, 48 insertions(+), 44 deletions(-)
 
 commit a346e923a99f920bbebc25b335db51fdfb1429ea
  2 files changed, 48 insertions(+), 44 deletions(-)
 
 commit a346e923a99f920bbebc25b335db51fdfb1429ea
@@ -16209,9 +27773,9 @@ Date:   Fri Jun 24 20:45:55 2011 -0400
 
     [Indic] Define indic_position_t
 
 
     [Indic] Define indic_position_t
 
- src/hb-ot-shape-complex-indic.cc |  239
- +++++++++++++++++++-------------------
- 1 files changed, 122 insertions(+), 117 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 239
+ ++++++++++++++++++++-------------------
+ 1 file changed, 122 insertions(+), 117 deletions(-)
 
 commit 65988a145b4a52c37fd53c1473034f9e701f61d9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 65988a145b4a52c37fd53c1473034f9e701f61d9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16222,9 +27786,9 @@ Date:   Fri Jun 24 19:05:52 2011 -0400
     Copied form HarfBuzz.old Indic data.  These are below and post
     consonants.  This is temporary.  Read the comment in the patch.
 
     Copied form HarfBuzz.old Indic data.  These are below and post
     consonants.  This is temporary.  Read the comment in the patch.
 
- src/hb-ot-shape-complex-indic.cc |  106
- ++++++++++++++++++++++++++++++++++++++
- 1 files changed, 106 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 106
+ +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 106 insertions(+)
 
 commit c7fe56a1d5d3e969b6ec51cd9ecd471706a19568
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c7fe56a1d5d3e969b6ec51cd9ecd471706a19568
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16232,9 +27796,9 @@ Date:   Fri Jun 24 19:05:34 2011 -0400
 
     [Indic] Some of the basic features are global;  Mark them so
 
 
     [Indic] Some of the basic features are global;  Mark them so
 
- src/hb-ot-shape-complex-indic-machine.rl |    1 +
- src/hb-ot-shape-complex-indic.cc        |   48
- +++++++++++++++++++++---------
+ src/hb-ot-shape-complex-indic-machine.rl |  1 +
+ src/hb-ot-shape-complex-indic.cc        | 48
+ ++++++++++++++++++++++----------
  2 files changed, 35 insertions(+), 14 deletions(-)
 
 commit 867361c3ad39629a8d5b7dc48d558a1c19e37d43
  2 files changed, 35 insertions(+), 14 deletions(-)
 
 commit 867361c3ad39629a8d5b7dc48d558a1c19e37d43
@@ -16245,10 +27809,10 @@ Date: Fri Jun 17 18:35:46 2011 -0400
 
     Using an incredible tool called Ragel.
 
 
     Using an incredible tool called Ragel.
 
- src/Makefile.am                         |    5 ++
- src/hb-ot-shape-complex-indic-machine.rl |  105
- ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc        |   21 ++++--
+ src/Makefile.am                         |   5 ++
+ src/hb-ot-shape-complex-indic-machine.rl | 105
+ +++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc        |  21 +++++--
  3 files changed, 125 insertions(+), 6 deletions(-)
 
 commit 422e08dbb8e2c0c5664f1bdc7e159a673cfea8c5
  3 files changed, 125 insertions(+), 6 deletions(-)
 
 commit 422e08dbb8e2c0c5664f1bdc7e159a673cfea8c5
@@ -16259,9 +27823,9 @@ Date:   Wed Jun 15 17:22:48 2011 -0400
 
     Matches OT types now.
 
 
     Matches OT types now.
 
- src/hb-ot-shape-complex-indic.cc |   51
- +++++++++++++++++++++++--------------
- 1 files changed, 32 insertions(+), 19 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 51
+ +++++++++++++++++++++++++---------------
+ 1 file changed, 32 insertions(+), 19 deletions(-)
 
 commit 31f18abecb149f8888a72510f2660328dd6de16d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 31f18abecb149f8888a72510f2660328dd6de16d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16269,15 +27833,15 @@ Date: Wed Jun 15 09:49:58 2011 -0400
 
     Minor compiler warning fixes
 
 
     Minor compiler warning fixes
 
- src/hb-buffer-private.hh          |    8 ++++----
- src/hb-object-private.hh          |    4 ++--
- src/hb-open-type-private.hh       |    6 +++---
- src/hb-ot-layout-common-private.hh |   8 ++++----
- src/hb-ot-map.cc                  |   28 +++++++++++++++-------------
- src/hb-ot-shape-complex-arabic.cc  |   3 +--
- src/hb-view.cc                            |   11 ++++++-----
- test/test-object.c                |   22 +++++++++++-----------
- test/test-unicode.c               |    4 ++--
+ src/hb-buffer-private.hh          |  8 ++++----
+ src/hb-object-private.hh          |  4 ++--
+ src/hb-open-type-private.hh       |  6 +++---
+ src/hb-ot-layout-common-private.hh |  8 ++++----
+ src/hb-ot-map.cc                  | 28 +++++++++++++++-------------
+ src/hb-ot-shape-complex-arabic.cc  |  3 +--
+ src/hb-view.cc                            | 11 ++++++-----
+ test/test-object.c                | 22 +++++++++++-----------
+ test/test-unicode.c               |  4 ++--
  9 files changed, 48 insertions(+), 46 deletions(-)
 
 commit e3693b72f0651985d4f619cde668611639dca885
  9 files changed, 48 insertions(+), 46 deletions(-)
 
 commit e3693b72f0651985d4f619cde668611639dca885
@@ -16286,8 +27850,8 @@ Date:   Wed Jun 15 09:33:52 2011 -0400
 
     Change a couple strstr() to strchr()
 
 
     Change a couple strstr() to strchr()
 
- src/hb-ot-tag.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-tag.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit b9452bfc1696457e156e79037c863903da5454fc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b9452bfc1696457e156e79037c863903da5454fc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16295,17 +27859,17 @@ Date: Tue Jun 14 14:47:07 2011 -0400
 
     Fix compiler warnings with -pedantic
 
 
     Fix compiler warnings with -pedantic
 
- src/hb-blob.cc                          |   18 +++++++++---------
- src/hb-glib.cc                          |   20 ++++++++++----------
- src/hb-icu.cc                   |   20 ++++++++++----------
- src/hb-object-private.hh        |    2 +-
- src/hb-open-type-private.hh     |   14 +++++++-------
- src/hb-ot-layout-gdef-private.hh |    2 +-
- src/hb-ot-layout.cc             |    2 +-
- src/hb-ot-map-private.hh        |    2 +-
- src/hb-ot-shape-complex-indic.cc |    8 ++++----
- src/hb-ot-shape-private.hh      |    2 +-
- src/hb-ot-shape.cc              |    2 +-
+ src/hb-blob.cc                          | 18 +++++++++---------
+ src/hb-glib.cc                          | 20 ++++++++++----------
+ src/hb-icu.cc                   | 20 ++++++++++----------
+ src/hb-object-private.hh        |  2 +-
+ src/hb-open-type-private.hh     | 14 +++++++-------
+ src/hb-ot-layout-gdef-private.hh |  2 +-
+ src/hb-ot-layout.cc             |  2 +-
+ src/hb-ot-map-private.hh        |  2 +-
+ src/hb-ot-shape-complex-indic.cc |  8 ++++----
+ src/hb-ot-shape-private.hh      |  2 +-
+ src/hb-ot-shape.cc              |  2 +-
  11 files changed, 46 insertions(+), 46 deletions(-)
 
 commit 970e092dc23cbeb7897d4c7bb58c042209f518fb
  11 files changed, 46 insertions(+), 46 deletions(-)
 
 commit 970e092dc23cbeb7897d4c7bb58c042209f518fb
@@ -16314,8 +27878,8 @@ Date:   Tue Jun 14 14:35:44 2011 -0400
 
     Remove extra semicolon
 
 
     Remove extra semicolon
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 81426808020e2b88f008480bd63519aa68c579a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81426808020e2b88f008480bd63519aa68c579a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16334,8 +27898,8 @@ Date:   Fri Jun 10 23:08:54 2011 -0400
 
     GNOME Bug 652227 - Unconditional use of stdint.h
 
 
     GNOME Bug 652227 - Unconditional use of stdint.h
 
- src/hb-common.h |   33 ++++++++++++++++++++++-----------
- 1 files changed, 22 insertions(+), 11 deletions(-)
+ src/hb-common.h | 33 ++++++++++++++++++++++-----------
+ 1 file changed, 22 insertions(+), 11 deletions(-)
 
 commit 20503ccd578c9983162857954e3236413469ed35
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20503ccd578c9983162857954e3236413469ed35
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16343,9 +27907,9 @@ Date:   Tue Jun 7 17:02:48 2011 -0400
 
     More Indic data shuffling
 
 
     More Indic data shuffling
 
- src/hb-ot-shape-complex-indic.cc |   74
- +++++++++++++++++++++++++------------
- 1 files changed, 50 insertions(+), 24 deletions(-)
+ src/hb-ot-shape-complex-indic.cc | 74
+ +++++++++++++++++++++++++++-------------
+ 1 file changed, 50 insertions(+), 24 deletions(-)
 
 commit 63b177e45c2405272da3fa6c26fe11ae37950bd0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 63b177e45c2405272da3fa6c26fe11ae37950bd0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16353,8 +27917,8 @@ Date:   Tue Jun 7 15:51:40 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit b9ddbd55930228422e82b34a141ad1b6093f5376
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b9ddbd55930228422e82b34a141ad1b6093f5376
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16371,14 +27935,14 @@ Date: Thu Jun 2 17:43:12 2011 -0400
     by the shaper.  Also hooked up the shaper, but it does not do anything
     right now.
 
     by the shaper.  Also hooked up the shaper, but it does not do anything
     right now.
 
- src/Makefile.am                       |    3 +
- src/gen-indic-table.py                        |  201 ++++++++
- src/hb-ot-shape-complex-arabic.cc     |    4 +-
- src/hb-ot-shape-complex-indic-table.hh |  834
- ++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-indic.cc      |  141 ++++++
- src/hb-ot-shape-complex-private.hh    |   58 ++-
- src/hb-ot-shape-private.hh            |    3 +-
+ src/Makefile.am                       |   3 +
+ src/gen-indic-table.py                        | 201 ++++++++
+ src/hb-ot-shape-complex-arabic.cc     |   4 +-
+ src/hb-ot-shape-complex-indic-table.hh | 834
+ +++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc      | 141 ++++++
+ src/hb-ot-shape-complex-private.hh    |  58 ++-
+ src/hb-ot-shape-private.hh            |   3 +-
  7 files changed, 1237 insertions(+), 7 deletions(-)
 
 commit 697a65c5f5cda53bc68720886a253a019e8212a8
  7 files changed, 1237 insertions(+), 7 deletions(-)
 
 commit 697a65c5f5cda53bc68720886a253a019e8212a8
@@ -16387,8 +27951,8 @@ Date:   Wed Jun 1 20:52:00 2011 -0400
 
     Minor
 
 
     Minor
 
- src/gen-arabic-table.py                |   21 +++++++++++++--------
- src/hb-ot-shape-complex-arabic-table.hh |    9 ++++-----
+ src/gen-arabic-table.py                | 21 +++++++++++++--------
+ src/hb-ot-shape-complex-arabic-table.hh |  9 ++++-----
  2 files changed, 17 insertions(+), 13 deletions(-)
 
 commit 9de1481f2bbbf2a174280b849628612f36a2f701
  2 files changed, 17 insertions(+), 13 deletions(-)
 
 commit 9de1481f2bbbf2a174280b849628612f36a2f701
@@ -16397,9 +27961,9 @@ Date:   Wed Jun 1 20:45:14 2011 -0400
 
     Update to ArabicShaping-6.1.0d2.txt
 
 
     Update to ArabicShaping-6.1.0d2.txt
 
- src/hb-ot-shape-complex-arabic-table.hh |  307
- ++++++++++++++++++++-----------
- 1 files changed, 197 insertions(+), 110 deletions(-)
+ src/hb-ot-shape-complex-arabic-table.hh | 307
+ ++++++++++++++++++++------------
+ 1 file changed, 197 insertions(+), 110 deletions(-)
 
 commit 9d49433efba2217852f4e44f056465b451961c49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9d49433efba2217852f4e44f056465b451961c49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16407,12 +27971,12 @@ Date: Wed Jun 1 18:10:10 2011 -0400
 
     Minor rename
 
 
     Minor rename
 
- src/Makefile.am                        |    2 +-
- src/gen-arabic-joining-table.py        |   83
- -------------------------------
- src/gen-arabic-table.py                |   83
- +++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-arabic-table.hh |    2 +-
+ src/Makefile.am                        |  2 +-
+ src/gen-arabic-joining-table.py        | 83
+ ---------------------------------
+ src/gen-arabic-table.py                | 83
+ +++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-arabic-table.hh |  2 +-
  4 files changed, 85 insertions(+), 85 deletions(-)
 
 commit 0eafce56eed4c5166ee5b97b121a452ffd292a7a
  4 files changed, 85 insertions(+), 85 deletions(-)
 
 commit 0eafce56eed4c5166ee5b97b121a452ffd292a7a
@@ -16421,8 +27985,8 @@ Date:   Wed Jun 1 12:44:30 2011 -0400
 
     [TODO] New items
 
 
     [TODO] New items
 
- TODO |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ TODO | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 89a2bc9ba674e7e57fec1fd8ce7648a44f3aab63
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 89a2bc9ba674e7e57fec1fd8ce7648a44f3aab63
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16432,8 +27996,8 @@ Date:   Tue May 31 15:18:13 2011 -0400
 
     We apply all of vert, vrt2, vkrn, valt, and vpal.
 
 
     We apply all of vert, vrt2, vkrn, valt, and vpal.
 
- TODO              |    7 -------
- src/hb-ot-shape.cc |  50
+ TODO              |  7 -------
+ src/hb-ot-shape.cc | 50
  +++++++++++++++++++++++++++++++++++++++++---------
  2 files changed, 41 insertions(+), 16 deletions(-)
 
  +++++++++++++++++++++++++++++++++++++++++---------
  2 files changed, 41 insertions(+), 16 deletions(-)
 
@@ -16443,8 +28007,8 @@ Date:   Tue May 31 12:59:17 2011 -0400
 
     [hb-view] Add --face-index to choose a face in a TrueType Collection
 
 
     [hb-view] Add --face-index to choose a face in a TrueType Collection
 
- src/hb-view.cc |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-view.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit 4f28fbdd804fabeec57a98fe267d892ab58b3a6d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4f28fbdd804fabeec57a98fe267d892ab58b3a6d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16456,9 +28020,9 @@ Date:   Tue May 31 12:33:11 2011 -0400
 
     Reported by Grigori Goronzy.
 
 
     Reported by Grigori Goronzy.
 
- src/hb-open-file-private.hh     |    6 +++---
- src/hb-open-type-private.hh     |    2 +-
- src/hb-ot-layout-gdef-private.hh |    6 +++---
+ src/hb-open-file-private.hh     | 6 +++---
+ src/hb-open-type-private.hh     | 2 +-
+ src/hb-ot-layout-gdef-private.hh | 6 +++---
  3 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 21deab2bdc58d8e9f1a3ba1f9c61c30a79e288a1
  3 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 21deab2bdc58d8e9f1a3ba1f9c61c30a79e288a1
@@ -16471,8 +28035,8 @@ Date:   Mon May 30 11:08:40 2011 -0400
 
     Reported by Tom Hacohen.
 
 
     Reported by Tom Hacohen.
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 51881a61ca96c3328e2d92927a5a61e60997a429
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 51881a61ca96c3328e2d92927a5a61e60997a429
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16480,8 +28044,8 @@ Date:   Fri May 27 18:15:56 2011 -0400
 
     Shrink code size
 
 
     Shrink code size
 
- src/hb-ot-map-private.hh |   11 +----------
- src/hb-ot-map.cc        |   11 +++++++++++
+ src/hb-ot-map-private.hh | 11 +----------
+ src/hb-ot-map.cc        | 11 +++++++++++
  2 files changed, 12 insertions(+), 10 deletions(-)
 
 commit 90645fb24bcbb78183576d3641a99560d87e49f2
  2 files changed, 12 insertions(+), 10 deletions(-)
 
 commit 90645fb24bcbb78183576d3641a99560d87e49f2
@@ -16492,13 +28056,13 @@ Date: Fri May 27 18:13:31 2011 -0400
 
     Respectively, separate planner from the actual plan.
 
 
     Respectively, separate planner from the actual plan.
 
- src/hb-ot-map-private.hh          |  121
- +++++++++++++++++++----------------
- src/hb-ot-map.cc                  |   33 +++++-----
- src/hb-ot-shape-complex-arabic.cc  |   6 +-
- src/hb-ot-shape-complex-private.hh |   8 +-
- src/hb-ot-shape-private.hh        |   22 +++++++
- src/hb-ot-shape.cc                |   28 +++++----
+ src/hb-ot-map-private.hh          | 121
+ ++++++++++++++++++++-----------------
+ src/hb-ot-map.cc                  |  33 +++++-----
+ src/hb-ot-shape-complex-arabic.cc  |  6 +-
+ src/hb-ot-shape-complex-private.hh |  8 +--
+ src/hb-ot-shape-private.hh        |  22 +++++++
+ src/hb-ot-shape.cc                |  28 +++++----
  6 files changed, 127 insertions(+), 91 deletions(-)
 
 commit 5560a19e2b3901437d8ee2e5905b4ac77073bfbe
  6 files changed, 127 insertions(+), 91 deletions(-)
 
 commit 5560a19e2b3901437d8ee2e5905b4ac77073bfbe
@@ -16507,8 +28071,8 @@ Date:   Fri May 27 17:49:16 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-view.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-view.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1587c26fe94087040b4a5d682ec196f568e4a1a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1587c26fe94087040b4a5d682ec196f568e4a1a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16516,8 +28080,8 @@ Date:   Fri May 27 16:05:01 2011 -0400
 
     [TODO] Add item
 
 
     [TODO] Add item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5c9f14932d59e306fbc72f7daecb384a16da73d9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c9f14932d59e306fbc72f7daecb384a16da73d9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16525,8 +28089,8 @@ Date:   Fri May 27 15:59:33 2011 -0400
 
     Minor
 
 
     Minor
 
- Makefile.am |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5bc18195d55570ef01e4b24dd248f222f081b0a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5bc18195d55570ef01e4b24dd248f222f081b0a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16534,14 +28098,14 @@ Date: Fri May 27 15:58:54 2011 -0400
 
     Add check-includes.sh
 
 
     Add check-includes.sh
 
- src/Makefile.am              |    7 ++++++
- src/check-c-linkage-decls.sh  |    6 ++++-
- src/check-header-guards.sh    |    8 ++++++-
- src/check-includes.sh        |   42
- +++++++++++++++++++++++++++++++++++++++++
- src/check-internal-symbols.sh |    8 +++---
- src/check-libstdc++.sh        |    7 +++--
- src/hb-ot-shape.h            |    1 +
+ src/Makefile.am              |  7 +++++++
+ src/check-c-linkage-decls.sh  |  6 +++++-
+ src/check-header-guards.sh    |  8 +++++++-
+ src/check-includes.sh        | 42
+ ++++++++++++++++++++++++++++++++++++++++++
+ src/check-internal-symbols.sh |  8 ++++----
+ src/check-libstdc++.sh        |  7 ++++---
+ src/hb-ot-shape.h            |  1 +
  7 files changed, 70 insertions(+), 9 deletions(-)
 
 commit 3f12c434e20261f6d5c600e56575b7dfdd5b1470
  7 files changed, 70 insertions(+), 9 deletions(-)
 
 commit 3f12c434e20261f6d5c600e56575b7dfdd5b1470
@@ -16550,8 +28114,8 @@ Date:   Fri May 27 04:58:11 2011 -0400
 
     [configure] Generate sha256sum and GPG-sign it
 
 
     [configure] Generate sha256sum and GPG-sign it
 
- Makefile.am |  29 ++++++++++++++++++++++++++++-
- 1 files changed, 28 insertions(+), 1 deletions(-)
+ Makefile.am | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
 
 commit 75ba4073ca6f72c135927d9314197a605281b789
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 75ba4073ca6f72c135927d9314197a605281b789
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16559,8 +28123,8 @@ Date:   Fri May 27 03:58:17 2011 -0400
 
     [test] Rename valgrind-log to log-vaglring.txt
 
 
     [test] Rename valgrind-log to log-vaglring.txt
 
- test/Makefile.am |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ test/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit e3b0ba8e292e6a90666cfbbab6faf11ae11f9ddb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e3b0ba8e292e6a90666cfbbab6faf11ae11f9ddb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16568,8 +28132,8 @@ Date:   Fri May 27 03:56:37 2011 -0400
 
     Minor
 
 
     Minor
 
- harfbuzz.doap |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ harfbuzz.doap | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 595dc63eee926a0e0fee26f8225b5fbe00610fcb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 595dc63eee926a0e0fee26f8225b5fbe00610fcb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16577,8 +28141,8 @@ Date:   Fri May 27 04:14:12 2011 -0400
 
     Bump version to 0.7.0 to open up for development
 
 
     Bump version to 0.7.0 to open up for development
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f24557604281356131618546332d7ee3a0c8abef
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f24557604281356131618546332d7ee3a0c8abef
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16591,10 +28155,10 @@ Date: Wed May 25 16:08:06 2011 -0400
 
     Update NEWS.
 
 
     Update NEWS.
 
- NEWS        |  262
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- configure.ac |    2 +-
- 2 files changed, 263 insertions(+), 1 deletions(-)
+ NEWS        | 262
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac |   2 +-
+ 2 files changed, 263 insertions(+), 1 deletion(-)
 
 commit 654f88fbc9bcb54f9bd2d5586236234e03424044
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 654f88fbc9bcb54f9bd2d5586236234e03424044
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16604,8 +28168,8 @@ Date:   Fri May 27 03:38:46 2011 -0400
 
     Caught by "make check-symbols".
 
 
     Caught by "make check-symbols".
 
- test/test-common.c |   6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ test/test-common.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 18bced134fc3379c9124ba029e22ff3f6434ca0f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 18bced134fc3379c9124ba029e22ff3f6434ca0f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16615,8 +28179,8 @@ Date:   Fri May 27 03:38:30 2011 -0400
 
     Shows undocumented symbols.
 
 
     Shows undocumented symbols.
 
- test/Makefile.am |   37 +++++++++++++++++++++----------------
- 1 files changed, 21 insertions(+), 16 deletions(-)
+ test/Makefile.am | 37 +++++++++++++++++++++----------------
+ 1 file changed, 21 insertions(+), 16 deletions(-)
 
 commit 376dafa6ed414e368e9dc1d5a2e0bfc8e55f410d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 376dafa6ed414e368e9dc1d5a2e0bfc8e55f410d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16624,8 +28188,8 @@ Date:   Fri May 27 03:35:58 2011 -0400
 
     Hide internal symbols
 
 
     Hide internal symbols
 
- src/hb-ot-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 0e482ec6ba30b613f2d7ee97c61be458c5aebcd6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e482ec6ba30b613f2d7ee97c61be458c5aebcd6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16635,9 +28199,9 @@ Date:   Fri May 27 02:46:28 2011 -0400
 
     Caught by "make check-valgrind".
 
 
     Caught by "make check-valgrind".
 
- test/Makefile.am    |   2 +-
- test/test-unicode.c |   2 --
- 2 files changed, 1 insertions(+), 3 deletions(-)
+ test/Makefile.am    | 2 +-
+ test/test-unicode.c | 2 --
+ 2 files changed, 1 insertion(+), 3 deletions(-)
 
 commit 28b1bac5415774cf892c9cc0afcac1324c2093f5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 28b1bac5415774cf892c9cc0afcac1324c2093f5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16648,11 +28212,12 @@ Date: Fri May 27 02:44:29 2011 -0400
     Adds check-valgrind among other modes.  We do not run under gtester by
     default anymore.
 
     Adds check-valgrind among other modes.  We do not run under gtester by
     default anymore.
 
- Makefile.am       |    2 +
- test/Makefile.am   |  48 ++++++++++++++++++++++++++--
- test/Makefile.decl |  90
- ----------------------------------------------------
- 3 files changed, 47 insertions(+), 93 deletions(-)
+ Makefile.am                |  2 +
+ test/.valgrind-suppressions | 0
+ test/Makefile.am           | 48 ++++++++++++++++++++++--
+ test/Makefile.decl         | 90
+ ---------------------------------------------
+ 4 files changed, 47 insertions(+), 93 deletions(-)
 
 commit adbc97ddde27cf609d95d3249f3ea8060a6e1d20
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit adbc97ddde27cf609d95d3249f3ea8060a6e1d20
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16662,8 +28227,8 @@ Date:   Fri May 27 01:33:18 2011 -0400
 
     We're not at 100% coverage yet, so do not enable the test by default.
 
 
     We're not at 100% coverage yet, so do not enable the test by default.
 
- test/Makefile.am |   21 +++++++++++++++++++++
- 1 files changed, 21 insertions(+), 0 deletions(-)
+ test/Makefile.am | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
 
 commit 9313b9aa66a82fd3fa60d8417c22a5350e5a8791
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9313b9aa66a82fd3fa60d8417c22a5350e5a8791
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16671,10 +28236,10 @@ Date: Fri May 27 01:00:55 2011 -0400
 
     [test/version] Test hb-version.h
 
 
     [test/version] Test hb-version.h
 
- test/Makefile.am    |   1 +
- test/test-version.c |  80
- +++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 81 insertions(+), 0 deletions(-)
+ test/Makefile.am    | 1 +
+ test/test-version.c | 80
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 81 insertions(+)
 
 commit 329c15714be90d3fc2d9054f80cb14fa325dc959
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 329c15714be90d3fc2d9054f80cb14fa325dc959
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16685,8 +28250,8 @@ Date:   Wed May 25 16:07:07 2011 -0400
     The versioning is automatic.  For now, soname-major is 0.  With
     the 1.0.0 release it will jump to 1 and stay there forever.
 
     The versioning is automatic.  For now, soname-major is 0.  With
     the 1.0.0 release it will jump to 1 and stay there forever.
 
- configure.ac   |   26 +++++++++++++++++++++-----
- src/Makefile.am |    1 +
+ configure.ac   | 26 +++++++++++++++++++++-----
+ src/Makefile.am |  1 +
  2 files changed, 22 insertions(+), 5 deletions(-)
 
 commit 5b21eff8c4a00962d4315a47a65a143abe323299
  2 files changed, 22 insertions(+), 5 deletions(-)
 
 commit 5b21eff8c4a00962d4315a47a65a143abe323299
@@ -16695,9 +28260,9 @@ Date:   Wed May 25 14:49:35 2011 -0400
 
     Update README, etc
 
 
     Update README, etc
 
- COPYING      |    1 +
- README       |    8 +++-----
- configure.ac |    2 +-
+ COPYING      | 1 +
+ README       | 8 +++-----
+ configure.ac | 2 +-
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 5bf56ea056b30fba8e07e82ec818c430cab8cafd
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 5bf56ea056b30fba8e07e82ec818c430cab8cafd
@@ -16706,9 +28271,9 @@ Date:   Wed May 25 14:43:10 2011 -0400
 
     [TODO] Add item
 
 
     [TODO] Add item
 
- TODO             |    2 ++
- test/test-shape.c |   2 ++
- 2 files changed, 4 insertions(+), 0 deletions(-)
+ TODO             | 2 ++
+ test/test-shape.c | 2 ++
+ 2 files changed, 4 insertions(+)
 
 commit 2d8ebcb9d089c2cfbefac71ca6350e2703ab13e3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2d8ebcb9d089c2cfbefac71ca6350e2703ab13e3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16720,12 +28285,12 @@ Date: Wed May 25 11:27:33 2011 -0400
     modification of the font-funcs API to simplify.  Expect no more
     changes around here.
 
     modification of the font-funcs API to simplify.  Expect no more
     changes around here.
 
- src/hb-font.cc    |  107
- +++++++++++++++++-----------------------------------
- src/hb-font.h    |   50 +++++++++++--------------
- src/hb-ft.cc     |   26 +++++-------
- test/test-font.c  |   27 ++++++-------
- test/test-shape.c |   21 +++++-----
+ src/hb-font.cc    | 107
+ ++++++++++++++++++------------------------------------
+ src/hb-font.h    |  50 +++++++++++--------------
+ src/hb-ft.cc     |  26 ++++++-------
+ test/test-font.c  |  27 +++++++-------
+ test/test-shape.c |  21 +++++------
  5 files changed, 91 insertions(+), 140 deletions(-)
 
 commit d31691296f7d3051fcd345bf1325d17835484b50
  5 files changed, 91 insertions(+), 140 deletions(-)
 
 commit d31691296f7d3051fcd345bf1325d17835484b50
@@ -16734,9 +28299,9 @@ Date:   Wed May 25 11:01:32 2011 -0400
 
     [test] Update to API changes
 
 
     [test] Update to API changes
 
- test/test-font.c  |   72
- ++++++++++++++++++++--------------------------------
- test/test-shape.c |   35 +++++++++++--------------
+ test/test-font.c  | 72
+ ++++++++++++++++++++++---------------------------------
+ test/test-shape.c | 35 +++++++++++++--------------
  2 files changed, 44 insertions(+), 63 deletions(-)
 
 commit 7403e055cd1463f38215ad9faedd61c3e1b66ac5
  2 files changed, 44 insertions(+), 63 deletions(-)
 
 commit 7403e055cd1463f38215ad9faedd61c3e1b66ac5
@@ -16752,9 +28317,9 @@ Date:   Tue May 24 21:04:15 2011 -0400
     regress with fonts like DejaVuSansMono that explicitly
     decrease the mark advance width to set it to zero.
 
     regress with fonts like DejaVuSansMono that explicitly
     decrease the mark advance width to set it to zero.
 
- src/hb-ot-layout-gpos-private.hh |  167
- ++++++++++++++++++++++----------------
- src/hb-ot-shape.cc              |    9 ++-
+ src/hb-ot-layout-gpos-private.hh | 167
+ +++++++++++++++++++++++----------------
+ src/hb-ot-shape.cc              |   9 ++-
  2 files changed, 103 insertions(+), 73 deletions(-)
 
 commit ff7cbd0219a7c260612c53b3bed343747d79ec4e
  2 files changed, 103 insertions(+), 73 deletions(-)
 
 commit ff7cbd0219a7c260612c53b3bed343747d79ec4e
@@ -16763,8 +28328,8 @@ Date:   Wed May 25 09:56:06 2011 -0400
 
     [TODO] Update
 
 
     [TODO] Update
 
- TODO |   14 ++++++++++++--
- 1 files changed, 12 insertions(+), 2 deletions(-)
+ TODO | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
 
 commit 3b0bb855e011099f1a4c77ffc5214c658e280b2d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3b0bb855e011099f1a4c77ffc5214c658e280b2d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16773,8 +28338,8 @@ Date:   Fri May 20 15:59:59 2011 -0400
     [Vertical] GPOS x/y advance adjustments only apply in hori/vert
     respectively
 
     [Vertical] GPOS x/y advance adjustments only apply in hori/vert
     respectively
 
- src/hb-ot-layout-gpos-private.hh |   31 +++++++++++++++++++++----------
- 1 files changed, 21 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 31 +++++++++++++++++++++----------
+ 1 file changed, 21 insertions(+), 10 deletions(-)
 
 commit cc2086d67ce559878a5ce2b41d89a37eabac90b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc2086d67ce559878a5ce2b41d89a37eabac90b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16782,8 +28347,8 @@ Date:   Thu May 19 19:19:50 2011 -0400
 
     [Vertical] Fix GPOS y-advance direction
 
 
     [Vertical] Fix GPOS y-advance direction
 
- src/hb-ot-layout-gpos-private.hh |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 67d51ff96154c8909734046601e439dd8f6a86df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 67d51ff96154c8909734046601e439dd8f6a86df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16791,8 +28356,8 @@ Date:   Thu May 19 19:08:57 2011 -0400
 
     [Vertical] Do fallback origin calculation
 
 
     [Vertical] Do fallback origin calculation
 
- src/hb-font.cc |   32 +++++++++++++++++++++++++++-----
- 1 files changed, 27 insertions(+), 5 deletions(-)
+ src/hb-font.cc | 32 +++++++++++++++++++++++++++-----
+ 1 file changed, 27 insertions(+), 5 deletions(-)
 
 commit 60fbb36096e344e9af79409ce8cfe3f1f7b0d321
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60fbb36096e344e9af79409ce8cfe3f1f7b0d321
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16800,15 +28365,15 @@ Date: Thu May 19 18:46:15 2011 -0400
 
     [Vertical] GPOS is always done with horizontal origin
 
 
     [Vertical] GPOS is always done with horizontal origin
 
- src/hb-font-private.hh                  |    4 +-
- src/hb-font.cc                          |  187
- ++++++++++++++++++--------------------
- src/hb-font.h                   |   53 +++++------
- src/hb-ft.cc                    |   47 ++++------
- src/hb-ot-layout-gdef-private.hh |   18 ++--
- src/hb-ot-layout-gpos-private.hh |   23 ++---
- src/hb-ot-layout.h              |    2 +-
- src/hb-ot-shape.cc              |   15 +++
+ src/hb-font-private.hh                  |   4 +-
+ src/hb-font.cc                          | 187
+ ++++++++++++++++++---------------------
+ src/hb-font.h                   |  53 ++++++-----
+ src/hb-ft.cc                    |  47 ++++------
+ src/hb-ot-layout-gdef-private.hh |  18 ++--
+ src/hb-ot-layout-gpos-private.hh |  23 ++---
+ src/hb-ot-layout.h              |   2 +-
+ src/hb-ot-shape.cc              |  15 ++++
  8 files changed, 166 insertions(+), 183 deletions(-)
 
 commit 8b38faeede41e64eb0f6ac2e12ce51dd7138d50a
  8 files changed, 166 insertions(+), 183 deletions(-)
 
 commit 8b38faeede41e64eb0f6ac2e12ce51dd7138d50a
@@ -16821,10 +28386,10 @@ Date: Thu May 19 13:08:00 2011 -0400
 
     I think I know wheere to go now.
 
 
     I think I know wheere to go now.
 
- src/hb-font.cc     |  44 ++++++++++++++++++++++++++++++++------------
- src/hb-font.h     |   10 ++++++++++
- src/hb-ft.cc      |   14 ++++++++++++--
- src/hb-ot-shape.cc |   4 ++++
+ src/hb-font.cc     | 44 ++++++++++++++++++++++++++++++++------------
+ src/hb-font.h     | 10 ++++++++++
+ src/hb-ft.cc      | 14 ++++++++++++--
+ src/hb-ot-shape.cc |  4 ++++
  4 files changed, 58 insertions(+), 14 deletions(-)
 
 commit e609aeb1e24da6b7c812396cddb93ee3c95ef87a
  4 files changed, 58 insertions(+), 14 deletions(-)
 
 commit e609aeb1e24da6b7c812396cddb93ee3c95ef87a
@@ -16835,8 +28400,8 @@ Date:   Wed May 18 10:17:02 2011 -0400
 
     Currently it only marks glyph origins.
 
 
     Currently it only marks glyph origins.
 
- src/hb-view.cc |   20 +++++++++++++++++++-
- 1 files changed, 19 insertions(+), 1 deletions(-)
+ src/hb-view.cc | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
 
 commit b8d76dd74e50d295918cc015e9d2a55e2bf6a461
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b8d76dd74e50d295918cc015e9d2a55e2bf6a461
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16846,8 +28411,8 @@ Date:   Tue May 17 23:31:00 2011 -0400
 
     The base for vertical is almost ready now.
 
 
     The base for vertical is almost ready now.
 
- src/hb-font.cc |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-font.cc | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit 190981851fe2bb6479b5c72451279f66fe4f6e23
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 190981851fe2bb6479b5c72451279f66fe4f6e23
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16855,9 +28420,9 @@ Date:   Tue May 17 23:27:22 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-font.cc |  114
- ++++++++++++++++++++++++++++----------------------------
- src/hb-ft.cc  |   36 ++++++++---------
+ src/hb-font.cc | 114
+ ++++++++++++++++++++++++++++-----------------------------
+ src/hb-ft.cc  |  36 +++++++++---------
  2 files changed, 74 insertions(+), 76 deletions(-)
 
 commit 2c3f51a11c176aa3fc12a9522325efaef2c79d35
  2 files changed, 74 insertions(+), 76 deletions(-)
 
 commit 2c3f51a11c176aa3fc12a9522325efaef2c79d35
@@ -16866,8 +28431,8 @@ Date:   Tue May 17 23:23:27 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-font.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-font.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 7e2c85de305be59e1a6afa7d2061e4b7dd00acf7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7e2c85de305be59e1a6afa7d2061e4b7dd00acf7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16878,14 +28443,14 @@ Date: Tue May 17 17:55:03 2011 -0400
     I like this API *much* better.  Implementation still incomplete, but
     horizontal works.
 
     I like this API *much* better.  Implementation still incomplete, but
     horizontal works.
 
- src/hb-font-private.hh                  |    7 +-
- src/hb-font.cc                          |  185
- ++++++++++++++++++++++---------------
- src/hb-font.h                   |  109 ++++++++++++----------
- src/hb-ft.cc                    |   66 ++++++++------
- src/hb-ot-layout-gdef-private.hh |    2 +-
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-shape.cc              |    8 +-
+ src/hb-font-private.hh                  |   7 +-
+ src/hb-font.cc                          | 185
+ +++++++++++++++++++++++----------------
+ src/hb-font.h                   | 109 ++++++++++++-----------
+ src/hb-ft.cc                    |  66 ++++++++------
+ src/hb-ot-layout-gdef-private.hh |   2 +-
+ src/hb-ot-layout-gpos-private.hh |   2 +-
+ src/hb-ot-shape.cc              |   8 +-
  7 files changed, 218 insertions(+), 161 deletions(-)
 
 commit 744970af4d884cc87ffa645804578fec8df674a9
  7 files changed, 218 insertions(+), 161 deletions(-)
 
 commit 744970af4d884cc87ffa645804578fec8df674a9
@@ -16897,19 +28462,19 @@ Date: Mon May 16 18:15:37 2011 -0400
     Design not final yet, and in fact I'm going to change it immediately,
     but this is an standalone change for itself.
 
     Design not final yet, and in fact I'm going to change it immediately,
     but this is an standalone change for itself.
 
- src/hb-font-private.hh                      |   35 ++--
- src/hb-font.cc                              |  387
- +++++++++++++++++++++++++---------
- src/hb-font.h                       |  164 +++++++++++----
- src/hb-ft.cc                        |  227 +++++++++++++-------
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gpos-private.hh     |   35 ++--
- src/hb-ot-layout-gsub-private.hh     |    1 +
- src/hb-ot-layout-gsubgpos-private.hh |    1 +
- src/hb-ot-shape.cc                  |   14 +-
- src/hb-ot-tag.cc                    |    2 +-
- test/test-font.c                    |   61 +++---
- test/test-shape.c                   |   17 +-
+ src/hb-font-private.hh                      |  35 ++--
+ src/hb-font.cc                              | 387
+ +++++++++++++++++++++++++----------
+ src/hb-font.h                       | 164 +++++++++++----
+ src/hb-ft.cc                        | 227 +++++++++++++-------
+ src/hb-ot-layout-gdef-private.hh     |   2 +-
+ src/hb-ot-layout-gpos-private.hh     |  35 ++--
+ src/hb-ot-layout-gsub-private.hh     |   1 +
+ src/hb-ot-layout-gsubgpos-private.hh |   1 +
+ src/hb-ot-shape.cc                  |  14 +-
+ src/hb-ot-tag.cc                    |   2 +-
+ test/test-font.c                    |  61 +++---
+ test/test-shape.c                   |  17 +-
  12 files changed, 650 insertions(+), 296 deletions(-)
 
 commit 80dce8b7c8202766d52cc7666355446bbf5b0565
  12 files changed, 650 insertions(+), 296 deletions(-)
 
 commit 80dce8b7c8202766d52cc7666355446bbf5b0565
@@ -16918,8 +28483,8 @@ Date:   Tue May 17 17:08:36 2011 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5be7d047f6bf54cc577e311b5426c463d2b9b131
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5be7d047f6bf54cc577e311b5426c463d2b9b131
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16929,8 +28494,8 @@ Date:   Tue May 17 15:05:34 2011 -0400
 
     Apparently there exist systems with mprotect(), but not mmap()?
 
 
     Apparently there exist systems with mprotect(), but not mmap()?
 
- configure.ac    |    2 +-
- test/test-blob.c |    6 ++++--
+ configure.ac    | 2 +-
+ test/test-blob.c | 6 ++++--
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 4053f3f788353448b41e541ee617aafbe1cac366
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 4053f3f788353448b41e541ee617aafbe1cac366
@@ -16939,8 +28504,8 @@ Date:   Mon May 16 16:20:48 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-font.h    |    8 ++++----
- test/test-shape.c |   6 +++---
+ src/hb-font.h    | 8 ++++----
+ test/test-shape.c | 6 +++---
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 56d12e0356bee5a95b870dfbc2100b8caeb5d593
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 56d12e0356bee5a95b870dfbc2100b8caeb5d593
@@ -16949,8 +28514,8 @@ Date:   Mon May 16 16:01:58 2011 -0400
 
     Remove unnecessary TODO item
 
 
     Remove unnecessary TODO item
 
- src/hb-ft.cc |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ft.cc | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 1883af3796459cafe2d194064403b6b1152c584d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1883af3796459cafe2d194064403b6b1152c584d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16958,8 +28523,8 @@ Date:   Mon May 16 15:18:16 2011 -0400
 
     [hb-view] Start work on vertical support
 
 
     [hb-view] Start work on vertical support
 
- src/hb-view.cc |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-view.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit 9aa6f96af5e5940ba5c9596c6ae377fea23c0ec0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9aa6f96af5e5940ba5c9596c6ae377fea23c0ec0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16967,8 +28532,8 @@ Date:   Mon May 16 15:08:31 2011 -0400
 
     [hb-view] No need to allocate an extra glyph item at the end
 
 
     [hb-view] No need to allocate an extra glyph item at the end
 
- src/hb-view.cc |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-view.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit a0359485c9997e3a211f7c00d40c09074d906c4f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a0359485c9997e3a211f7c00d40c09074d906c4f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16976,8 +28541,8 @@ Date:   Mon May 16 15:07:48 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-shape.c |   6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ test/test-shape.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 92de53ea450eaee077eb1730e6d7a487b20ac721
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 92de53ea450eaee077eb1730e6d7a487b20ac721
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16985,8 +28550,8 @@ Date:   Mon May 16 12:24:56 2011 -0400
 
     [test/buffer] Add more tests for nil buffer
 
 
     [test/buffer] Add more tests for nil buffer
 
- test/test-buffer.c |  38 ++++++++++++++++++++++++++++++++++++++
- 1 files changed, 38 insertions(+), 0 deletions(-)
+ test/test-buffer.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
 
 commit 065fb38c9a338ddb095f2ec9e034fcc5a02167bd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 065fb38c9a338ddb095f2ec9e034fcc5a02167bd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -16994,8 +28559,8 @@ Date:   Fri May 13 23:04:46 2011 -0400
 
     [test/ot-tag] More tests
 
 
     [test/ot-tag] More tests
 
- test/test-ot-tag.c |   9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ test/test-ot-tag.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 1a64f6e19a4b483e278c85e4941107be2f71b0a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1a64f6e19a4b483e278c85e4941107be2f71b0a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17003,11 +28568,11 @@ Date: Fri May 13 22:55:32 2011 -0400
 
     [API] Add HB_LANGUAGE_INVALID
 
 
     [API] Add HB_LANGUAGE_INVALID
 
- src/hb-common.cc   |   5 +++--
- src/hb-common.h    |   2 ++
- src/hb-ot-tag.cc   |   2 +-
- src/hb-shape.cc    |   2 +-
- test/test-common.c |   9 ++++++---
+ src/hb-common.cc   | 5 +++--
+ src/hb-common.h    | 2 ++
+ src/hb-ot-tag.cc   | 2 +-
+ src/hb-shape.cc    | 2 +-
+ test/test-common.c | 9 ++++++---
  5 files changed, 13 insertions(+), 7 deletions(-)
 
 commit 40b5c2e86c633441040196d158e965ad95d6ad37
  5 files changed, 13 insertions(+), 7 deletions(-)
 
 commit 40b5c2e86c633441040196d158e965ad95d6ad37
@@ -17018,10 +28583,10 @@ Date: Fri May 13 22:46:36 2011 -0400
 
     I'm in awe with how many bugs this test revealed.  All fixed.
 
 
     I'm in awe with how many bugs this test revealed.  All fixed.
 
- src/hb-ot-tag.cc   |  153 +++++++++++++++++++++--------------
- test/Makefile.am   |   3 +
- test/test-ot-tag.c |  227
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-tag.cc   | 153 +++++++++++++++++++++---------------
+ test/Makefile.am   |  3 +
+ test/test-ot-tag.c | 227
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 320 insertions(+), 63 deletions(-)
 
 commit 1368018b475c2a6dd5f625af99695ae2fcba1f05
  3 files changed, 320 insertions(+), 63 deletions(-)
 
 commit 1368018b475c2a6dd5f625af99695ae2fcba1f05
@@ -17030,8 +28595,8 @@ Date:   Fri May 13 20:25:38 2011 -0400
 
     [TODO] Add items
 
 
     [TODO] Add items
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 7fc5a30cb4fbe9a4633ab842b0a8cbbcc6f6bd1b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7fc5a30cb4fbe9a4633ab842b0a8cbbcc6f6bd1b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17039,12 +28604,12 @@ Date: Thu May 12 17:48:20 2011 -0400
 
     [API] Add hb_face_make/is_immutable()
 
 
     [API] Add hb_face_make/is_immutable()
 
- src/hb-font-private.hh |    2 ++
- src/hb-font.cc                |   18 ++++++++++++++++++
- src/hb-font.h         |    6 ++++++
- test/test-font.c      |    2 ++
- test/test-object.c    |    2 +-
- 5 files changed, 29 insertions(+), 1 deletions(-)
+ src/hb-font-private.hh |  2 ++
+ src/hb-font.cc                | 18 ++++++++++++++++++
+ src/hb-font.h         |  6 ++++++
+ test/test-font.c      |  2 ++
+ test/test-object.c    |  2 +-
+ 5 files changed, 29 insertions(+), 1 deletion(-)
 
 commit 20c8b908ddf50a9814dfdd9fca595f258273cd4f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20c8b908ddf50a9814dfdd9fca595f258273cd4f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17052,8 +28617,8 @@ Date:   Thu May 12 15:19:33 2011 -0400
 
     Finish off previous change
 
 
     Finish off previous change
 
- src/hb-font.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 0fd8c2f1be693616f19f2f1526369874763d6cf6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0fd8c2f1be693616f19f2f1526369874763d6cf6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17067,12 +28632,12 @@ Date: Thu May 12 15:14:13 2011 -0400
     "doesn't exist" glyph codes for different characters.  An explicit
     return value fixes that.
 
     "doesn't exist" glyph codes for different characters.  An explicit
     return value fixes that.
 
- src/hb-font.cc     |  15 +++++++++------
- src/hb-font.h     |   12 +++++++-----
- src/hb-ft.cc      |   12 +++++++-----
- src/hb-ot-shape.cc |  13 +++++++++----
- test/test-font.c   |   5 ++++-
- test/test-shape.c  |  12 +++++++-----
+ src/hb-font.cc     | 15 +++++++++------
+ src/hb-font.h     | 12 +++++++-----
+ src/hb-ft.cc      | 12 +++++++-----
+ src/hb-ot-shape.cc | 13 +++++++++----
+ test/test-font.c   |  5 ++++-
+ test/test-shape.c  | 12 +++++++-----
  6 files changed, 43 insertions(+), 26 deletions(-)
 
 commit 8e07f93ab4a3ef9adc7942727ef21f2f9a141d10
  6 files changed, 43 insertions(+), 26 deletions(-)
 
 commit 8e07f93ab4a3ef9adc7942727ef21f2f9a141d10
@@ -17081,8 +28646,8 @@ Date:   Thu May 12 14:27:44 2011 -0400
 
     [test/shape] Check shape output
 
 
     [test/shape] Check shape output
 
- test/test-shape.c |   23 +++++++++++++++++++----
- 1 files changed, 19 insertions(+), 4 deletions(-)
+ test/test-shape.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
 
 commit 805af72405a2f653f08de392d7172291ffe8e902
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 805af72405a2f653f08de392d7172291ffe8e902
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17093,9 +28658,9 @@ Date:   Thu May 12 12:39:40 2011 -0400
 
     Makes it clear that kerning is in visual order.
 
 
     Makes it clear that kerning is in visual order.
 
- src/hb-font.cc |   10 +++++-----
- src/hb-font.h |    4 ++--
- src/hb-ft.cc  |    6 +++---
+ src/hb-font.cc | 10 +++++-----
+ src/hb-font.h |  4 ++--
+ src/hb-ft.cc  |  6 +++---
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 23d2432219a91c6328efa9e041b1ecf137752ac3
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 23d2432219a91c6328efa9e041b1ecf137752ac3
@@ -17104,9 +28669,9 @@ Date:   Thu May 12 10:53:57 2011 -0400
 
     [test] Add test-shape.c.  Oops
 
 
     [test] Add test-shape.c.  Oops
 
- test/test-shape.c |  125
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 125 insertions(+), 0 deletions(-)
+ test/test-shape.c | 125
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 125 insertions(+)
 
 commit c098c3acc8c48b4b6883c50c9a87e81dbe98ba24
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c098c3acc8c48b4b6883c50c9a87e81dbe98ba24
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17116,8 +28681,8 @@ Date:   Thu May 12 10:49:30 2011 -0400
 
     More portable.
 
 
     More portable.
 
- test/test-blob.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-blob.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8329eb7c6ca39e162228733a2210e643b1a1019d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8329eb7c6ca39e162228733a2210e643b1a1019d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17125,8 +28690,8 @@ Date:   Thu May 12 01:39:17 2011 -0400
 
     [test/shape] Add simplest test for hb_shape()
 
 
     [test/shape] Add simplest test for hb_shape()
 
- test/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ test/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit df077fadd7828b609bdfe4dbcad52ef2448525c7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit df077fadd7828b609bdfe4dbcad52ef2448525c7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17136,8 +28701,8 @@ Date:   Thu May 12 01:19:39 2011 -0400
 
     Such that user_data and other finalizers cannot resurrect object
 
 
     Such that user_data and other finalizers cannot resurrect object
 
- src/hb-object-private.hh |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-object-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit ee8dd83bb4e0b1c2ca5928391e35e8bd1fca6121
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ee8dd83bb4e0b1c2ca5928391e35e8bd1fca6121
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17145,8 +28710,8 @@ Date:   Thu May 12 01:02:03 2011 -0400
 
     [TODO] Update
 
 
     [TODO] Update
 
- TODO |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ TODO | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit 52df150efeff4cf003cee65f8c91618f1a980bc8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52df150efeff4cf003cee65f8c91618f1a980bc8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17156,8 +28721,8 @@ Date:   Thu May 12 00:46:57 2011 -0400
 
     Test passing now.
 
 
     Test passing now.
 
- src/hb-font.cc |    6 +-----
- 1 files changed, 1 insertions(+), 5 deletions(-)
+ src/hb-font.cc | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
 
 commit f2c1dd4f746c36a44cf33d0257a3cd800107c286
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f2c1dd4f746c36a44cf33d0257a3cd800107c286
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17165,9 +28730,9 @@ Date:   Thu May 12 00:35:12 2011 -0400
 
     [test/font] Test font_funcs subclassing
 
 
     [test/font] Test font_funcs subclassing
 
- test/test-font.c |  158
- ++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 155 insertions(+), 3 deletions(-)
+ test/test-font.c | 158
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 155 insertions(+), 3 deletions(-)
 
 commit 14f1e81b77971204e9325e2a8b6f8b690fac20a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 14f1e81b77971204e9325e2a8b6f8b690fac20a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17175,9 +28740,9 @@ Date:   Thu May 12 00:18:28 2011 -0400
 
     [test/font] Test empty funcs
 
 
     [test/font] Test empty funcs
 
- test/test-font.c |   75
- ++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 73 insertions(+), 2 deletions(-)
+ test/test-font.c | 75
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 73 insertions(+), 2 deletions(-)
 
 commit 2ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17185,9 +28750,9 @@ Date:   Wed May 11 23:57:36 2011 -0400
 
     [test/font] Test more
 
 
     [test/font] Test more
 
- test/test-font.c |   63
- ++++++++++++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 54 insertions(+), 9 deletions(-)
+ test/test-font.c | 63
+ ++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 54 insertions(+), 9 deletions(-)
 
 commit 7033518f756490e9cf00b96387fee6f2f7fae785
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7033518f756490e9cf00b96387fee6f2f7fae785
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17195,10 +28760,10 @@ Date: Wed May 11 23:31:15 2011 -0400
 
     [API] Pass face to get_table()
 
 
     [API] Pass face to get_table()
 
- src/hb-font.cc   |    4 ++--
- src/hb-font.h   |    2 +-
- src/hb-ft.cc    |    2 +-
- test/test-font.c |    2 +-
+ src/hb-font.cc   | 4 ++--
+ src/hb-font.h   | 2 +-
+ src/hb-ft.cc    | 2 +-
+ test/test-font.c | 2 +-
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b46782780690e26a8221e2d63dd224159aebe413
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b46782780690e26a8221e2d63dd224159aebe413
@@ -17207,9 +28772,9 @@ Date:   Wed May 11 23:25:28 2011 -0400
 
     [API] Remove const from font user_data
 
 
     [API] Remove const from font user_data
 
- src/hb-font.cc |   20 ++++++++++----------
- src/hb-font.h |   20 ++++++++++----------
- src/hb-ft.cc  |   20 ++++++++++----------
+ src/hb-font.cc | 20 ++++++++++----------
+ src/hb-font.h | 20 ++++++++++----------
+ src/hb-ft.cc  | 20 ++++++++++----------
  3 files changed, 30 insertions(+), 30 deletions(-)
 
 commit ea93e7b27ca04a1655d62bd1d18a32805994af44
  3 files changed, 30 insertions(+), 30 deletions(-)
 
 commit ea93e7b27ca04a1655d62bd1d18a32805994af44
@@ -17218,8 +28783,8 @@ Date:   Wed May 11 23:22:55 2011 -0400
 
     [test/font] More tests
 
 
     [test/font] More tests
 
- test/test-font.c |   36 +++++++++++++++++++++++++++++++++---
- 1 files changed, 33 insertions(+), 3 deletions(-)
+ test/test-font.c | 36 +++++++++++++++++++++++++++++++++---
+ 1 file changed, 33 insertions(+), 3 deletions(-)
 
 commit cdb153175f8a1521cde112c65b173f548ca6ee5c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdb153175f8a1521cde112c65b173f548ca6ee5c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17227,8 +28792,8 @@ Date:   Wed May 11 23:12:58 2011 -0400
 
     [test/font] More tests
 
 
     [test/font] More tests
 
- test/test-font.c |   44 ++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 44 insertions(+), 0 deletions(-)
+ test/test-font.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 44 insertions(+)
 
 commit 74d9fa3d9ac226ed72702884e721ef94ecc48e22
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 74d9fa3d9ac226ed72702884e721ef94ecc48e22
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17236,8 +28801,8 @@ Date:   Wed May 11 23:07:47 2011 -0400
 
     [test/font] More get_empty() tests
 
 
     [test/font] More get_empty() tests
 
- test/test-font.c |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ test/test-font.c | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit db9f4eb4e004fadae9d540522d1d21c3bbe659b0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db9f4eb4e004fadae9d540522d1d21c3bbe659b0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17245,8 +28810,8 @@ Date:   Wed May 11 23:06:02 2011 -0400
 
     [test/font] Test get_face() / get_parent()
 
 
     [test/font] Test get_face() / get_parent()
 
- test/test-font.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ test/test-font.c | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 606923bb4304d5b9cf164745d657cba58949a80a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 606923bb4304d5b9cf164745d657cba58949a80a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17254,9 +28819,9 @@ Date:   Wed May 11 23:05:02 2011 -0400
 
     [test/font] Add test_font_properties()
 
 
     [test/font] Add test_font_properties()
 
- test/test-font.c |   85
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 85 insertions(+), 0 deletions(-)
+ test/test-font.c | 85
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 85 insertions(+)
 
 commit da603e80386b41b360acb070a862b6ed87da57b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da603e80386b41b360acb070a862b6ed87da57b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17264,12 +28829,12 @@ Date: Wed May 11 22:52:35 2011 -0400
 
     [test/font] Start adding tests for hb-font.h
 
 
     [test/font] Start adding tests for hb-font.h
 
- test/Makefile.am    |   1 +
- test/test-buffer.c  |   2 +-
- test/test-font.c    |  69
- +++++++++++++++++++++++++++++++++++++++++++++++++++
- test/test-unicode.c |   1 +
- 4 files changed, 72 insertions(+), 1 deletions(-)
+ test/Makefile.am    | 1 +
+ test/test-buffer.c  | 2 +-
+ test/test-font.c    | 69
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ test/test-unicode.c | 1 +
+ 4 files changed, 72 insertions(+), 1 deletion(-)
 
 commit 9a14688e40e926b9453fcb75891f27bff1e45c49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9a14688e40e926b9453fcb75891f27bff1e45c49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17277,11 +28842,11 @@ Date: Wed May 11 22:49:29 2011 -0400
 
     [API] Rename hb_face_create_for_data() to hb_face_create()
 
 
     [API] Rename hb_face_create_for_data() to hb_face_create()
 
- src/hb-font.cc     |   4 ++--
- src/hb-font.h     |    4 ++--
- src/hb-ft.cc      |    2 +-
- src/test.cc       |    2 +-
- test/test-object.c |   4 ++--
+ src/hb-font.cc     | 4 ++--
+ src/hb-font.h     | 4 ++--
+ src/hb-ft.cc      | 2 +-
+ src/test.cc       | 2 +-
+ test/test-object.c | 4 ++--
  5 files changed, 8 insertions(+), 8 deletions(-)
 
 commit 46d6a21cc8613519e6ce27b1925e29285cccb71d
  5 files changed, 8 insertions(+), 8 deletions(-)
 
 commit 46d6a21cc8613519e6ce27b1925e29285cccb71d
@@ -17290,9 +28855,9 @@ Date:   Wed May 11 22:33:13 2011 -0400
 
     [API] Add hb_ot_layout_substitute_start/finish()
 
 
     [API] Add hb_ot_layout_substitute_start/finish()
 
- src/hb-ot-layout.cc |  13 +++++++++++++
- src/hb-ot-layout.h  |   8 ++++++++
- 2 files changed, 21 insertions(+), 0 deletions(-)
+ src/hb-ot-layout.cc | 13 +++++++++++++
+ src/hb-ot-layout.h  | 8 ++++++++
+ 2 files changed, 21 insertions(+)
 
 commit c84d15f52e1183164502d45b476b54f8fe812e0f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c84d15f52e1183164502d45b476b54f8fe812e0f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17300,8 +28865,8 @@ Date:   Wed May 11 22:23:15 2011 -0400
 
     Remove unused hb_set_t
 
 
     Remove unused hb_set_t
 
- src/hb-private.hh |   48 ------------------------------------------------
- 1 files changed, 0 insertions(+), 48 deletions(-)
+ src/hb-private.hh | 48 ------------------------------------------------
+ 1 file changed, 48 deletions(-)
 
 commit 389a7c9e67549b1a9f7c538965e4647077f8e6ec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 389a7c9e67549b1a9f7c538965e4647077f8e6ec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17309,8 +28874,8 @@ Date:   Wed May 11 22:21:38 2011 -0400
 
     Remove hb_static_threadsafe_set_t
 
 
     Remove hb_static_threadsafe_set_t
 
- src/hb-common.cc       |    5 +++--
- src/hb-mutex-private.hh |   42 ------------------------------------------
+ src/hb-common.cc       |  5 +++--
+ src/hb-mutex-private.hh | 42 ------------------------------------------
  2 files changed, 3 insertions(+), 44 deletions(-)
 
 commit e06d4eda7bbdb3a1be1f1ce8d98b059a0730f14d
  2 files changed, 3 insertions(+), 44 deletions(-)
 
 commit e06d4eda7bbdb3a1be1f1ce8d98b059a0730f14d
@@ -17319,8 +28884,8 @@ Date:   Wed May 11 22:18:31 2011 -0400
 
     Use constructor/destructor for hb_ot_shape_plan_t
 
 
     Use constructor/destructor for hb_ot_shape_plan_t
 
- src/hb-ot-shape-private.hh |   6 +++++-
- src/hb-ot-shape.cc        |    4 +---
+ src/hb-ot-shape-private.hh | 6 +++++-
+ src/hb-ot-shape.cc        | 4 +---
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit a5e4e109460ea23fa5e64926a1676c6a02ab6ba2
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit a5e4e109460ea23fa5e64926a1676c6a02ab6ba2
@@ -17329,8 +28894,8 @@ Date:   Wed May 11 22:00:56 2011 -0400
 
     Minor
 
 
     Minor
 
- TODO |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ TODO | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit daa446f184fa27c9764ff7f8a2444d47cf34d986
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit daa446f184fa27c9764ff7f8a2444d47cf34d986
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17338,8 +28903,8 @@ Date:   Wed May 11 21:31:25 2011 -0400
 
     Fix compile with no mutex available
 
 
     Fix compile with no mutex available
 
- src/hb-mutex-private.hh |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-mutex-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 1e56c476c10577fe319fe553c5ced000bd740940
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e56c476c10577fe319fe553c5ced000bd740940
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17347,8 +28912,8 @@ Date:   Wed May 11 21:28:01 2011 -0400
 
     Free static mutex'es
 
 
     Free static mutex'es
 
- src/hb-mutex-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-mutex-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 831886a9b4073cfe27f7e1db0e957cbd5913fd31
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 831886a9b4073cfe27f7e1db0e957cbd5913fd31
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17356,9 +28921,9 @@ Date:   Wed May 11 21:27:52 2011 -0400
 
     Streamline mutex stuff
 
 
     Streamline mutex stuff
 
- src/hb-mutex-private.hh |   61
- +++++++++++++++++++++++++++++-----------------
- src/hb-private.hh      |    8 ++++++
+ src/hb-mutex-private.hh | 61
+ ++++++++++++++++++++++++++++++-------------------
+ src/hb-private.hh      |  8 +++++++
  2 files changed, 46 insertions(+), 23 deletions(-)
 
 commit 438c4eee353ddf0de66171d84c6ef9b21cbdf8f6
  2 files changed, 46 insertions(+), 23 deletions(-)
 
 commit 438c4eee353ddf0de66171d84c6ef9b21cbdf8f6
@@ -17367,8 +28932,8 @@ Date:   Wed May 11 21:14:34 2011 -0400
 
     Remove unused hb_mutex_trylock()
 
 
     Remove unused hb_mutex_trylock()
 
- src/hb-mutex-private.hh |    3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-mutex-private.hh | 3 ---
+ 1 file changed, 3 deletions(-)
 
 commit b8477e1da2785708f3232f8f2577f602a5d320d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b8477e1da2785708f3232f8f2577f602a5d320d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17376,10 +28941,10 @@ Date: Wed May 11 21:12:44 2011 -0400
 
     [test] Add tests for _get_empty() funcs
 
 
     [test] Add tests for _get_empty() funcs
 
- test/test-blob.c    |   1 +
- test/test-buffer.c  |   7 +++++++
- test/test-unicode.c |  10 ++++++++++
- 3 files changed, 18 insertions(+), 0 deletions(-)
+ test/test-blob.c    | 1 +
+ test/test-buffer.c  | 7 +++++++
+ test/test-unicode.c | 10 ++++++++++
+ 3 files changed, 18 insertions(+)
 
 commit 3994be3ded40e5a3da0e187ad421b19a78865e02
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3994be3ded40e5a3da0e187ad421b19a78865e02
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17387,8 +28952,8 @@ Date:   Wed May 11 21:08:31 2011 -0400
 
     [TODO] Update
 
 
     [TODO] Update
 
- TODO |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ TODO | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 80a6833b032bc63b4e8c3da6489d3767af1168f3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 80a6833b032bc63b4e8c3da6489d3767af1168f3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17396,13 +28961,13 @@ Date: Wed May 11 18:14:44 2011 -0400
 
     [API] Add hb_*_get_empty() for all objects
 
 
     [API] Add hb_*_get_empty() for all objects
 
- src/hb-buffer.cc   |   6 ++++++
- src/hb-buffer.h    |   3 +++
- src/hb-font.cc     |  18 ++++++++++++++++++
- src/hb-font.h     |    9 +++++++++
- src/hb-unicode.cc  |   6 ++++++
- src/hb-unicode.h   |   3 +++
- test/test-object.c |  36 +++++++++++++++++++++++++++++++++---
+ src/hb-buffer.cc   |  6 ++++++
+ src/hb-buffer.h    |  3 +++
+ src/hb-font.cc     | 18 ++++++++++++++++++
+ src/hb-font.h     |  9 +++++++++
+ src/hb-unicode.cc  |  6 ++++++
+ src/hb-unicode.h   |  3 +++
+ test/test-object.c | 36 +++++++++++++++++++++++++++++++++---
  7 files changed, 78 insertions(+), 3 deletions(-)
 
 commit d3b30be378c1dec0259a626d9a408bb9ca1b71ac
  7 files changed, 78 insertions(+), 3 deletions(-)
 
 commit d3b30be378c1dec0259a626d9a408bb9ca1b71ac
@@ -17413,8 +28978,8 @@ Date:   Wed May 11 18:06:12 2011 -0400
 
     Useful in C API only.
 
 
     Useful in C API only.
 
- src/hb-common.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-common.h | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3cc6e9dcb42551761c3a1a9d3c25b1f1bcdc2419
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3cc6e9dcb42551761c3a1a9d3c25b1f1bcdc2419
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17422,8 +28987,8 @@ Date:   Wed May 11 18:02:48 2011 -0400
 
     Minor
 
 
     Minor
 
- src/test.cc |   9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/test.cc | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 4101ca7dbbdf1438fa116fb8cad935501ac7cca8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4101ca7dbbdf1438fa116fb8cad935501ac7cca8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17433,8 +28998,8 @@ Date:   Wed May 11 14:30:56 2011 -0400
 
     All good now.
 
 
     All good now.
 
- src/hb-blob.cc                     |    2 +-
- src/hb-open-type-private.hh |   8 ++++----
+ src/hb-blob.cc                     | 2 +-
+ src/hb-open-type-private.hh | 8 ++++----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 6a7ac79e26e85f6781186cf708a12825c0857324
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 6a7ac79e26e85f6781186cf708a12825c0857324
@@ -17443,11 +29008,11 @@ Date: Wed May 11 14:19:18 2011 -0400
 
     Plug leaks
 
 
     Plug leaks
 
- src/hb-ot-map-private.hh   |   7 +++++++
- src/hb-ot-shape-private.hh |   2 ++
- src/hb-ot-shape.cc        |    2 ++
- src/hb-private.hh         |   10 +++++++++-
- 4 files changed, 20 insertions(+), 1 deletions(-)
+ src/hb-ot-map-private.hh   |  7 +++++++
+ src/hb-ot-shape-private.hh |  2 ++
+ src/hb-ot-shape.cc        |  2 ++
+ src/hb-private.hh         | 10 +++++++++-
+ 4 files changed, 20 insertions(+), 1 deletion(-)
 
 commit 7aa12ebdff11a4ffbd04bf9b164586eb0c172e37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7aa12ebdff11a4ffbd04bf9b164586eb0c172e37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17455,8 +29020,8 @@ Date:   Wed May 11 11:55:11 2011 -0400
 
     [unicode] Simplify method setting
 
 
     [unicode] Simplify method setting
 
- src/hb-unicode.cc   |   6 +-----
- test/test-unicode.c |   6 +++++-
+ src/hb-unicode.cc   | 6 +-----
+ test/test-unicode.c | 6 +++++-
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit d5bfd0272130a315d3b5e6cdcf9b7e6395879204
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit d5bfd0272130a315d3b5e6cdcf9b7e6395879204
@@ -17465,8 +29030,8 @@ Date:   Wed May 11 11:48:28 2011 -0400
 
     Minor
 
 
     Minor
 
- src/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6a4e7e1372ef9fde81b84ecc9c4d1f23d97396c1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6a4e7e1372ef9fde81b84ecc9c4d1f23d97396c1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17477,12 +29042,12 @@ Date: Wed May 11 10:31:33 2011 -0400
     Not used for anything right now.  Will use to get num_glyphs in
     the future.
 
     Not used for anything right now.  Will use to get num_glyphs in
     the future.
 
- src/Makefile.am          |    1 +
- src/hb-ot-head-private.hh |   1 -
- src/hb-ot-layout.cc      |    1 +
- src/hb-ot-maxp-private.hh |   68
- +++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 70 insertions(+), 1 deletions(-)
+ src/Makefile.am          |  1 +
+ src/hb-ot-head-private.hh |  1 -
+ src/hb-ot-layout.cc      |  1 +
+ src/hb-ot-maxp-private.hh | 68
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 70 insertions(+), 1 deletion(-)
 
 commit e0b0710ae52bcc8c6fbd87dfae83818faa5d5f5f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e0b0710ae52bcc8c6fbd87dfae83818faa5d5f5f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17490,8 +29055,8 @@ Date:   Wed May 11 08:58:21 2011 -0400
 
     Minor
 
 
     Minor
 
- TODO |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ TODO | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit a513dbcf73ab1cc39a7c9653034904d0c6cd9fe9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a513dbcf73ab1cc39a7c9653034904d0c6cd9fe9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17503,13 +29068,13 @@ Date: Wed May 11 00:24:34 2011 -0400
 
     get_kerning now takes a vector to fill-in.
 
 
     get_kerning now takes a vector to fill-in.
 
- src/hb-font.cc                          |   56
- ++++++++++++++++++++-----------------
- src/hb-font.h                   |   16 ++++++-----
- src/hb-ft.cc                    |   11 +++++---
- src/hb-ot-layout-gdef-private.hh |    2 +-
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-shape.cc              |   15 +++++++---
+ src/hb-font.cc                          | 56
+ +++++++++++++++++++++-------------------
+ src/hb-font.h                   | 16 +++++++-----
+ src/hb-ft.cc                    | 11 +++++---
+ src/hb-ot-layout-gdef-private.hh |  2 +-
+ src/hb-ot-layout-gpos-private.hh |  2 +-
+ src/hb-ot-shape.cc              | 15 ++++++++---
  6 files changed, 59 insertions(+), 43 deletions(-)
 
 commit 63d646fb2933c2765ce526d321a498d0f7fae2f5
  6 files changed, 59 insertions(+), 43 deletions(-)
 
 commit 63d646fb2933c2765ce526d321a498d0f7fae2f5
@@ -17518,8 +29083,8 @@ Date:   Wed May 11 00:15:37 2011 -0400
 
     [font] Do user-space conversion when chaining up to parent font
 
 
     [font] Do user-space conversion when chaining up to parent font
 
- src/hb-font-private.hh |   28 ++++++++++++++++++++++++++++
- src/hb-font.cc                |   23 +++++++++++++++++------
+ src/hb-font-private.hh | 28 ++++++++++++++++++++++++++++
+ src/hb-font.cc                | 23 +++++++++++++++++------
  2 files changed, 45 insertions(+), 6 deletions(-)
 
 commit b6f902a1a9c8b72b5d6a241a14a7bacfaea3a56a
  2 files changed, 45 insertions(+), 6 deletions(-)
 
 commit b6f902a1a9c8b72b5d6a241a14a7bacfaea3a56a
@@ -17528,9 +29093,9 @@ Date:   Wed May 11 00:04:15 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-font-private.hh                  |    6 +++---
- src/hb-ot-layout-gdef-private.hh |    6 +++---
- src/hb-ot-layout-gpos-private.hh |   20 ++++++++++----------
+ src/hb-font-private.hh                  |  6 +++---
+ src/hb-ot-layout-gdef-private.hh |  6 +++---
+ src/hb-ot-layout-gpos-private.hh | 20 ++++++++++----------
  3 files changed, 16 insertions(+), 16 deletions(-)
 
 commit abcfe9b59b4475eb02dd679aac4bc59616713b28
  3 files changed, 16 insertions(+), 16 deletions(-)
 
 commit abcfe9b59b4475eb02dd679aac4bc59616713b28
@@ -17539,16 +29104,16 @@ Date: Wed May 11 00:02:02 2011 -0400
 
     Remove hb_ot_layout_context_t, simplify code
 
 
     Remove hb_ot_layout_context_t, simplify code
 
- src/hb-font-private.hh                      |   12 +++-
- src/hb-font.cc                              |    6 ++-
- src/hb-ot-layout-common-private.hh   |    8 +-
- src/hb-ot-layout-gdef-private.hh     |   34 +++++-----
- src/hb-ot-layout-gpos-private.hh     |  121
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   24 ++++----
- src/hb-ot-layout-gsubgpos-private.hh |   11 ++--
- src/hb-ot-layout-private.hh         |   13 ----
- src/hb-ot-layout.cc                 |   15 +----
+ src/hb-font-private.hh                      |  12 +++-
+ src/hb-font.cc                              |   +-
+ src/hb-ot-layout-common-private.hh   |   8 +--
+ src/hb-ot-layout-gdef-private.hh     |  34 +++++-----
+ src/hb-ot-layout-gpos-private.hh     | 121
+ ++++++++++++++++++-----------------
+ src/hb-ot-layout-gsub-private.hh     |  24 +++----
+ src/hb-ot-layout-gsubgpos-private.hh |  11 ++--
+ src/hb-ot-layout-private.hh         |  13 ----
+ src/hb-ot-layout.cc                 |  15 +----
  9 files changed, 118 insertions(+), 126 deletions(-)
 
 commit 1ded6d8bbf93b7dabf2b1f620c07bd3236e7a60f
  9 files changed, 118 insertions(+), 126 deletions(-)
 
 commit 1ded6d8bbf93b7dabf2b1f620c07bd3236e7a60f
@@ -17557,8 +29122,8 @@ Date:   Tue May 10 20:49:02 2011 -0400
 
     Make default font-funcs chain-up to the parent
 
 
     Make default font-funcs chain-up to the parent
 
- src/hb-font.cc |   44 +++++++++++++++++++++++++++++++++++++++-----
- src/hb-font.h |   41 +++++++++++++++++++++--------------------
+ src/hb-font.cc | 44 +++++++++++++++++++++++++++++++++++++++-----
+ src/hb-font.h | 41 +++++++++++++++++++++--------------------
  2 files changed, 60 insertions(+), 25 deletions(-)
 
 commit b9d975b931d6310f25fab5ac280f523cdc27bf94
  2 files changed, 60 insertions(+), 25 deletions(-)
 
 commit b9d975b931d6310f25fab5ac280f523cdc27bf94
@@ -17567,11 +29132,11 @@ Date: Tue May 10 20:41:13 2011 -0400
 
     [API] Pass down closure user_data to font funcs
 
 
     [API] Pass down closure user_data to font funcs
 
- src/hb-font-private.hh |   30 ++++++--
- src/hb-font.cc                |  184
- ++++++++++++++++++++++++------------------------
- src/hb-font.h         |   42 +++++++----
- src/hb-ft.cc          |  103 ++++++++++++++-------------
+ src/hb-font-private.hh |  30 ++++++--
+ src/hb-font.cc                | 184
+ +++++++++++++++++++++++++------------------------
+ src/hb-font.h         |  42 ++++++-----
+ src/hb-ft.cc          | 103 ++++++++++++++-------------
  4 files changed, 198 insertions(+), 161 deletions(-)
 
 commit 446df9cdb1fddb51819b731436fca54146d0bb23
  4 files changed, 198 insertions(+), 161 deletions(-)
 
 commit 446df9cdb1fddb51819b731436fca54146d0bb23
@@ -17580,8 +29145,8 @@ Date:   Tue May 10 20:14:44 2011 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-unicode.h |   30 +++++++++++++++---------------
- 1 files changed, 15 insertions(+), 15 deletions(-)
+ src/hb-unicode.h | 30 +++++++++++++++---------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
 
 commit 686c2d165dfb284b74b78f6b902d04b585dcaef3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 686c2d165dfb284b74b78f6b902d04b585dcaef3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17589,9 +29154,9 @@ Date:   Tue May 10 20:04:26 2011 -0400
 
     [API] Remove font_funcs func getter functions
 
 
     [API] Remove font_funcs func getter functions
 
- src/hb-font.cc |   32 --------------------------------
- src/hb-font.h |   18 ------------------
- 2 files changed, 0 insertions(+), 50 deletions(-)
+ src/hb-font.cc | 32 --------------------------------
+ src/hb-font.h | 18 ------------------
+ 2 files changed, 50 deletions(-)
 
 commit defc45be6d75aba4a67fa7814b91b73bad953fe6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit defc45be6d75aba4a67fa7814b91b73bad953fe6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17601,10 +29166,10 @@ Date: Tue May 10 20:02:49 2011 -0400
 
     Not quite useful just yet.
 
 
     Not quite useful just yet.
 
- src/hb-font-private.hh |    1 +
- src/hb-font.cc                |   41 ++++++++++++++++++++++++++++++++++++++---
- src/hb-font.h         |    5 +++++
- src/hb-unicode.h      |    2 +-
+ src/hb-font-private.hh |  1 +
+ src/hb-font.cc                | 41 ++++++++++++++++++++++++++++++++++++++---
+ src/hb-font.h         |  5 +++++
+ src/hb-unicode.h      |  2 +-
  4 files changed, 45 insertions(+), 4 deletions(-)
 
 commit 11bb8fe7b3925bc9b019ad0c0218a231e581f152
  4 files changed, 45 insertions(+), 4 deletions(-)
 
 commit 11bb8fe7b3925bc9b019ad0c0218a231e581f152
@@ -17616,8 +29181,8 @@ Date:   Tue May 10 19:57:00 2011 -0400
     Should have been done as part of
     da975419884a535281745f30f4b32fee0bc8a7a1
 
     Should have been done as part of
     da975419884a535281745f30f4b32fee0bc8a7a1
 
- src/hb-font-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-font-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 85e6218e3306165d69ef44277459511d5b54b9ff
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 85e6218e3306165d69ef44277459511d5b54b9ff
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17625,9 +29190,9 @@ Date:   Tue May 10 19:40:44 2011 -0400
 
     [API] Remove broken-by-design hb_font_unset_funcs()
 
 
     [API] Remove broken-by-design hb_font_unset_funcs()
 
- src/hb-font.cc |   22 ----------------------
- src/hb-font.h |   16 ----------------
- 2 files changed, 0 insertions(+), 38 deletions(-)
+ src/hb-font.cc | 22 ----------------------
+ src/hb-font.h | 16 ----------------
+ 2 files changed, 38 deletions(-)
 
 commit 74f1d896f2479500d65649cf3ec86dd201f0663a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 74f1d896f2479500d65649cf3ec86dd201f0663a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17635,10 +29200,10 @@ Date: Tue May 10 19:39:32 2011 -0400
 
     Add hb_font_make/is_immutable()
 
 
     Add hb_font_make/is_immutable()
 
- src/hb-font-private.hh |    2 ++
- src/hb-font.cc                |   26 +++++++++++++++++++++++---
- src/hb-font.h         |    6 ++++++
- test/test-object.c    |    2 +-
+ src/hb-font-private.hh |  2 ++
+ src/hb-font.cc                | 26 +++++++++++++++++++++++---
+ src/hb-font.h         |  6 ++++++
+ test/test-object.c    |  2 +-
  4 files changed, 32 insertions(+), 4 deletions(-)
 
 commit 8c7a100a4d0f3a257fb7563cb08ed4356c3af669
  4 files changed, 32 insertions(+), 4 deletions(-)
 
 commit 8c7a100a4d0f3a257fb7563cb08ed4356c3af669
@@ -17647,8 +29212,8 @@ Date:   Tue May 10 19:21:07 2011 -0400
 
     Fix build without mutex
 
 
     Fix build without mutex
 
- src/hb-mutex-private.hh |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-mutex-private.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 19d3035c40e73923bcad709dc5eefe31cb34d681
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 19d3035c40e73923bcad709dc5eefe31cb34d681
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17656,8 +29221,8 @@ Date:   Tue May 10 19:18:12 2011 -0400
 
     Remove duplicate atomic_int implementation
 
 
     Remove duplicate atomic_int implementation
 
- src/hb-mutex-private.hh |   17 -----------------
- 1 files changed, 0 insertions(+), 17 deletions(-)
+ src/hb-mutex-private.hh | 17 -----------------
+ 1 file changed, 17 deletions(-)
 
 commit 45bfa99034512e886d75b1d45a5a649647f4711f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 45bfa99034512e886d75b1d45a5a649647f4711f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17668,11 +29233,11 @@ Date: Tue May 10 19:12:49 2011 -0400
 
     The test/object test is passing again, instead of deadlocking.
 
 
     The test/object test is passing again, instead of deadlocking.
 
- src/hb-common.cc        |   26 ++++------
- src/hb-mutex-private.hh  |   47 +++++++------------
- src/hb-object-private.hh |    6 ++-
- src/hb-private.hh       |  117
- +++++++++++++++++++++++++++++++++++++--------
+ src/hb-common.cc        |  26 +++++------
+ src/hb-mutex-private.hh  |  47 +++++++------------
+ src/hb-object-private.hh |   6 ++-
+ src/hb-private.hh       | 117
+ ++++++++++++++++++++++++++++++++++++++---------
  4 files changed, 128 insertions(+), 68 deletions(-)
 
 commit 0c2ec1d78bfa0166ffd4afc204c2668d4f456ed9
  4 files changed, 128 insertions(+), 68 deletions(-)
 
 commit 0c2ec1d78bfa0166ffd4afc204c2668d4f456ed9
@@ -17683,9 +29248,9 @@ Date:   Tue May 10 19:11:27 2011 -0400
 
     Now the test/object test deadlocks as expected.  Fix coming.
 
 
     Now the test/object test deadlocks as expected.  Fix coming.
 
- configure.ac    |    1 +
- test/Makefile.am |    4 ++--
- test/hb-test.h   |    1 +
+ configure.ac    | 1 +
+ test/Makefile.am | 4 ++--
+ test/hb-test.h   | 1 +
  3 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 6a9093cc486c1899197cd7cc9a3eb907c2e756f7
  3 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 6a9093cc486c1899197cd7cc9a3eb907c2e756f7
@@ -17700,8 +29265,8 @@ Date:   Tue May 10 19:00:07 2011 -0400
     In fact,
     I'm surprised that it doesn't deadlock.  It should.
 
     In fact,
     I'm surprised that it doesn't deadlock.  It should.
 
- test/test-object.c |  22 ++++++++++++++++++++++
- 1 files changed, 22 insertions(+), 0 deletions(-)
+ test/test-object.c | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
 
 commit abe636b8761e47ea60b193c7e72a044de224d172
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit abe636b8761e47ea60b193c7e72a044de224d172
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17709,9 +29274,9 @@ Date:   Tue May 10 17:55:40 2011 -0400
 
     Add DOAP file
 
 
     Add DOAP file
 
- Makefile.am   |    6 +++++-
- harfbuzz.doap |   24 ++++++++++++++++++++++++
- 2 files changed, 29 insertions(+), 1 deletions(-)
+ Makefile.am   |  6 +++++-
+ harfbuzz.doap | 24 ++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+), 1 deletion(-)
 
 commit f82c18630471216a04e4e3ad42396da4e6d74cba
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f82c18630471216a04e4e3ad42396da4e6d74cba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17719,8 +29284,8 @@ Date:   Tue May 10 17:48:34 2011 -0400
 
     [test/blob] Fix bug in test
 
 
     [test/blob] Fix bug in test
 
- test/test-blob.c |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ test/test-blob.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 785d23acd0ce72d399f9c5021bebc854872648af
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 785d23acd0ce72d399f9c5021bebc854872648af
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17728,8 +29293,8 @@ Date:   Tue May 10 17:41:44 2011 -0400
 
     [test/blob] Add create_sub_blob()
 
 
     [test/blob] Add create_sub_blob()
 
- test/test-blob.c |   17 +++++++++++++++++
- 1 files changed, 17 insertions(+), 0 deletions(-)
+ test/test-blob.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
 
 commit 0617b1558234673d3924f37541be01b04d36f05a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0617b1558234673d3924f37541be01b04d36f05a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17737,10 +29302,10 @@ Date: Tue May 10 17:37:08 2011 -0400
 
     [test] Test blob API
 
 
     [test] Test blob API
 
- test/Makefile.am   |   1 +
- test/test-blob.c   |  280
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- test/test-buffer.c |  149 +++++++++++++++-------------
+ test/Makefile.am   |  1 +
+ test/test-blob.c   | 280
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ test/test-buffer.c | 149 ++++++++++++++--------------
  3 files changed, 359 insertions(+), 71 deletions(-)
 
 commit 1c9f8717eb12c37c219333cbb0d123e1d2da4896
  3 files changed, 359 insertions(+), 71 deletions(-)
 
 commit 1c9f8717eb12c37c219333cbb0d123e1d2da4896
@@ -17749,14 +29314,14 @@ Date: Fri May 6 22:28:26 2011 -0400
 
     [API] Simplify blob API, remove lock
 
 
     [API] Simplify blob API, remove lock
 
- TODO                       |    2 -
- src/hb-blob.cc                     |  206
- ++++++++++++++++++-------------------------
- src/hb-blob.h              |   19 ++--
- src/hb-font.cc                     |    2 -
- src/hb-open-type-private.hh |  32 +++++--
- src/hb-ot-layout.cc        |    7 +--
- test/test-object.c         |    2 +-
+ TODO                       |   2 -
+ src/hb-blob.cc                     | 206
+ ++++++++++++++++++--------------------------
+ src/hb-blob.h              |  19 ++--
+ src/hb-font.cc                     |   2 -
+ src/hb-open-type-private.hh | 32 ++++---
+ src/hb-ot-layout.cc        |   7 +-
+ test/test-object.c         |   2 +-
  7 files changed, 118 insertions(+), 152 deletions(-)
 
 commit 71cef14ac3de07e4fed0a2903b1f0f639406ec6c
  7 files changed, 118 insertions(+), 152 deletions(-)
 
 commit 71cef14ac3de07e4fed0a2903b1f0f639406ec6c
@@ -17765,8 +29330,8 @@ Date:   Fri May 6 19:30:59 2011 -0400
 
     Add -Bsymbolic-functions to linker flags
 
 
     Add -Bsymbolic-functions to linker flags
 
- configure.ac |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit ab428aeab724ca40341318b66640f992cd72d2fc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ab428aeab724ca40341318b66640f992cd72d2fc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17774,8 +29339,8 @@ Date:   Fri May 6 19:30:46 2011 -0400
 
     [TODO] Update
 
 
     [TODO] Update
 
- TODO |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ TODO | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a0f337a1cce1788dbf3147b459e7f615acbfe81b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a0f337a1cce1788dbf3147b459e7f615acbfe81b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17783,9 +29348,9 @@ Date:   Fri May 6 19:20:52 2011 -0400
 
     Remove unused hb_blob_try_writable_inplace()
 
 
     Remove unused hb_blob_try_writable_inplace()
 
- src/hb-blob.cc |   20 --------------------
- src/hb-blob.h |    3 ---
- 2 files changed, 0 insertions(+), 23 deletions(-)
+ src/hb-blob.cc | 20 --------------------
+ src/hb-blob.h |  3 ---
+ 2 files changed, 23 deletions(-)
 
 commit 08611d5194144bbf5d96a1110aeb812db06e0901
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 08611d5194144bbf5d96a1110aeb812db06e0901
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17793,9 +29358,9 @@ Date:   Fri May 6 16:28:10 2011 -0400
 
     Add note re deadlocks
 
 
     Add note re deadlocks
 
- src/hb-common.cc       |    1 +
- src/hb-mutex-private.hh |    4 ++++
- 2 files changed, 5 insertions(+), 0 deletions(-)
+ src/hb-common.cc       | 1 +
+ src/hb-mutex-private.hh | 4 ++++
+ 2 files changed, 5 insertions(+)
 
 commit 34fb5521a5fbb6b95ceff4bbac42a62628bc9f31
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34fb5521a5fbb6b95ceff4bbac42a62628bc9f31
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17812,11 +29377,11 @@ Date: Fri May 6 00:04:28 2011 -0400
     for U+431
     under Serbian locale.  See http://www.pango.org/ScriptGallery
 
     for U+431
     under Serbian locale.  See http://www.pango.org/ScriptGallery
 
- src/hb-common.cc   |  21 +++++++++++++++++++++
- src/hb-common.h    |   3 +++
- src/hb-shape.cc    |   2 +-
- test/test-common.c |   5 +++++
- 4 files changed, 30 insertions(+), 1 deletions(-)
+ src/hb-common.cc   | 21 +++++++++++++++++++++
+ src/hb-common.h    |  3 +++
+ src/hb-shape.cc    |  2 +-
+ test/test-common.c |  5 +++++
+ 4 files changed, 30 insertions(+), 1 deletion(-)
 
 commit c78f4485587cc1dee07e772c164a13fde9d2859f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c78f4485587cc1dee07e772c164a13fde9d2859f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17828,14 +29393,14 @@ Date: Thu May 5 21:31:04 2011 -0400
 
     Also, fix to pass "make distcheck"
 
 
     Also, fix to pass "make distcheck"
 
- configure.ac                |   24 ++++++++++++----
- src/Makefile.am             |    9 ++++++
- src/check-c-linkage-decls.sh |    2 +-
- src/hb-common.cc            |   29 +++++++++++++++++++
- src/hb-version.h.in         |   62
- ++++++++++++++++++++++++++++++++++++++++++
- src/hb.h                    |    1 +
- test/Makefile.am            |    2 +
+ configure.ac                | 24 ++++++++++++-----
+ src/Makefile.am             |  9 +++++++
+ src/check-c-linkage-decls.sh |  2 +-
+ src/hb-common.cc            | 29 +++++++++++++++++++++
+ src/hb-version.h.in         | 62
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb.h                    |  1 +
+ test/Makefile.am            |  2 ++
  7 files changed, 122 insertions(+), 7 deletions(-)
 
 commit 9ff819f6571fd0d570f271162d7a30d97ee64148
  7 files changed, 122 insertions(+), 7 deletions(-)
 
 commit 9ff819f6571fd0d570f271162d7a30d97ee64148
@@ -17847,8 +29412,8 @@ Date:   Thu May 5 19:47:59 2011 -0400
     No one who builds harfbuzz static uses the autotools build system
     to do it.
 
     No one who builds harfbuzz static uses the autotools build system
     to do it.
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7ca7571ef91754274f6c84bbf988962d74a74098
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7ca7571ef91754274f6c84bbf988962d74a74098
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17858,8 +29423,8 @@ Date:   Thu May 5 19:47:12 2011 -0400
 
     Since we're not win32-dll clean the way libtool docs define it.
 
 
     Since we're not win32-dll clean the way libtool docs define it.
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 174e3fe89b72729c9c34c647544a2dc1bf63cd84
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 174e3fe89b72729c9c34c647544a2dc1bf63cd84
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17867,8 +29432,8 @@ Date:   Thu May 5 19:37:53 2011 -0400
 
     Add AC_CANONICAL_HOST
 
 
     Add AC_CANONICAL_HOST
 
- configure.ac |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ configure.ac | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit e6a5b88c01420366a70e0c9ae1775fb3c930cb8b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6a5b88c01420366a70e0c9ae1775fb3c930cb8b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17876,8 +29441,8 @@ Date:   Thu May 5 16:24:42 2011 -0400
 
     Fix build with older glib
 
 
     Fix build with older glib
 
- configure.ac  |    2 +-
- test/hb-test.h |   55
+ configure.ac  |  2 +-
+ test/hb-test.h | 55
  +++++++++++++++++++++++++++++++++----------------------
  2 files changed, 34 insertions(+), 23 deletions(-)
 
  +++++++++++++++++++++++++++++++++----------------------
  2 files changed, 34 insertions(+), 23 deletions(-)
 
@@ -17893,8 +29458,8 @@ Date:   Thu May 5 16:09:45 2011 -0400
     optimization we have to make sure we know the buffer clusters are
     monotonic and in which direction.  Not sure it's worth it though.
 
     optimization we have to make sure we know the buffer clusters are
     monotonic and in which direction.  Not sure it's worth it though.
 
- src/hb-buffer.cc |   16 +++-------------
- 1 files changed, 3 insertions(+), 13 deletions(-)
+ src/hb-buffer.cc | 16 +++-------------
+ 1 file changed, 3 insertions(+), 13 deletions(-)
 
 commit 46df6828513d56cd60467e36cbe45aa06648f488
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 46df6828513d56cd60467e36cbe45aa06648f488
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17904,8 +29469,8 @@ Date:   Thu May 5 15:33:19 2011 -0400
 
     For now, by taking a global user_data mutex.
 
 
     For now, by taking a global user_data mutex.
 
- src/hb-common.cc        |   25 +++++++++++++++++++++++--
- src/hb-object-private.hh |    2 --
+ src/hb-common.cc        | 25 +++++++++++++++++++++++--
+ src/hb-object-private.hh |  2 --
  2 files changed, 23 insertions(+), 4 deletions(-)
 
 commit 218e67b9eefa26e2e4fe43f99a84d082b185b1b0
  2 files changed, 23 insertions(+), 4 deletions(-)
 
 commit 218e67b9eefa26e2e4fe43f99a84d082b185b1b0
@@ -17914,8 +29479,8 @@ Date:   Thu May 5 15:28:37 2011 -0400
 
     Shrink code
 
 
     Shrink code
 
- src/hb-common.cc        |   26 ++++++++++++++++++++++++++
- src/hb-object-private.hh |   21 ++++-----------------
+ src/hb-common.cc        | 26 ++++++++++++++++++++++++++
+ src/hb-object-private.hh | 21 ++++-----------------
  2 files changed, 30 insertions(+), 17 deletions(-)
 
 commit b8d6183ebc4697a434776cf2aec7857d63a7d881
  2 files changed, 30 insertions(+), 17 deletions(-)
 
 commit b8d6183ebc4697a434776cf2aec7857d63a7d881
@@ -17928,8 +29493,8 @@ Date:   Thu May 5 15:14:04 2011 -0400
     implements local statics differently and that would require linking
     to libstdc++, which we don't want.
 
     implements local statics differently and that would require linking
     to libstdc++, which we don't want.
 
- src/hb-common.cc |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-common.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit d37486d87b65c5abaaa2998fa5c9e48eedde0933
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d37486d87b65c5abaaa2998fa5c9e48eedde0933
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17937,9 +29502,9 @@ Date:   Thu May 5 15:07:54 2011 -0400
 
     Add hb_threadsafe_set_t
 
 
     Add hb_threadsafe_set_t
 
- src/hb-mutex-private.hh |   54
- +++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-private.hh      |    3 +-
+ src/hb-mutex-private.hh | 54
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-private.hh      |  3 +--
  2 files changed, 55 insertions(+), 2 deletions(-)
 
 commit b45f32ee4e599c515ce93e44315283d236b073bb
  2 files changed, 55 insertions(+), 2 deletions(-)
 
 commit b45f32ee4e599c515ce93e44315283d236b073bb
@@ -17948,10 +29513,10 @@ Date: Thu May 5 15:00:43 2011 -0400
 
     Use hb_array_t for hb_language_t mapping
 
 
     Use hb_array_t for hb_language_t mapping
 
- src/hb-common.cc        |   48
- +++++++++++++++++++++------------------------
- src/hb-object-private.hh |    4 +-
- src/hb-private.hh       |   19 ++++++++++++++---
+ src/hb-common.cc        | 48
+ ++++++++++++++++++++++--------------------------
+ src/hb-object-private.hh |  4 ++--
+ src/hb-private.hh       | 19 +++++++++++++++----
  3 files changed, 39 insertions(+), 32 deletions(-)
 
 commit 21d2c92fdf7307c7117f8948021f0dd7d5a5d2a3
  3 files changed, 39 insertions(+), 32 deletions(-)
 
 commit 21d2c92fdf7307c7117f8948021f0dd7d5a5d2a3
@@ -17960,8 +29525,8 @@ Date:   Thu May 5 14:47:53 2011 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-object-private.hh |   28 ++++++++++++++--------------
- 1 files changed, 14 insertions(+), 14 deletions(-)
+ src/hb-object-private.hh | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
 
 commit 448ea9bf63104d39f87fff66219034222fa632b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 448ea9bf63104d39f87fff66219034222fa632b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17969,8 +29534,8 @@ Date:   Thu May 5 14:39:24 2011 -0400
 
     [TODO] Remove done items
 
 
     [TODO] Remove done items
 
- TODO |    9 ---------
- 1 files changed, 0 insertions(+), 9 deletions(-)
+ TODO | 9 ---------
+ 1 file changed, 9 deletions(-)
 
 commit 265ac614ea6d26041c7d64739098b76a82bbc4f4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 265ac614ea6d26041c7d64739098b76a82bbc4f4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -17978,10 +29543,10 @@ Date: Thu May 5 14:38:16 2011 -0400
 
     Replace fixed-size lookup_maps array with hb_array_t
 
 
     Replace fixed-size lookup_maps array with hb_array_t
 
- src/hb-ot-map-private.hh |   13 ++++-------
- src/hb-ot-map.cc        |   47
- ++++++++++++++++++++++++---------------------
- src/hb-private.hh       |    6 +---
+ src/hb-ot-map-private.hh | 13 +++++--------
+ src/hb-ot-map.cc        | 47
+ +++++++++++++++++++++++++----------------------
+ src/hb-private.hh       |  6 ++----
  3 files changed, 32 insertions(+), 34 deletions(-)
 
 commit 6843569d2c70c1771ce964e3d1a4cf91e14e7687
  3 files changed, 32 insertions(+), 34 deletions(-)
 
 commit 6843569d2c70c1771ce964e3d1a4cf91e14e7687
@@ -17990,11 +29555,10 @@ Date: Thu May 5 14:12:37 2011 -0400
 
     Replace fixed-size feature_maps array with hb_array_t
 
 
     Replace fixed-size feature_maps array with hb_array_t
 
- src/hb-ot-map-private.hh |   10 +++-------
- src/hb-ot-map.cc        |   12 ++++++------
- src/hb-ot-shape.cc      |    2 +-
- src/hb-private.hh       |   42
- +++++++++++++++++++++++++++++-------------
+ src/hb-ot-map-private.hh | 10 +++-------
+ src/hb-ot-map.cc        | 12 ++++++------
+ src/hb-ot-shape.cc      |  2 +-
+ src/hb-private.hh       | 42 +++++++++++++++++++++++++++++-------------
  4 files changed, 39 insertions(+), 27 deletions(-)
 
 commit 44b0a4d2fc62689fc56ef57f412b4bb1e439a614
  4 files changed, 39 insertions(+), 27 deletions(-)
 
 commit 44b0a4d2fc62689fc56ef57f412b4bb1e439a614
@@ -18003,9 +29567,9 @@ Date:   Thu May 5 13:42:19 2011 -0400
 
     Replace fixed-size feature_infos array with hb_array_t
 
 
     Replace fixed-size feature_infos array with hb_array_t
 
- src/hb-ot-map-private.hh |    9 +++++----
- src/hb-ot-map.cc        |    9 +++++----
- src/hb-private.hh       |   12 ++++++++++++
+ src/hb-ot-map-private.hh |  9 +++++----
+ src/hb-ot-map.cc        |  9 +++++----
+ src/hb-private.hh       | 12 ++++++++++++
  3 files changed, 22 insertions(+), 8 deletions(-)
 
 commit b214ec3ac0ce6568e9226fd09661d52de11dca96
  3 files changed, 22 insertions(+), 8 deletions(-)
 
 commit b214ec3ac0ce6568e9226fd09661d52de11dca96
@@ -18014,8 +29578,8 @@ Date:   Thu May 5 13:24:07 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 811482bd650fb5652a9835471ae8ecf0fb185611
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 811482bd650fb5652a9835471ae8ecf0fb185611
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18023,10 +29587,10 @@ Date: Thu May 5 13:21:04 2011 -0400
 
     Replace hb_map_t with hb_set_t which is more intuitive and flexible
 
 
     Replace hb_map_t with hb_set_t which is more intuitive and flexible
 
- src/hb-object-private.hh |   24 ++++++++++++++----------
- src/hb-private.hh       |   44
+ src/hb-object-private.hh | 24 ++++++++++++++----------
+ src/hb-private.hh       | 44
  +++++++++++++++++---------------------------
  +++++++++++++++++---------------------------
- test/test-object.c      |    4 ++++
+ test/test-object.c      |  4 ++++
  3 files changed, 35 insertions(+), 37 deletions(-)
 
 commit 478a42536ff7ab777a7774fbfdb9c5e51334a14e
  3 files changed, 35 insertions(+), 37 deletions(-)
 
 commit 478a42536ff7ab777a7774fbfdb9c5e51334a14e
@@ -18035,8 +29599,8 @@ Date:   Thu May 5 12:39:51 2011 -0400
 
     Make array/map implementation more generic
 
 
     Make array/map implementation more generic
 
- src/hb-object-private.hh |    2 ++
- src/hb-private.hh       |   13 +++++++------
+ src/hb-object-private.hh |  2 ++
+ src/hb-private.hh       | 13 +++++++------
  2 files changed, 9 insertions(+), 6 deletions(-)
 
 commit b81bd42951e1ce1569b29168015d3c5a2dacf773
  2 files changed, 9 insertions(+), 6 deletions(-)
 
 commit b81bd42951e1ce1569b29168015d3c5a2dacf773
@@ -18047,8 +29611,8 @@ Date:   Thu May 5 00:21:16 2011 -0400
 
     More intuitive.
 
 
     More intuitive.
 
- src/hb-blob.cc                 |   28 ++++++++++++++--------------
- src/hb-mutex-private.hh |   32 ++++++++++++++++----------------
+ src/hb-blob.cc                 | 28 ++++++++++++++--------------
+ src/hb-mutex-private.hh | 32 ++++++++++++++++----------------
  2 files changed, 30 insertions(+), 30 deletions(-)
 
 commit a4b1900913c91aa9db74c4fdfa7c691a5cdf02a8
  2 files changed, 30 insertions(+), 30 deletions(-)
 
 commit a4b1900913c91aa9db74c4fdfa7c691a5cdf02a8
@@ -18057,8 +29621,8 @@ Date:   Thu May 5 00:17:43 2011 -0400
 
     Add hb_static_mutex_t
 
 
     Add hb_static_mutex_t
 
- src/hb-mutex-private.hh |    8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-mutex-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 56eb5ad6f94c32189ad219438db9a18683ca6846
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 56eb5ad6f94c32189ad219438db9a18683ca6846
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18068,15 +29632,15 @@ Date: Wed May 4 19:27:37 2011 -0400
 
     Mutex (and Windows.h by extension) are fairly isolated now.
 
 
     Mutex (and Windows.h by extension) are fairly isolated now.
 
- src/Makefile.am         |    8 ++--
- src/hb-blob-private.hh   |   60 --------------------------
- src/hb-blob.cc                  |   24 ++++++++++-
- src/hb-font-private.hh   |    3 -
- src/hb-font.cc                  |   12 +++--
- src/hb-mutex-private.hh  |  105
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-object-private.hh |   33 +-------------
- src/hb-unicode.cc       |    1 -
+ src/Makefile.am         |   8 ++--
+ src/hb-blob-private.hh   |  60 ---------------------------
+ src/hb-blob.cc                  |  24 ++++++++++-
+ src/hb-font-private.hh   |   3 --
+ src/hb-font.cc                  |  12 +++---
+ src/hb-mutex-private.hh  | 105
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-object-private.hh |  33 ++-------------
+ src/hb-unicode.cc       |   1 -
  8 files changed, 141 insertions(+), 105 deletions(-)
 
 commit d292885893395dcb345dce1010e5c8628a715ef4
  8 files changed, 141 insertions(+), 105 deletions(-)
 
 commit d292885893395dcb345dce1010e5c8628a715ef4
@@ -18087,8 +29651,8 @@ Date:   Tue May 3 01:03:53 2011 -0400
 
     Don't use _cached()
 
 
     Don't use _cached()
 
- src/hb-ft.cc |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ src/hb-ft.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit 2000179487b49e0d504ec127450dc6fcb5568cec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2000179487b49e0d504ec127450dc6fcb5568cec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18100,11 +29664,11 @@ Date: Tue May 3 00:49:06 2011 -0400
     hb-open-type.h.  Avoid that by making sure hb-object-private.h
     and hb-open-type.h are not included in the same compilation unit.
 
     hb-open-type.h.  Avoid that by making sure hb-object-private.h
     and hb-open-type.h are not included in the same compilation unit.
 
- src/hb-common.cc        |   54 -------------------------------------
- src/hb-object-private.hh |   66
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-private.hh       |   66
- ----------------------------------------------
+ src/hb-common.cc        | 54 ---------------------------------------
+ src/hb-object-private.hh | 66
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-private.hh       | 66
+ ------------------------------------------------
  3 files changed, 66 insertions(+), 120 deletions(-)
 
 commit 266b34418c9bbe23ccaf29cb354b58c465fa3b22
  3 files changed, 66 insertions(+), 120 deletions(-)
 
 commit 266b34418c9bbe23ccaf29cb354b58c465fa3b22
@@ -18115,10 +29679,10 @@ Date: Tue May 3 00:35:53 2011 -0400
 
     Needed to be able to include <Windows.h> from hb-object-private.h.
 
 
     Needed to be able to include <Windows.h> from hb-object-private.h.
 
- src/hb-font.cc                     |   19 +++----------
- src/hb-ot-layout-private.hh |  60
- ++++++++++++++++++++++++------------------
- src/hb-ot-layout.cc        |   28 +++++++++++++++++---
+ src/hb-font.cc                     | 19 ++++----------
+ src/hb-ot-layout-private.hh | 60
+ +++++++++++++++++++++++++--------------------
+ src/hb-ot-layout.cc        | 28 ++++++++++++++++++---
  3 files changed, 63 insertions(+), 44 deletions(-)
 
 commit d4141a44b97377a65e6d2a3e03b3709307af38c1
  3 files changed, 63 insertions(+), 44 deletions(-)
 
 commit d4141a44b97377a65e6d2a3e03b3709307af38c1
@@ -18131,8 +29695,8 @@ Date:   Tue May 3 00:19:18 2011 -0400
 
     Reported by Bradley Grainger.
 
 
     Reported by Bradley Grainger.
 
- src/hb-blob.cc |   12 +++++-------
- 1 files changed, 5 insertions(+), 7 deletions(-)
+ src/hb-blob.cc | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
 
 commit fc52e9e44c2fe84d63f18dc0098720830f0b467d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fc52e9e44c2fe84d63f18dc0098720830f0b467d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18142,9 +29706,9 @@ Date:   Tue May 3 00:09:16 2011 -0400
 
     Patch from Bradley Grainger.
 
 
     Patch from Bradley Grainger.
 
- src/hb-common.cc  |   54
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-private.hh |   30 ++++++++++++++++++++++++----
+ src/hb-common.cc  | 54
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-private.hh | 30 +++++++++++++++++++++++++-----
  2 files changed, 79 insertions(+), 5 deletions(-)
 
 commit f55272ecde857c116f97a3195f3abd1df3be4b86
  2 files changed, 79 insertions(+), 5 deletions(-)
 
 commit f55272ecde857c116f97a3195f3abd1df3be4b86
@@ -18155,8 +29719,8 @@ Date:   Mon May 2 20:57:28 2011 -0400
 
     Based on patch by Bradley Grainger.
 
 
     Based on patch by Bradley Grainger.
 
- src/hb-blob.cc    |   1 +
- src/hb-private.hh |   16 +++++++++-------
+ src/hb-blob.cc    |  1 +
+ src/hb-private.hh | 16 +++++++++-------
  2 files changed, 10 insertions(+), 7 deletions(-)
 
 commit 8d5186484b28b5f629b523e067d7d5166eec557a
  2 files changed, 10 insertions(+), 7 deletions(-)
 
 commit 8d5186484b28b5f629b523e067d7d5166eec557a
@@ -18165,8 +29729,8 @@ Date:   Mon May 2 20:52:21 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 72657e4ce757dcb055a8db7291b68f96f0d34bfb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 72657e4ce757dcb055a8db7291b68f96f0d34bfb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18174,22 +29738,22 @@ Date: Mon May 2 20:46:32 2011 -0400
 
     [API] Make hb_font_create() take a face and reference it
 
 
     [API] Make hb_font_create() take a face and reference it
 
- src/hb-font-private.hh                  |    2 +
- src/hb-font.cc                          |   42
- +++++++++++++++++++++++--------------
- src/hb-font.h                   |   26 +++++++++++++----------
- src/hb-ft.cc                    |    7 +-----
- src/hb-ot-layout-gdef-private.hh |    2 +-
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-layout.cc             |   10 +++-----
- src/hb-ot-layout.h              |    2 -
- src/hb-ot-map-private.hh        |    2 +-
- src/hb-ot-shape.cc              |   23 ++++++++++----------
- src/hb-ot-shape.h               |    1 -
- src/hb-shape.cc                 |   18 +--------------
- src/hb-shape.h                          |    1 -
- src/hb-view.cc                          |    4 +--
- test/test-object.c              |    7 ++++-
+ src/hb-font-private.hh                  |  2 ++
+ src/hb-font.cc                          | 42
+ +++++++++++++++++++++++++---------------
+ src/hb-font.h                   | 26 ++++++++++++++-----------
+ src/hb-ft.cc                    |  7 +------
+ src/hb-ot-layout-gdef-private.hh |  2 +-
+ src/hb-ot-layout-gpos-private.hh |  2 +-
+ src/hb-ot-layout.cc             | 10 ++++------
+ src/hb-ot-layout.h              |  2 --
+ src/hb-ot-map-private.hh        |  2 +-
+ src/hb-ot-shape.cc              | 23 +++++++++++-----------
+ src/hb-ot-shape.h               |  1 -
+ src/hb-shape.cc                 | 18 ++---------------
+ src/hb-shape.h                          |  1 -
+ src/hb-view.cc                          |  4 +---
+ test/test-object.c              |  7 +++++--
  15 files changed, 70 insertions(+), 79 deletions(-)
 
 commit cec6611c5ce84d69d910bf7e9ec1fdd594398f9f
  15 files changed, 70 insertions(+), 79 deletions(-)
 
 commit cec6611c5ce84d69d910bf7e9ec1fdd594398f9f
@@ -18198,8 +29762,8 @@ Date:   Mon May 2 20:18:58 2011 -0400
 
     Protect NULL in a couple places
 
 
     Protect NULL in a couple places
 
- src/hb-font.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-font.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 5a5030366e40baa8d96ca67b47a52ad5af143157
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5a5030366e40baa8d96ca67b47a52ad5af143157
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18209,8 +29773,8 @@ Date:   Mon May 2 19:54:29 2011 -0400
 
     With this, test/object is now passing.  Yay!
 
 
     With this, test/object is now passing.  Yay!
 
- src/hb-private.hh |   24 +++++++++++-------------
- 1 files changed, 11 insertions(+), 13 deletions(-)
+ src/hb-private.hh | 24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
 
 commit 16123e10700436df18d14e37371bb621b31ea5d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 16123e10700436df18d14e37371bb621b31ea5d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18218,8 +29782,8 @@ Date:   Mon May 2 19:54:17 2011 -0400
 
     Fix bug in map implementation
 
 
     Fix bug in map implementation
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1cd5969f253528b1fc05a06c7a9f222baa29f68d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1cd5969f253528b1fc05a06c7a9f222baa29f68d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18227,8 +29791,8 @@ Date:   Mon May 2 19:53:39 2011 -0400
 
     [object] Fix bug in get_user_data() implementation
 
 
     [object] Fix bug in get_user_data() implementation
 
- src/hb-object-private.hh |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-object-private.hh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit db99589529a22a2113bcef1680ab6d9b934f382e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db99589529a22a2113bcef1680ab6d9b934f382e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18239,10 +29803,10 @@ Date: Mon May 2 19:52:47 2011 -0400
     Revealed many bugs in the (untested and known buggy) user_data
     support.
 
     Revealed many bugs in the (untested and known buggy) user_data
     support.
 
- test/Makefile.am   |   4 +
- test/test-object.c |  316
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 320 insertions(+), 0 deletions(-)
+ test/Makefile.am   |  4 +
+ test/test-object.c | 316
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 320 insertions(+)
 
 commit f74d6c81f14f117b3cecfb65f0d5df22849c9a07
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f74d6c81f14f117b3cecfb65f0d5df22849c9a07
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18250,8 +29814,8 @@ Date:   Mon May 2 19:52:32 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- test/test-unicode.c |  10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ test/test-unicode.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 4911062d5be0d937ee8f1a70cc93e05d162f45b3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4911062d5be0d937ee8f1a70cc93e05d162f45b3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18259,10 +29823,10 @@ Date: Mon May 2 19:36:39 2011 -0400
 
     [API] Rename hb_blob_create_empty() to hb_blob_get_empty()
 
 
     [API] Rename hb_blob_create_empty() to hb_blob_get_empty()
 
- src/hb-blob.cc                     |    2 +-
- src/hb-blob.h              |    2 +-
- src/hb-font.cc                     |    2 +-
- src/hb-open-type-private.hh |   2 +-
+ src/hb-blob.cc                     | 2 +-
+ src/hb-blob.h              | 2 +-
+ src/hb-font.cc                     | 2 +-
+ src/hb-open-type-private.hh | 2 +-
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 1ab1d3e38cdf8e7331efdbc4ef0c02ee9d5c8c04
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 1ab1d3e38cdf8e7331efdbc4ef0c02ee9d5c8c04
@@ -18271,8 +29835,8 @@ Date:   Mon May 2 19:35:53 2011 -0400
 
     [face] Return nil face if blob is inert
 
 
     [face] Return nil face if blob is inert
 
- src/hb-font.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit e87867cb88280e3f3a38d829e359cb686168b2cb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e87867cb88280e3f3a38d829e359cb686168b2cb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18281,8 +29845,8 @@ Date:   Mon May 2 19:35:05 2011 -0400
     [buffer] Fail in _create() if we cannot pre-allocate the requested
     size
 
     [buffer] Fail in _create() if we cannot pre-allocate the requested
     size
 
- src/hb-buffer.cc |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-buffer.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit cd361ec9a1b2bfc271e5490dbfc0a870fd5c439a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd361ec9a1b2bfc271e5490dbfc0a870fd5c439a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18290,8 +29854,8 @@ Date:   Mon May 2 16:54:05 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- test/test-unicode.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-unicode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c784c67a28f5b92d396eaa9529d57ef91a5cb9ac
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c784c67a28f5b92d396eaa9529d57ef91a5cb9ac
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18299,8 +29863,8 @@ Date:   Mon May 2 15:59:57 2011 -0400
 
     [unicode] Make _get_parent() return _nil object instead of NULL
 
 
     [unicode] Make _get_parent() return _nil object instead of NULL
 
- src/hb-unicode.cc   |  29 ++++++++++++-----------------
- test/test-unicode.c |   2 +-
+ src/hb-unicode.cc   | 29 ++++++++++++-----------------
+ test/test-unicode.c | 2 +-
  2 files changed, 13 insertions(+), 18 deletions(-)
 
 commit 07e22779abd089d5921bf2d19d4a3bf1bd0173c6
  2 files changed, 13 insertions(+), 18 deletions(-)
 
 commit 07e22779abd089d5921bf2d19d4a3bf1bd0173c6
@@ -18309,9 +29873,9 @@ Date:   Mon May 2 14:58:04 2011 -0400
 
     [test/unicode] Add script roundtrip tests for glib and ICU
 
 
     [test/unicode] Add script roundtrip tests for glib and ICU
 
- test/test-unicode.c |  70
- ++++++++++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 64 insertions(+), 6 deletions(-)
+ test/test-unicode.c | 70
+ ++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 64 insertions(+), 6 deletions(-)
 
 commit 7cda65935c73c277550f6ac12f6730e96d4852a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7cda65935c73c277550f6ac12f6730e96d4852a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18319,9 +29883,9 @@ Date:   Mon May 2 14:33:53 2011 -0400
 
     [test/unicode] Better test chainup
 
 
     [test/unicode] Better test chainup
 
- test/test-unicode.c |  54
- ++++++++++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 49 insertions(+), 5 deletions(-)
+ test/test-unicode.c | 54
+ ++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 49 insertions(+), 5 deletions(-)
 
 commit 250c59225ead28449deb11522dee3819480a19b4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 250c59225ead28449deb11522dee3819480a19b4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18329,9 +29893,9 @@ Date:   Mon May 2 14:21:30 2011 -0400
 
     [test/unicode] Port the _custom test to test all property setters
 
 
     [test/unicode] Port the _custom test to test all property setters
 
- test/test-unicode.c | 186
- ++++++++++++++++++++++++++++----------------------
- 1 files changed, 104 insertions(+), 82 deletions(-)
+ test/test-unicode.c | 186
+ +++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 104 insertions(+), 82 deletions(-)
 
 commit e74b5b339ab0af53d893ec84a0955d5aa508fed3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e74b5b339ab0af53d893ec84a0955d5aa508fed3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18339,8 +29903,8 @@ Date:   Mon May 2 14:03:55 2011 -0400
 
     [test/unicode] Test Unicode 5.2+ but don't fail
 
 
     [test/unicode] Test Unicode 5.2+ but don't fail
 
- test/test-unicode.c |  21 +++++++++++++++++++--
- 1 files changed, 19 insertions(+), 2 deletions(-)
+ test/test-unicode.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
 
 commit c763aa42b46eaee95359806cab56fa632ff3ad58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c763aa42b46eaee95359806cab56fa632ff3ad58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18350,9 +29914,9 @@ Date:   Mon May 2 13:52:17 2011 -0400
 
     Getting the hang of how to cleanly use gtest.
 
 
     Getting the hang of how to cleanly use gtest.
 
- test/test-buffer.c |  154
- +++++++++++++++++++++++++++++-----------------------
- 1 files changed, 85 insertions(+), 69 deletions(-)
+ test/test-buffer.c | 154
+ +++++++++++++++++++++++++++++------------------------
+ 1 file changed, 85 insertions(+), 69 deletions(-)
 
 commit 819e9d9e5310e67e8dcce9fa885f8a086a9b9ee8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 819e9d9e5310e67e8dcce9fa885f8a086a9b9ee8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18360,8 +29924,8 @@ Date:   Mon May 2 12:38:54 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-unicode.c |   5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ test/test-unicode.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 03034acb8a9fdd33135bc3775a1f932da9ebdd42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 03034acb8a9fdd33135bc3775a1f932da9ebdd42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18369,8 +29933,8 @@ Date:   Mon May 2 12:37:45 2011 -0400
 
     [icu] Make sure we return script UNKNOWN instead of INVALID
 
 
     [icu] Make sure we return script UNKNOWN instead of INVALID
 
- src/hb-icu.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-icu.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit d02985ec5a24c659a0a133cc6bc103f1d76bcb29
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d02985ec5a24c659a0a133cc6bc103f1d76bcb29
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18383,9 +29947,9 @@ Date:   Mon May 2 12:35:14 2011 -0400
     Fixes some of the test failures in test-unicode with ICU.  Still
     one more to fix before the test passes.
 
     Fixes some of the test failures in test-unicode with ICU.  Still
     one more to fix before the test passes.
 
- src/hb-common.cc |   10 ++++++++--
- src/hb-common.h  |    5 +++--
- src/hb-ot-tag.cc |    2 --
+ src/hb-common.cc | 10 ++++++++--
+ src/hb-common.h  |  5 +++--
+ src/hb-ot-tag.cc |  2 --
  3 files changed, 11 insertions(+), 6 deletions(-)
 
 commit e8e29c725a72c2e991cd1c4422a020457e1684e9
  3 files changed, 11 insertions(+), 6 deletions(-)
 
 commit e8e29c725a72c2e991cd1c4422a020457e1684e9
@@ -18396,8 +29960,8 @@ Date:   Mon May 2 12:06:18 2011 -0400
 
     Use with --verbose to see what's failing
 
 
     Use with --verbose to see what's failing
 
- test/test-unicode.c |   9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ test/test-unicode.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 208c2c31501f6eb2b81b6bf80fcf39f4646eb38b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 208c2c31501f6eb2b81b6bf80fcf39f4646eb38b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18405,9 +29969,9 @@ Date:   Sun May 1 20:04:01 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-unicode.c | 478
- ++++++++++++++++++++++++++-------------------------
- 1 files changed, 243 insertions(+), 235 deletions(-)
+ test/test-unicode.c | 478
+ ++++++++++++++++++++++++++--------------------------
+ 1 file changed, 243 insertions(+), 235 deletions(-)
 
 commit 60833efaf1310c3f18e150b61daaeb0074ae3d91
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60833efaf1310c3f18e150b61daaeb0074ae3d91
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18417,9 +29981,9 @@ Date:   Fri Apr 29 16:49:57 2011 -0400
 
     ICU fails for now.
 
 
     ICU fails for now.
 
- test/hb-test.h      |   4 +-
- test/test-unicode.c | 432
- ++++++++++++++++++++++++++++++++++++++++++++++++---
+ test/hb-test.h      |  4 +-
+ test/test-unicode.c | 432
+ +++++++++++++++++++++++++++++++++++++++++++++++++---
  2 files changed, 416 insertions(+), 20 deletions(-)
 
 commit da96ee072fa3544c3d36cf0b82ada11806789d70
  2 files changed, 416 insertions(+), 20 deletions(-)
 
 commit da96ee072fa3544c3d36cf0b82ada11806789d70
@@ -18428,8 +29992,8 @@ Date:   Fri Apr 29 12:17:09 2011 -0400
 
     [test/unicode] Test is/make_immutable()
 
 
     [test/unicode] Test is/make_immutable()
 
- test/test-unicode.c |  46 ++++++++++++++++++++++++++++++----------------
- 1 files changed, 30 insertions(+), 16 deletions(-)
+ test/test-unicode.c | 46 ++++++++++++++++++++++++++++++----------------
+ 1 file changed, 30 insertions(+), 16 deletions(-)
 
 commit 6af9cff5e17e82100b435c8d21aed0765296d58d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6af9cff5e17e82100b435c8d21aed0765296d58d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18437,14 +30001,14 @@ Date: Fri Apr 29 12:00:38 2011 -0400
 
     [test/unicode] Use text fixture instead of static variables
 
 
     [test/unicode] Use text fixture instead of static variables
 
- src/hb-unicode-private.hh |   2 +-
- src/hb-unicode.h         |    2 +-
- test/test-buffer.c       |    2 +-
- test/test-c.c            |    1 +
- test/test-common.c       |    3 +-
- test/test-cplusplus.cc    |   1 +
- test/test-unicode.c      |  112
- +++++++++++++++++++++++++++------------------
+ src/hb-unicode-private.hh |   2 +-
+ src/hb-unicode.h         |   2 +-
+ test/test-buffer.c       |   2 +-
+ test/test-c.c            |   1 +
+ test/test-common.c       |   3 +-
+ test/test-cplusplus.cc    |   1 +
+ test/test-unicode.c      | 112
+ +++++++++++++++++++++++++++-------------------
  7 files changed, 74 insertions(+), 49 deletions(-)
 
 commit 13db3d40bfc09c68f9761a71435b1840b9d34099
  7 files changed, 74 insertions(+), 49 deletions(-)
 
 commit 13db3d40bfc09c68f9761a71435b1840b9d34099
@@ -18453,9 +30017,8 @@ Date:   Thu Apr 28 19:44:45 2011 -0400
 
     [test/buffer] Add UTF-16 tests
 
 
     [test/buffer] Add UTF-16 tests
 
- test/test-buffer.c |  48
- ++++++++++++++++++++++++++++++++++++++++++++++--
- 1 files changed, 46 insertions(+), 2 deletions(-)
+ test/test-buffer.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 46 insertions(+), 2 deletions(-)
 
 commit 243673d601588a6f704ceafbff5dd5cdf66c47b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 243673d601588a6f704ceafbff5dd5cdf66c47b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18463,9 +30026,9 @@ Date:   Thu Apr 28 19:37:51 2011 -0400
 
     [test/buffer] Add more extensive UTF-8 test data from glib
 
 
     [test/buffer] Add more extensive UTF-8 test data from glib
 
- src/hb-buffer.cc   |   2 +-
- test/test-buffer.c |  317
- +++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/hb-buffer.cc   |  2 +-
+ test/test-buffer.c | 317
+ ++++++++++++++++++++++++++++++++++++++++++++++++++---
  2 files changed, 303 insertions(+), 16 deletions(-)
 
 commit dfec67f958482e5c3bb01e06b08694cd4ded6f66
  2 files changed, 303 insertions(+), 16 deletions(-)
 
 commit dfec67f958482e5c3bb01e06b08694cd4ded6f66
@@ -18474,8 +30037,8 @@ Date:   Thu Apr 28 18:34:42 2011 -0400
 
     [test/buffer] Add initial utf-8 tests
 
 
     [test/buffer] Add initial utf-8 tests
 
- test/hb-test.h     |  25 ++++++++++++++++++++++++-
- test/test-buffer.c |  46 +++++++++++++++++++++++++++++++++++++++++++++-
+ test/hb-test.h     | 25 ++++++++++++++++++++++++-
+ test/test-buffer.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
  2 files changed, 69 insertions(+), 2 deletions(-)
 
 commit aafe395ab550d3ba2fabc69155662e87d45e74a8
  2 files changed, 69 insertions(+), 2 deletions(-)
 
 commit aafe395ab550d3ba2fabc69155662e87d45e74a8
@@ -18486,12 +30049,12 @@ Date: Thu Apr 28 17:10:44 2011 -0400
 
     Wraps around glib for convenience and ease of use.
 
 
     Wraps around glib for convenience and ease of use.
 
- test/Makefile.am    |   1 +
- test/hb-test.h      | 132
- +++++++++++++++++++++++++++++++++++++++++++++++----
- test/test-buffer.c  |  29 +++++------
- test/test-common.c  |  14 +++---
- test/test-unicode.c |  32 ++++++------
+ test/Makefile.am    |  1 +
+ test/hb-test.h      | 132
+ ++++++++++++++++++++++++++++++++++++++++++++++++----
+ test/test-buffer.c  | 29 ++++++------
+ test/test-common.c  | 14 +++---
+ test/test-unicode.c | 32 ++++++-------
  5 files changed, 160 insertions(+), 48 deletions(-)
 
 commit c7ffe2ad5f6e97e26d14e2cc0d4098af8f5f36d0
  5 files changed, 160 insertions(+), 48 deletions(-)
 
 commit c7ffe2ad5f6e97e26d14e2cc0d4098af8f5f36d0
@@ -18502,9 +30065,9 @@ Date:   Thu Apr 28 16:03:29 2011 -0400
 
     Will be adding font_funcs subclassing instead.
 
 
     Will be adding font_funcs subclassing instead.
 
- src/hb-font.cc |   13 -------------
- src/hb-font.h |    3 ---
- 2 files changed, 0 insertions(+), 16 deletions(-)
+ src/hb-font.cc | 13 -------------
+ src/hb-font.h |  3 ---
+ 2 files changed, 16 deletions(-)
 
 commit 30f34d08d445722320db711c3ddf41e66225752c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 30f34d08d445722320db711c3ddf41e66225752c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18512,9 +30075,9 @@ Date:   Thu Apr 28 16:02:40 2011 -0400
 
     [TODO] Remove finished items
 
 
     [TODO] Remove finished items
 
- TODO         |    2 --
- src/hb-font.h |   10 ----------
- 2 files changed, 0 insertions(+), 12 deletions(-)
+ TODO         |  2 --
+ src/hb-font.h | 10 ----------
+ 2 files changed, 12 deletions(-)
 
 commit 080a0eb7d82d7195be72c16ece6e0a3ffed636b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 080a0eb7d82d7195be72c16ece6e0a3ffed636b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18522,10 +30085,10 @@ Date: Thu Apr 28 16:01:01 2011 -0400
 
     Add _hb_unsigned_int_mul_overflows
 
 
     Add _hb_unsigned_int_mul_overflows
 
- src/hb-buffer.cc                |    7 ++-----
- src/hb-open-type-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh |    2 +-
- src/hb-private.hh               |    9 ++++++++-
+ src/hb-buffer.cc                | 7 ++-----
+ src/hb-open-type-private.hh     | 2 +-
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ src/hb-private.hh               | 9 ++++++++-
  4 files changed, 12 insertions(+), 8 deletions(-)
 
 commit 1d39d6e42b3d7628512d675a84a831a0f58624eb
  4 files changed, 12 insertions(+), 8 deletions(-)
 
 commit 1d39d6e42b3d7628512d675a84a831a0f58624eb
@@ -18534,8 +30097,8 @@ Date:   Thu Apr 28 15:54:16 2011 -0400
 
     Desable possibly lethal test on 64-bit machines
 
 
     Desable possibly lethal test on 64-bit machines
 
- test/test-buffer.c |   9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ test/test-buffer.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 3264042873fd639f3ef8ff0acfad777a0a9f3355
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3264042873fd639f3ef8ff0acfad777a0a9f3355
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18543,8 +30106,8 @@ Date:   Thu Apr 28 14:24:16 2011 -0400
 
     [test/buffer] Test pre_allocate() and allocation_successful()
 
 
     [test/buffer] Test pre_allocate() and allocation_successful()
 
- src/hb-buffer.cc   |   3 ++-
- test/test-buffer.c |  26 +++++++++++++++++++++++++-
+ src/hb-buffer.cc   |  3 ++-
+ test/test-buffer.c | 26 +++++++++++++++++++++++++-
  2 files changed, 27 insertions(+), 2 deletions(-)
 
 commit 123aa04f7b3241d6e43de2d472c4a1cbdb250ac7
  2 files changed, 27 insertions(+), 2 deletions(-)
 
 commit 123aa04f7b3241d6e43de2d472c4a1cbdb250ac7
@@ -18553,8 +30116,8 @@ Date:   Thu Apr 28 12:58:28 2011 -0400
 
     Fix possible but improbable overflow in hb_array_t
 
 
     Fix possible but improbable overflow in hb_array_t
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e0db4b868f9fdd8e680890f87dd4e13a1c27b7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e0db4b868f9fdd8e680890f87dd4e13a1c27b7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18564,9 +30127,9 @@ Date:   Thu Apr 28 12:56:49 2011 -0400
 
     Should be all set now.
 
 
     Should be all set now.
 
- src/hb-buffer-private.hh |    2 +-
- src/hb-buffer.cc        |   60
- ++++++++++++++++++++++++++++++++-------------
+ src/hb-buffer-private.hh |  2 +-
+ src/hb-buffer.cc        | 60
+ +++++++++++++++++++++++++++++++++---------------
  2 files changed, 43 insertions(+), 19 deletions(-)
 
 commit 15c57e04bf05026ef424f8ae912d2f379301bf93
  2 files changed, 43 insertions(+), 19 deletions(-)
 
 commit 15c57e04bf05026ef424f8ae912d2f379301bf93
@@ -18580,8 +30143,8 @@ Date:   Thu Apr 28 12:28:54 2011 -0400
       while (size > new_allocated)
          new_allocated += (new_allocated >> 1) + 32;
 
       while (size > new_allocated)
          new_allocated += (new_allocated >> 1) + 32;
 
- test/test-buffer.c |  33 ++++++++++++++++++++++++++-------
- 1 files changed, 26 insertions(+), 7 deletions(-)
+ test/test-buffer.c | 33 ++++++++++++++++++++++++++-------
+ 1 file changed, 26 insertions(+), 7 deletions(-)
 
 commit 1e5527e2d60ed3b4a5adf62b258415ec3aef41fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e5527e2d60ed3b4a5adf62b258415ec3aef41fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18589,9 +30152,9 @@ Date:   Thu Apr 28 12:15:24 2011 -0400
 
     [test/buffer] Test reset(), set_length(), and set/get_unicode_data()
 
 
     [test/buffer] Test reset(), set_length(), and set/get_unicode_data()
 
- test/test-buffer.c |  66
- ++++++++++++++++++++++++++++++++++++++++++++++-----
- 1 files changed, 59 insertions(+), 7 deletions(-)
+ test/test-buffer.c | 66
+ ++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 59 insertions(+), 7 deletions(-)
 
 commit db126b5448ec802285cf2b6f0e7da412d02dfb28
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db126b5448ec802285cf2b6f0e7da412d02dfb28
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18599,9 +30162,9 @@ Date:   Thu Apr 28 11:56:29 2011 -0400
 
     [test/buffer] Test reverse() and reverse_clusters()
 
 
     [test/buffer] Test reverse() and reverse_clusters()
 
- test/test-buffer.c |  61
- ++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 files changed, 57 insertions(+), 4 deletions(-)
+ test/test-buffer.c | 61
+ ++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 57 insertions(+), 4 deletions(-)
 
 commit 5fa849b77d49da2212825ebb1bea9145713b8449
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5fa849b77d49da2212825ebb1bea9145713b8449
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18609,16 +30172,16 @@ Date: Wed Apr 27 21:46:01 2011 -0400
 
     [API] Add _set/get_user_data() for all objects
 
 
     [API] Add _set/get_user_data() for all objects
 
- src/hb-blob.cc    |   17 +++++++++++++++++
- src/hb-blob.h    |   12 ++++++++++++
- src/hb-buffer.cc  |   16 ++++++++++++++++
- src/hb-buffer.h   |   10 ++++++++++
- src/hb-font.cc    |   51
+ src/hb-blob.cc    | 17 +++++++++++++++++
+ src/hb-blob.h    | 12 ++++++++++++
+ src/hb-buffer.cc  | 16 ++++++++++++++++
+ src/hb-buffer.h   | 10 ++++++++++
+ src/hb-font.cc    | 51
  +++++++++++++++++++++++++++++++++++++++++++++++++++
  +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.h    |   36 ++++++++++++++++++++++++++++++++++++
- src/hb-unicode.cc |   17 +++++++++++++++++
- src/hb-unicode.h  |   12 ++++++++++++
- 8 files changed, 171 insertions(+), 0 deletions(-)
+ src/hb-font.h    | 36 ++++++++++++++++++++++++++++++++++++
+ src/hb-unicode.cc | 17 +++++++++++++++++
+ src/hb-unicode.h  | 12 ++++++++++++
+ 8 files changed, 171 insertions(+)
 
 commit 852e08ec8fbfbce1d50e571d0bb0b52ef4d4cc58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 852e08ec8fbfbce1d50e571d0bb0b52ef4d4cc58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18626,9 +30189,9 @@ Date:   Wed Apr 27 21:45:51 2011 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-object-private.hh |  153
- ++++++++++------------------------------------
- src/hb-private.hh       |  136 +++++++++++++++++++++++++++++++++++++----
+ src/hb-object-private.hh | 153
+ ++++++++++-------------------------------------
+ src/hb-private.hh       | 136 +++++++++++++++++++++++++++++++++++++----
  2 files changed, 157 insertions(+), 132 deletions(-)
 
 commit 29c67d3f70b081766a6c01353980f457f38aeb12
  2 files changed, 157 insertions(+), 132 deletions(-)
 
 commit 29c67d3f70b081766a6c01353980f457f38aeb12
@@ -18637,9 +30200,9 @@ Date:   Wed Apr 27 21:22:32 2011 -0400
 
     Add initial implementation of user_data to objects
 
 
     Add initial implementation of user_data to objects
 
- src/hb-common.h         |   11 ++-
- src/hb-object-private.hh |  186
- +++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-common.h         |  11 ++-
+ src/hb-object-private.hh | 186
+ ++++++++++++++++++++++++++++++++++++++++++++++-
  2 files changed, 193 insertions(+), 4 deletions(-)
 
 commit 47e71d9661946a4ffb96026bf1d697d788414ab5
  2 files changed, 193 insertions(+), 4 deletions(-)
 
 commit 47e71d9661946a4ffb96026bf1d697d788414ab5
@@ -18648,12 +30211,12 @@ Date: Wed Apr 27 16:38:03 2011 -0400
 
     [object] Remove unnecessary use of macros
 
 
     [object] Remove unnecessary use of macros
 
- TODO                    |    2 --
- src/hb-blob.cc                  |   18 +++++++++---------
- src/hb-buffer.cc        |    6 +++---
- src/hb-font.cc                  |   30 +++++++++++++++---------------
- src/hb-object-private.hh |    9 ---------
- src/hb-unicode.cc       |    8 ++++----
+ TODO                    |  2 --
+ src/hb-blob.cc                  | 18 +++++++++---------
+ src/hb-buffer.cc        |  6 +++---
+ src/hb-font.cc                  | 30 +++++++++++++++---------------
+ src/hb-object-private.hh |  9 ---------
+ src/hb-unicode.cc       |  8 ++++----
  6 files changed, 31 insertions(+), 42 deletions(-)
 
 commit 8be1420f8fd0e5c53282245d6830efbee5c7409d
  6 files changed, 31 insertions(+), 42 deletions(-)
 
 commit 8be1420f8fd0e5c53282245d6830efbee5c7409d
@@ -18662,8 +30225,8 @@ Date:   Wed Apr 27 16:14:04 2011 -0400
 
     [blob] Use HB_FUNC instead of __FUNCTION__
 
 
     [blob] Use HB_FUNC instead of __FUNCTION__
 
- src/hb-blob.cc |   24 ++++++++++++------------
- 1 files changed, 12 insertions(+), 12 deletions(-)
+ src/hb-blob.cc | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
 commit ae008b90cfc2028e878100f78b21d70f923a6044
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae008b90cfc2028e878100f78b21d70f923a6044
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18671,8 +30234,8 @@ Date:   Wed Apr 27 16:12:12 2011 -0400
 
     [object] Add tracing support back in
 
 
     [object] Add tracing support back in
 
- src/hb-object-private.hh |   38 ++++++++++++++++++++++++++------------
- 1 files changed, 26 insertions(+), 12 deletions(-)
+ src/hb-object-private.hh | 38 ++++++++++++++++++++++++++------------
+ 1 file changed, 26 insertions(+), 12 deletions(-)
 
 commit 5b7f38979fa90117861fe327477de1707f117a8c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5b7f38979fa90117861fe327477de1707f117a8c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18682,8 +30245,8 @@ Date:   Wed Apr 27 15:10:12 2011 -0400
 
     With gcc on arm, request 8-bit structure alignment.
 
 
     With gcc on arm, request 8-bit structure alignment.
 
- configure.ac |   10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
+ configure.ac | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
 
 commit 39a840ae65327b173e6eb1bb291e235a8305d7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 39a840ae65327b173e6eb1bb291e235a8305d7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18693,11 +30256,11 @@ Date: Wed Apr 27 14:48:19 2011 -0400
 
     And hb-view --direction argument.
 
 
     And hb-view --direction argument.
 
- TODO              |    1 -
- src/hb-common.cc   |  36 ++++++++++++++++++++++++++++++++++++
- src/hb-common.h    |   6 ++++++
- src/hb-view.cc     |  13 ++++++++++---
- test/test-common.c |  21 ++++++++++++++++++++-
+ TODO              |  1 -
+ src/hb-common.cc   | 36 ++++++++++++++++++++++++++++++++++++
+ src/hb-common.h    |  6 ++++++
+ src/hb-view.cc     | 13 ++++++++++---
+ test/test-common.c | 21 ++++++++++++++++++++-
  5 files changed, 72 insertions(+), 5 deletions(-)
 
 commit f1425a549fef360c3750532de23604cd318999d8
  5 files changed, 72 insertions(+), 5 deletions(-)
 
 commit f1425a549fef360c3750532de23604cd318999d8
@@ -18706,13 +30269,13 @@ Date: Wed Apr 27 12:15:06 2011 -0400
 
     Rename hb-view.c and test.c to .cc files
 
 
     Rename hb-view.c and test.c to .cc files
 
- src/Makefile.am |    4 +-
- src/hb-view.c  |  540
- -------------------------------------------------------
- src/hb-view.cc  |  540
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/test.c     |   94 ----------
- src/test.cc    |   97 ++++++++++
+ src/Makefile.am |   4 +-
+ src/hb-view.c  | 540
+ --------------------------------------------------------
+ src/hb-view.cc  | 540
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/test.c     |  94 ----------
+ src/test.cc    |  97 ++++++++++
  5 files changed, 639 insertions(+), 636 deletions(-)
 
 commit eb5796f58897ecfb9d76fd99915bf1a30669a0fa
  5 files changed, 639 insertions(+), 636 deletions(-)
 
 commit eb5796f58897ecfb9d76fd99915bf1a30669a0fa
@@ -18721,8 +30284,8 @@ Date:   Wed Apr 27 12:14:53 2011 -0400
 
     [TODO] Add hb-view items
 
 
     [TODO] Add hb-view items
 
- TODO |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
+ TODO | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
 
 commit 65e0063eae2f3adb25315b8bd7b0e7757aa960f3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 65e0063eae2f3adb25315b8bd7b0e7757aa960f3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18730,8 +30293,8 @@ Date:   Wed Apr 27 09:33:58 2011 -0400
 
     Make buffer size growth start from 32 instead of 8
 
 
     Make buffer size growth start from 32 instead of 8
 
- src/hb-buffer.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit d4bee9f813bb299b1c4aab7c33d588be2a7d354b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d4bee9f813bb299b1c4aab7c33d588be2a7d354b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18739,14 +30302,14 @@ Date: Wed Apr 27 09:24:37 2011 -0400
 
     [API] Add hb_unicode_funcs_get_default()
 
 
     [API] Add hb_unicode_funcs_get_default()
 
- src/hb-buffer.cc         |    4 ++--
- src/hb-glib.cc                   |    5 +++--
- src/hb-icu.cc            |    5 +++--
- src/hb-unicode-private.hh |   11 +++++++++++
- src/hb-unicode.cc        |    7 +++++++
- src/hb-unicode.h         |    8 ++++++++
- src/hb-view.c            |   13 ++++++-------
- test/test-unicode.c      |   11 ++++++++++-
+ src/hb-buffer.cc         |  4 ++--
+ src/hb-glib.cc                   |  5 +++--
+ src/hb-icu.cc            |  5 +++--
+ src/hb-unicode-private.hh | 11 +++++++++++
+ src/hb-unicode.cc        |  7 +++++++
+ src/hb-unicode.h         |  8 ++++++++
+ src/hb-view.c            | 13 ++++++-------
+ test/test-unicode.c      | 11 ++++++++++-
  8 files changed, 50 insertions(+), 14 deletions(-)
 
 commit 153142dac8dd9abaf164bb88af07c600c17fc3a1
  8 files changed, 50 insertions(+), 14 deletions(-)
 
 commit 153142dac8dd9abaf164bb88af07c600c17fc3a1
@@ -18760,8 +30323,8 @@ Date:   Wed Apr 27 01:49:03 2011 -0400
     The hb_be_int16/32_get/put/eq() macros grow code size if replaced with
     inline functions, so leave them as is.
 
     The hb_be_int16/32_get/put/eq() macros grow code size if replaced with
     inline functions, so leave them as is.
 
- src/hb-open-type-private.hh |   4 ++--
- src/hb-private.hh          |   30 +++++++++++++++++++++---------
+ src/hb-open-type-private.hh | 4 ++--
+ src/hb-private.hh          | 30 +++++++++++++++++++++---------
  2 files changed, 23 insertions(+), 11 deletions(-)
 
 commit 40a9b8154f929947f4693bf90c64301afa407c3f
  2 files changed, 23 insertions(+), 11 deletions(-)
 
 commit 40a9b8154f929947f4693bf90c64301afa407c3f
@@ -18770,8 +30333,8 @@ Date:   Wed Apr 27 01:48:56 2011 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- src/hb-object-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-object-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit ebdc83467c31574daa118fc18cd2ef2dc819b503
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ebdc83467c31574daa118fc18cd2ef2dc819b503
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18781,8 +30344,8 @@ Date:   Wed Apr 27 01:41:24 2011 -0400
 
     Would have been nice if gcc had warned...
 
 
     Would have been nice if gcc had warned...
 
- src/hb-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ec6f9c2fd03a49d1e91cbaefa5bdbbfb35dff92e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec6f9c2fd03a49d1e91cbaefa5bdbbfb35dff92e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18790,9 +30353,9 @@ Date:   Thu Apr 21 18:35:58 2011 -0400
 
     Further simplify object handling
 
 
     Further simplify object handling
 
- src/hb-object-private.hh |   53
- +++++++++++++++++++++++----------------------
- 1 files changed, 27 insertions(+), 26 deletions(-)
+ src/hb-object-private.hh | 53
+ ++++++++++++++++++++++++------------------------
+ 1 file changed, 27 insertions(+), 26 deletions(-)
 
 commit fca368c4682624346a0aaee690e1ad6ed4c0b337
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fca368c4682624346a0aaee690e1ad6ed4c0b337
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18802,20 +30365,20 @@ Date: Thu Apr 21 18:24:02 2011 -0400
 
     Makes way for adding arbitrary user_data support.
 
 
     Makes way for adding arbitrary user_data support.
 
- src/hb-blob-private.hh    |   3 +-
- src/hb-blob.cc                   |    2 +-
- src/hb-buffer-private.hh  |   9 ++--
- src/hb-buffer.cc         |    2 +-
- src/hb-font-private.hh    |   7 ++-
- src/hb-font.cc                   |    7 ++-
- src/hb-ft.cc             |    3 +-
- src/hb-glib.cc                   |    3 +-
- src/hb-icu.cc            |    3 +-
- src/hb-object-private.hh  |   95
- ++++++++++++++++++++++++--------------------
- src/hb-private.hh        |    5 +--
- src/hb-unicode-private.hh |   6 ++-
- src/hb-unicode.cc        |    3 +-
+ src/hb-blob-private.hh    |  3 +-
+ src/hb-blob.cc                   |  2 +-
+ src/hb-buffer-private.hh  |  9 +++--
+ src/hb-buffer.cc         |  2 +-
+ src/hb-font-private.hh    |  7 ++--
+ src/hb-font.cc                   |  7 ++--
+ src/hb-ft.cc             |  3 +-
+ src/hb-glib.cc                   |  3 +-
+ src/hb-icu.cc            |  3 +-
+ src/hb-object-private.hh  | 95
+ ++++++++++++++++++++++++++---------------------
+ src/hb-private.hh        |  5 +--
+ src/hb-unicode-private.hh |  6 ++-
+ src/hb-unicode.cc        |  3 +-
  13 files changed, 82 insertions(+), 66 deletions(-)
 
 commit a9f24c802956d57180d71b83e96a0fb81197df4a
  13 files changed, 82 insertions(+), 66 deletions(-)
 
 commit a9f24c802956d57180d71b83e96a0fb81197df4a
@@ -18824,8 +30387,8 @@ Date:   Thu Apr 21 17:18:22 2011 -0400
 
     Move hb_reference_count_t to hb-private.h
 
 
     Move hb_reference_count_t to hb-private.h
 
- src/hb-object-private.hh |   17 -----------------
- src/hb-private.hh       |   20 ++++++++++++++++++++
+ src/hb-object-private.hh | 17 -----------------
+ src/hb-private.hh       | 20 ++++++++++++++++++++
  2 files changed, 20 insertions(+), 17 deletions(-)
 
 commit 2409d5f8d7dd8b535ce5ea29e933f7db27d33793
  2 files changed, 20 insertions(+), 17 deletions(-)
 
 commit 2409d5f8d7dd8b535ce5ea29e933f7db27d33793
@@ -18834,63 +30397,63 @@ Date: Thu Apr 21 17:14:28 2011 -0400
 
     Update Copyright headers
 
 
     Update Copyright headers
 
- COPYING                                |   15 ++++++++-------
- src/hb-blob-private.hh                         |    2 +-
- src/hb-blob.cc                                 |    2 +-
- src/hb-blob.h                          |    2 +-
- src/hb-buffer-private.hh               |    4 ++--
- src/hb-buffer.cc                       |    6 +++---
- src/hb-buffer.h                        |    6 +++---
- src/hb-common.cc                       |    4 +++-
- src/hb-common.h                        |    4 +++-
- src/hb-font-private.hh                         |    4 +++-
- src/hb-font.cc                                 |    2 +-
- src/hb-font.h                          |    2 +-
- src/hb-ft.cc                           |    4 ++--
- src/hb-ft.h                            |    2 +-
- src/hb-glib.cc                                 |    4 +++-
- src/hb-glib.h                          |    4 +++-
- src/hb-icu.cc                          |    6 ++++--
- src/hb-icu.h                           |    4 +++-
- src/hb-object-private.hh               |    6 ++++--
- src/hb-open-file-private.hh            |    2 +-
- src/hb-open-type-private.hh            |    2 +-
- src/hb-ot-head-private.hh              |    2 +-
- src/hb-ot-layout-common-private.hh     |    4 ++--
- src/hb-ot-layout-gdef-private.hh       |    4 ++--
- src/hb-ot-layout-gpos-private.hh       |    4 ++--
- src/hb-ot-layout-gsub-private.hh       |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh   |    4 ++--
- src/hb-ot-layout-private.hh            |    2 +-
- src/hb-ot-layout.cc                    |    6 +++---
- src/hb-ot-layout.h                     |    2 +-
- src/hb-ot-map-private.hh               |    4 ++--
- src/hb-ot-map.cc                       |    4 ++--
- src/hb-ot-shape-complex-arabic-table.hh |    2 +-
- src/hb-ot-shape-complex-arabic.cc      |    2 +-
- src/hb-ot-shape-complex-private.hh     |    2 +-
- src/hb-ot-shape-private.hh             |    2 +-
- src/hb-ot-shape.cc                     |    4 ++--
- src/hb-ot-shape.h                      |    2 +-
- src/hb-ot-tag.cc                       |    4 +++-
- src/hb-ot-tag.h                        |    2 +-
- src/hb-ot.h                            |    2 +-
- src/hb-private.hh                      |    4 +++-
- src/hb-shape.cc                        |    2 +-
- src/hb-shape.h                                 |    2 +-
- src/hb-unicode-private.hh              |    4 ++--
- src/hb-unicode.cc                      |    4 ++--
- src/hb-unicode.h                       |    4 +++-
- src/hb-view.c                          |    4 ++--
- src/hb.h                               |    2 +-
- src/main.cc                            |    2 +-
- src/test.c                             |    2 +-
- test/hb-test.h                                 |   17 ++++++++++++++++-
- test/test-buffer.c                     |    2 +-
- test/test-c.c                          |    2 +-
- test/test-common.c                     |    2 +-
- test/test-cplusplus.cc                         |    2 +-
- test/test-unicode.c                    |    2 +-
+ COPYING                                | 15 ++++++++-------
+ src/hb-blob-private.hh                         |  2 +-
+ src/hb-blob.cc                                 |  2 +-
+ src/hb-blob.h                          |  2 +-
+ src/hb-buffer-private.hh               |  4 ++--
+ src/hb-buffer.cc                       |  6 +++---
+ src/hb-buffer.h                        |  6 +++---
+ src/hb-common.cc                       |  4 +++-
+ src/hb-common.h                        |  4 +++-
+ src/hb-font-private.hh                         |  4 +++-
+ src/hb-font.cc                                 |  2 +-
+ src/hb-font.h                          |  2 +-
+ src/hb-ft.cc                           |  4 ++--
+ src/hb-ft.h                            |  2 +-
+ src/hb-glib.cc                                 |  4 +++-
+ src/hb-glib.h                          |  4 +++-
+ src/hb-icu.cc                          |  6 ++++--
+ src/hb-icu.h                           |  4 +++-
+ src/hb-object-private.hh               |  6 ++++--
+ src/hb-open-file-private.hh            |  2 +-
+ src/hb-open-type-private.hh            |  2 +-
+ src/hb-ot-head-private.hh              |  2 +-
+ src/hb-ot-layout-common-private.hh     |  4 ++--
+ src/hb-ot-layout-gdef-private.hh       |  4 ++--
+ src/hb-ot-layout-gpos-private.hh       |  4 ++--
+ src/hb-ot-layout-gsub-private.hh       |  4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh   |  4 ++--
+ src/hb-ot-layout-private.hh            |  2 +-
+ src/hb-ot-layout.cc                    |  6 +++---
+ src/hb-ot-layout.h                     |  2 +-
+ src/hb-ot-map-private.hh               |  4 ++--
+ src/hb-ot-map.cc                       |  4 ++--
+ src/hb-ot-shape-complex-arabic-table.hh |  2 +-
+ src/hb-ot-shape-complex-arabic.cc      |  2 +-
+ src/hb-ot-shape-complex-private.hh     |  2 +-
+ src/hb-ot-shape-private.hh             |  2 +-
+ src/hb-ot-shape.cc                     |  4 ++--
+ src/hb-ot-shape.h                      |  2 +-
+ src/hb-ot-tag.cc                       |  4 +++-
+ src/hb-ot-tag.h                        |  2 +-
+ src/hb-ot.h                            |  2 +-
+ src/hb-private.hh                      |  4 +++-
+ src/hb-shape.cc                        |  2 +-
+ src/hb-shape.h                                 |  2 +-
+ src/hb-unicode-private.hh              |  4 ++--
+ src/hb-unicode.cc                      |  4 ++--
+ src/hb-unicode.h                       |  4 +++-
+ src/hb-view.c                          |  4 ++--
+ src/hb.h                               |  2 +-
+ src/main.cc                            |  2 +-
+ src/test.c                             |  2 +-
+ test/hb-test.h                                 | 17 ++++++++++++++++-
+ test/test-buffer.c                     |  2 +-
+ test/test-c.c                          |  2 +-
+ test/test-common.c                     |  2 +-
+ test/test-cplusplus.cc                         |  2 +-
+ test/test-unicode.c                    |  2 +-
  57 files changed, 122 insertions(+), 84 deletions(-)
 
 commit 08da7a3841ca7dfcb627314cae1c3a668b9c7236
  57 files changed, 122 insertions(+), 84 deletions(-)
 
 commit 08da7a3841ca7dfcb627314cae1c3a668b9c7236
@@ -18901,8 +30464,8 @@ Date:   Thu Apr 21 16:59:10 2011 -0400
 
     Reported by Adam Twardoch.
 
 
     Reported by Adam Twardoch.
 
- src/hb-view.c |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-view.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 24229eb13268a422efffbcb28a094b726824c7f0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 24229eb13268a422efffbcb28a094b726824c7f0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18916,8 +30479,8 @@ Date:   Thu Apr 21 16:55:17 2011 -0400
     casts that away itself, so we don't need to worry about that
     (which kinda makes me uncomfortable actually).
 
     casts that away itself, so we don't need to worry about that
     (which kinda makes me uncomfortable actually).
 
- src/hb-object-private.hh |   16 ++--------------
- 1 files changed, 2 insertions(+), 14 deletions(-)
+ src/hb-object-private.hh | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
 
 commit dcb7026f33cbcdf60e9b7fcdd44c64cc08702c74
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dcb7026f33cbcdf60e9b7fcdd44c64cc08702c74
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18927,8 +30490,8 @@ Date:   Thu Apr 21 16:34:22 2011 -0400
 
     Unused right now.
 
 
     Unused right now.
 
- src/hb-private.hh |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 3e8bdbf9414291da5cf61213d5f4275c1ae23ae5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3e8bdbf9414291da5cf61213d5f4275c1ae23ae5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18936,8 +30499,8 @@ Date:   Thu Apr 21 16:16:21 2011 -0400
 
     Cleanup hb_refrence_count_t
 
 
     Cleanup hb_refrence_count_t
 
- src/hb-object-private.hh |   23 ++++++++++++++++++-----
- src/hb-private.hh       |    6 +++---
+ src/hb-object-private.hh | 23 ++++++++++++++++++-----
+ src/hb-private.hh       |  6 +++---
  2 files changed, 21 insertions(+), 8 deletions(-)
 
 commit 783a7d69696bf0b1502ec9c1495e482e491c78e0
  2 files changed, 21 insertions(+), 8 deletions(-)
 
 commit 783a7d69696bf0b1502ec9c1495e482e491c78e0
@@ -18946,9 +30509,9 @@ Date:   Thu Apr 21 16:03:59 2011 -0400
 
     [TODO] Remove finished items
 
 
     [TODO] Remove finished items
 
- TODO        |    6 +-----
- src/hb-ft.cc |    1 -
- 2 files changed, 1 insertions(+), 6 deletions(-)
+ TODO        | 6 +-----
+ src/hb-ft.cc | 1 -
+ 2 files changed, 1 insertion(+), 6 deletions(-)
 
 commit da975419884a535281745f30f4b32fee0bc8a7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da975419884a535281745f30f4b32fee0bc8a7a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18975,10 +30538,10 @@ Date: Thu Apr 21 15:08:01 2011 -0400
 
     I'm happy with the resolution :-).
 
 
     I'm happy with the resolution :-).
 
- src/hb-font.cc                            |    8 ++++----
- src/hb-font.h                     |    8 ++++----
- src/hb-ot-layout-common-private.hh |   6 +-----
- src/hb-ot-layout-private.hh       |    2 +-
+ src/hb-font.cc                            | 8 ++++----
+ src/hb-font.h                     | 8 ++++----
+ src/hb-ot-layout-common-private.hh | 6 +-----
+ src/hb-ot-layout-private.hh       | 2 +-
  4 files changed, 10 insertions(+), 14 deletions(-)
 
 commit 4d559cddbb3b3a5c12c5167eba69598618a9f283
  4 files changed, 10 insertions(+), 14 deletions(-)
 
 commit 4d559cddbb3b3a5c12c5167eba69598618a9f283
@@ -18987,9 +30550,9 @@ Date:   Thu Apr 21 14:58:23 2011 -0400
 
     [icu] Remove big script switch(), rely on reverse-lookup
 
 
     [icu] Remove big script switch(), rely on reverse-lookup
 
- src/hb-icu.cc |  137
- ++++-----------------------------------------------------
- 1 files changed, 9 insertions(+), 128 deletions(-)
+ src/hb-icu.cc | 137
+ ++++------------------------------------------------------
+ 1 file changed, 9 insertions(+), 128 deletions(-)
 
 commit d18431b4cd8c1b14523733cd60a62b862f5b471f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d18431b4cd8c1b14523733cd60a62b862f5b471f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18997,8 +30560,8 @@ Date:   Wed Apr 20 18:59:10 2011 -0400
 
     Move hb_reference_count_t from macros to inline methods
 
 
     Move hb_reference_count_t from macros to inline methods
 
- src/hb-object-private.hh |   25 +++++++++++--------------
- 1 files changed, 11 insertions(+), 14 deletions(-)
+ src/hb-object-private.hh | 25 +++++++++++--------------
+ 1 file changed, 11 insertions(+), 14 deletions(-)
 
 commit c57d454accff66e5f2c58006e8fb40bc020b6182
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c57d454accff66e5f2c58006e8fb40bc020b6182
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19009,42 +30572,42 @@ Date: Wed Apr 20 18:50:27 2011 -0400
     So we can liberally use the simple features of C++ that parts of the
     codebase is already using.
 
     So we can liberally use the simple features of C++ that parts of the
     codebase is already using.
 
- src/Makefile.am                        |   17 +-
- src/hb-blob-private.h                  |   59 ---
- src/hb-blob-private.hh                         |   59 +++
- src/hb-blob.cc                                 |    4 +-
- src/hb-buffer-private.hh               |    2 +-
- src/hb-common.c                        |  222 ----------
- src/hb-common.cc                       |  222 ++++++++++
- src/hb-font-private.h                  |   97 -----
- src/hb-font-private.hh                         |   97 +++++
- src/hb-font.cc                                 |    6 +-
- src/hb-ft.c                            |  262 ------------
- src/hb-ft.cc                           |  262 ++++++++++++
- src/hb-glib.cc                                 |    2 +-
- src/hb-icu.cc                          |    2 +-
- src/hb-object-private.h                |  134 ------
- src/hb-object-private.hh               |  132 ++++++
- src/hb-open-type-private.hh            |    2 +-
- src/hb-ot-layout-gdef-private.hh       |    2 +-
- src/hb-ot-layout-private.hh            |    4 +-
- src/hb-ot-shape-complex-arabic-table.h  |  674
- ------------------------------
- src/hb-ot-shape-complex-arabic-table.hh |  674
- ++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-arabic.cc      |    2 +-
- src/hb-ot-shape-complex-private.hh     |    2 +-
- src/hb-ot-shape-private.hh             |    2 +-
- src/hb-ot-tag.c                        |  677
+ src/Makefile.am                        |  17 +-
+ src/hb-blob-private.h                  |  59 ---
+ src/hb-blob-private.hh                         |  59 +++
+ src/hb-blob.cc                                 |   4 +-
+ src/hb-buffer-private.hh               |   2 +-
+ src/hb-common.c                        | 222 -----------
+ src/hb-common.cc                       | 222 +++++++++++
+ src/hb-font-private.h                  |  97 -----
+ src/hb-font-private.hh                         |  97 +++++
+ src/hb-font.cc                                 |   6 +-
+ src/hb-ft.c                            | 262 ------------
+ src/hb-ft.cc                           | 262 ++++++++++++
+ src/hb-glib.cc                                 |   2 +-
+ src/hb-icu.cc                          |   2 +-
+ src/hb-object-private.h                | 134 -------
+ src/hb-object-private.hh               | 132 +++++++
+ src/hb-open-type-private.hh            |   2 +-
+ src/hb-ot-layout-gdef-private.hh       |   2 +-
+ src/hb-ot-layout-private.hh            |   4 +-
+ src/hb-ot-shape-complex-arabic-table.h  | 674
  -------------------------------
  -------------------------------
- src/hb-ot-tag.cc                       |  677
+ src/hb-ot-shape-complex-arabic-table.hh | 674
  +++++++++++++++++++++++++++++++
  +++++++++++++++++++++++++++++++
- src/hb-private.h                       |  301 --------------
- src/hb-private.hh                      |  301 ++++++++++++++
- src/hb-shape.cc                        |    2 +-
- src/hb-unicode-private.hh              |    2 +-
- src/hb-unicode.cc                      |    2 +-
- src/hb-view.c                          |    6 +
+ src/hb-ot-shape-complex-arabic.cc      |   2 +-
+ src/hb-ot-shape-complex-private.hh     |   2 +-
+ src/hb-ot-shape-private.hh             |   2 +-
+ src/hb-ot-tag.c                        | 677
+ --------------------------------
+ src/hb-ot-tag.cc                       | 677
+ ++++++++++++++++++++++++++++++++
+ src/hb-private.h                       | 301 --------------
+ src/hb-private.hh                      | 301 ++++++++++++++
+ src/hb-shape.cc                        |   2 +-
+ src/hb-unicode-private.hh              |   2 +-
+ src/hb-unicode.cc                      |   2 +-
+ src/hb-view.c                          |   6 +
  32 files changed, 2457 insertions(+), 2452 deletions(-)
 
 commit f19f4f9b0965ad7473a0f3a1ffcdbf16930e35d4
  32 files changed, 2457 insertions(+), 2452 deletions(-)
 
 commit f19f4f9b0965ad7473a0f3a1ffcdbf16930e35d4
@@ -19053,11 +30616,11 @@ Date: Wed Apr 20 18:25:56 2011 -0400
 
     Rename hb-blob.c to hb-blob.cc in preparation of more changes
 
 
     Rename hb-blob.c to hb-blob.cc in preparation of more changes
 
- src/Makefile.am |    2 +-
- src/hb-blob.c  |  356
- -------------------------------------------------------
- src/hb-blob.cc  |  356
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am |   2 +-
+ src/hb-blob.c  | 356
+ --------------------------------------------------------
+ src/hb-blob.cc  | 356
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 357 insertions(+), 357 deletions(-)
 
 commit 04744e73bad22d679986173b5f0d84dbbf49dd57
  3 files changed, 357 insertions(+), 357 deletions(-)
 
 commit 04744e73bad22d679986173b5f0d84dbbf49dd57
@@ -19066,8 +30629,8 @@ Date:   Wed Apr 20 17:24:03 2011 -0400
 
     [TODO] Remove done items
 
 
     [TODO] Remove done items
 
- TODO |    6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
+ TODO | 6 ------
+ 1 file changed, 6 deletions(-)
 
 commit 9417c1c0d2b005eadf0c087ca695121a6200d0f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9417c1c0d2b005eadf0c087ca695121a6200d0f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19085,8 +30648,8 @@ Date:   Wed Apr 20 17:21:23 2011 -0400
        a non-existent talbe into a table of size 0 makes the user code
        safer.
 
        a non-existent talbe into a table of size 0 makes the user code
        safer.
 
- src/hb-font.cc                     |    2 ++
- src/hb-open-type-private.hh |   3 ---
+ src/hb-font.cc                     | 2 ++
+ src/hb-open-type-private.hh | 3 ---
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit c035812feb0d385a9e8c334631738e4915912c71
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 commit c035812feb0d385a9e8c334631738e4915912c71
@@ -19097,10 +30660,10 @@ Date: Wed Apr 20 17:03:00 2011 -0400
 
     That correctly reflects the reference ownership transfer happening.
 
 
     That correctly reflects the reference ownership transfer happening.
 
- src/hb-font.cc      |   4 ++--
- src/hb-font.h      |    7 ++-----
- src/hb-ot-layout.cc |   6 +++---
- src/hb-shape.cc     |   2 +-
+ src/hb-font.cc      | 4 ++--
+ src/hb-font.h      | 7 ++-----
+ src/hb-ot-layout.cc | 6 +++---
+ src/hb-shape.cc     | 2 +-
  4 files changed, 8 insertions(+), 11 deletions(-)
 
 commit 2d7b61a4b0ed212ca414b3281c2eae3e3db19c13
  4 files changed, 8 insertions(+), 11 deletions(-)
 
 commit 2d7b61a4b0ed212ca414b3281c2eae3e3db19c13
@@ -19109,8 +30672,8 @@ Date:   Wed Apr 20 16:40:56 2011 -0400
 
     [TODO] Remove done items
 
 
     [TODO] Remove done items
 
- TODO       |   10 ++--------
- src/hb-ft.h |   2 +-
+ TODO       | 10 ++--------
+ src/hb-ft.h | 2 +-
  2 files changed, 3 insertions(+), 9 deletions(-)
 
 commit af02933739e03a156b9f7761fd7a63e2a02d0df1
  2 files changed, 3 insertions(+), 9 deletions(-)
 
 commit af02933739e03a156b9f7761fd7a63e2a02d0df1
@@ -19124,17 +30687,17 @@ Date: Wed Apr 20 15:49:31 2011 -0400
     before
     someone uses them!
 
     before
     someone uses them!
 
- src/hb-blob.c          |    6 ------
- src/hb-blob.h          |    3 ---
- src/hb-buffer.cc       |    6 ------
- src/hb-buffer.h        |    3 ---
- src/hb-font.cc                 |   18 ------------------
- src/hb-font.h          |    9 ---------
- src/hb-object-private.h |    7 -------
- src/hb-unicode.cc      |    6 ------
- src/hb-unicode.h       |    3 ---
- test/test-unicode.c    |   24 ------------------------
- 10 files changed, 0 insertions(+), 85 deletions(-)
+ src/hb-blob.c          |  6 ------
+ src/hb-blob.h          |  3 ---
+ src/hb-buffer.cc       |  6 ------
+ src/hb-buffer.h        |  3 ---
+ src/hb-font.cc                 | 18 ------------------
+ src/hb-font.h          |  9 ---------
+ src/hb-object-private.h |  7 -------
+ src/hb-unicode.cc      |  6 ------
+ src/hb-unicode.h       |  3 ---
+ test/test-unicode.c    | 24 ------------------------
+ 10 files changed, 85 deletions(-)
 
 commit 440a76b630a36a7336c93e8b05d988c6407b085e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 440a76b630a36a7336c93e8b05d988c6407b085e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19142,8 +30705,8 @@ Date:   Wed Apr 20 14:20:00 2011 -0400
 
     [OT] Fix script to ot-script-tag conversion
 
 
     [OT] Fix script to ot-script-tag conversion
 
- src/hb-ot-tag.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-tag.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit a3036a3e97b14c8eb1df208aed944207f9b6cc0b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a3036a3e97b14c8eb1df208aed944207f9b6cc0b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19151,8 +30714,8 @@ Date:   Wed Apr 20 14:13:23 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-view.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-view.c | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit fb6291d9c9224bedf207bf0077ad9f0a2690f867
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb6291d9c9224bedf207bf0077ad9f0a2690f867
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19160,11 +30723,11 @@ Date: Wed Apr 20 03:15:31 2011 -0400
 
     [test] Add test for headers included from C and C++
 
 
     [test] Add test for headers included from C and C++
 
- test/Makefile.am      |   17 ++++++++++++++++
- test/test-c.c         |   49
- ++++++++++++++++++++++++++++++++++++++++++++++++
- test/test-cplusplus.cc |   29 ++++++++++++++++++++++++++++
- 3 files changed, 95 insertions(+), 0 deletions(-)
+ test/Makefile.am      | 17 +++++++++++++++++
+ test/test-c.c         | 49
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ test/test-cplusplus.cc | 29 +++++++++++++++++++++++++++++
+ 3 files changed, 95 insertions(+)
 
 commit 107a50581ccab7df7c390d5b927fdab1bbe8e713
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 107a50581ccab7df7c390d5b927fdab1bbe8e713
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19172,8 +30735,8 @@ Date:   Wed Apr 20 03:04:56 2011 -0400
 
     [test] Add todo items
 
 
     [test] Add todo items
 
- test/test-unicode.c |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ test/test-unicode.c | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 5668189c12c264e8d2caf0d12dac918363ef6f80
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5668189c12c264e8d2caf0d12dac918363ef6f80
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19183,10 +30746,10 @@ Date: Wed Apr 20 03:03:32 2011 -0400
 
     This is the common convention for language binding tools.
 
 
     This is the common convention for language binding tools.
 
- src/hb-font-private.h |    4 ++--
- src/hb-font.cc        |   30 +++++++++++++++---------------
- src/hb-font.h        |   12 ++++++------
- src/hb-ft.c          |    8 ++++----
+ src/hb-font-private.h |  4 ++--
+ src/hb-font.cc        | 30 +++++++++++++++---------------
+ src/hb-font.h        | 12 ++++++------
+ src/hb-ft.c          |  8 ++++----
  4 files changed, 27 insertions(+), 27 deletions(-)
 
 commit e5847f75fb7bd25c5db6061d8e20d61fa469f9fe
  4 files changed, 27 insertions(+), 27 deletions(-)
 
 commit e5847f75fb7bd25c5db6061d8e20d61fa469f9fe
@@ -19197,9 +30760,9 @@ Date:   Wed Apr 20 02:59:28 2011 -0400
 
     This is the common convention for language binding tools.
 
 
     This is the common convention for language binding tools.
 
- src/hb-blob-private.h |    2 +-
- src/hb-blob.c        |   16 ++++++++--------
- src/hb-blob.h        |    4 ++--
+ src/hb-blob-private.h |  2 +-
+ src/hb-blob.c        | 16 ++++++++--------
+ src/hb-blob.h        |  4 ++--
  3 files changed, 11 insertions(+), 11 deletions(-)
 
 commit 1fd73b594d611624ccb73f614c61298debf48994
  3 files changed, 11 insertions(+), 11 deletions(-)
 
 commit 1fd73b594d611624ccb73f614c61298debf48994
@@ -19208,11 +30771,11 @@ Date: Wed Apr 20 02:56:39 2011 -0400
 
     [test] Rename test-types to test-common
 
 
     [test] Rename test-types to test-common
 
- test/Makefile.am   |   2 +-
- test/test-common.c |  166
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- test/test-types.c  |  166
- ----------------------------------------------------
+ test/Makefile.am   |  2 +-
+ test/test-common.c | 166
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ test/test-types.c  | 166
+ -----------------------------------------------------
  3 files changed, 167 insertions(+), 167 deletions(-)
 
 commit f144a8ea840c6452c1fece2fd988b42a8ea7c5a6
  3 files changed, 167 insertions(+), 167 deletions(-)
 
 commit f144a8ea840c6452c1fece2fd988b42a8ea7c5a6
@@ -19223,11 +30786,11 @@ Date: Wed Apr 20 02:54:42 2011 -0400
 
     Also optimizes the common-direction script lookup.
 
 
     Also optimizes the common-direction script lookup.
 
- src/hb-common.c   |   5 +-
- src/hb-icu.cc    |  205
- ++++++++++++++++++++++++++++------------------------
- src/hb-icu.h     |    9 +++
- test/test-types.c |   2 +-
+ src/hb-common.c   |   5 +-
+ src/hb-icu.cc    | 205
+ +++++++++++++++++++++++++++++-------------------------
+ src/hb-icu.h     |   9 +++
+ test/test-types.c |   2 +-
  4 files changed, 124 insertions(+), 97 deletions(-)
 
 commit 0809aadd4bbd5d0f256407def7cc10b79772a824
  4 files changed, 124 insertions(+), 97 deletions(-)
 
 commit 0809aadd4bbd5d0f256407def7cc10b79772a824
@@ -19239,9 +30802,9 @@ Date:   Wed Apr 20 02:44:29 2011 -0400
     Also optimizes the common-direction script lookup to be an array
     lookup.
 
     Also optimizes the common-direction script lookup to be an array
     lookup.
 
- src/hb-glib.cc |  270
- +++++++++++++++++++++++++++++---------------------------
- src/hb-glib.h |    8 ++
+ src/hb-glib.cc | 270
+ ++++++++++++++++++++++++++++++---------------------------
+ src/hb-glib.h |   8 ++
  2 files changed, 148 insertions(+), 130 deletions(-)
 
 commit 5c8c1b680c4fa23c8574b9aebd21113e276f57a3
  2 files changed, 148 insertions(+), 130 deletions(-)
 
 commit 5c8c1b680c4fa23c8574b9aebd21113e276f57a3
@@ -19250,9 +30813,9 @@ Date:   Wed Apr 20 02:29:22 2011 -0400
 
     Remove verbose comments
 
 
     Remove verbose comments
 
- src/hb-glib.cc |  194 ++++++++++++++++++++--------------------
- src/hb-icu.cc |  266
- ++++++++++++++++++++++++++++----------------------------
+ src/hb-glib.cc | 194 ++++++++++++++++++++---------------------
+ src/hb-icu.cc | 266
+ ++++++++++++++++++++++++++++-----------------------------
  2 files changed, 230 insertions(+), 230 deletions(-)
 
 commit fb194b8794898f51eb596fa4092c26606889d376
  2 files changed, 230 insertions(+), 230 deletions(-)
 
 commit fb194b8794898f51eb596fa4092c26606889d376
@@ -19261,22 +30824,22 @@ Date: Wed Apr 20 02:00:47 2011 -0400
 
     unicode: Cleanup implementation
 
 
     unicode: Cleanup implementation
 
- src/Makefile.am          |    8 +-
- src/hb-buffer-private.hh  |   2 +-
- src/hb-glib.c            |  230 ------------------------------------
- src/hb-glib.cc                   |  231 ++++++++++++++++++++++++++++++++++++
- src/hb-icu.c             |  285
- ---------------------------------------------
- src/hb-icu.cc            |  285
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape.cc       |   14 +--
- src/hb-shape.cc          |    4 +-
- src/hb-unicode-private.h  |   77 ------------
- src/hb-unicode-private.hh |   96 +++++++++++++++
- src/hb-unicode.c         |  256 ----------------------------------------
- src/hb-unicode.cc        |  223 +++++++++++++++++++++++++++++++++++
- src/hb-unicode.h         |   57 +++++-----
- test/test-unicode.c      |   23 +++-
+ src/Makefile.am          |   8 +-
+ src/hb-buffer-private.hh  |   2 +-
+ src/hb-glib.c            | 230 -------------------------------------
+ src/hb-glib.cc                   | 231 +++++++++++++++++++++++++++++++++++++
+ src/hb-icu.c             | 285
+ ----------------------------------------------
+ src/hb-icu.cc            | 285
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc       |  14 +--
+ src/hb-shape.cc          |   4 +-
+ src/hb-unicode-private.h  |  77 -------------
+ src/hb-unicode-private.hh |  96 ++++++++++++++++
+ src/hb-unicode.c         | 256 -----------------------------------------
+ src/hb-unicode.cc        | 223 ++++++++++++++++++++++++++++++++++++
+ src/hb-unicode.h         |  57 +++++-----
+ test/test-unicode.c      |  23 ++--
  14 files changed, 892 insertions(+), 899 deletions(-)
 
 commit ecfb773829a5d98a4f5456a992f3e5ecd6731435
  14 files changed, 892 insertions(+), 899 deletions(-)
 
 commit ecfb773829a5d98a4f5456a992f3e5ecd6731435
@@ -19285,8 +30848,8 @@ Date:   Wed Apr 20 01:34:51 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-unicode.h |   22 +++++++++-------------
- 1 files changed, 9 insertions(+), 13 deletions(-)
+ src/hb-unicode.h | 22 +++++++++-------------
+ 1 file changed, 9 insertions(+), 13 deletions(-)
 
 commit 2fd0c577e322ccbf762927bc4600b3ea31db4c80
 Author: Ryan Lortie <desrt@desrt.ca>
 
 commit 2fd0c577e322ccbf762927bc4600b3ea31db4c80
 Author: Ryan Lortie <desrt@desrt.ca>
@@ -19300,17 +30863,17 @@ Date: Wed Apr 20 00:19:20 2011 -0400
     Also fix glib unicode funcs that where broken after hb_script_t
     changes.  Nicely caught by the test-unicode.c added in this commit.
 
     Also fix glib unicode funcs that where broken after hb_script_t
     changes.  Nicely caught by the test-unicode.c added in this commit.
 
- src/hb-glib.c           |  186 +++++++++++++++++++++++++++++++++++--
- src/hb-icu.c            |   45 +++++++--
- src/hb-ot-shape.cc      |    9 +-
- src/hb-shape.cc         |    2 +-
- src/hb-unicode-private.h |   17 ++++
- src/hb-unicode.c        |  231
- +++++++++++++++++++++++++---------------------
- src/hb-unicode.h        |   68 +++++++-------
- test/Makefile.am        |    1 +
- test/test-unicode.c     |  215
- ++++++++++++++++++++++++++++++++++++++++++
+ src/hb-glib.c           | 186 ++++++++++++++++++++++++++++++++++++--
+ src/hb-icu.c            |  45 +++++++--
+ src/hb-ot-shape.cc      |   9 +-
+ src/hb-shape.cc         |   2 +-
+ src/hb-unicode-private.h |  17 ++++
+ src/hb-unicode.c        | 231
+ +++++++++++++++++++++++++----------------------
+ src/hb-unicode.h        |  68 +++++++-------
+ test/Makefile.am        |   1 +
+ test/test-unicode.c     | 215
+ +++++++++++++++++++++++++++++++++++++++++++
  9 files changed, 610 insertions(+), 164 deletions(-)
 
 commit f85faee9b3cb841ea977403945e2c877ab32b97a
  9 files changed, 610 insertions(+), 164 deletions(-)
 
 commit f85faee9b3cb841ea977403945e2c877ab32b97a
@@ -19319,9 +30882,9 @@ Date:   Tue Apr 19 00:38:01 2011 -0400
 
     [API] Rename hb_buffer_add_glyph() to hb_buffer_add()
 
 
     [API] Rename hb_buffer_add_glyph() to hb_buffer_add()
 
- src/hb-buffer.cc   |  10 +++++-----
- src/hb-buffer.h    |   8 ++++----
- test/test-buffer.c |   2 +-
+ src/hb-buffer.cc   | 10 +++++-----
+ src/hb-buffer.h    |  8 ++++----
+ test/test-buffer.c |  2 +-
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit aab0de50e23727b69fa8c3d4e05c50c114c62835
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit aab0de50e23727b69fa8c3d4e05c50c114c62835
@@ -19332,10 +30895,10 @@ Date: Tue Apr 19 00:32:19 2011 -0400
 
     Returns the error status of the buffer.
 
 
     Returns the error status of the buffer.
 
- src/hb-buffer.cc   |   6 ++++++
- src/hb-buffer.h    |   6 ++++++
- test/test-buffer.c |   2 +-
- 3 files changed, 13 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc   | 6 ++++++
+ src/hb-buffer.h    | 6 ++++++
+ test/test-buffer.c | 2 +-
+ 3 files changed, 13 insertions(+), 1 deletion(-)
 
 commit 02a534b23f2d1e7475109563b9f61221ed020e8b
 Author: Ryan Lortie <desrt@desrt.ca>
 
 commit 02a534b23f2d1e7475109563b9f61221ed020e8b
 Author: Ryan Lortie <desrt@desrt.ca>
@@ -19345,8 +30908,8 @@ Date:   Fri Apr 15 18:34:45 2011 -0400
 
     The new name is self-documenting.
 
 
     The new name is self-documenting.
 
- src/hb-buffer.cc |    4 ++--
- src/hb-buffer.h  |    4 ++--
+ src/hb-buffer.cc | 4 ++--
+ src/hb-buffer.h  | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 70566befc59cfa8b9c43ac682749c40ea783b1dd
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 70566befc59cfa8b9c43ac682749c40ea783b1dd
@@ -19359,11 +30922,11 @@ Date: Fri Apr 15 18:32:36 2011 -0400
     on the
     language bindings.
 
     on the
     language bindings.
 
- src/hb-buffer.cc                |   12 ++++++++++--
- src/hb-buffer.h                 |    6 ++++--
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-view.c                   |    4 ++--
- test/test-buffer.c              |    7 ++-----
+ src/hb-buffer.cc                | 12 ++++++++++--
+ src/hb-buffer.h                 |  6 ++++--
+ src/hb-ot-layout-gpos-private.hh |  4 ++--
+ src/hb-view.c                   |  4 ++--
+ test/test-buffer.c              |  7 ++-----
  5 files changed, 20 insertions(+), 13 deletions(-)
 
 commit 62879eebd9965179af8602ba29ac0a64a739b757
  5 files changed, 20 insertions(+), 13 deletions(-)
 
 commit 62879eebd9965179af8602ba29ac0a64a739b757
@@ -19375,15 +30938,15 @@ Date: Mon Apr 18 23:40:21 2011 -0400
     This simplifies the code, reduces static data, and makes the design
     more extensible to future additions of new scripts.
 
     This simplifies the code, reduces static data, and makes the design
     more extensible to future additions of new scripts.
 
- src/hb-common.c                   |  411
- ++++--------------------------------
- src/hb-common.h                   |  199 +++++++++---------
- src/hb-ot-map.cc                  |    4 +-
- src/hb-ot-shape-complex-private.hh |   3 +-
- src/hb-ot-tag.c                   |  228 +++++++++-----------
- src/hb-ot-tag.h                   |    6 +-
- src/hb-shape.cc                   |    4 +-
- test/test-types.c                 |    2 +-
+ src/hb-common.c                   | 411
+ ++++---------------------------------
+ src/hb-common.h                   | 199 +++++++++---------
+ src/hb-ot-map.cc                  |   4 +-
+ src/hb-ot-shape-complex-private.hh |  3 +-
+ src/hb-ot-tag.c                   | 228 +++++++++-----------
+ src/hb-ot-tag.h                   |   6 +-
+ src/hb-shape.cc                   |   4 +-
+ test/test-types.c                 |   2 +-
  8 files changed, 252 insertions(+), 605 deletions(-)
 
 commit c0af193c8e25c4f11d23b8893e9ce1c2d2615bb2
  8 files changed, 252 insertions(+), 605 deletions(-)
 
 commit c0af193c8e25c4f11d23b8893e9ce1c2d2615bb2
@@ -19398,10 +30961,10 @@ Date: Fri Apr 15 19:26:24 2011 -0400
     While it's not ideal, it works better than the previous defaults at
     least (HB_DIRECTION_LTR and HB_SCRIPT_COMMON).
 
     While it's not ideal, it works better than the previous defaults at
     least (HB_DIRECTION_LTR and HB_SCRIPT_COMMON).
 
- src/hb-buffer-private.hh |    9 +++------
- src/hb-buffer.cc        |   24 ++++++++++++++++--------
- src/hb-view.c           |    6 ++----
- test/test-buffer.c      |    4 ++--
+ src/hb-buffer-private.hh |  9 +++------
+ src/hb-buffer.cc        | 24 ++++++++++++++++--------
+ src/hb-view.c           |  6 ++----
+ test/test-buffer.c      |  4 ++--
  4 files changed, 23 insertions(+), 20 deletions(-)
 
 commit 00bec2c969555e76c3f84650a1d3c45308e585ad
  4 files changed, 23 insertions(+), 20 deletions(-)
 
 commit 00bec2c969555e76c3f84650a1d3c45308e585ad
@@ -19410,12 +30973,12 @@ Date: Fri Apr 15 19:16:54 2011 -0400
 
     Move enum types to hb-common.h
 
 
     Move enum types to hb-common.h
 
- src/hb-common.c  |  406
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-common.h  |  170 +++++++++++++++++++++++
- src/hb-unicode.c |  406
- ------------------------------------------------------
- src/hb-unicode.h |  166 ----------------------
+ src/hb-common.c  | 406
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-common.h  | 170 +++++++++++++++++++++++
+ src/hb-unicode.c | 406
+ -------------------------------------------------------
+ src/hb-unicode.h | 166 -----------------------
  4 files changed, 576 insertions(+), 572 deletions(-)
 
 commit 5dd4609f4da5674966a0169d9fa533ac5bc9f464
  4 files changed, 576 insertions(+), 572 deletions(-)
 
 commit 5dd4609f4da5674966a0169d9fa533ac5bc9f464
@@ -19424,8 +30987,8 @@ Date:   Fri Apr 15 19:16:34 2011 -0400
 
     [TODO] Add new item
 
 
     [TODO] Add new item
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit b54cd07b2623b68171e00179a9dc3ecbea7aa6a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b54cd07b2623b68171e00179a9dc3ecbea7aa6a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19433,8 +30996,8 @@ Date:   Fri Apr 15 19:12:01 2011 -0400
 
     Mark internal buffer variables private
 
 
     Mark internal buffer variables private
 
- src/hb-buffer.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-buffer.h | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 0e8d35c0932ddc20ebf430f2fd82c087da698954
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e8d35c0932ddc20ebf430f2fd82c087da698954
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19442,10 +31005,10 @@ Date: Fri Apr 15 19:07:10 2011 -0400
 
     Add hb_script_from_string()
 
 
     Add hb_script_from_string()
 
- src/hb-unicode.c |    6 ++++++
- src/hb-unicode.h |    4 ++++
- src/hb-view.c   |    2 +-
- 3 files changed, 11 insertions(+), 1 deletions(-)
+ src/hb-unicode.c | 6 ++++++
+ src/hb-unicode.h | 4 ++++
+ src/hb-view.c   | 2 +-
+ 3 files changed, 11 insertions(+), 1 deletion(-)
 
 commit 8f0d7e0c3fd4b05c43ac449be4f374dc2dc56127
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f0d7e0c3fd4b05c43ac449be4f374dc2dc56127
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19453,12 +31016,12 @@ Date: Fri Apr 15 18:59:56 2011 -0400
 
     Remove hb_buffer_clear_positions(), add hb_ot_layout_position_start()
 
 
     Remove hb_buffer_clear_positions(), add hb_ot_layout_position_start()
 
- src/hb-buffer-private.hh |    6 +++++-
- src/hb-buffer.cc        |   24 ++++++++++++------------
- src/hb-buffer.h         |    5 +----
- src/hb-ot-layout.cc     |    6 ++++++
- src/hb-ot-layout.h      |    4 ++++
- src/hb-ot-shape.cc      |    2 +-
+ src/hb-buffer-private.hh |  6 +++++-
+ src/hb-buffer.cc        | 24 ++++++++++++------------
+ src/hb-buffer.h         |  5 +----
+ src/hb-ot-layout.cc     |  6 ++++++
+ src/hb-ot-layout.h      |  4 ++++
+ src/hb-ot-shape.cc      |  2 +-
  6 files changed, 29 insertions(+), 18 deletions(-)
 
 commit 2fc56edff6d64f190271454ccb1b5fd347d4f172
  6 files changed, 29 insertions(+), 18 deletions(-)
 
 commit 2fc56edff6d64f190271454ccb1b5fd347d4f172
@@ -19469,9 +31032,9 @@ Date:   Fri Apr 15 18:35:08 2011 -0400
 
     One should use hb_buffer_reset() really.
 
 
     One should use hb_buffer_reset() really.
 
- src/hb-buffer.cc   |  16 +++++-----------
- src/hb-buffer.h    |   4 ----
- test/test-buffer.c |   4 ----
+ src/hb-buffer.cc   | 16 +++++-----------
+ src/hb-buffer.h    |  4 ----
+ test/test-buffer.c |  4 ----
  3 files changed, 5 insertions(+), 19 deletions(-)
 
 commit 7f5bdc80541cdc90aa1acafba5e9e0bd2df53ff4
  3 files changed, 5 insertions(+), 19 deletions(-)
 
 commit 7f5bdc80541cdc90aa1acafba5e9e0bd2df53ff4
@@ -19480,8 +31043,8 @@ Date:   Fri Apr 15 18:34:55 2011 -0400
 
     [TODO] Remove done items
 
 
     [TODO] Remove done items
 
- TODO |    4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ TODO | 4 ----
+ 1 file changed, 4 deletions(-)
 
 commit 5814dfa3f5aa41bc3df06b78980d57d7bea0ba58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5814dfa3f5aa41bc3df06b78980d57d7bea0ba58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19489,10 +31052,10 @@ Date: Fri Apr 15 14:41:04 2011 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-shape.cc |  14 +++++++-------
- src/hb-ot-shape.h  |   4 ++--
- src/hb-shape.cc    |  20 ++++++++++----------
- src/hb-shape.h     |  10 +++++-----
+ src/hb-ot-shape.cc | 14 +++++++-------
+ src/hb-ot-shape.h  |  4 ++--
+ src/hb-shape.cc    | 20 ++++++++++----------
+ src/hb-shape.h     | 10 +++++-----
  4 files changed, 24 insertions(+), 24 deletions(-)
 
 commit cfbfeb88a6ec059ea97a6624e63cfacc642b685a
  4 files changed, 24 insertions(+), 24 deletions(-)
 
 commit cfbfeb88a6ec059ea97a6624e63cfacc642b685a
@@ -19501,8 +31064,8 @@ Date:   Fri Apr 15 12:40:40 2011 -0400
 
     [TODO] Remove done items
 
 
     [TODO] Remove done items
 
- TODO |    4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ TODO | 4 ----
+ 1 file changed, 4 deletions(-)
 
 commit 3cbdf70e0a92f1c24e16c0d4dcfbec4ac59a77a3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3cbdf70e0a92f1c24e16c0d4dcfbec4ac59a77a3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19510,8 +31073,8 @@ Date:   Fri Apr 15 12:32:06 2011 -0400
 
     Make hb_language_t typesafe
 
 
     Make hb_language_t typesafe
 
- src/hb-common.c |   18 +++++++++++-------
- src/hb-common.h |    2 +-
+ src/hb-common.c | 18 +++++++++++-------
+ src/hb-common.h |  2 +-
  2 files changed, 12 insertions(+), 8 deletions(-)
 
 commit 2f2f448af35c232d18888c0e57cb21c9796ba7a8
  2 files changed, 12 insertions(+), 8 deletions(-)
 
 commit 2f2f448af35c232d18888c0e57cb21c9796ba7a8
@@ -19520,8 +31083,8 @@ Date:   Fri Apr 15 11:45:14 2011 -0400
 
     [test] Add more TODO items
 
 
     [test] Add more TODO items
 
- test/test-buffer.c |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ test/test-buffer.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit c910bec863215f918c659f58debbc7fe5264d7b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c910bec863215f918c659f58debbc7fe5264d7b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19529,9 +31092,9 @@ Date:   Wed Apr 13 15:49:06 2011 -0400
 
     Add hb_buffer_reset() and hb_buffer_set_length()
 
 
     Add hb_buffer_reset() and hb_buffer_set_length()
 
- src/hb-buffer.cc |   31 +++++++++++++++++++++++++++++++
- src/hb-buffer.h  |   15 ++++++++++++++-
- 2 files changed, 45 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 31 +++++++++++++++++++++++++++++++
+ src/hb-buffer.h  | 15 ++++++++++++++-
+ 2 files changed, 45 insertions(+), 1 deletion(-)
 
 commit 69ea23cb5d47dd1cfd3129f68375021ef79bf63b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 69ea23cb5d47dd1cfd3129f68375021ef79bf63b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19539,8 +31102,8 @@ Date:   Wed Apr 13 15:02:40 2011 -0400
 
     Minor
 
 
     Minor
 
- src/hb-buffer.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7dea908cd582c8c25555015940065c69c1e7e65b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7dea908cd582c8c25555015940065c69c1e7e65b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19548,8 +31111,8 @@ Date:   Wed Apr 13 01:35:58 2011 -0400
 
     [test] Add todo items
 
 
     [test] Add todo items
 
- test/test-buffer.c |   5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ test/test-buffer.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 07cbaac07d7f43437b171e9275430b5fb3097716
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 07cbaac07d7f43437b171e9275430b5fb3097716
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19557,8 +31120,8 @@ Date:   Wed Apr 13 01:11:19 2011 -0400
 
     [TODO] Add item re script iso15924 functions
 
 
     [TODO] Add item re script iso15924 functions
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit d0f53fdbead15d9003b521b8ed47d02fd29a4c64
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d0f53fdbead15d9003b521b8ed47d02fd29a4c64
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19566,10 +31129,10 @@ Date: Wed Apr 13 01:09:09 2011 -0400
 
     [test] Test hb-buffer.h
 
 
     [test] Test hb-buffer.h
 
- test/Makefile.am   |   8 ++-
- test/test-buffer.c |  195
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 202 insertions(+), 1 deletions(-)
+ test/Makefile.am   |  8 ++-
+ test/test-buffer.c | 195
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 202 insertions(+), 1 deletion(-)
 
 commit 72d89404c2837d578f5305456c817130b6a15c73
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 72d89404c2837d578f5305456c817130b6a15c73
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19577,8 +31140,8 @@ Date:   Wed Apr 13 01:07:42 2011 -0400
 
     [TODO] Add item re hb_buffer_reset()
 
 
     [TODO] Add item re hb_buffer_reset()
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5015c12dfb4de8525325178ae6def9e80fd83669
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5015c12dfb4de8525325178ae6def9e80fd83669
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19586,8 +31149,8 @@ Date:   Wed Apr 13 01:06:02 2011 -0400
 
     [TODO] Add item re hb_buffer_resize()
 
 
     [TODO] Add item re hb_buffer_resize()
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 9329ec92078d0e2d7bb04f683e0c6a582aab92f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9329ec92078d0e2d7bb04f683e0c6a582aab92f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19595,8 +31158,8 @@ Date:   Wed Apr 13 00:06:23 2011 -0400
 
     [TODO] Add API item
 
 
     [TODO] Add API item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 4744379efc6063d94e15ff99381a7ab8b88ee567
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4744379efc6063d94e15ff99381a7ab8b88ee567
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19604,8 +31167,8 @@ Date:   Mon Apr 11 19:47:33 2011 -0400
 
     Minor
 
 
     Minor
 
- test/test-types.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ test/test-types.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 9385caa8a693df0f06a511a71de9aa407637097c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9385caa8a693df0f06a511a71de9aa407637097c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19617,8 +31180,8 @@ Date:   Mon Apr 11 19:43:51 2011 -0400
     it's too easy to add a test and wrongly hook it up.  Did it twice
     today.
 
     it's too easy to add a test and wrongly hook it up.  Did it twice
     today.
 
- test/test-types.c |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ test/test-types.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 8e4bb3cacc269ed32187aaaeaa166c64f41a0418
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8e4bb3cacc269ed32187aaaeaa166c64f41a0418
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19626,15 +31189,15 @@ Date: Mon Apr 11 17:55:58 2011 -0400
 
     Fold hb-language.[ch] into hb-common.[ch]
 
 
     Fold hb-language.[ch] into hb-common.[ch]
 
- src/Makefile.am   |   2 -
- src/hb-buffer.h   |   1 -
- src/hb-common.c   |   92 ++++++++++++++++++++++++++++++++++++++++-
- src/hb-common.h   |   42 +++++++++++++------
- src/hb-language.c |  120
- -----------------------------------------------------
- src/hb-language.h |   46 --------------------
- src/hb-ot-tag.h   |   1 -
- src/hb.h         |    1 -
+ src/Makefile.am   |   2 -
+ src/hb-buffer.h   |   1 -
+ src/hb-common.c   |  92 ++++++++++++++++++++++++++++++++++++++++-
+ src/hb-common.h   |  42 +++++++++++++------
+ src/hb-language.c | 120
+ ------------------------------------------------------
+ src/hb-language.h |  46 ---------------------
+ src/hb-ot-tag.h   |   1 -
+ src/hb.h         |   1 -
  8 files changed, 120 insertions(+), 185 deletions(-)
 
 commit 09125576ca745b3393f3dc49071df891400bbdc9
  8 files changed, 120 insertions(+), 185 deletions(-)
 
 commit 09125576ca745b3393f3dc49071df891400bbdc9
@@ -19643,8 +31206,8 @@ Date:   Mon Apr 11 17:49:33 2011 -0400
 
     [test] Test hb_language_t
 
 
     [test] Test hb_language_t
 
- test/test-types.c |   26 +++++++++++++++++++++++++-
- 1 files changed, 25 insertions(+), 1 deletions(-)
+ test/test-types.c | 26 +++++++++++++++++++++++++-
+ 1 file changed, 25 insertions(+), 1 deletion(-)
 
 commit 316b7a1afb84a5dfeaed886a585669b4d549c9b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 316b7a1afb84a5dfeaed886a585669b4d549c9b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19652,8 +31215,8 @@ Date:   Mon Apr 11 17:49:10 2011 -0400
 
     Make hb_language_from_string("") return NULL language
 
 
     Make hb_language_from_string("") return NULL language
 
- src/hb-language.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-language.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit db60c96f20426111ffa71e9802ef6e248f8b28d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db60c96f20426111ffa71e9802ef6e248f8b28d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19661,9 +31224,9 @@ Date:   Mon Apr 11 16:17:02 2011 -0400
 
     [teset] Test hb_script_t
 
 
     [teset] Test hb_script_t
 
- test/hb-test.h    |   8 ++++++++
- test/test-types.c |   35 ++++++++++++++++++++++++++++++++++-
- 2 files changed, 42 insertions(+), 1 deletions(-)
+ test/hb-test.h    |  8 ++++++++
+ test/test-types.c | 35 ++++++++++++++++++++++++++++++++++-
+ 2 files changed, 42 insertions(+), 1 deletion(-)
 
 commit 99b74760a4cddc798ab44b5ca897486bbb9c76d6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 99b74760a4cddc798ab44b5ca897486bbb9c76d6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19671,15 +31234,15 @@ Date: Mon Apr 11 15:47:40 2011 -0400
 
     Rename hb_category_t to hb_unicode_general_category_t
 
 
     Rename hb_category_t to hb_unicode_general_category_t
 
- src/hb-glib.c                    |    2 +-
- src/hb-icu.c                     |   64
- ++++++++++++++++++------------------
- src/hb-ot-shape-complex-arabic.cc |   8 ++--
- src/hb-ot-shape-private.hh       |    2 +-
- src/hb-ot-shape.cc               |    2 +-
- src/hb-unicode.c                 |    4 +-
- src/hb-unicode.h                 |   66
- ++++++++++++++++++------------------
+ src/hb-glib.c                    |  2 +-
+ src/hb-icu.c                     | 64
+ ++++++++++++++++++-------------------
+ src/hb-ot-shape-complex-arabic.cc |  8 ++---
+ src/hb-ot-shape-private.hh       |  2 +-
+ src/hb-ot-shape.cc               |  2 +-
+ src/hb-unicode.c                 |  4 +--
+ src/hb-unicode.h                 | 66
+ +++++++++++++++++++--------------------
  7 files changed, 74 insertions(+), 74 deletions(-)
 
 commit 4188096a7722f09ffa9319986c0286071da10a27
  7 files changed, 74 insertions(+), 74 deletions(-)
 
 commit 4188096a7722f09ffa9319986c0286071da10a27
@@ -19690,9 +31253,9 @@ Date:   Mon Apr 11 14:58:28 2011 -0400
 
     It's just sugar.
 
 
     It's just sugar.
 
- src/hb-common.h   |   5 +----
- src/hb-private.h  |   7 ++++++-
- test/test-types.c |   2 --
+ src/hb-common.h   | 5 +----
+ src/hb-private.h  | 7 ++++++-
+ test/test-types.c | 2 --
  3 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 7ff7401c9237cda661869c1cb196d685706ac4e9
  3 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 7ff7401c9237cda661869c1cb196d685706ac4e9
@@ -19701,9 +31264,9 @@ Date:   Mon Apr 11 13:27:30 2011 -0400
 
     Make hb_tag_from_string(NULL) return HB_TAG_NONE
 
 
     Make hb_tag_from_string(NULL) return HB_TAG_NONE
 
- src/hb-common.c   |   3 +++
- test/test-types.c |   3 +++
- 2 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-common.c   | 3 +++
+ test/test-types.c | 3 +++
+ 2 files changed, 6 insertions(+)
 
 commit 02f6e62d6cabc7808c188daef26a1fe7ac626b1f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 02f6e62d6cabc7808c188daef26a1fe7ac626b1f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19711,8 +31274,8 @@ Date:   Mon Apr 11 13:27:21 2011 -0400
 
     Build fix
 
 
     Build fix
 
- test/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ test/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit db5227c40e5c35fe2ffb750f32b639cb44424a1d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit db5227c40e5c35fe2ffb750f32b639cb44424a1d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19720,8 +31283,8 @@ Date:   Mon Apr 11 13:16:08 2011 -0400
 
     Move macros around
 
 
     Move macros around
 
- src/hb-ot-tag.c  |    6 ++----
- src/hb-private.h |    7 +++++++
+ src/hb-ot-tag.c  | 6 ++----
+ src/hb-private.h | 7 +++++++
  2 files changed, 9 insertions(+), 4 deletions(-)
 
 commit 07233581c9d953708d3c020907c42b8b89472b89
  2 files changed, 9 insertions(+), 4 deletions(-)
 
 commit 07233581c9d953708d3c020907c42b8b89472b89
@@ -19734,10 +31297,10 @@ Date: Mon Apr 11 13:12:37 2011 -0400
     exactly, and unlike hb_tag_from_string() it doesn't pad the tag with
     space characters.  So, the new name is more appropriate.
 
     exactly, and unlike hb_tag_from_string() it doesn't pad the tag with
     space characters.  So, the new name is more appropriate.
 
- src/hb-common.c   |   2 +-
- src/hb-common.h   |   8 ++++----
- src/hb-ot-tag.c   |   2 +-
- test/test-types.c |   2 +-
+ src/hb-common.c   | 2 +-
+ src/hb-common.h   | 8 ++++----
+ src/hb-ot-tag.c   | 2 +-
+ test/test-types.c | 2 +-
  4 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 9faa980067f802f712c2adf8263152ed40c98088
  4 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 9faa980067f802f712c2adf8263152ed40c98088
@@ -19749,13 +31312,13 @@ Date: Mon Apr 11 12:46:49 2011 -0400
     Uses the glib testing framework.  Wrote unit tests for hb-common.h
     types.
 
     Uses the glib testing framework.  Wrote unit tests for hb-common.h
     types.
 
- Makefile.am       |    2 +-
- test/Makefile.am   |  18 +++++++++
- test/Makefile.decl |  90 +++++++++++++++++++++++++++++++++++++++++++
- test/hb-test.h     |  67 ++++++++++++++++++++++++++++++++
- test/test-types.c  |  108
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 284 insertions(+), 1 deletions(-)
+ Makefile.am       |   2 +-
+ test/Makefile.am   |  18 +++++++++
+ test/Makefile.decl |  90 ++++++++++++++++++++++++++++++++++++++++++++
+ test/hb-test.h     |  67 +++++++++++++++++++++++++++++++++
+ test/test-types.c  | 108
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 284 insertions(+), 1 deletion(-)
 
 commit d77b76200efbaa0611691920f9f2018b1e8be340
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d77b76200efbaa0611691920f9f2018b1e8be340
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19765,8 +31328,8 @@ Date:   Mon Apr 11 12:29:52 2011 -0400
 
     Never hurts.
 
 
     Never hurts.
 
- src/hb-common.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-common.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b13640de6992de9ee9d07e3581c33b8181b70ff9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b13640de6992de9ee9d07e3581c33b8181b70ff9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19774,8 +31337,8 @@ Date:   Mon Apr 11 12:29:31 2011 -0400
 
     A few more ASSERTs
 
 
     A few more ASSERTs
 
- src/hb-private.h |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-private.h | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit ae9eeaff9300f3bb7bed588c5478e8e5461b3df0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae9eeaff9300f3bb7bed588c5478e8e5461b3df0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19790,8 +31353,8 @@ Date:   Mon Apr 11 11:49:08 2011 -0400
 
     Plus, we don't use inline in the public headers, so remove that too.
 
 
     Plus, we don't use inline in the public headers, so remove that too.
 
- src/hb-common.h  |    7 -------
- src/hb-private.h |    4 ++++
+ src/hb-common.h  | 7 -------
+ src/hb-private.h | 4 ++++
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 6fd5364bdc3a2b459175377e9e16c86cff054232
  2 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 6fd5364bdc3a2b459175377e9e16c86cff054232
@@ -19800,8 +31363,8 @@ Date:   Mon Apr 11 11:47:14 2011 -0400
 
     Assert int types
 
 
     Assert int types
 
- src/hb-private.h |   12 ++++++++++++
- 1 files changed, 12 insertions(+), 0 deletions(-)
+ src/hb-private.h | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
 
 commit bbdeff59646e5502b9fc53ab1761b3f014ee276c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bbdeff59646e5502b9fc53ab1761b3f014ee276c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19809,8 +31372,9 @@ Date:   Thu Apr 7 16:05:07 2011 -0400
 
     Add test directory
 
 
     Add test directory
 
- configure.ac |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ configure.ac    | 1 +
+ test/Makefile.am | 0
+ 2 files changed, 1 insertion(+)
 
 commit 4accc92afc702177ea53280d977cec839af3c12c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4accc92afc702177ea53280d977cec839af3c12c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19818,8 +31382,8 @@ Date:   Thu Apr 7 15:53:26 2011 -0400
 
     Update TODO items
 
 
     Update TODO items
 
- TODO |   31 ++++++++++++++++++++-----------
- 1 files changed, 20 insertions(+), 11 deletions(-)
+ TODO | 31 ++++++++++++++++++++-----------
+ 1 file changed, 20 insertions(+), 11 deletions(-)
 
 commit a71b9c8579d73aea4549f12524bbc2e89f43b5c5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a71b9c8579d73aea4549f12524bbc2e89f43b5c5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19832,9 +31396,9 @@ Date:   Wed Apr 6 14:04:56 2011 -0400
     but the SyriacOT spec does not require it. I think this is a more
     useful compromise than special-casing for Arabic script alone.
 
     but the SyriacOT spec does not require it. I think this is a more
     useful compromise than special-casing for Arabic script alone.
 
- src/hb-ot-shape-complex-arabic.cc |   3 +++
- src/hb-ot-shape.cc               |    1 -
- 2 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 3 +++
+ src/hb-ot-shape.cc               | 1 -
+ 2 files changed, 3 insertions(+), 1 deletion(-)
 
 commit cab6f65bba560ac1651d9152f1ecf12eb88eca74
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cab6f65bba560ac1651d9152f1ecf12eb88eca74
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19845,8 +31409,8 @@ Date:   Mon Apr 4 15:36:51 2011 -0400
     For now we don't use anything from the locale, but we should default
     to using $LANG, etc, if --language is not specified.  Right?
 
     For now we don't use anything from the locale, but we should default
     to using $LANG, etc, if --language is not specified.  Right?
 
- src/hb-view.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-view.c | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit fb9ca1bfabde7da0c274e7a1bd12bffaf7949c18
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb9ca1bfabde7da0c274e7a1bd12bffaf7949c18
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19881,9 +31445,9 @@ Date:   Mon Apr 4 14:50:09 2011 -0400
       "kern[3:5]=0"    1       3       5       # Turn feature off
       for range
 
       "kern[3:5]=0"    1       3       5       # Turn feature off
       for range
 
- src/hb-view.c |  169
- ++++++++++++++++++++++++++++++++++++++++++++-------------
- 1 files changed, 132 insertions(+), 37 deletions(-)
+ src/hb-view.c | 169
+ +++++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 132 insertions(+), 37 deletions(-)
 
 commit ccc6745afaa68ce7497a6cd02ce85986d3c863d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ccc6745afaa68ce7497a6cd02ce85986d3c863d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19893,8 +31457,8 @@ Date:   Mon Apr 4 14:49:50 2011 -0400
 
     Avoids recreating the face the second time we call draw().
 
 
     Avoids recreating the face the second time we call draw().
 
- src/hb-view.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-view.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1b4a2cc095d165dc573e0235f00fbbf2a5d3c2c5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1b4a2cc095d165dc573e0235f00fbbf2a5d3c2c5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19904,8 +31468,8 @@ Date:   Mon Apr 4 14:45:28 2011 -0400
 
     Frees all allocated memory before exiting. Useful for valgrind run.
 
 
     Frees all allocated memory before exiting. Useful for valgrind run.
 
- src/hb-view.c |   17 +++++++++++++++++
- 1 files changed, 17 insertions(+), 0 deletions(-)
+ src/hb-view.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
 
 commit b2da26d1e32a012f7feaad7c7cced61e4fb269f1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b2da26d1e32a012f7feaad7c7cced61e4fb269f1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19920,9 +31484,9 @@ Date:   Fri Apr 1 15:48:43 2011 -0400
     A minus sign means "=0", a plus sign means "=1".  Default is "=1".
     A minus sign overrides an explicit value.
 
     A minus sign means "=0", a plus sign means "=1".  Default is "=1".
     A minus sign overrides an explicit value.
 
- src/hb-view.c |   70
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 68 insertions(+), 2 deletions(-)
+ src/hb-view.c | 70
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 68 insertions(+), 2 deletions(-)
 
 commit f48ff19b629070d13cee3c0eeeb06c98992f93c6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f48ff19b629070d13cee3c0eeeb06c98992f93c6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19930,8 +31494,8 @@ Date:   Fri Apr 1 14:19:10 2011 -0400
 
     Sort options for clarity
 
 
     Sort options for clarity
 
- src/hb-view.c |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-view.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 5d91c3d547f78163b36aa7436d4388a836cca94a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5d91c3d547f78163b36aa7436d4388a836cca94a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -19945,11 +31509,11 @@ Date: Wed Mar 16 17:36:32 2011 -0300
     Right now, the OT layer ignores that, but we can fix it to blindly
     convert that to an OT script tag.
 
     Right now, the OT layer ignores that, but we can fix it to blindly
     convert that to an OT script tag.
 
- src/hb-ot-tag.c  |    4 +
- src/hb-unicode.c |  273
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-unicode.h |    8 ++-
- src/hb-view.c   |   10 ++-
+ src/hb-ot-tag.c  |   4 +
+ src/hb-unicode.c | 273
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-unicode.h |   +-
+ src/hb-view.c   |  10 +-
  4 files changed, 293 insertions(+), 2 deletions(-)
 
 commit 3286fc0e9adc3f2874c9409e7fdb09e4d2b7dda1
  4 files changed, 293 insertions(+), 2 deletions(-)
 
 commit 3286fc0e9adc3f2874c9409e7fdb09e4d2b7dda1
@@ -19984,15 +31548,15 @@ Date: Wed Mar 16 14:53:32 2011 -0300
     the guess is not a suitable substitute to full-fledged bidi and script
     segmentation.  It's just a testing tool.
 
     the guess is not a suitable substitute to full-fledged bidi and script
     segmentation.  It's just a testing tool.
 
- src/hb-common.h         |    3 +-
- src/hb-icu.c            |    2 +-
- src/hb-ot-shape.cc      |    3 +-
- src/hb-shape.cc         |   52
- ++++++++++++++++++++++++++++++++++++++++-----
- src/hb-unicode-private.h |    4 ---
- src/hb-unicode.c        |    2 +-
- src/hb-unicode.h        |    8 ++++++-
- src/hb-view.c           |    4 +-
+ src/hb-common.h         |  3 ++-
+ src/hb-icu.c            |  2 +-
+ src/hb-ot-shape.cc      |  3 ++-
+ src/hb-shape.cc         | 52
+ ++++++++++++++++++++++++++++++++++++++++++------
+ src/hb-unicode-private.h |  4 ----
+ src/hb-unicode.c        |  2 +-
+ src/hb-unicode.h        |  8 +++++++-
+ src/hb-view.c           |  4 ++--
  8 files changed, 61 insertions(+), 17 deletions(-)
 
 commit b7b29684df67af7280b74ca4cf18f02ad6521bdc
  8 files changed, 61 insertions(+), 17 deletions(-)
 
 commit b7b29684df67af7280b74ca4cf18f02ad6521bdc
@@ -20001,8 +31565,8 @@ Date:   Wed Mar 2 01:01:03 2011 -0500
 
     [hb-view] Handle write_to_png errors
 
 
     [hb-view] Handle write_to_png errors
 
- src/hb-view.c |    9 ++++++++-
- 1 files changed, 8 insertions(+), 1 deletions(-)
+ src/hb-view.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
 
 commit c2cb98c8185c5560cfd04de7ee7c64c9496b986c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c2cb98c8185c5560cfd04de7ee7c64c9496b986c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20010,8 +31574,8 @@ Date:   Tue Mar 1 23:18:09 2011 -0500
 
     [hb-view] Link with -lm
 
 
     [hb-view] Link with -lm
 
- src/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b5dd44e24669cd35affcd92788d39ff56cac94db
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b5dd44e24669cd35affcd92788d39ff56cac94db
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20019,8 +31583,8 @@ Date:   Mon Feb 28 10:13:52 2011 -0800
 
     Fix possible overflow
 
 
     Fix possible overflow
 
- src/hb-buffer.cc |   12 ++++++++++--
- 1 files changed, 10 insertions(+), 2 deletions(-)
+ src/hb-buffer.cc | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
 
 commit a4b781e93a0bee0549611e129b3564d9804d9090
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a4b781e93a0bee0549611e129b3564d9804d9090
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20030,8 +31594,8 @@ Date:   Wed Feb 23 12:47:56 2011 -0500
 
     Definitely not black!
 
 
     Definitely not black!
 
- src/hb-view.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-view.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 5353bf439c150492708ef9337078cfd73b83627b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5353bf439c150492708ef9337078cfd73b83627b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20041,11 +31605,11 @@ Date: Tue Feb 22 18:06:19 2011 -0500
 
     Currently doesn't handle script or direction.
 
 
     Currently doesn't handle script or direction.
 
- configure.ac   |   18 +++
- src/Makefile.am |   14 +++
- src/hb-view.c  |  342
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 374 insertions(+), 0 deletions(-)
+ configure.ac   |  18 +++
+ src/Makefile.am |  14 +++
+ src/hb-view.c  | 342
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 374 insertions(+)
 
 commit 82438c6ad5f60b6afc75c48cef72e18bef532468
 Author: Bradley Grainger <bgrainger@logos.com>
 
 commit 82438c6ad5f60b6afc75c48cef72e18bef532468
 Author: Bradley Grainger <bgrainger@logos.com>
@@ -20056,8 +31620,8 @@ Date:   Tue Feb 15 18:37:29 2011 -0500
     __LOC__ was renamed to _HB__LOC__ in cd7555 but the corresponding
     change wasn't made in hb-private.h.
 
     __LOC__ was renamed to _HB__LOC__ in cd7555 but the corresponding
     change wasn't made in hb-private.h.
 
- src/hb-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ba9ab8d6d9c863662c4b44ace4a4d89e29e592f2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ba9ab8d6d9c863662c4b44ace4a4d89e29e592f2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20065,8 +31629,8 @@ Date:   Mon Jan 10 07:45:41 2011 -0500
 
     Fix language extension matching
 
 
     Fix language extension matching
 
- src/hb-ot-tag.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-tag.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a07874300a669ec0ea09a67df2a3ee8b0612d6b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a07874300a669ec0ea09a67df2a3ee8b0612d6b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20077,9 +31641,9 @@ Date:   Mon Jan 10 02:27:49 2011 -0500
     We just require people to have libtool, pkg-config, etc installed
     when running autogen.sh
 
     We just require people to have libtool, pkg-config, etc installed
     when running autogen.sh
 
- Makefile.am  |    2 --
- configure.ac |    1 -
- 2 files changed, 0 insertions(+), 3 deletions(-)
+ Makefile.am  | 2 --
+ configure.ac | 1 -
+ 2 files changed, 3 deletions(-)
 
 commit 7bbe14bed8a886ea5b293c927c4bf937cbfc6f51
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7bbe14bed8a886ea5b293c927c4bf937cbfc6f51
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20087,8 +31651,8 @@ Date:   Sun Jan 9 22:29:14 2011 -0500
 
     Fix 'make distcheck'
 
 
     Fix 'make distcheck'
 
- src/Makefile.am |    7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/Makefile.am | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 2abe1264a580858bf7803af1701117a462375fb4
 Author: Javier Jardón <jjardon@gnome.org>
 
 commit 2abe1264a580858bf7803af1701117a462375fb4
 Author: Javier Jardón <jjardon@gnome.org>
@@ -20096,10 +31660,10 @@ Date: Sun Jan 9 22:18:53 2011 -0500
 
     Bug 31174 - Update autotools configuration
 
 
     Bug 31174 - Update autotools configuration
 
- Makefile.am  |    2 +
- autogen.sh   |  188
- ++++------------------------------------------------------
- configure.ac |   22 +++++--
+ Makefile.am  |   2 +
+ autogen.sh   | 188
+ ++++-------------------------------------------------------
+ configure.ac |  22 +++++--
  3 files changed, 29 insertions(+), 183 deletions(-)
 
 commit cc1a8a938b4c13e76b58825a9e1951c4134e634a
  3 files changed, 29 insertions(+), 183 deletions(-)
 
 commit cc1a8a938b4c13e76b58825a9e1951c4134e634a
@@ -20110,9 +31674,9 @@ Date:   Thu Jan 6 14:58:52 2011 -0500
 
     Reported on mailing list by Keith Stribley and Khaled Hosny.
 
 
     Reported on mailing list by Keith Stribley and Khaled Hosny.
 
- src/hb-buffer-private.hh            |    5 +++--
- src/hb-buffer.cc                    |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ src/hb-buffer-private.hh            | 5 +++--
+ src/hb-buffer.cc                    | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 6 +++---
  3 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 1c3183027fe823cd673866ba29d169b69f8efba1
  3 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 1c3183027fe823cd673866ba29d169b69f8efba1
@@ -20123,8 +31687,8 @@ Date:   Thu Jan 6 14:44:14 2011 -0500
 
     We always allocate and grow str and pos together.
 
 
     We always allocate and grow str and pos together.
 
- src/hb-buffer.cc |    6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
+ src/hb-buffer.cc | 6 ------
+ 1 file changed, 6 deletions(-)
 
 commit 76691f0240d6de230e9b42280b54e91639464635
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 76691f0240d6de230e9b42280b54e91639464635
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20132,8 +31696,8 @@ Date:   Thu Jan 6 14:16:59 2011 -0500
 
     Fix ICU detection
 
 
     Fix ICU detection
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 756f794a1fce701092345a3f9afae039583fb55b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 756f794a1fce701092345a3f9afae039583fb55b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20144,12 +31708,12 @@ Date: Sun Dec 26 20:52:40 2010 -0500
     It was unmaintained and the code has to be replaced to use the new
     grphite-ng code base.
 
     It was unmaintained and the code has to be replaced to use the new
     grphite-ng code base.
 
- configure.ac      |    6 -
- src/Makefile.am    |  14 ---
- src/hb-graphite.cc |  310
- ----------------------------------------------------
- src/hb-graphite.h  |  47 --------
- 4 files changed, 0 insertions(+), 377 deletions(-)
+ configure.ac      |   6 --
+ src/Makefile.am    |  14 ---
+ src/hb-graphite.cc | 310
+ -----------------------------------------------------
+ src/hb-graphite.h  |  47 --------
+ 4 files changed, 377 deletions(-)
 
 commit f3d9d9879364609502d9d3a3a9f4647adb167d78
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f3d9d9879364609502d9d3a3a9f4647adb167d78
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20157,9 +31721,9 @@ Date:   Wed Dec 22 01:39:29 2010 -0500
 
     Docs
 
 
     Docs
 
- src/hb-unicode.h |   60
- +++++++++++++++++++++++++++---------------------------
- 1 files changed, 30 insertions(+), 30 deletions(-)
+ src/hb-unicode.h | 60
+ ++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 30 insertions(+), 30 deletions(-)
 
 commit d86a5b3c5752abcc791724035ba4115958e6b5e2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d86a5b3c5752abcc791724035ba4115958e6b5e2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20182,9 +31746,9 @@ Date:   Tue Dec 21 18:36:25 2010 -0500
     T instead
     of joining D as other Mongolian letters are.
 
     T instead
     of joining D as other Mongolian letters are.
 
- src/hb-ot-shape-complex-arabic.cc  |   8 ++++++++
- src/hb-ot-shape-complex-private.hh |   1 +
- 2 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc  | 8 ++++++++
+ src/hb-ot-shape-complex-private.hh | 1 +
+ 2 files changed, 9 insertions(+)
 
 commit b0e7378fa9a4fc6fc74d9b3c27d927602eaacc5b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b0e7378fa9a4fc6fc74d9b3c27d927602eaacc5b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20195,8 +31759,8 @@ Date:   Tue Dec 21 14:19:32 2010 -0500
     We added Mandaic joining data to the Arabic shaper a while ago, but
     were not actually using the Arabic shaper for Mandaic.  Fixed.
 
     We added Mandaic joining data to the Arabic shaper a while ago, but
     were not actually using the Arabic shaper for Mandaic.  Fixed.
 
- src/hb-ot-shape-complex-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 88e7f37488e4e8590619d815b975232a0c9d2ea0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 88e7f37488e4e8590619d815b975232a0c9d2ea0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20204,9 +31768,9 @@ Date:   Tue Dec 21 14:18:24 2010 -0500
 
     Annotate the Arabic joining table with block information
 
 
     Annotate the Arabic joining table with block information
 
- src/gen-arabic-joining-table.py       |   93
- ++++++++++++++++++++------------
- src/hb-ot-shape-complex-arabic-table.h |   24 +++++++-
+ src/gen-arabic-joining-table.py       | 93
+ +++++++++++++++++++++-------------
+ src/hb-ot-shape-complex-arabic-table.h | 24 +++++++--
  2 files changed, 80 insertions(+), 37 deletions(-)
 
 commit 1482a39e56cd4151874e5c073540274349240a87
  2 files changed, 80 insertions(+), 37 deletions(-)
 
 commit 1482a39e56cd4151874e5c073540274349240a87
@@ -20215,8 +31779,8 @@ Date:   Fri Dec 17 20:15:05 2010 -0500
 
     Rename remaining metrics uses to extents
 
 
     Rename remaining metrics uses to extents
 
- src/hb-font.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-font.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 22c537657cee1f47a4056a21e2cddfcbe6ab1c01
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 22c537657cee1f47a4056a21e2cddfcbe6ab1c01
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20224,8 +31788,8 @@ Date:   Tue Dec 14 23:51:29 2010 -0500
 
     Rename TableDirectory to TableRecord as per OpenType 1.6
 
 
     Rename TableDirectory to TableRecord as per OpenType 1.6
 
- src/hb-open-file-private.hh |  18 +++++++++---------
- 1 files changed, 9 insertions(+), 9 deletions(-)
+ src/hb-open-file-private.hh | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
 
 commit 33e8b86197239e667a887709104357bdc6566b7c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 33e8b86197239e667a887709104357bdc6566b7c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20233,8 +31797,8 @@ Date:   Mon Dec 13 15:54:56 2010 -0500
 
     Update 'head' table to OpenType 1.6
 
 
     Update 'head' table to OpenType 1.6
 
- src/hb-ot-head-private.hh |   8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ src/hb-ot-head-private.hh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 commit b7683335146bfe3a74d9419db92cd7a8019a9c10
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b7683335146bfe3a74d9419db92cd7a8019a9c10
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20242,8 +31806,8 @@ Date:   Mon Dec 13 14:22:35 2010 -0500
 
     Disallow ligature substitutions replacing one glyph
 
 
     Disallow ligature substitutions replacing one glyph
 
- src/hb-ot-layout-gsub-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7eb875118dc31e9fb0e23c45985396a8bfe977e3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7eb875118dc31e9fb0e23c45985396a8bfe977e3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20253,8 +31817,8 @@ Date:   Mon Dec 13 14:13:35 2010 -0500
 
     Fix apply_lookup() for zero-input broken fonts.
 
 
     Fix apply_lookup() for zero-input broken fonts.
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit bbbbe80ec9bc45c5b685bc09c8f993e98496555c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bbbbe80ec9bc45c5b685bc09c8f993e98496555c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20262,8 +31826,8 @@ Date:   Tue Dec 7 16:22:02 2010 -0500
 
     Rename original_direction to target_direction
 
 
     Rename original_direction to target_direction
 
- src/hb-ot-shape-private.hh |   2 +-
- src/hb-ot-shape.cc        |    6 +++---
+ src/hb-ot-shape-private.hh | 2 +-
+ src/hb-ot-shape.cc        | 6 +++---
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit ee8aaf976a6eb42be49b63b4c51c7a0a338e0298
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit ee8aaf976a6eb42be49b63b4c51c7a0a338e0298
@@ -20277,8 +31841,8 @@ Date:   Tue Dec 7 16:20:42 2010 -0500
     direction,
     not the native.  Handle that.
 
     direction,
     not the native.  Handle that.
 
- src/hb-ot-shape.cc |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit d1f1707adc03317760b0f75e04d0f3dd425e547f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d1f1707adc03317760b0f75e04d0f3dd425e547f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20289,8 +31853,8 @@ Date:   Tue Nov 30 00:57:15 2010 -0500
 
     Patch from suzuki toshiya.
 
 
     Patch from suzuki toshiya.
 
- configure.ac |   10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
+ configure.ac | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
 
 commit 3c48982be6b2286088541ee55cac78b0f2b6e771
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3c48982be6b2286088541ee55cac78b0f2b6e771
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20300,8 +31864,8 @@ Date:   Sun Nov 28 19:39:47 2010 -0500
 
     Patch from Thomas Hunger.
 
 
     Patch from Thomas Hunger.
 
- contrib/python/lib/harfbuzz.pyx |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ contrib/python/lib/harfbuzz.pyx | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit 4f9e4a40bc248aeb1364ed6f4aa7f392aa364497
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4f9e4a40bc248aeb1364ed6f4aa7f392aa364497
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20309,9 +31873,9 @@ Date:   Mon Nov 22 11:30:32 2010 -0500
 
     Fix failing checks
 
 
     Fix failing checks
 
- src/hb-ot-shape-complex-arabic-table.h |   37
- ++++++++++++++++++++++++++++++++
- 1 files changed, 37 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-complex-arabic-table.h | 37
+ ++++++++++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
 
 commit 9da26d6669e7f3b91ba37e71f6f8a6e2ea806688
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9da26d6669e7f3b91ba37e71f6f8a6e2ea806688
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20319,9 +31883,9 @@ Date:   Mon Nov 22 11:03:18 2010 -0500
 
     Remove email address from Copyright headers
 
 
     Remove email address from Copyright headers
 
- COPYING      |    2 +-
- src/hb-ft.c  |    2 +-
- src/hb-icu.c |    2 +-
+ COPYING      | 2 +-
+ src/hb-ft.c  | 2 +-
+ src/hb-icu.c | 2 +-
  3 files changed, 3 insertions(+), 3 deletions(-)
 
 commit a45f00019242734fca742adeb2ed507305baeda6
  3 files changed, 3 insertions(+), 3 deletions(-)
 
 commit a45f00019242734fca742adeb2ed507305baeda6
@@ -20330,10 +31894,10 @@ Date: Thu Nov 18 13:58:32 2010 -0500
 
     Clarify copyright notice
 
 
     Clarify copyright notice
 
- COPYING                |   12 ++++++++++++
- README                         |    4 ++--
- src/hb-graphite.cc     |    4 ++--
- src/hb-object-private.h |    2 +-
+ COPYING                | 12 ++++++++++++
+ README                         |  4 ++--
+ src/hb-graphite.cc     |  4 ++--
+ src/hb-object-private.h |  2 +-
  4 files changed, 17 insertions(+), 5 deletions(-)
 
 commit 0884a8d9cd576f116400b3f7c8815e747c315d5e
  4 files changed, 17 insertions(+), 5 deletions(-)
 
 commit 0884a8d9cd576f116400b3f7c8815e747c315d5e
@@ -20342,11 +31906,11 @@ Date: Wed Nov 17 16:58:21 2010 -0500
 
     Move generated table to its own file
 
 
     Move generated table to its own file
 
- src/Makefile.am                       |    1 +
- src/hb-ot-shape-complex-arabic-table.h |  619
- +++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-arabic.cc     |  621
- +-------------------------------
+ src/Makefile.am                       |   1 +
+ src/hb-ot-shape-complex-arabic-table.h | 619
+ ++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-arabic.cc     | 621
+ +--------------------------------
  3 files changed, 621 insertions(+), 620 deletions(-)
 
 commit 14d784116b08685425e4ddcb1c1f813dbe2b2986
  3 files changed, 621 insertions(+), 620 deletions(-)
 
 commit 14d784116b08685425e4ddcb1c1f813dbe2b2986
@@ -20361,9 +31925,9 @@ Date:   Wed Nov 17 16:52:58 2010 -0500
     Mandaic.
     Use that.
 
     Mandaic.
     Use that.
 
- src/gen-arabic-joining-table.py   |   45 ++++++++++----
- src/hb-ot-shape-complex-arabic.cc |  123
- +++++++++++++++++++++++++++++++------
+ src/gen-arabic-joining-table.py   |  45 ++++++++++----
+ src/hb-ot-shape-complex-arabic.cc | 123
+ ++++++++++++++++++++++++++++++++------
  2 files changed, 137 insertions(+), 31 deletions(-)
 
 commit 43bf2f7f1ec427c431e2ee2fd1a9345e7d5c9718
  2 files changed, 137 insertions(+), 31 deletions(-)
 
 commit 43bf2f7f1ec427c431e2ee2fd1a9345e7d5c9718
@@ -20374,8 +31938,8 @@ Date:   Wed Nov 17 14:49:40 2010 -0500
 
     Based on tags proposed by Microsoft for inclusion in OpenType.
 
 
     Based on tags proposed by Microsoft for inclusion in OpenType.
 
- src/hb-ot-tag.c |   34 +++++++++++++++++-----------------
- 1 files changed, 17 insertions(+), 17 deletions(-)
+ src/hb-ot-tag.c | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
 
 commit afab01cf7caca79cf6dfabe6827d1703be1a74f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit afab01cf7caca79cf6dfabe6827d1703be1a74f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20383,10 +31947,10 @@ Date: Wed Nov 17 14:35:34 2010 -0500
 
     Add Unicode 6.0 scripts
 
 
     Add Unicode 6.0 scripts
 
- src/hb-icu.c    |    6 ++++++
- src/hb-ot-tag.c  |    7 ++++++-
- src/hb-unicode.c |    7 ++++++-
- src/hb-unicode.h |    7 ++++++-
+ src/hb-icu.c    | 6 ++++++
+ src/hb-ot-tag.c  | 7 ++++++-
+ src/hb-unicode.c | 7 ++++++-
+ src/hb-unicode.h | 7 ++++++-
  4 files changed, 24 insertions(+), 3 deletions(-)
 
 commit f234b68d18d956f7e4eb4bf58d6dc408d9e5146e
  4 files changed, 24 insertions(+), 3 deletions(-)
 
 commit f234b68d18d956f7e4eb4bf58d6dc408d9e5146e
@@ -20397,9 +31961,9 @@ Date:   Wed Nov 17 14:25:44 2010 -0500
 
     The new name matches the Unicode name.  Reported by Jonathan Kew.
 
 
     The new name matches the Unicode name.  Reported by Jonathan Kew.
 
- src/hb-icu.c    |    2 +-
- src/hb-ot-tag.c  |    2 +-
- src/hb-unicode.h |    2 +-
+ src/hb-icu.c    | 2 +-
+ src/hb-ot-tag.c  | 2 +-
+ src/hb-unicode.h | 2 +-
  3 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 3ca9a6d1cffe950b325e1d522b20d4a645ae448e
  3 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 3ca9a6d1cffe950b325e1d522b20d4a645ae448e
@@ -20408,8 +31972,8 @@ Date:   Wed Nov 17 13:08:47 2010 -0500
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ TODO | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 300cb41417d40473268e3b4089bed24e9e77a753
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 300cb41417d40473268e3b4089bed24e9e77a753
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20417,8 +31981,8 @@ Date:   Wed Nov 17 12:57:23 2010 -0500
 
     Add XXX marks
 
 
     Add XXX marks
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit ea00aee9f94ae8c6cf03d620254817d5e1f51d64
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ea00aee9f94ae8c6cf03d620254817d5e1f51d64
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20426,8 +31990,8 @@ Date:   Fri Nov 5 10:51:37 2010 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 3a852ae7fe6edfaadd75625d27515a3689503395
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3a852ae7fe6edfaadd75625d27515a3689503395
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20435,10 +31999,10 @@ Date: Wed Nov 3 16:37:24 2010 -0400
 
     Save general category and combining class in the buffer for reuse
 
 
     Save general category and combining class in the buffer for reuse
 
- src/hb-ot-layout-private.hh      |    3 ++-
- src/hb-ot-shape-complex-arabic.cc |   16 ++++++++++------
- src/hb-ot-shape-private.hh       |    6 ++++++
- src/hb-ot-shape.cc               |   26 +++++++++++++++++++++-----
+ src/hb-ot-layout-private.hh      |  3 ++-
+ src/hb-ot-shape-complex-arabic.cc | 16 ++++++++++------
+ src/hb-ot-shape-private.hh       |  6 ++++++
+ src/hb-ot-shape.cc               | 26 +++++++++++++++++++++-----
  4 files changed, 39 insertions(+), 12 deletions(-)
 
 commit a5ab682b9ba8224fc132624f93e6fef9973a68ca
  4 files changed, 39 insertions(+), 12 deletions(-)
 
 commit a5ab682b9ba8224fc132624f93e6fef9973a68ca
@@ -20449,8 +32013,8 @@ Date:   Wed Nov 3 15:50:36 2010 -0400
 
     Ugly :(.
 
 
     Ugly :(.
 
- src/hb-blob.c |   48 ++++++++++++++++++++++++------------------------
- 1 files changed, 24 insertions(+), 24 deletions(-)
+ src/hb-blob.c | 48 ++++++++++++++++++++++++------------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
 
 commit 4e22c7e94102c9f00c32b8cb6aaa832f83909149
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4e22c7e94102c9f00c32b8cb6aaa832f83909149
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20458,8 +32022,8 @@ Date:   Wed Nov 3 15:47:12 2010 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-ot-layout-common-private.hh |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-common-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 0342034d1cb577d34b42f7204da7fb930c12a464
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0342034d1cb577d34b42f7204da7fb930c12a464
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20467,8 +32031,8 @@ Date:   Wed Nov 3 15:40:07 2010 -0400
 
     Pedantic
 
 
     Pedantic
 
- src/hb-ot-layout-gpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4a2d844c2f12dc1b858ab4ddd737ded7c0852221
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a2d844c2f12dc1b858ab4ddd737ded7c0852221
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20476,9 +32040,9 @@ Date:   Wed Nov 3 15:28:56 2010 -0400
 
     Minor code shuffling
 
 
     Minor code shuffling
 
- src/hb-ot-layout-private.hh |  21 ++------------
- src/hb-ot-layout.cc        |   61
- +++++++++++++++++++++++++++++++-----------
+ src/hb-ot-layout-private.hh | 21 +++-------------
+ src/hb-ot-layout.cc        | 61
+ +++++++++++++++++++++++++++++++++------------
  2 files changed, 48 insertions(+), 34 deletions(-)
 
 commit 11e3ec444a85fc72541823c2e98cc92c4ceb19af
  2 files changed, 48 insertions(+), 34 deletions(-)
 
 commit 11e3ec444a85fc72541823c2e98cc92c4ceb19af
@@ -20487,12 +32051,12 @@ Date: Wed Nov 3 15:11:04 2010 -0400
 
     Fix a few more "unreachable code" warnings
 
 
     Fix a few more "unreachable code" warnings
 
- src/hb-blob.c                       |    2 +-
- src/hb-object-private.h             |   12 ++--
- src/hb-open-type-private.hh         |   84
- ++++++++++++++++------------------
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-private.h                    |    3 +-
+ src/hb-blob.c                       |  2 +-
+ src/hb-object-private.h             | 12 +++---
+ src/hb-open-type-private.hh         | 84
+ +++++++++++++++++-------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  2 +-
+ src/hb-private.h                    |  3 +-
  5 files changed, 49 insertions(+), 54 deletions(-)
 
 commit 2304856340782c72cb30873f7907191dc359e921
  5 files changed, 49 insertions(+), 54 deletions(-)
 
 commit 2304856340782c72cb30873f7907191dc359e921
@@ -20501,8 +32065,8 @@ Date:   Wed Nov 3 12:46:58 2010 -0400
 
     Remove another couple lines of dead code
 
 
     Remove another couple lines of dead code
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit b8783c85ac5dd9ea8f5a66eacb92dfcfbf649a6d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b8783c85ac5dd9ea8f5a66eacb92dfcfbf649a6d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20510,8 +32074,8 @@ Date:   Wed Nov 3 11:50:21 2010 -0400
 
     Fix unreachable-code warning
 
 
     Fix unreachable-code warning
 
- src/hb-ot-layout-gpos-private.hh |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit c2709119c8c610a0d4d71884a7d4fdba7cb65b72
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c2709119c8c610a0d4d71884a7d4fdba7cb65b72
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20519,11 +32083,11 @@ Date: Wed Oct 27 23:18:51 2010 -0400
 
     Move things around some more
 
 
     Move things around some more
 
- src/hb-ot-layout-gpos-private.hh     |    8 ++++----
- src/hb-ot-layout-gsub-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    9 +++++++--
- src/hb-ot-layout-private.hh         |    7 +++----
- src/hb-ot-layout.cc                 |    6 +++---
+ src/hb-ot-layout-gpos-private.hh     | 8 ++++----
+ src/hb-ot-layout-gsub-private.hh     | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 9 +++++++--
+ src/hb-ot-layout-private.hh         | 7 +++----
+ src/hb-ot-layout.cc                 | 6 +++---
  5 files changed, 19 insertions(+), 15 deletions(-)
 
 commit 194d4566ec054db03fa31d369a9f1c6cf4941e74
  5 files changed, 19 insertions(+), 15 deletions(-)
 
 commit 194d4566ec054db03fa31d369a9f1c6cf4941e74
@@ -20532,8 +32096,8 @@ Date:   Wed Oct 27 23:09:10 2010 -0400
 
     Move buffer var allocation local
 
 
     Move buffer var allocation local
 
- src/hb-ot-layout-gpos-private.hh |   19 ++++++++++++++-----
- src/hb-ot-layout-private.hh     |    2 --
+ src/hb-ot-layout-gpos-private.hh | 19 ++++++++++++++-----
+ src/hb-ot-layout-private.hh     |  2 --
  2 files changed, 14 insertions(+), 7 deletions(-)
 
 commit 1e7c1fcbc33599faefc32d4a28e5d8506d2c56fa
  2 files changed, 14 insertions(+), 7 deletions(-)
 
 commit 1e7c1fcbc33599faefc32d4a28e5d8506d2c56fa
@@ -20542,12 +32106,12 @@ Date: Wed Oct 27 22:48:31 2010 -0400
 
     Move code around
 
 
     Move code around
 
- src/hb-ot-layout-gpos-private.hh |   59
- ++++++++++++++++++++++++++++++++++++++
- src/hb-ot-layout.cc             |   59
- +------------------------------------
- src/hb-ot-layout.h              |    4 +--
- src/hb-ot-shape.cc              |    2 +-
+ src/hb-ot-layout-gpos-private.hh | 59
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.cc             | 59
+ ++--------------------------------------
+ src/hb-ot-layout.h              |  4 +--
+ src/hb-ot-shape.cc              |  2 +-
  4 files changed, 63 insertions(+), 61 deletions(-)
 
 commit bf94b3ad22b2fe4730d4e64d673c63154fc5b5fe
  4 files changed, 63 insertions(+), 61 deletions(-)
 
 commit bf94b3ad22b2fe4730d4e64d673c63154fc5b5fe
@@ -20556,10 +32120,10 @@ Date: Wed Oct 27 22:37:59 2010 -0400
 
     Move some more code around
 
 
     Move some more code around
 
- src/hb-ot-layout-gdef-private.hh |   21 ++++++++++++++
- src/hb-ot-layout-private.hh     |   27 +++++++++++++++---
- src/hb-ot-layout.cc             |   56
- +++++--------------------------------
+ src/hb-ot-layout-gdef-private.hh | 21 +++++++++++++++
+ src/hb-ot-layout-private.hh     | 27 ++++++++++++++++---
+ src/hb-ot-layout.cc             | 56
+ ++++++----------------------------------
  3 files changed, 52 insertions(+), 52 deletions(-)
 
 commit 6334658fe79d6acfb46a2a147721b78f92510ebb
  3 files changed, 52 insertions(+), 52 deletions(-)
 
 commit 6334658fe79d6acfb46a2a147721b78f92510ebb
@@ -20568,8 +32132,8 @@ Date:   Wed Oct 27 22:11:32 2010 -0400
 
     Simplify mark skipping logic
 
 
     Simplify mark skipping logic
 
- src/hb-ot-layout.cc |  17 +++--------------
- 1 files changed, 3 insertions(+), 14 deletions(-)
+ src/hb-ot-layout.cc | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
 
 commit 8c69e65abed961002d90024c92e18538c6516262
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8c69e65abed961002d90024c92e18538c6516262
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20577,14 +32141,14 @@ Date: Wed Oct 27 22:07:49 2010 -0400
 
     Rename lookup_flags to lookup_props since it's more than just flags
 
 
     Rename lookup_flags to lookup_props since it's more than just flags
 
- src/hb-ot-layout-common-private.hh   |    6 ++++-
- src/hb-ot-layout-gpos-private.hh     |   14 ++++++------
- src/hb-ot-layout-gsub-private.hh     |    8 +++---
- src/hb-ot-layout-gsubgpos-private.hh |   10 ++++----
- src/hb-ot-layout-private.hh         |    4 +-
- src/hb-ot-layout.cc                 |   36
- +++++++++++++++++-----------------
- src/main.cc                         |    4 +-
+ src/hb-ot-layout-common-private.hh   |  6 +++++-
+ src/hb-ot-layout-gpos-private.hh     | 14 +++++++-------
+ src/hb-ot-layout-gsub-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsubgpos-private.hh | 10 +++++-----
+ src/hb-ot-layout-private.hh         |  4 ++--
+ src/hb-ot-layout.cc                 | 36
+ ++++++++++++++++++------------------
+ src/main.cc                         |  4 ++--
  7 files changed, 43 insertions(+), 39 deletions(-)
 
 commit 98370e89d1bff248737b482d129c2a4deb8bfd95
  7 files changed, 43 insertions(+), 39 deletions(-)
 
 commit 98370e89d1bff248737b482d129c2a4deb8bfd95
@@ -20594,19 +32158,19 @@ Date: Wed Oct 27 17:39:01 2010 -0400
     WIP removing external synthesized GDEF support and implementing
     it internally
 
     WIP removing external synthesized GDEF support and implementing
     it internally
 
- TODO                                |    2 -
- src/hb-buffer-private.hh            |    4 -
- src/hb-buffer.cc                    |    3 -
- src/hb-ot-layout-common-private.hh   |    8 +-
- src/hb-ot-layout-gdef-private.hh     |    6 +-
- src/hb-ot-layout-gpos-private.hh     |    4 +-
- src/hb-ot-layout-gsub-private.hh     |   66 ++++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |   29 +++++++-
- src/hb-ot-layout-private.hh         |   29 ++-----
- src/hb-ot-layout.cc                 |  138
- +++++-----------------------------
- src/hb-ot-layout.h                  |   26 -------
- src/hb-ot-shape.cc                  |   10 +++
+ TODO                                |   2 -
+ src/hb-buffer-private.hh            |   4 -
+ src/hb-buffer.cc                    |   3 -
+ src/hb-ot-layout-common-private.hh   |   8 +-
+ src/hb-ot-layout-gdef-private.hh     |   6 +-
+ src/hb-ot-layout-gpos-private.hh     |   4 +-
+ src/hb-ot-layout-gsub-private.hh     |  66 ++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh |  29 +++++++-
+ src/hb-ot-layout-private.hh         |  29 +++-----
+ src/hb-ot-layout.cc                 | 138
+ +++++------------------------------
+ src/hb-ot-layout.h                  |  26 -------
+ src/hb-ot-shape.cc                  |  10 +++
  12 files changed, 98 insertions(+), 227 deletions(-)
 
 commit 870e2d6eac01d004c72a925ea93e6823251d5fa2
  12 files changed, 98 insertions(+), 227 deletions(-)
 
 commit 870e2d6eac01d004c72a925ea93e6823251d5fa2
@@ -20615,9 +32179,9 @@ Date:   Wed Oct 27 17:37:20 2010 -0400
 
     Remove unused function
 
 
     Remove unused function
 
- src/hb-buffer-private.hh |   10 ----------
- src/hb-buffer.cc        |   27 ---------------------------
- 2 files changed, 0 insertions(+), 37 deletions(-)
+ src/hb-buffer-private.hh | 10 ----------
+ src/hb-buffer.cc        | 27 ---------------------------
+ 2 files changed, 37 deletions(-)
 
 commit 1115890b90709fa5329a55d22f543020f3df9f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1115890b90709fa5329a55d22f543020f3df9f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20625,8 +32189,8 @@ Date:   Wed Oct 27 17:07:04 2010 -0400
 
     More cleanup
 
 
     More cleanup
 
- src/hb-buffer-private.hh    |   5 +----
- src/hb-ot-layout-private.hh |   6 ++++++
+ src/hb-buffer-private.hh    | 5 +----
+ src/hb-ot-layout-private.hh | 6 ++++++
  2 files changed, 7 insertions(+), 4 deletions(-)
 
 commit dbf56b1d94910f04823e53e39ace1e5145bddc04
  2 files changed, 7 insertions(+), 4 deletions(-)
 
 commit dbf56b1d94910f04823e53e39ace1e5145bddc04
@@ -20635,9 +32199,9 @@ Date:   Wed Oct 27 17:06:12 2010 -0400
 
     More lig-id cleanup
 
 
     More lig-id cleanup
 
- src/hb-buffer-private.hh        |    4 ++--
- src/hb-buffer.cc                |    2 +-
- src/hb-ot-layout-gsub-private.hh |    8 +++++++-
+ src/hb-buffer-private.hh        | 4 ++--
+ src/hb-buffer.cc                | 2 +-
+ src/hb-ot-layout-gsub-private.hh | 8 +++++++-
  3 files changed, 10 insertions(+), 4 deletions(-)
 
 commit f6a23a0b9171958f76c1d0473b09fc08d2b3a0d0
  3 files changed, 10 insertions(+), 4 deletions(-)
 
 commit f6a23a0b9171958f76c1d0473b09fc08d2b3a0d0
@@ -20646,8 +32210,8 @@ Date:   Wed Oct 27 17:01:03 2010 -0400
 
     More removal of lig-id code from buffer
 
 
     More removal of lig-id code from buffer
 
- src/hb-buffer.cc |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-buffer.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit dd2ffd282c059194fd87fb1664e2e0cdb56a87a0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dd2ffd282c059194fd87fb1664e2e0cdb56a87a0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20655,11 +32219,11 @@ Date: Wed Oct 27 16:57:01 2010 -0400
 
     Minor renaming
 
 
     Minor renaming
 
- src/hb-buffer-private.hh        |   41
- ++++++++++++++++++-------------------
- src/hb-buffer.cc                |   20 +++++++++---------
- src/hb-ot-layout-gsub-private.hh |    8 +++---
- src/hb-ot-shape.cc              |    6 ++--
+ src/hb-buffer-private.hh        | 41
+ ++++++++++++++++++++--------------------
+ src/hb-buffer.cc                | 20 ++++++++++----------
+ src/hb-ot-layout-gsub-private.hh |  8 ++++----
+ src/hb-ot-shape.cc              |  6 +++---
  4 files changed, 37 insertions(+), 38 deletions(-)
 
 commit fe263272a2b26204bc39829a94d90ab537517f3f
  4 files changed, 37 insertions(+), 38 deletions(-)
 
 commit fe263272a2b26204bc39829a94d90ab537517f3f
@@ -20668,10 +32232,10 @@ Date: Wed Oct 27 16:51:02 2010 -0400
 
     Move setting lig_id/component out of buffer and to the gsub code
 
 
     Move setting lig_id/component out of buffer and to the gsub code
 
- src/hb-buffer-private.hh        |   30 ++++++---------------
- src/hb-buffer.cc                |   52
- ++++++-------------------------------
- src/hb-ot-layout-gsub-private.hh |   27 +++++++++++--------
+ src/hb-buffer-private.hh        | 30 +++++++----------------
+ src/hb-buffer.cc                | 52
+ +++++++---------------------------------
+ src/hb-ot-layout-gsub-private.hh | 27 ++++++++++++---------
  3 files changed, 34 insertions(+), 75 deletions(-)
 
 commit 2e2b2480c01c788ea702d78ca830c2bb659654a8
  3 files changed, 34 insertions(+), 75 deletions(-)
 
 commit 2e2b2480c01c788ea702d78ca830c2bb659654a8
@@ -20682,8 +32246,8 @@ Date:   Wed Oct 27 16:25:28 2010 -0400
 
     No practical point in reusing ligature ids.
 
 
     No practical point in reusing ligature ids.
 
- src/hb-ot-layout-gsub-private.hh |    5 +----
- 1 files changed, 1 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
 
 commit bf07d5a29c61baf6fd683289c7764f487ad7e413
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bf07d5a29c61baf6fd683289c7764f487ad7e413
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20691,8 +32255,8 @@ Date:   Wed Oct 27 16:19:13 2010 -0400
 
     Set component=0 for ligature glyph
 
 
     Set component=0 for ligature glyph
 
- src/hb-ot-layout-gsub-private.hh |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 37ab877149582c7ce7416425bb402340e3f948a2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 37ab877149582c7ce7416425bb402340e3f948a2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20700,8 +32264,8 @@ Date:   Wed Oct 27 15:38:06 2010 -0400
 
     Remove comment
 
 
     Remove comment
 
- src/hb-buffer.cc |   20 --------------------
- 1 files changed, 0 insertions(+), 20 deletions(-)
+ src/hb-buffer.cc | 20 --------------------
+ 1 file changed, 20 deletions(-)
 
 commit 88474c6fdaf35c56368694a5b164f4988a004d49
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 88474c6fdaf35c56368694a5b164f4988a004d49
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20711,16 +32275,16 @@ Date: Wed Oct 27 14:42:15 2010 -0400
 
     Add variant integers to buffer item types. More cleanup coming.
 
 
     Add variant integers to buffer item types. More cleanup coming.
 
- TODO                             |    2 -
- src/hb-buffer-private.hh         |   35 +++++---------------
- src/hb-buffer.cc                 |   62
- ++++++++++++++++++------------------
- src/hb-buffer.h                  |    2 +-
- src/hb-ot-layout-gpos-private.hh  |   24 +++++++-------
- src/hb-ot-layout-gsub-private.hh  |   2 +-
- src/hb-ot-layout-private.hh      |    4 +-
- src/hb-ot-layout.cc              |   39 +++++++++++------------
- src/hb-ot-shape-complex-arabic.cc |   8 ++--
+ TODO                             |  2 --
+ src/hb-buffer-private.hh         | 35 ++++++----------------
+ src/hb-buffer.cc                 | 62
+ +++++++++++++++++++--------------------
+ src/hb-buffer.h                  |  2 +-
+ src/hb-ot-layout-gpos-private.hh  | 24 +++++++--------
+ src/hb-ot-layout-gsub-private.hh  |  2 +-
+ src/hb-ot-layout-private.hh      |  4 +--
+ src/hb-ot-layout.cc              | 39 ++++++++++++------------
+ src/hb-ot-shape-complex-arabic.cc |  8 ++---
  9 files changed, 79 insertions(+), 99 deletions(-)
 
 commit 6cb8c3493019e1497921666fc268cb81943f9f1f
  9 files changed, 79 insertions(+), 99 deletions(-)
 
 commit 6cb8c3493019e1497921666fc268cb81943f9f1f
@@ -20729,8 +32293,8 @@ Date:   Wed Oct 27 14:27:03 2010 -0400
 
     Add hb_var_int_t
 
 
     Add hb_var_int_t
 
- src/hb-buffer.h |    6 +++---
- src/hb-common.h |   10 ++++++++++
+ src/hb-buffer.h |  6 +++---
+ src/hb-common.h | 10 ++++++++++
  2 files changed, 13 insertions(+), 3 deletions(-)
 
 commit f22802431a983bd4bc60a7653b1103973c3475cb
  2 files changed, 13 insertions(+), 3 deletions(-)
 
 commit f22802431a983bd4bc60a7653b1103973c3475cb
@@ -20739,8 +32303,8 @@ Date:   Tue Nov 2 19:12:37 2010 -0400
 
     Remove trailing comma
 
 
     Remove trailing comma
 
- src/hb-ot-shape-complex-arabic.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 13528d0c78cadb1f67267c9a692558caef9fdaa6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13528d0c78cadb1f67267c9a692558caef9fdaa6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20750,9 +32314,9 @@ Date:   Wed Oct 27 14:09:27 2010 -0400
 
     Not tested at all.
 
 
     Not tested at all.
 
- src/hb-ot-layout-gpos-private.hh |   27 +++++++++++++++++++------
- src/hb-ot-layout.cc             |   39
- +++++++++++++++++++++++--------------
+ src/hb-ot-layout-gpos-private.hh | 27 ++++++++++++++++++++-------
+ src/hb-ot-layout.cc             | 39
+ ++++++++++++++++++++++++---------------
  2 files changed, 44 insertions(+), 22 deletions(-)
 
 commit 9624de5b496846cd89ee4f7b07d38029aca70ce1
  2 files changed, 44 insertions(+), 22 deletions(-)
 
 commit 9624de5b496846cd89ee4f7b07d38029aca70ce1
@@ -20761,8 +32325,8 @@ Date:   Wed Oct 27 13:44:59 2010 -0400
 
     Clarify cursive_chain (and change its sign)
 
 
     Clarify cursive_chain (and change its sign)
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-ot-layout.cc             |   13 +++++++------
+ src/hb-ot-layout-gpos-private.hh |  4 ++--
+ src/hb-ot-layout.cc             | 13 +++++++------
  2 files changed, 9 insertions(+), 8 deletions(-)
 
 commit d6c9eadb88240c40b3cb9a33f067e575cbc2f729
  2 files changed, 9 insertions(+), 8 deletions(-)
 
 commit d6c9eadb88240c40b3cb9a33f067e575cbc2f729
@@ -20771,8 +32335,8 @@ Date:   Wed Oct 27 12:34:50 2010 -0400
 
     Remove more pointless LONGTERMTODO items
 
 
     Remove more pointless LONGTERMTODO items
 
- src/hb-ot-layout-common-private.hh |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit e204674fe340a57c48a9fe7e1ed02a9a08f4aca4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e204674fe340a57c48a9fe7e1ed02a9a08f4aca4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20781,8 +32345,8 @@ Date:   Wed Oct 27 12:32:02 2010 -0400
     Rename hb_ot_layout_get_lig_carets() to
     hb_ot_layout_get_ligature_carets()
 
     Rename hb_ot_layout_get_lig_carets() to
     hb_ot_layout_get_ligature_carets()
 
- src/hb-ot-layout.cc |  14 +++++++-------
- src/hb-ot-layout.h  |  14 +++++++-------
+ src/hb-ot-layout.cc | 14 +++++++-------
+ src/hb-ot-layout.h  | 14 +++++++-------
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit 3357d145f81cb7b746c910018fe3a0dfab00972c
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit 3357d145f81cb7b746c910018fe3a0dfab00972c
@@ -20791,10 +32355,9 @@ Date:  Wed Oct 27 12:30:46 2010 -0400
 
     Implement vertical support in get_lig_carets()
 
 
     Implement vertical support in get_lig_carets()
 
- src/hb-ot-layout-gdef-private.hh |   34
- ++++++++++++++++++----------------
- src/hb-ot-layout.cc             |    3 ++-
- src/hb-ot-layout.h              |    1 +
+ src/hb-ot-layout-gdef-private.hh | 34 ++++++++++++++++++----------------
+ src/hb-ot-layout.cc             |  3 ++-
+ src/hb-ot-layout.h              |  1 +
  3 files changed, 21 insertions(+), 17 deletions(-)
 
 commit 8eeed7eddc789151cbffe62ed6bfd77612266bf1
  3 files changed, 21 insertions(+), 17 deletions(-)
 
 commit 8eeed7eddc789151cbffe62ed6bfd77612266bf1
@@ -20803,8 +32366,8 @@ Date:   Wed Oct 27 12:07:49 2010 -0400
 
     Remove LONGTERMTODO item that I'll never fix
 
 
     Remove LONGTERMTODO item that I'll never fix
 
- src/hb-ot-layout-gsubgpos-private.hh |    6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ------
+ 1 file changed, 6 deletions(-)
 
 commit 184a5279c64f37bc2ceefbe2191bb64ca87f88d8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 184a5279c64f37bc2ceefbe2191bb64ca87f88d8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20812,8 +32375,8 @@ Date:   Wed Oct 27 12:00:49 2010 -0400
 
     Remove unused macro
 
 
     Remove unused macro
 
- src/hb-ot-layout-gpos-private.hh |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit af5d02a269d55331300df1e382241893928d64e0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit af5d02a269d55331300df1e382241893928d64e0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20824,9 +32387,9 @@ Date:   Wed Oct 27 11:54:26 2010 -0400
     Look forward for next character instead of joining to the last
     character.
 
     Look forward for next character instead of joining to the last
     character.
 
- src/hb-ot-layout-gpos-private.hh |   71
- ++++++++++++++++---------------------
- src/hb-ot-layout-private.hh     |   10 -----
+ src/hb-ot-layout-gpos-private.hh | 71
+ ++++++++++++++++++----------------------
+ src/hb-ot-layout-private.hh     | 10 ------
  2 files changed, 31 insertions(+), 50 deletions(-)
 
 commit ea22c749c7371cf66ca44f0bfe7030aef1926edd
  2 files changed, 31 insertions(+), 50 deletions(-)
 
 commit ea22c749c7371cf66ca44f0bfe7030aef1926edd
@@ -20837,9 +32400,9 @@ Date:   Wed Oct 27 11:09:48 2010 -0400
 
     Test case: "مرا" rendered using IranNastaliq.
 
 
     Test case: "مرا" rendered using IranNastaliq.
 
- src/hb-ot-layout-gpos-private.hh |  124
- +-------------------------------------
- 1 files changed, 3 insertions(+), 121 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 124
+ +--------------------------------------
+ 1 file changed, 3 insertions(+), 121 deletions(-)
 
 commit aefdb64689aab19df76590a36c4a04052a8bffdb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aefdb64689aab19df76590a36c4a04052a8bffdb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20847,8 +32410,8 @@ Date:   Wed Oct 27 10:40:39 2010 -0400
 
     Fix segfault with Arabic combining marks
 
 
     Fix segfault with Arabic combining marks
 
- src/hb-ot-shape-complex-arabic.cc |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 12b2d09a87adc1e1aac089cd2e09a68fb7129829
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 12b2d09a87adc1e1aac089cd2e09a68fb7129829
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20860,8 +32423,8 @@ Date:   Wed Oct 27 01:28:28 2010 -0400
     glyph metrics items is to add new callbacks for them.  We already have
     separeate callbacks for advance vs extents.
 
     glyph metrics items is to add new callbacks for them.  We already have
     separeate callbacks for advance vs extents.
 
- TODO |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ TODO | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 248e3c2ba47889c247959e44166644872aed59ba
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 248e3c2ba47889c247959e44166644872aed59ba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20869,8 +32432,8 @@ Date:   Wed Oct 27 01:23:14 2010 -0400
 
     Oops, remove extra mask setting that broke complex shaping
 
 
     Oops, remove extra mask setting that broke complex shaping
 
- src/hb-ot-shape.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 502f4cba3e0bcd625d31f8fd295b8b18e2d02a5a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 502f4cba3e0bcd625d31f8fd295b8b18e2d02a5a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20881,13 +32444,13 @@ Date: Wed Oct 27 01:13:56 2010 -0400
     Graphite module not updated.
     Bump version to 0.3.
 
     Graphite module not updated.
     Bump version to 0.3.
 
- configure.ac         |    2 +-
- src/hb-font-private.h |    3 +-
- src/hb-font.cc        |   96
- +++++++++++++++++++++++++++++++++---------------
- src/hb-font.h        |   61 +++++++++++++++++++------------
- src/hb-ft.c          |   72 ++++++++++++++++++++++--------------
- src/hb-ot-shape.cc    |    7 ++--
+ configure.ac         |  2 +-
+ src/hb-font-private.h |  3 +-
+ src/hb-font.cc        | 96
+ +++++++++++++++++++++++++++++++++++----------------
+ src/hb-font.h        | 61 ++++++++++++++++++++------------
+ src/hb-ft.c          | 72 +++++++++++++++++++++++---------------
+ src/hb-ot-shape.cc    |  7 ++--
  6 files changed, 154 insertions(+), 87 deletions(-)
 
 commit ec6c0e54d322d58cbc835feb58dcec7ede6ab744
  6 files changed, 154 insertions(+), 87 deletions(-)
 
 commit ec6c0e54d322d58cbc835feb58dcec7ede6ab744
@@ -20896,8 +32459,8 @@ Date:   Tue Oct 26 11:28:14 2010 -0400
 
     Fix blob leak
 
 
     Fix blob leak
 
- src/hb-font.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit bd7378b2ef9793de4e7f57b920f29f48ac9d0c25
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd7378b2ef9793de4e7f57b920f29f48ac9d0c25
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20907,9 +32470,9 @@ Date:   Wed Oct 13 18:33:16 2010 -0400
 
     Still finding the exact correct way the masks should be set.
 
 
     Still finding the exact correct way the masks should be set.
 
- src/hb-buffer-private.hh |   19 ++++++++++++++++---
- src/hb-buffer.cc        |    9 +++++++++
- src/hb-ot-shape.cc      |    6 ++++--
+ src/hb-buffer-private.hh | 19 ++++++++++++++++---
+ src/hb-buffer.cc        |  9 +++++++++
+ src/hb-ot-shape.cc      |  6 ++++--
  3 files changed, 29 insertions(+), 5 deletions(-)
 
 commit 961f9baa7bc3556f1e4e7135859cebe1351f73a4
  3 files changed, 29 insertions(+), 5 deletions(-)
 
 commit 961f9baa7bc3556f1e4e7135859cebe1351f73a4
@@ -20918,8 +32481,8 @@ Date:   Wed Oct 13 17:17:00 2010 -0400
 
     Oops, actually set global mask
 
 
     Oops, actually set global mask
 
- src/hb-buffer.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 39dede9ffffe732f78cbd092ccb3b48d77ddd66d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 39dede9ffffe732f78cbd092ccb3b48d77ddd66d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20933,10 +32496,10 @@ Date: Wed Oct 13 15:54:06 2010 -0400
     than one.
     Though, I don't think other engines support such corner cases.
 
     than one.
     Though, I don't think other engines support such corner cases.
 
- src/hb-ot-map-private.hh         |   10 ++++++++--
- src/hb-ot-map.cc                 |    3 ++-
- src/hb-ot-shape-complex-arabic.cc |   2 +-
- src/hb-ot-shape.cc               |    2 +-
+ src/hb-ot-map-private.hh         | 10 ++++++++--
+ src/hb-ot-map.cc                 |  3 ++-
+ src/hb-ot-shape-complex-arabic.cc |  2 +-
+ src/hb-ot-shape.cc               |  2 +-
  4 files changed, 12 insertions(+), 5 deletions(-)
 
 commit 3506b2e78db27e7835bd2c09c053a9807c9cac40
  4 files changed, 12 insertions(+), 5 deletions(-)
 
 commit 3506b2e78db27e7835bd2c09c053a9807c9cac40
@@ -20945,8 +32508,8 @@ Date:   Wed Oct 13 15:38:52 2010 -0400
 
     Return early if mask is 0
 
 
     Return early if mask is 0
 
- src/hb-buffer.cc |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 5c1c8c9c50ddbe66ea595afb245a208b7775b27c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5c1c8c9c50ddbe66ea595afb245a208b7775b27c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20954,8 +32517,8 @@ Date:   Wed Oct 13 15:36:38 2010 -0400
 
     Make sure feature values don't leak out of their mask
 
 
     Make sure feature values don't leak out of their mask
 
- src/hb-buffer.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 852912fc2db06b6183a2dc87c45ec1b563063572
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 852912fc2db06b6183a2dc87c45ec1b563063572
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20967,9 +32530,9 @@ Date:   Wed Oct 13 15:34:50 2010 -0400
     user feature, we were not setting any default mask for the feature,
     essentially disabling the feature by default.  Fix that.
 
     user feature, we were not setting any default mask for the feature,
     essentially disabling the feature by default.  Fix that.
 
- TODO                    |    2 --
- src/hb-ot-map-private.hh |   10 ++++++----
- src/hb-ot-map.cc        |   13 +++++++------
+ TODO                    |  2 --
+ src/hb-ot-map-private.hh | 10 ++++++----
+ src/hb-ot-map.cc        | 13 +++++++------
  3 files changed, 13 insertions(+), 12 deletions(-)
 
 commit 2989be4919242670c94825bded96db20a7b2035b
  3 files changed, 13 insertions(+), 12 deletions(-)
 
 commit 2989be4919242670c94825bded96db20a7b2035b
@@ -20978,8 +32541,8 @@ Date:   Wed Oct 13 15:18:29 2010 -0400
 
     Set user masks after complex masks
 
 
     Set user masks after complex masks
 
- src/hb-ot-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit a7820b7b15a809b4a1a4077147ceed7bea528483
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a7820b7b15a809b4a1a4077147ceed7bea528483
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20987,8 +32550,8 @@ Date:   Wed Oct 13 14:20:48 2010 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 04a3023a66203d94b77f2d7a8d6bcdedf067e155
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 04a3023a66203d94b77f2d7a8d6bcdedf067e155
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -20998,9 +32561,9 @@ Date:   Wed Oct 13 10:57:27 2010 -0400
 
     Looks like a roadmap now.
 
 
     Looks like a roadmap now.
 
- TODO |   72
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 59 insertions(+), 13 deletions(-)
+ TODO | 72
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 59 insertions(+), 13 deletions(-)
 
 commit 3111b8a0d5b38da57c0f6285aec2b92eb690188f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3111b8a0d5b38da57c0f6285aec2b92eb690188f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21008,8 +32571,8 @@ Date:   Wed Oct 13 10:41:53 2010 -0400
 
     Fix stupid bug, oops
 
 
     Fix stupid bug, oops
 
- src/hb-font.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3703f88b74707113e782eb6ca9a77603561760d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3703f88b74707113e782eb6ca9a77603561760d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21017,8 +32580,8 @@ Date:   Tue Oct 12 18:34:20 2010 -0400
 
     Step the version up to 0.2 now that Arabic shaper is in
 
 
     Step the version up to 0.2 now that Arabic shaper is in
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 758f68b860b44b5a04eb3dde5cb40b1b04cf634a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 758f68b860b44b5a04eb3dde5cb40b1b04cf634a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21028,8 +32591,8 @@ Date:   Tue Oct 12 17:37:44 2010 -0400
 
     It's tested now.  It works!
 
 
     It's tested now.  It works!
 
- src/hb-ot-shape-complex-arabic.cc |   7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-ot-shape-complex-arabic.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 13403bc67a01e0d4908fb964093fd02ddd11c580
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13403bc67a01e0d4908fb964093fd02ddd11c580
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21039,11 +32602,11 @@ Date: Tue Oct 12 17:23:54 2010 -0400
 
     Not tested yet.
 
 
     Not tested yet.
 
- src/hb-ot-shape-complex-arabic.cc  |   6 ++--
- src/hb-ot-shape-complex-private.hh |  37
- +++++++++++++++++++++--------------
- src/hb-ot-shape-private.hh        |   14 ++++++++++++-
- src/hb-ot-shape.cc                |    3 +-
+ src/hb-ot-shape-complex-arabic.cc  |  6 +++---
+ src/hb-ot-shape-complex-private.hh | 37
+ ++++++++++++++++++++++---------------
+ src/hb-ot-shape-private.hh        | 14 +++++++++++++-
+ src/hb-ot-shape.cc                |  3 ++-
  4 files changed, 40 insertions(+), 20 deletions(-)
 
 commit 57ac0ecb7843533b2e6e6d6c8a12b2a44437cc1c
  4 files changed, 40 insertions(+), 20 deletions(-)
 
 commit 57ac0ecb7843533b2e6e6d6c8a12b2a44437cc1c
@@ -21052,10 +32615,10 @@ Date: Tue Oct 12 17:07:02 2010 -0400
 
     Merge clearing masks and setting global masks
 
 
     Merge clearing masks and setting global masks
 
- src/hb-buffer-private.hh |   11 ++++++-----
- src/hb-buffer.cc        |    5 +++--
- src/hb-ot-map.cc        |    2 +-
- src/hb-ot-shape.cc      |    7 ++-----
+ src/hb-buffer-private.hh | 11 ++++++-----
+ src/hb-buffer.cc        |  5 +++--
+ src/hb-ot-map.cc        |  2 +-
+ src/hb-ot-shape.cc      |  7 ++-----
  4 files changed, 12 insertions(+), 13 deletions(-)
 
 commit fc96596b7c1c4e62491e951a3c256fb00dcde550
  4 files changed, 12 insertions(+), 13 deletions(-)
 
 commit fc96596b7c1c4e62491e951a3c256fb00dcde550
@@ -21064,8 +32627,8 @@ Date:   Tue Oct 12 17:00:25 2010 -0400
 
     Form clusters before setting masks
 
 
     Form clusters before setting masks
 
- src/hb-ot-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 1e80782244cdb1dedae9d1e61079d0508e57ca72
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e80782244cdb1dedae9d1e61079d0508e57ca72
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21073,8 +32636,8 @@ Date:   Tue Oct 12 17:00:07 2010 -0400
 
     Clear masks before setting them up, not after!
 
 
     Clear masks before setting them up, not after!
 
- src/hb-ot-shape.cc |   6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 commit fd3d32d31cb6d74a9994b6850d539fd0b707d941
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fd3d32d31cb6d74a9994b6850d539fd0b707d941
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21084,8 +32647,8 @@ Date:   Tue Oct 12 16:57:47 2010 -0400
 
     Not public yet.
 
 
     Not public yet.
 
- src/hb-ot-shape-private.hh |   5 ++---
- src/hb-ot-shape.cc        |   19 ++++++++++++++-----
+ src/hb-ot-shape-private.hh |  5 ++---
+ src/hb-ot-shape.cc        | 19 ++++++++++++++-----
  2 files changed, 16 insertions(+), 8 deletions(-)
 
 commit 49baa1f69efb0e3c62e45bd59dd88459a84bf390
  2 files changed, 16 insertions(+), 8 deletions(-)
 
 commit 49baa1f69efb0e3c62e45bd59dd88459a84bf390
@@ -21094,16 +32657,16 @@ Date: Tue Oct 12 16:50:36 2010 -0400
 
     Add hb_ot_complex_shaper_t stuff and start hooking Arabic shaper up
 
 
     Add hb_ot_complex_shaper_t stuff and start hooking Arabic shaper up
 
- src/Makefile.am                   |    3 +-
- src/hb-ot-map-private.hh          |    2 +-
- src/hb-ot-map.cc                  |    2 +-
- src/hb-ot-shape-arabic.cc         |  706
- -----------------------------------
- src/hb-ot-shape-complex-arabic.cc  |  715
- ++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-private.hh |  88 +++++
- src/hb-ot-shape-private.hh        |   12 +-
- src/hb-ot-shape.cc                |    8 +-
+ src/Makefile.am                   |   3 +-
+ src/hb-ot-map-private.hh          |   2 +-
+ src/hb-ot-map.cc                  |   2 +-
+ src/hb-ot-shape-arabic.cc         | 706
+ ------------------------------------
+ src/hb-ot-shape-complex-arabic.cc  | 715
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-private.hh |  88 +++++
+ src/hb-ot-shape-private.hh        |  12 +-
+ src/hb-ot-shape.cc                |   8 +-
  8 files changed, 813 insertions(+), 723 deletions(-)
 
 commit 605ed468f380f86d642031f6451447d270cb6de1
  8 files changed, 813 insertions(+), 723 deletions(-)
 
 commit 605ed468f380f86d642031f6451447d270cb6de1
@@ -21116,8 +32679,8 @@ Date:   Tue Oct 12 16:19:29 2010 -0400
     use in
     between the two stages.
 
     use in
     between the two stages.
 
- src/hb-ot-shape-private.hh |  12 ++++++++++--
- src/hb-ot-shape.cc        |   38 ++++++++++++++++++--------------------
+ src/hb-ot-shape-private.hh | 12 ++++++++++--
+ src/hb-ot-shape.cc        | 38 ++++++++++++++++++--------------------
  2 files changed, 28 insertions(+), 22 deletions(-)
 
 commit 895fb5d364e7ae5d9d2e34b9f68b8651804369ef
  2 files changed, 28 insertions(+), 22 deletions(-)
 
 commit 895fb5d364e7ae5d9d2e34b9f68b8651804369ef
@@ -21126,10 +32689,10 @@ Date: Tue Oct 12 16:00:21 2010 -0400
 
     Refactor, in a different direction
 
 
     Refactor, in a different direction
 
- src/hb-ot-map-private.hh   |  15 ++++++++-------
- src/hb-ot-map.cc          |   23 ++++++++++++-----------
- src/hb-ot-shape-private.hh |  13 +------------
- src/hb-ot-shape.cc        |   33 +++++++++++++++++----------------
+ src/hb-ot-map-private.hh   | 15 ++++++++-------
+ src/hb-ot-map.cc          | 23 ++++++++++++-----------
+ src/hb-ot-shape-private.hh | 13 +------------
+ src/hb-ot-shape.cc        | 33 +++++++++++++++++----------------
  4 files changed, 38 insertions(+), 46 deletions(-)
 
 commit d2ba016ca1ba7489537768b619980d5159b5870c
  4 files changed, 38 insertions(+), 46 deletions(-)
 
 commit d2ba016ca1ba7489537768b619980d5159b5870c
@@ -21138,12 +32701,12 @@ Date: Tue Oct 12 15:35:45 2010 -0400
 
     More refactoring
 
 
     More refactoring
 
- src/hb-ot-map-private.hh   |  32 +++++---------------------------
- src/hb-ot-map.cc          |   32 +++++++++++++++++++++++++++++---
- src/hb-ot-shape-private.hh |  16 ++++++++++++++--
- src/hb-ot-shape.cc        |   43
+ src/hb-ot-map-private.hh   | 32 +++++---------------------------
+ src/hb-ot-map.cc          | 32 +++++++++++++++++++++++++++++---
+ src/hb-ot-shape-private.hh | 16 ++++++++++++++--
+ src/hb-ot-shape.cc        | 43
  ++++++++++++++++++++++++++++---------------
  ++++++++++++++++++++++++++++---------------
- src/hb-ot-shape.h         |   10 +++++-----
+ src/hb-ot-shape.h         | 10 +++++-----
  5 files changed, 81 insertions(+), 52 deletions(-)
 
 commit 66e487dfbfdccd0c4be8cd11661d412ca27c3425
  5 files changed, 81 insertions(+), 52 deletions(-)
 
 commit 66e487dfbfdccd0c4be8cd11661d412ca27c3425
@@ -21152,8 +32715,8 @@ Date:   Tue Oct 12 13:51:19 2010 -0400
 
     Update Arabic shaping table to Unicode 6.0.0.
 
 
     Update Arabic shaping table to Unicode 6.0.0.
 
- src/hb-ot-shape-arabic.cc |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape-arabic.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit f4792d99eee0e8cd72b7cb01c96a09f16e2a72ce
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f4792d99eee0e8cd72b7cb01c96a09f16e2a72ce
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21165,8 +32728,8 @@ Date:   Tue Oct 12 12:32:18 2010 -0400
 
     Mozilla bug #603352.
 
 
     Mozilla bug #603352.
 
- src/hb-ot-tag.c |    6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ src/hb-ot-tag.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 commit 993d1e786a32612b796dae8309ce402a4121bec7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 993d1e786a32612b796dae8309ce402a4121bec7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21176,8 +32739,8 @@ Date:   Tue Oct 12 11:17:30 2010 -0400
 
     Mozilla bug #603346
 
 
     Mozilla bug #603346
 
- src/hb-open-type-private.hh |   5 ++---
- 1 files changed, 2 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
 
 commit 52601275d5e4000dada4f925fb78723eeeee7bd4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52601275d5e4000dada4f925fb78723eeeee7bd4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21185,8 +32748,8 @@ Date:   Fri Oct 8 20:38:46 2010 -0400
 
     More separation
 
 
     More separation
 
- src/hb-ot-shape.cc |  14 +++++---------
- 1 files changed, 5 insertions(+), 9 deletions(-)
+ src/hb-ot-shape.cc | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
 
 commit 6b7e6758626268ba1c7c266128e618ec73ae2c0f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b7e6758626268ba1c7c266128e618ec73ae2c0f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21194,8 +32757,8 @@ Date:   Fri Oct 8 20:30:04 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |  22 +++++++++++-----------
- 1 files changed, 11 insertions(+), 11 deletions(-)
+ src/hb-ot-shape.cc | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
 
 commit aa9c450bb2d7c3c9e36ea32e3558250391a0582d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa9c450bb2d7c3c9e36ea32e3558250391a0582d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21203,8 +32766,8 @@ Date:   Fri Oct 8 20:27:38 2010 -0400
 
     Enable 'rtlm' mirroring
 
 
     Enable 'rtlm' mirroring
 
- src/hb-ot-map-private.hh |    9 +++++----
- src/hb-ot-shape.cc      |   30 +++++++++++++++---------------
+ src/hb-ot-map-private.hh |  9 +++++----
+ src/hb-ot-shape.cc      | 30 +++++++++++++++---------------
  2 files changed, 20 insertions(+), 19 deletions(-)
 
 commit 36925f695d349a53d52ecc3a58f18240a6977463
  2 files changed, 20 insertions(+), 19 deletions(-)
 
 commit 36925f695d349a53d52ecc3a58f18240a6977463
@@ -21215,11 +32778,11 @@ Date: Fri Oct 8 20:20:32 2010 -0400
 
     hb_ot_plan_t may be a better name, donno.
 
 
     hb_ot_plan_t may be a better name, donno.
 
- src/hb-ot-map-private.hh   |   4 +-
- src/hb-ot-map.cc          |    2 +-
- src/hb-ot-shape-private.hh |   4 +-
- src/hb-ot-shape.cc        |   49
- +++++++++++++++++++------------------------
+ src/hb-ot-map-private.hh   |  4 ++--
+ src/hb-ot-map.cc          |  2 +-
+ src/hb-ot-shape-private.hh |  4 ++--
+ src/hb-ot-shape.cc        | 49
+ +++++++++++++++++++++-------------------------
  4 files changed, 27 insertions(+), 32 deletions(-)
 
 commit f5dd3be46b5c77a2c5b97b82a0b67ac9e851b898
  4 files changed, 27 insertions(+), 32 deletions(-)
 
 commit f5dd3be46b5c77a2c5b97b82a0b67ac9e851b898
@@ -21228,8 +32791,8 @@ Date:   Fri Oct 8 20:16:23 2010 -0400
 
     Improve checks
 
 
     Improve checks
 
- src/check-c-linkage-decls.sh |    2 +-
- src/check-header-guards.sh   |    2 +-
+ src/check-c-linkage-decls.sh | 2 +-
+ src/check-header-guards.sh   | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 5a2b0b3878cd9c62121bb4fd6344e102a9ee1825
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 5a2b0b3878cd9c62121bb4fd6344e102a9ee1825
@@ -21238,10 +32801,10 @@ Date: Fri Oct 8 20:14:57 2010 -0400
 
     Add hb-ot-map.cc
 
 
     Add hb-ot-map.cc
 
- src/Makefile.am         |    1 +
- src/hb-ot-map-private.hh |  129 +-----------------------------------
- src/hb-ot-map.cc        |  165
- ++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am         |   1 +
+ src/hb-ot-map-private.hh | 129 +-----------------------------------
+ src/hb-ot-map.cc        | 165
+ +++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 168 insertions(+), 127 deletions(-)
 
 commit ecc4550ed7bc900a61081edfbcd0ad09cbf29b36
  3 files changed, 168 insertions(+), 127 deletions(-)
 
 commit ecc4550ed7bc900a61081edfbcd0ad09cbf29b36
@@ -21250,8 +32813,8 @@ Date:   Fri Oct 8 20:05:29 2010 -0400
 
     Fix feature overriding
 
 
     Fix feature overriding
 
- src/hb-ot-map-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-map-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 8f08c3275040870a645ef034a38d30c05c619f21
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f08c3275040870a645ef034a38d30c05c619f21
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21259,11 +32822,11 @@ Date: Fri Oct 8 19:43:48 2010 -0400
 
     Minor cleanup
 
 
     Minor cleanup
 
- src/hb-open-type-private.hh |   8 +----
- src/hb-ot-map-private.hh    |  61
- ++++++++++++-------------------------------
- src/hb-ot-tag.c            |   11 +++----
- src/hb-private.h           |    4 +++
+ src/hb-open-type-private.hh | 8 ++----
+ src/hb-ot-map-private.hh    | 61
+ +++++++++++++--------------------------------
+ src/hb-ot-tag.c            | 11 ++++----
+ src/hb-private.h           |  4 +++
  4 files changed, 28 insertions(+), 56 deletions(-)
 
 commit a806762a314e83154793d96ee665e6668d6b56de
  4 files changed, 28 insertions(+), 56 deletions(-)
 
 commit a806762a314e83154793d96ee665e6668d6b56de
@@ -21272,11 +32835,11 @@ Date: Fri Oct 8 19:18:40 2010 -0400
 
     Add hb-ot-shape-private.hh
 
 
     Add hb-ot-shape-private.hh
 
- src/Makefile.am           |    1 +
- src/hb-ot-shape-arabic.cc  |   2 +-
- src/hb-ot-shape-private.hh |  60
- ++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 62 insertions(+), 1 deletions(-)
+ src/Makefile.am           |  1 +
+ src/hb-ot-shape-arabic.cc  |  2 +-
+ src/hb-ot-shape-private.hh | 60
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 62 insertions(+), 1 deletion(-)
 
 commit 4924affe0f0adf75f2a0e2137a71206b0576d63f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4924affe0f0adf75f2a0e2137a71206b0576d63f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21284,10 +32847,10 @@ Date: Fri Oct 8 19:18:16 2010 -0400
 
     Add hb-ot-map-private.hh
 
 
     Add hb-ot-map-private.hh
 
- src/Makefile.am         |    1 +
- src/hb-ot-map-private.hh |  307
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape.cc      |  274 +----------------------------------------
+ src/Makefile.am         |   1 +
+ src/hb-ot-map-private.hh | 307
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc      | 274 ++----------------------------------------
  3 files changed, 315 insertions(+), 267 deletions(-)
 
 commit a7c5046d6b676a32298b97403a49235f7f255161
  3 files changed, 315 insertions(+), 267 deletions(-)
 
 commit a7c5046d6b676a32298b97403a49235f7f255161
@@ -21296,8 +32859,8 @@ Date:   Fri Oct 8 18:47:47 2010 -0400
 
     Add private hb_segment_properties_t
 
 
     Add private hb_segment_properties_t
 
- src/hb-buffer-private.hh |   14 ++++++++------
- 1 files changed, 8 insertions(+), 6 deletions(-)
+ src/hb-buffer-private.hh | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
 
 commit b897c607d91d569f4eaa681d1f5b3d9f3d2bb093
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b897c607d91d569f4eaa681d1f5b3d9f3d2bb093
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21307,9 +32870,9 @@ Date:   Fri Oct 8 18:41:57 2010 -0400
 
     We now build our entire attack plan before jumping in.
 
 
     We now build our entire attack plan before jumping in.
 
- src/hb-ot-shape.cc |  333
- +++++++++++++++++++++++++++------------------------
- 1 files changed, 176 insertions(+), 157 deletions(-)
+ src/hb-ot-shape.cc | 333
+ ++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 176 insertions(+), 157 deletions(-)
 
 commit e89b7d2a61b7f58e6c7cec00d5ce2246dee1e8a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e89b7d2a61b7f58e6c7cec00d5ce2246dee1e8a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21317,8 +32880,8 @@ Date:   Fri Oct 8 12:29:59 2010 -0400
 
     Logically separate feature collection
 
 
     Logically separate feature collection
 
- src/hb-ot-shape.cc |  29 ++++++++++++++++++-----------
- 1 files changed, 18 insertions(+), 11 deletions(-)
+ src/hb-ot-shape.cc | 29 ++++++++++++++++++-----------
+ 1 file changed, 18 insertions(+), 11 deletions(-)
 
 commit 5b88908f12ad1d828dd6075fb8fc0036c2d6af3a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5b88908f12ad1d828dd6075fb8fc0036c2d6af3a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21326,8 +32889,8 @@ Date:   Fri Oct 8 12:23:01 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |  18 ++++++------------
- 1 files changed, 6 insertions(+), 12 deletions(-)
+ src/hb-ot-shape.cc | 18 ++++++------------
+ 1 file changed, 6 insertions(+), 12 deletions(-)
 
 commit 5360ce0c5c33f921b3f9ad3f42529a19df5ad0fe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5360ce0c5c33f921b3f9ad3f42529a19df5ad0fe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21335,8 +32898,8 @@ Date:   Thu Oct 7 21:21:11 2010 -0400
 
     Move some more code around
 
 
     Move some more code around
 
- src/hb-ot-shape.cc |  27 +++++++++++++--------------
- 1 files changed, 13 insertions(+), 14 deletions(-)
+ src/hb-ot-shape.cc | 27 +++++++++++++--------------
+ 1 file changed, 13 insertions(+), 14 deletions(-)
 
 commit d9c726078828d50db62e05407a3f38f2e7607533
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d9c726078828d50db62e05407a3f38f2e7607533
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21344,8 +32907,8 @@ Date:   Thu Oct 7 21:19:54 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |  18 +++++++++---------
- 1 files changed, 9 insertions(+), 9 deletions(-)
+ src/hb-ot-shape.cc | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
 
 commit efe0d682e860ffd23a1d17c68c8273f17d51c1c9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit efe0d682e860ffd23a1d17c68c8273f17d51c1c9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21353,9 +32916,9 @@ Date:   Thu Oct 7 21:12:46 2010 -0400
 
     Simplify compiling lookups
 
 
     Simplify compiling lookups
 
- src/hb-ot-shape.cc |  66
- +++++++++++++++++++++------------------------------
- 1 files changed, 27 insertions(+), 39 deletions(-)
+ src/hb-ot-shape.cc | 66
+ ++++++++++++++++++++++--------------------------------
+ 1 file changed, 27 insertions(+), 39 deletions(-)
 
 commit 476c94218b4f5b8e119e82b0e10b641e0c10bf56
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 476c94218b4f5b8e119e82b0e10b641e0c10bf56
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21363,8 +32926,8 @@ Date:   Thu Oct 7 17:47:33 2010 -0400
 
     Rename
 
 
     Rename
 
- src/hb-ot-shape.cc |  18 ++++++++++--------
- 1 files changed, 10 insertions(+), 8 deletions(-)
+ src/hb-ot-shape.cc | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
 
 commit 34db6f031d7ac009f554386ef990bad44886b9ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 34db6f031d7ac009f554386ef990bad44886b9ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21372,8 +32935,8 @@ Date:   Thu Oct 7 01:21:19 2010 -0400
 
     Add XXX note
 
 
     Add XXX note
 
- src/hb-buffer.cc |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 98aa3f65446496dc250d9b01d98cacfdf1157e06
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 98aa3f65446496dc250d9b01d98cacfdf1157e06
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21381,8 +32944,8 @@ Date:   Wed Oct 6 00:23:36 2010 -0400
 
     Call hb_ot_shape_setup_lookups_complex()
 
 
     Call hb_ot_shape_setup_lookups_complex()
 
- src/hb-ot-shape.cc |  10 +++++++++-
- 1 files changed, 9 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
 
 commit f1d07885dc358e79c237e824c94b3320c0a9c17d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f1d07885dc358e79c237e824c94b3320c0a9c17d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21390,8 +32953,8 @@ Date:   Wed Oct 6 00:21:37 2010 -0400
 
     Rename setup_lookups()
 
 
     Rename setup_lookups()
 
- src/hb-ot-shape.cc |  10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-ot-shape.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit affc5abac7bdae51df85856a5478d34d96fda4fe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit affc5abac7bdae51df85856a5478d34d96fda4fe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21399,8 +32962,8 @@ Date:   Wed Oct 6 00:18:16 2010 -0400
 
     Move table_tag to hb_ot_shape_context_t
 
 
     Move table_tag to hb_ot_shape_context_t
 
- src/hb-ot-shape.cc |  31 +++++++++++++++++--------------
- 1 files changed, 17 insertions(+), 14 deletions(-)
+ src/hb-ot-shape.cc | 31 +++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
 
 commit 967240dd8b96802345ef273e75427066e91ea8fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 967240dd8b96802345ef273e75427066e91ea8fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21408,9 +32971,9 @@ Date:   Tue Oct 5 23:00:05 2010 -0400
 
     Add internal hb_ot_shape_context_t
 
 
     Add internal hb_ot_shape_context_t
 
- src/hb-ot-shape-arabic.cc |   26 ++----
- src/hb-ot-shape.cc       |  237
- +++++++++++++++++++--------------------------
+ src/hb-ot-shape-arabic.cc |  26 ++---
+ src/hb-ot-shape.cc       | 237
+ +++++++++++++++++++---------------------------
  2 files changed, 108 insertions(+), 155 deletions(-)
 
 commit 3eb936f1539475098f39be78654b9c39b86f0799
  2 files changed, 108 insertions(+), 155 deletions(-)
 
 commit 3eb936f1539475098f39be78654b9c39b86f0799
@@ -21421,11 +32984,11 @@ Date: Tue Oct 5 18:36:58 2010 -0400
 
     Not hooked up just yet.
 
 
     Not hooked up just yet.
 
- src/Makefile.am                |    9 +
- src/gen-arabic-joining-table.py |   39 +++
- src/hb-ot-shape-arabic.cc      |  716
- +++++++++++++++++++++++++++++++++++++++
- 3 files changed, 764 insertions(+), 0 deletions(-)
+ src/Makefile.am                |   9 +
+ src/gen-arabic-joining-table.py |  39 +++
+ src/hb-ot-shape-arabic.cc      | 716
+ ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 764 insertions(+)
 
 commit 0109816b50064a314389333ff64aaf22cb4b1e56
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0109816b50064a314389333ff64aaf22cb4b1e56
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21433,9 +32996,9 @@ Date:   Tue Oct 5 18:36:45 2010 -0400
 
     Update build system
 
 
     Update build system
 
- autogen.sh   |    3 ---
- configure.ac |    1 +
- 2 files changed, 1 insertions(+), 3 deletions(-)
+ autogen.sh   | 3 ---
+ configure.ac | 1 +
+ 2 files changed, 1 insertion(+), 3 deletions(-)
 
 commit e81d7afe6e0e9dd26025f3243a11cf0b408a8046
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e81d7afe6e0e9dd26025f3243a11cf0b408a8046
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21443,9 +33006,9 @@ Date:   Mon Oct 4 18:18:48 2010 -0400
 
     Add hb_face_get_upem()
 
 
     Add hb_face_get_upem()
 
- src/hb-font.cc |    6 ++++++
- src/hb-font.h |    3 +++
- 2 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 6 ++++++
+ src/hb-font.h | 3 +++
+ 2 files changed, 9 insertions(+)
 
 commit d47f79db92fa45d51cd5f7845db8a206f5ec122b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d47f79db92fa45d51cd5f7845db8a206f5ec122b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21453,8 +33016,8 @@ Date:   Mon Oct 4 18:13:30 2010 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit bd361945a89ea31e6c4525aa030e18744ea81fb3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd361945a89ea31e6c4525aa030e18744ea81fb3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21462,8 +33025,8 @@ Date:   Mon Oct 4 17:22:57 2010 -0400
 
     Add API comments
 
 
     Add API comments
 
- src/hb-font.h |   17 +++++++++++++++--
- 1 files changed, 15 insertions(+), 2 deletions(-)
+ src/hb-font.h | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
 
 commit 645f6f265b5f6fb85b3c0f59ea874d58c86e3917
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 645f6f265b5f6fb85b3c0f59ea874d58c86e3917
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21473,11 +33036,11 @@ Date: Mon Oct 4 17:01:01 2010 -0400
 
     Correspond to the make_mutable() ones.
 
 
     Correspond to the make_mutable() ones.
 
- src/hb-font.cc   |    6 ++++++
- src/hb-font.h   |    2 ++
- src/hb-unicode.c |    6 ++++++
- src/hb-unicode.h |    2 ++
- 4 files changed, 16 insertions(+), 0 deletions(-)
+ src/hb-font.cc   | 6 ++++++
+ src/hb-font.h   | 2 ++
+ src/hb-unicode.c | 6 ++++++
+ src/hb-unicode.h | 2 ++
+ 4 files changed, 16 insertions(+)
 
 commit 19c0eab8cf96d00e168c4b11ec435019c1ed44f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 19c0eab8cf96d00e168c4b11ec435019c1ed44f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21489,12 +33052,12 @@ Date: Mon Oct 4 16:45:21 2010 -0400
     special because of the specific needs of the lifecycle management of
     the user_data object.
 
     special because of the specific needs of the lifecycle management of
     the user_data object.
 
- src/hb-font.cc   |   64
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.h   |   40 +++++++++++++++++++++++++++++++++
- src/hb-unicode.c |   32 +++++++++++++++++++++++++++
- src/hb-unicode.h |   31 +++++++++++++++++++++++++-
- 4 files changed, 166 insertions(+), 1 deletions(-)
+ src/hb-font.cc   | 64
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-font.h   | 40 +++++++++++++++++++++++++++++++++++
+ src/hb-unicode.c | 32 ++++++++++++++++++++++++++++
+ src/hb-unicode.h | 31 ++++++++++++++++++++++++++-
+ 4 files changed, 166 insertions(+), 1 deletion(-)
 
 commit f0feb084b0fd1510474b25404d1dcc5686ee0538
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f0feb084b0fd1510474b25404d1dcc5686ee0538
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21502,8 +33065,8 @@ Date:   Sun Oct 3 19:09:39 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-private.hh |  12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-private.hh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit ac0c1663fa6e93a5a94c88fc7497bc11ca17f0a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ac0c1663fa6e93a5a94c88fc7497bc11ca17f0a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21511,8 +33074,8 @@ Date:   Fri Oct 1 19:09:23 2010 -0400
 
     Avoid div-by-zero, validate upem
 
 
     Avoid div-by-zero, validate upem
 
- src/hb-ot-head-private.hh   |   7 +++++++
- src/hb-ot-layout-private.hh |   6 +++---
+ src/hb-ot-head-private.hh   | 7 +++++++
+ src/hb-ot-layout-private.hh | 6 +++---
  2 files changed, 10 insertions(+), 3 deletions(-)
 
 commit 7f97d2cd904ea999c099c73c52187c5d65aeec67
  2 files changed, 10 insertions(+), 3 deletions(-)
 
 commit 7f97d2cd904ea999c099c73c52187c5d65aeec67
@@ -21521,10 +33084,10 @@ Date: Fri Oct 1 18:58:50 2010 -0400
 
     Pedantic
 
 
     Pedantic
 
- src/hb-open-type-private.hh       |   12 ++++++------
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gdef-private.hh   |  10 +++++-----
- src/hb-ot-layout-gpos-private.hh   |   6 +++---
+ src/hb-open-type-private.hh       | 12 ++++++------
+ src/hb-ot-layout-common-private.hh |  2 +-
+ src/hb-ot-layout-gdef-private.hh   | 10 +++++-----
+ src/hb-ot-layout-gpos-private.hh   |  6 +++---
  4 files changed, 15 insertions(+), 15 deletions(-)
 
 commit 2841436926d6a406bd1f4a35c66a0e3c2fdbeca7
  4 files changed, 15 insertions(+), 15 deletions(-)
 
 commit 2841436926d6a406bd1f4a35c66a0e3c2fdbeca7
@@ -21536,8 +33099,8 @@ Date:   Wed Sep 29 12:20:36 2010 -0400
     See email thread "Should MarkToBase attachment zero the mark advance?"
     started by Jonathan Kew on 23 August 2010 for details.
 
     See email thread "Should MarkToBase attachment zero the mark advance?"
     started by Jonathan Kew on 23 August 2010 for details.
 
- src/hb-ot-layout-gpos-private.hh |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 36b3862009c00ad922d68810173a69ac59723365
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 36b3862009c00ad922d68810173a69ac59723365
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21545,8 +33108,8 @@ Date:   Wed Sep 29 12:10:24 2010 -0400
 
     One fewer cmp() implementation...
 
 
     One fewer cmp() implementation...
 
- src/hb-ot-layout-common-private.hh |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 4e573715ae5f5ed486ad66382bb44c47a86591ff
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4e573715ae5f5ed486ad66382bb44c47a86591ff
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21556,9 +33119,9 @@ Date:   Tue Sep 28 16:23:58 2010 -0400
 
     No semantic change.
 
 
     No semantic change.
 
- src/hb-open-type-private.hh       |    6 +++---
- src/hb-ot-layout-common-private.hh |   6 +++---
- src/hb-ot-shape.cc                |    8 ++++----
+ src/hb-open-type-private.hh       | 6 +++---
+ src/hb-ot-layout-common-private.hh | 6 +++---
+ src/hb-ot-shape.cc                | 8 ++++----
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit dca8aff24652c83c53efbb9d06e5e1c7ef1c2fa5
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit dca8aff24652c83c53efbb9d06e5e1c7ef1c2fa5
@@ -21567,8 +33130,8 @@ Date:   Tue Sep 28 16:25:23 2010 -0400
 
     Add comment re DejaVu Sans Mono having 'dflt' script
 
 
     Add comment re DejaVu Sans Mono having 'dflt' script
 
- src/hb-ot-layout.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 9dc45401c07cb40114067cafbe286c63a9598f3b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9dc45401c07cb40114067cafbe286c63a9598f3b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21576,8 +33139,8 @@ Date:   Tue Sep 28 16:23:28 2010 -0400
 
     Fix stupid bug in bsearch cmp function!
 
 
     Fix stupid bug in bsearch cmp function!
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6fca4c18c42bdcbc67ee8855499c51c7d6311eb2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6fca4c18c42bdcbc67ee8855499c51c7d6311eb2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21585,8 +33148,8 @@ Date:   Thu Sep 23 10:28:51 2010 -0400
 
     Add TODO iteam
 
 
     Add TODO iteam
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit f2a30bd605a57b99fce4b78e288c2ca62f7191ad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f2a30bd605a57b99fce4b78e288c2ca62f7191ad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21596,8 +33159,8 @@ Date:   Thu Sep 23 10:27:08 2010 -0400
 
     Got to add a suitable replacement.
 
 
     Got to add a suitable replacement.
 
- src/hb-font.h |    3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-font.h | 3 ---
+ 1 file changed, 3 deletions(-)
 
 commit 7b9a38a112aa2421d97187a9b30619360edeabbe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7b9a38a112aa2421d97187a9b30619360edeabbe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21605,10 +33168,10 @@ Date: Wed Sep 22 17:42:59 2010 -0400
 
     Add test.c using public API
 
 
     Add test.c using public API
 
- src/Makefile.am |    6 +++-
- src/test.c     |   94
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 99 insertions(+), 1 deletions(-)
+ src/Makefile.am |  6 +++-
+ src/test.c     | 94
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 99 insertions(+), 1 deletion(-)
 
 commit 9ea7368fce3fa373d8d2925961ad211f5cf6ce70
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ea7368fce3fa373d8d2925961ad211f5cf6ce70
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21616,8 +33179,8 @@ Date:   Wed Sep 22 17:38:44 2010 -0400
 
     Fix hb_ot_layout leak
 
 
     Fix hb_ot_layout leak
 
- src/hb-ot-layout.cc |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 8e577acae2e605547b6a1b9b3a941cb9e3c56a4c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8e577acae2e605547b6a1b9b3a941cb9e3c56a4c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21625,8 +33188,8 @@ Date:   Wed Sep 22 17:37:02 2010 -0400
 
     Fix blob refcounting with insane SFNT table directories
 
 
     Fix blob refcounting with insane SFNT table directories
 
- src/hb-font.cc |    4 +---
- 1 files changed, 1 insertions(+), 3 deletions(-)
+ src/hb-font.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
 
 commit 75371bea4fbf50b8604d2698b4935c011648a6b6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 75371bea4fbf50b8604d2698b4935c011648a6b6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21634,8 +33197,8 @@ Date:   Wed Sep 22 17:12:10 2010 -0400
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 5bd1e95236320aed60fb29ca1e93b9595d4aeeec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5bd1e95236320aed60fb29ca1e93b9595d4aeeec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21643,8 +33206,8 @@ Date:   Wed Sep 22 16:46:18 2010 -0400
 
     Speedup Device table delta computation for common cases
 
 
     Speedup Device table delta computation for common cases
 
- src/hb-ot-layout-common-private.hh |  25 +++++++++++++++++++++----
- 1 files changed, 21 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-common-private.hh | 25 +++++++++++++++++++++----
+ 1 file changed, 21 insertions(+), 4 deletions(-)
 
 commit ed4acbde9c5e3323cc95037b500d1bf2878ed3ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ed4acbde9c5e3323cc95037b500d1bf2878ed3ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21655,8 +33218,8 @@ Date:   Mon Aug 16 14:36:27 2010 -0400
     Reported by Jonathan Kew.  Face table handling needs to be redone
     anyway, but fix this for now.
 
     Reported by Jonathan Kew.  Face table handling needs to be redone
     anyway, but fix this for now.
 
- src/hb-ot-layout.cc |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-layout.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 258305c2a5dd47bd2d83f12eaf9caa5b19ae5efb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 258305c2a5dd47bd2d83f12eaf9caa5b19ae5efb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21666,8 +33229,8 @@ Date:   Fri Aug 13 14:10:02 2010 -0400
 
     Patch by Jonathan Kew.  Mozilla bug #465728.
 
 
     Patch by Jonathan Kew.  Mozilla bug #465728.
 
- src/hb-ot-layout-gpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2422c4b96d32037a5cdaef4c427ed1d25db5f647
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2422c4b96d32037a5cdaef4c427ed1d25db5f647
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21675,8 +33238,8 @@ Date:   Fri Aug 13 14:00:34 2010 -0400
 
     Add TODO
 
 
     Add TODO
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 27f0b092a13344e8791c496c77a3c1e5de4f887c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 27f0b092a13344e8791c496c77a3c1e5de4f887c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21684,8 +33247,8 @@ Date:   Fri Jul 23 17:35:54 2010 -0400
 
     Logically separate feature allocation from application
 
 
     Logically separate feature allocation from application
 
- src/hb-ot-shape.cc |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 6cf63132dc771e1bcd5627720daf4bd2ea0800a5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6cf63132dc771e1bcd5627720daf4bd2ea0800a5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21693,8 +33256,8 @@ Date:   Fri Jul 23 17:32:26 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4e4ef24e46f273ad2bdda2f718223e05b37dd50f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4e4ef24e46f273ad2bdda2f718223e05b37dd50f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21702,12 +33265,12 @@ Date: Fri Jul 23 17:22:11 2010 -0400
 
     Towards separating bit allocation from shaping
 
 
     Towards separating bit allocation from shaping
 
- src/hb-buffer-private.hh        |    9 +++++--
- src/hb-buffer.cc                |   12 +++++-----
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-layout.cc             |    2 +-
- src/hb-ot-shape.cc              |   41
- ++++++++++++++-----------------------
+ src/hb-buffer-private.hh        |  9 ++++++---
+ src/hb-buffer.cc                | 12 ++++++------
+ src/hb-ot-layout-gpos-private.hh |  2 +-
+ src/hb-ot-layout.cc             |  2 +-
+ src/hb-ot-shape.cc              | 41
+ ++++++++++++++++------------------------
  5 files changed, 30 insertions(+), 36 deletions(-)
 
 commit da6cff3864d2ef4a061a29e5918359bafcd51f4c
  5 files changed, 30 insertions(+), 36 deletions(-)
 
 commit da6cff3864d2ef4a061a29e5918359bafcd51f4c
@@ -21716,8 +33279,8 @@ Date:   Fri Jul 23 15:40:58 2010 -0400
 
     Add TODO items
 
 
     Add TODO items
 
- TODO |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ TODO | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit acdba3f90b232fc12fcb200dca2584481b339118
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit acdba3f90b232fc12fcb200dca2584481b339118
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21725,54 +33288,54 @@ Date: Fri Jul 23 15:11:18 2010 -0400
 
     Prefer C linkage
 
 
     Prefer C linkage
 
- src/Makefile.am                     |    1 +
- src/check-c-linkage-decls.sh        |   18 ++++++++++++++++++
- src/hb-blob-private.h               |    2 ++
- src/hb-blob.c                       |   18 ++++++++++++------
- src/hb-blob.h                       |    2 ++
- src/hb-buffer-private.hh            |    1 +
- src/hb-buffer.cc                    |    7 ++++++-
- src/hb-buffer.h                     |    1 +
- src/hb-common.c                     |    6 ++++++
- src/hb-common.h                     |   21 +++++++++++++--------
- src/hb-font-private.h               |    1 +
- src/hb-font.cc                              |    4 ++++
- src/hb-font.h                       |    1 +
- src/hb-ft.c                         |   10 ++++++++--
- src/hb-ft.h                         |    2 ++
- src/hb-glib.c                       |    6 ++++++
- src/hb-glib.h                       |    2 ++
- src/hb-graphite.cc                  |    6 ++++++
- src/hb-graphite.h                   |    3 ++-
- src/hb-icu.c                        |    6 ++++++
- src/hb-icu.h                        |    2 ++
- src/hb-language.c                   |    5 +++++
- src/hb-language.h                   |    2 ++
- src/hb-object-private.h             |    2 ++
- src/hb-open-file-private.hh         |    4 ++++
- src/hb-open-type-private.hh         |    5 +++++
- src/hb-ot-head-private.hh           |    5 +++++
- src/hb-ot-layout-common-private.hh   |    6 ++++++
- src/hb-ot-layout-gdef-private.hh     |    4 ++++
- src/hb-ot-layout-gpos-private.hh     |    6 ++++++
- src/hb-ot-layout-gsub-private.hh     |    7 ++++++-
- src/hb-ot-layout-gsubgpos-private.hh |   13 +++++++++++++
- src/hb-ot-layout-private.hh         |    3 ++-
- src/hb-ot-layout.cc                 |    5 +++++
- src/hb-ot-layout.h                  |    1 +
- src/hb-ot-shape.cc                  |    6 ++++++
- src/hb-ot-shape.h                   |    2 ++
- src/hb-ot-tag.c                     |    5 +++++
- src/hb-ot-tag.h                     |    2 ++
- src/hb-ot.h                         |    3 +++
- src/hb-private.h                    |    5 +++++
- src/hb-shape.cc                     |    5 +++++
- src/hb-shape.h                              |    1 +
- src/hb-unicode-private.h            |    1 +
- src/hb-unicode.c                    |    6 ++++++
- src/hb-unicode.h                    |    1 +
- src/hb.h                            |    3 +++
- src/main.cc                         |    6 ++++++
+ src/Makefile.am                     |  1 +
+ src/check-c-linkage-decls.sh        | 18 ++++++++++++++++++
+ src/hb-blob-private.h               |  2 ++
+ src/hb-blob.c                       | 18 ++++++++++++------
+ src/hb-blob.h                       |  2 ++
+ src/hb-buffer-private.hh            |  1 +
+ src/hb-buffer.cc                    |  7 ++++++-
+ src/hb-buffer.h                     |  1 +
+ src/hb-common.c                     |  6 ++++++
+ src/hb-common.h                     | 21 +++++++++++++--------
+ src/hb-font-private.h               |  1 +
+ src/hb-font.cc                              |  4 ++++
+ src/hb-font.h                       |  1 +
+ src/hb-ft.c                         | 10 ++++++++--
+ src/hb-ft.h                         |  2 ++
+ src/hb-glib.c                       |  6 ++++++
+ src/hb-glib.h                       |  2 ++
+ src/hb-graphite.cc                  |  6 ++++++
+ src/hb-graphite.h                   |  3 ++-
+ src/hb-icu.c                        |  6 ++++++
+ src/hb-icu.h                        |  2 ++
+ src/hb-language.c                   |  5 +++++
+ src/hb-language.h                   |  2 ++
+ src/hb-object-private.h             |  2 ++
+ src/hb-open-file-private.hh         |  4 ++++
+ src/hb-open-type-private.hh         |  5 +++++
+ src/hb-ot-head-private.hh           |  5 +++++
+ src/hb-ot-layout-common-private.hh   |  6 ++++++
+ src/hb-ot-layout-gdef-private.hh     |  4 ++++
+ src/hb-ot-layout-gpos-private.hh     |  6 ++++++
+ src/hb-ot-layout-gsub-private.hh     |  7 ++++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 13 +++++++++++++
+ src/hb-ot-layout-private.hh         |  3 ++-
+ src/hb-ot-layout.cc                 |  5 +++++
+ src/hb-ot-layout.h                  |  1 +
+ src/hb-ot-shape.cc                  |  6 ++++++
+ src/hb-ot-shape.h                   |  2 ++
+ src/hb-ot-tag.c                     |  5 +++++
+ src/hb-ot-tag.h                     |  2 ++
+ src/hb-ot.h                         |  3 +++
+ src/hb-private.h                    |  5 +++++
+ src/hb-shape.cc                     |  5 +++++
+ src/hb-shape.h                              |  1 +
+ src/hb-unicode-private.h            |  1 +
+ src/hb-unicode.c                    |  6 ++++++
+ src/hb-unicode.h                    |  1 +
+ src/hb.h                            |  3 +++
+ src/main.cc                         |  6 ++++++
  48 files changed, 214 insertions(+), 20 deletions(-)
 
 commit cc6d52279d10a2edcf0d86c3a18a79ff4f6d3858
  48 files changed, 214 insertions(+), 20 deletions(-)
 
 commit cc6d52279d10a2edcf0d86c3a18a79ff4f6d3858
@@ -21783,18 +33346,18 @@ Date: Fri Jul 23 15:00:13 2010 -0400
 
     Helps with avoiding many "extern C" declarations in source files.
 
 
     Helps with avoiding many "extern C" declarations in source files.
 
- src/Makefile.am                 |    4 +-
- src/check-header-guards.sh      |    2 +-
- src/hb-font-private.h           |   95 +++++++++++++++
- src/hb-font-private.hh                  |   95 ---------------
- src/hb-font.cc                          |    2 +-
- src/hb-ft.c                     |  240
- ++++++++++++++++++++++++++++++++++++++
- src/hb-ft.cc                    |  240
- --------------------------------------
- src/hb-graphite.cc              |    2 +-
- src/hb-ot-layout-gdef-private.hh |    2 +-
- src/hb-ot-layout-private.hh     |    2 +-
+ src/Makefile.am                 |   4 +-
+ src/check-header-guards.sh      |   2 +-
+ src/hb-font-private.h           |  95 ++++++++++++++++
+ src/hb-font-private.hh                  |  95 ----------------
+ src/hb-font.cc                          |   2 +-
+ src/hb-ft.c                     | 240
+ +++++++++++++++++++++++++++++++++++++++
+ src/hb-ft.cc                    | 240
+ ---------------------------------------
+ src/hb-graphite.cc              |   2 +-
+ src/hb-ot-layout-gdef-private.hh |   2 +-
+ src/hb-ot-layout-private.hh     |   2 +-
  10 files changed, 342 insertions(+), 342 deletions(-)
 
 commit 0dd200d28f51bf4062d8a377432c8977c80cb210
  10 files changed, 342 insertions(+), 342 deletions(-)
 
 commit 0dd200d28f51bf4062d8a377432c8977c80cb210
@@ -21803,9 +33366,9 @@ Date:   Fri Jul 23 14:56:29 2010 -0400
 
     Header dep cleanup
 
 
     Header dep cleanup
 
- src/hb-font-private.hh      |   2 --
- src/hb-ot-layout-private.hh |   1 +
- 2 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-font-private.hh      | 2 --
+ src/hb-ot-layout-private.hh | 1 +
+ 2 files changed, 1 insertion(+), 2 deletions(-)
 
 commit fb0d25246267851a1fc200ead28c56359a40047e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb0d25246267851a1fc200ead28c56359a40047e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21813,9 +33376,9 @@ Date:   Fri Jul 23 14:54:22 2010 -0400
 
     dos2unix
 
 
     dos2unix
 
- src/hb-ot-head-private.hh |  256
- ++++++++++++++++++++++----------------------
- 1 files changed, 128 insertions(+), 128 deletions(-)
+ src/hb-ot-head-private.hh | 256
+ +++++++++++++++++++++++-----------------------
+ 1 file changed, 128 insertions(+), 128 deletions(-)
 
 commit 81408cd51ce575891e79e6483be187130f864c28
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81408cd51ce575891e79e6483be187130f864c28
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21827,8 +33390,8 @@ Date:   Fri Jul 23 14:46:57 2010 -0400
     members
     either.  Reported by Ginn Chen for Sun Studio compilers.
 
     members
     either.  Reported by Ginn Chen for Sun Studio compilers.
 
- src/hb-open-type-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 39fe34d4c356516f0a92f42b13a168572829d24e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 39fe34d4c356516f0a92f42b13a168572829d24e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21836,8 +33399,8 @@ Date:   Thu Jul 22 18:12:38 2010 -0400
 
     Add TODO option
 
 
     Add TODO option
 
- TODO |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ TODO | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 243a96f41482edb83e4798358064bd3329dd278c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 243a96f41482edb83e4798358064bd3329dd278c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21845,8 +33408,8 @@ Date:   Wed Jul 21 17:21:12 2010 -0400
 
     Add arm build fix to TODO
 
 
     Add arm build fix to TODO
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit c407f05f99f9225916d3d0ae06eac8fbc8b55b97
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c407f05f99f9225916d3d0ae06eac8fbc8b55b97
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21854,8 +33417,8 @@ Date:   Wed Jul 21 17:20:44 2010 -0400
 
     Remove fixed TODO item
 
 
     Remove fixed TODO item
 
- TODO |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ TODO | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 4f801bd6586defdbf70162e0c7f8968d2b476df2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4f801bd6586defdbf70162e0c7f8968d2b476df2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21865,8 +33428,8 @@ Date:   Wed Jul 21 16:37:01 2010 -0400
 
     Patch / report by Jonathan Kew.
 
 
     Patch / report by Jonathan Kew.
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 17e9ff938b638fd1cb80c990ba13bd47562116b8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 17e9ff938b638fd1cb80c990ba13bd47562116b8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21874,8 +33437,8 @@ Date:   Thu Jul 15 11:21:34 2010 -0700
 
     Fix 64bit issues with debug prints
 
 
     Fix 64bit issues with debug prints
 
- src/hb-blob.c              |   10 +++++-----
- src/hb-open-type-private.hh |   5 +++--
+ src/hb-blob.c              | 10 +++++-----
+ src/hb-open-type-private.hh | 5 +++--
  2 files changed, 8 insertions(+), 7 deletions(-)
 
 commit fd56ae49637b978ea3b36fab5b48f1a3cc99e90e
  2 files changed, 8 insertions(+), 7 deletions(-)
 
 commit fd56ae49637b978ea3b36fab5b48f1a3cc99e90e
@@ -21885,9 +33448,9 @@ Date:   Thu Jul 8 00:53:40 2010 -0400
     Don't bother sorting, it's a safe font error if the array is not
     sorted
 
     Don't bother sorting, it's a safe font error if the array is not
     sorted
 
- src/hb-open-type-private.hh       |   29 -----------------------------
- src/hb-ot-layout-common-private.hh |   7 -------
- 2 files changed, 0 insertions(+), 36 deletions(-)
+ src/hb-open-type-private.hh       | 29 -----------------------------
+ src/hb-ot-layout-common-private.hh |  7 -------
+ 2 files changed, 36 deletions(-)
 
 commit cc8a4abea68f2dba26feb5785f9e518e6853c744
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc8a4abea68f2dba26feb5785f9e518e6853c744
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21895,9 +33458,9 @@ Date:   Thu Jul 8 00:40:04 2010 -0400
 
     Use bsearch where applicable
 
 
     Use bsearch where applicable
 
- src/hb-open-type-private.hh       |   49 ++++++++++++
- src/hb-ot-layout-common-private.hh |  145
- +++++++++++++-----------------------
+ src/hb-open-type-private.hh       |  49 +++++++++++++
+ src/hb-ot-layout-common-private.hh | 145
+ +++++++++++++------------------------
  2 files changed, 100 insertions(+), 94 deletions(-)
 
 commit 2f418f5709b2b8b3ef2f6056b9d8c13b66f0b74a
  2 files changed, 100 insertions(+), 94 deletions(-)
 
 commit 2f418f5709b2b8b3ef2f6056b9d8c13b66f0b74a
@@ -21906,8 +33469,8 @@ Date:   Wed Jul 7 22:07:40 2010 -0400
 
     Remove useless TODO
 
 
     Remove useless TODO
 
- src/hb-open-file-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-open-file-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit da8edbb62204dc39f93d500ef85929e234e0bd19
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da8edbb62204dc39f93d500ef85929e234e0bd19
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21915,8 +33478,8 @@ Date:   Wed Jun 9 07:15:39 2010 -0400
 
     Fix header
 
 
     Fix header
 
- src/hb-buffer-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-buffer-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit d05d13df02fbe76814694fe49cc01bbb41c3d0e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d05d13df02fbe76814694fe49cc01bbb41c3d0e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21924,9 +33487,9 @@ Date:   Wed Jun 9 07:15:03 2010 -0400
 
     Add a test for header preprocessor guards
 
 
     Add a test for header preprocessor guards
 
- src/Makefile.am           |    4 +++-
- src/check-header-guards.sh |  20 ++++++++++++++++++++
- src/check-libstdc++.sh     |   1 -
+ src/Makefile.am           |  4 +++-
+ src/check-header-guards.sh | 20 ++++++++++++++++++++
+ src/check-libstdc++.sh     |  1 -
  3 files changed, 23 insertions(+), 2 deletions(-)
 
 commit 0f0cd9d361f1bb614aa3fd4616160d027062370e
  3 files changed, 23 insertions(+), 2 deletions(-)
 
 commit 0f0cd9d361f1bb614aa3fd4616160d027062370e
@@ -21935,11 +33498,11 @@ Date: Wed Jun 9 06:32:56 2010 -0400
 
     Fix header tags
 
 
     Fix header tags
 
- src/hb-font-private.hh      |   6 +++---
- src/hb-object-private.h     |   6 +++---
- src/hb-open-type-private.hh |   4 ++--
- src/hb-ot-layout-private.hh |   6 +++---
- src/hb-ot-shape.h          |    2 +-
+ src/hb-font-private.hh      | 6 +++---
+ src/hb-object-private.h     | 6 +++---
+ src/hb-open-type-private.hh | 4 ++--
+ src/hb-ot-layout-private.hh | 6 +++---
+ src/hb-ot-shape.h          | 2 +-
  5 files changed, 12 insertions(+), 12 deletions(-)
 
 commit f2a1b411b1d48c3dfac0df8e78c848d9aa3bb047
  5 files changed, 12 insertions(+), 12 deletions(-)
 
 commit f2a1b411b1d48c3dfac0df8e78c848d9aa3bb047
@@ -21950,8 +33513,8 @@ Date:   Thu Jun 3 11:37:51 2010 -0400
 
     Patch from Jonathan Kew
 
 
     Patch from Jonathan Kew
 
- src/hb-ot-shape.cc |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit a224b4d502d026fa642ee4098bf7bc0b4ba7ce27
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a224b4d502d026fa642ee4098bf7bc0b4ba7ce27
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21959,8 +33522,8 @@ Date:   Wed Jun 2 22:24:54 2010 -0400
 
     Fix skipping variation-selectors
 
 
     Fix skipping variation-selectors
 
- src/hb-ot-shape.cc |  14 ++++++++------
- 1 files changed, 8 insertions(+), 6 deletions(-)
+ src/hb-ot-shape.cc | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
 
 commit 81a77b115db401f69e869690f24b9047370bdfde
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81a77b115db401f69e869690f24b9047370bdfde
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21968,8 +33531,8 @@ Date:   Tue Jun 1 23:03:54 2010 -0400
 
     Make feature sorting stable
 
 
     Make feature sorting stable
 
- src/hb-ot-shape.cc |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit fdc322a82047c4bda9fa3dab4338a0eac1c1bde7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fdc322a82047c4bda9fa3dab4338a0eac1c1bde7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21977,8 +33540,8 @@ Date:   Fri May 28 20:55:52 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-shape.cc |  38 +++++++++++++++++++++-----------------
- 1 files changed, 21 insertions(+), 17 deletions(-)
+ src/hb-ot-shape.cc | 38 +++++++++++++++++++++-----------------
+ 1 file changed, 21 insertions(+), 17 deletions(-)
 
 commit f062ec6bb24b1c21d37b12adc7e944a5fe53526a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f062ec6bb24b1c21d37b12adc7e944a5fe53526a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21986,8 +33549,8 @@ Date:   Fri May 28 20:54:43 2010 -0400
 
     Further simplify mask allocator
 
 
     Further simplify mask allocator
 
- src/hb-ot-shape.cc |  23 +++++++----------------
- 1 files changed, 7 insertions(+), 16 deletions(-)
+ src/hb-ot-shape.cc | 23 +++++++----------------
+ 1 file changed, 7 insertions(+), 16 deletions(-)
 
 commit 8af45fda475d075c5a285002463a00a0423d3926
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8af45fda475d075c5a285002463a00a0423d3926
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -21995,8 +33558,8 @@ Date:   Fri May 28 20:41:20 2010 -0400
 
     Fix global feature handling
 
 
     Fix global feature handling
 
- src/hb-ot-shape.cc |   6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit e04685ee7be01695ec437fab50f919f1b7423c57
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e04685ee7be01695ec437fab50f919f1b7423c57
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22004,9 +33567,8 @@ Date:   Fri May 28 20:37:06 2010 -0400
 
     Simplify mask allocation
 
 
     Simplify mask allocation
 
- src/hb-ot-shape.cc |  48
- ++++++++++++++++++++----------------------------
- 1 files changed, 20 insertions(+), 28 deletions(-)
+ src/hb-ot-shape.cc | 48 ++++++++++++++++++++----------------------------
+ 1 file changed, 20 insertions(+), 28 deletions(-)
 
 commit 0e235d0fc9bdeeaffa7215c21abc5d40767a10c7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0e235d0fc9bdeeaffa7215c21abc5d40767a10c7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22014,9 +33576,9 @@ Date:   Fri May 28 20:21:47 2010 -0400
 
     Towards a mask allocator
 
 
     Towards a mask allocator
 
- src/hb-ot-shape.cc |  291
- +++++++++++++++++++++++++++++++++-------------------
- 1 files changed, 186 insertions(+), 105 deletions(-)
+ src/hb-ot-shape.cc | 291
+ ++++++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 186 insertions(+), 105 deletions(-)
 
 commit 81c5e8724b740c6e42ed3a45e0574c7c5f3ad8e6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81c5e8724b740c6e42ed3a45e0574c7c5f3ad8e6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22026,10 +33588,10 @@ Date: Fri May 28 18:31:16 2010 -0400
 
     Patch from Jonathan Kew
 
 
     Patch from Jonathan Kew
 
- src/hb-buffer-private.hh |   18 +++--
- src/hb-buffer.cc        |   15 ++--
- src/hb-ot-shape.cc      |  196
- +++++++++++++++++++++++++++++++---------------
+ src/hb-buffer-private.hh |  18 +++--
+ src/hb-buffer.cc        |  15 ++--
+ src/hb-ot-shape.cc      | 196
+ ++++++++++++++++++++++++++++++++---------------
  3 files changed, 153 insertions(+), 76 deletions(-)
 
 commit 2163afbf35044f59dbf449254e65b8c9feb6cdeb
  3 files changed, 153 insertions(+), 76 deletions(-)
 
 commit 2163afbf35044f59dbf449254e65b8c9feb6cdeb
@@ -22038,8 +33600,8 @@ Date:   Thu May 27 14:04:15 2010 -0400
 
     Add note about UTF-8 decoder
 
 
     Add note about UTF-8 decoder
 
- src/hb-buffer.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-buffer.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 226faa58f4e23eb655bebb0eff7206a3024c8d55
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 226faa58f4e23eb655bebb0eff7206a3024c8d55
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22047,8 +33609,8 @@ Date:   Thu May 27 11:42:34 2010 -0400
 
     Fix loop
 
 
     Fix loop
 
- src/hb-ot-tag.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-tag.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 56bef5680cc76a67d16ca14ac69f0dda1a691968
 Author: Martin Hosken <martin_hosken@sil.org>
 
 commit 56bef5680cc76a67d16ca14ac69f0dda1a691968
 Author: Martin Hosken <martin_hosken@sil.org>
@@ -22056,14 +33618,14 @@ Date: Thu May 27 10:09:04 2010 +0100
 
     Fixes to Python and Graphite from Martin
 
 
     Fixes to Python and Graphite from Martin
 
- contrib/python/README            |   10 ++++
- contrib/python/lib/fontconfig.pyx |   47 +++++++++++++++++
- contrib/python/lib/harfbuzz.pyx   |  104
- ++-----------------------------------
- contrib/python/scripts/hbtestfont |  103
- ++++++++++++++++++++++++++++++++----
- contrib/python/setup.py          |    3 +-
- src/hb-graphite.cc               |    8 ++--
+ contrib/python/README            |  10 ++++
+ contrib/python/lib/fontconfig.pyx |  47 +++++++++++++++++
+ contrib/python/lib/harfbuzz.pyx   | 104
+ ++------------------------------------
+ contrib/python/scripts/hbtestfont | 103
+ +++++++++++++++++++++++++++++++++----
+ contrib/python/setup.py          |   3 +-
+ src/hb-graphite.cc               |   +--
  6 files changed, 159 insertions(+), 116 deletions(-)
 
 commit b485da0b719cb03cc33da57802c5151301664c2f
  6 files changed, 159 insertions(+), 116 deletions(-)
 
 commit b485da0b719cb03cc33da57802c5151301664c2f
@@ -22072,8 +33634,8 @@ Date:   Thu May 27 11:39:19 2010 -0400
 
     Disable Graphite as it crashes all over the place...
 
 
     Disable Graphite as it crashes all over the place...
 
- src/hb-shape.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 93ac709b1f6b015371c29bf244a9ece62baedff0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 93ac709b1f6b015371c29bf244a9ece62baedff0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22081,8 +33643,8 @@ Date:   Wed May 26 16:22:00 2010 -0400
 
     Cypriot is RTL
 
 
     Cypriot is RTL
 
- src/hb-unicode.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-unicode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 15c7379c16dbb9ee8ed1c0333ca7492532ce8423
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 15c7379c16dbb9ee8ed1c0333ca7492532ce8423
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22094,19 +33656,19 @@ Date: Wed May 26 10:48:10 2010 -0400
     reversing
     changes made to c442672ec2fb83ed41f3994b3aa4f92a097664ab.
 
     reversing
     changes made to c442672ec2fb83ed41f3994b3aa4f92a097664ab.
 
- contrib/python/README            |   10 ----
- contrib/python/lib/fontconfig.pyx |   47 -----------------
- contrib/python/lib/harfbuzz.pyx   |  104
- +++++++++++++++++++++++++++++++++++--
- contrib/python/scripts/hbtestfont |   98
+ contrib/python/README            |  10 ----
+ contrib/python/lib/fontconfig.pyx |  47 -----------------
+ contrib/python/lib/harfbuzz.pyx   | 104
+ ++++++++++++++++++++++++++++++++++++--
+ contrib/python/scripts/hbtestfont |  98
  ++++-------------------------------
  ++++-------------------------------
- contrib/python/setup.py          |    3 +-
- src/Makefile.am                  |    2 +-
- src/hb-graphite.cc               |    8 ++--
- src/hb-ot-shape.cc               |    2 +-
- src/hb-ot-tag.c                  |    1 -
- src/hb-ot.h                      |    2 +-
- src/hb-shape.cc                  |    2 +-
+ contrib/python/setup.py          |   3 +-
+ src/Makefile.am                  |   2 +-
+ src/hb-graphite.cc               |   +--
+ src/hb-ot-shape.cc               |   2 +-
+ src/hb-ot-tag.c                  |   1 -
+ src/hb-ot.h                      |   2 +-
+ src/hb-shape.cc                  |   2 +-
  11 files changed, 119 insertions(+), 160 deletions(-)
 
 commit 80af2812fb3b231ddcb4608ec13c6038a681c818
  11 files changed, 119 insertions(+), 160 deletions(-)
 
 commit 80af2812fb3b231ddcb4608ec13c6038a681c818
@@ -22122,9 +33684,9 @@ Date:   Mon May 24 18:02:32 2010 +0100
 
     Fix struct initializers
 
 
     Fix struct initializers
 
- src/hb-ft.cc  |   12 ++++++------
- src/hb-glib.c |   14 +++++++-------
- src/hb-icu.c  |   14 +++++++-------
+ src/hb-ft.cc  | 12 ++++++------
+ src/hb-glib.c | 14 +++++++-------
+ src/hb-icu.c  | 14 +++++++-------
  3 files changed, 20 insertions(+), 20 deletions(-)
 
 commit f5ac9de259773a5f86809892e58166a485d70a3d
  3 files changed, 20 insertions(+), 20 deletions(-)
 
 commit f5ac9de259773a5f86809892e58166a485d70a3d
@@ -22133,8 +33695,8 @@ Date:   Mon May 24 18:01:09 2010 +0100
 
     Minor
 
 
     Minor
 
- src/hb-object-private.h |   24 +++++++++++++-----------
- 1 files changed, 13 insertions(+), 11 deletions(-)
+ src/hb-object-private.h | 24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
 
 commit f97bf4f81257c97a46dff51be31b2ec214d6c270
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f97bf4f81257c97a46dff51be31b2ec214d6c270
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22144,8 +33706,8 @@ Date:   Mon May 24 17:50:19 2010 +0100
 
     Also fixes issue with unicode callbacks never being set really.
 
 
     Also fixes issue with unicode callbacks never being set really.
 
- src/hb-font.cc   |   18 +++++++-----------
- src/hb-unicode.c |    9 ++-------
+ src/hb-font.cc   | 18 +++++++-----------
+ src/hb-unicode.c |  9 ++-------
  2 files changed, 9 insertions(+), 18 deletions(-)
 
 commit bf36a1074ab23abeab0a7a6c47db26770dc1ab0a
  2 files changed, 9 insertions(+), 18 deletions(-)
 
 commit bf36a1074ab23abeab0a7a6c47db26770dc1ab0a
@@ -22154,11 +33716,11 @@ Date: Mon May 24 17:46:21 2010 +0100
 
     Move all callback functions in a vtable structs
 
 
     Move all callback functions in a vtable structs
 
- src/hb-font-private.hh   |   10 ++++++----
- src/hb-font.cc                  |   28 +++++++++++++++-------------
- src/hb-ot-shape.cc      |    4 ++--
- src/hb-unicode-private.h |   12 +++++++-----
- src/hb-unicode.c        |   32 +++++++++++++++++---------------
+ src/hb-font-private.hh   | 10 ++++++----
+ src/hb-font.cc                  | 28 +++++++++++++++-------------
+ src/hb-ot-shape.cc      |  4 ++--
+ src/hb-unicode-private.h | 12 +++++++-----
+ src/hb-unicode.c        | 32 +++++++++++++++++---------------
  5 files changed, 47 insertions(+), 39 deletions(-)
 
 commit 3109a86add936ae4cc77541fc026c4fe2db4e328
  5 files changed, 47 insertions(+), 39 deletions(-)
 
 commit 3109a86add936ae4cc77541fc026c4fe2db4e328
@@ -22170,10 +33732,10 @@ Date: Mon May 24 13:25:37 2010 +0100
     and allow hbtestfont to be passed font files, where fontconfig knows
     about them.
 
     and allow hbtestfont to be passed font files, where fontconfig knows
     about them.
 
- contrib/python/lib/harfbuzz.pyx   |   4 ++--
- contrib/python/scripts/hbtestfont |   6 +++++-
- src/hb-graphite.cc               |    4 ++--
- src/hb-ot-tag.c                  |    1 +
+ contrib/python/lib/harfbuzz.pyx   | 4 ++--
+ contrib/python/scripts/hbtestfont | 6 +++++-
+ src/hb-graphite.cc               | 4 ++--
+ src/hb-ot-tag.c                  | 1 +
  4 files changed, 10 insertions(+), 5 deletions(-)
 
 commit e5bed0a37fe1b0576d08435179e455cb28eadcdb
  4 files changed, 10 insertions(+), 5 deletions(-)
 
 commit e5bed0a37fe1b0576d08435179e455cb28eadcdb
@@ -22182,9 +33744,9 @@ Date:   Sat May 22 20:19:00 2010 +0100
 
     Tidy up hbtestfont and add README
 
 
     Tidy up hbtestfont and add README
 
- contrib/python/README            |   10 +++
- contrib/python/scripts/hbtestfont |  134
- ++++++++++++++++++------------------
+ contrib/python/README            |  10 +++
+ contrib/python/scripts/hbtestfont | 134
+ +++++++++++++++++++-------------------
  2 files changed, 77 insertions(+), 67 deletions(-)
 
 commit 70ae332fe66510500d303b6fcc79537833b42f05
  2 files changed, 77 insertions(+), 67 deletions(-)
 
 commit 70ae332fe66510500d303b6fcc79537833b42f05
@@ -22193,10 +33755,10 @@ Date: Sat May 22 19:58:00 2010 +0100
 
     Add fontconfig to hbtestfont
 
 
     Add fontconfig to hbtestfont
 
- contrib/python/lib/fontconfig.pyx |   47 +++++++++++++++++++++++++++
- contrib/python/scripts/hbtestfont |   64
- ++++++++++++++++++++++--------------
- contrib/python/setup.py          |    3 +-
+ contrib/python/lib/fontconfig.pyx | 47 ++++++++++++++++++++++++++++
+ contrib/python/scripts/hbtestfont | 64
+ ++++++++++++++++++++++++---------------
+ contrib/python/setup.py          |  3 +-
  3 files changed, 88 insertions(+), 26 deletions(-)
 
 commit 72631c9d06b131d82080f212908e7d0b0266b841
  3 files changed, 88 insertions(+), 26 deletions(-)
 
 commit 72631c9d06b131d82080f212908e7d0b0266b841
@@ -22212,13 +33774,13 @@ Date: Sat May 22 00:56:40 2010 +0100
 
     Add graphical output to hbtestfont
 
 
     Add graphical output to hbtestfont
 
- contrib/python/lib/harfbuzz.pyx   |  100
- +------------------------------------
- contrib/python/scripts/hbtestfont |   62 ++++++++++++++++++++++-
- src/Makefile.am                  |    2 +-
- src/hb-ot-shape.cc               |    2 +-
- src/hb-ot.h                      |    2 +-
- src/hb-shape.cc                  |    2 +-
+ contrib/python/lib/harfbuzz.pyx   | 100
+ +-------------------------------------
+ contrib/python/scripts/hbtestfont |  62 ++++++++++++++++++++++-
+ src/Makefile.am                  |   2 +-
+ src/hb-ot-shape.cc               |   2 +-
+ src/hb-ot.h                      |   2 +-
+ src/hb-shape.cc                  |   2 +-
  6 files changed, 67 insertions(+), 103 deletions(-)
 
 commit bbc7a99d01298f9be1ebaaceacbc9bc961e247e5
  6 files changed, 67 insertions(+), 103 deletions(-)
 
 commit bbc7a99d01298f9be1ebaaceacbc9bc961e247e5
@@ -22227,8 +33789,8 @@ Date:   Fri May 21 18:24:34 2010 +0100
 
     Move mirroring around a bit
 
 
     Move mirroring around a bit
 
- src/hb-ot-shape.cc |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit bd0987386b3a4dddf208ccf1a70ebfff6242ba73
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bd0987386b3a4dddf208ccf1a70ebfff6242ba73
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22236,8 +33798,8 @@ Date:   Fri May 21 18:06:35 2010 +0100
 
     Add a few more standard features
 
 
     Add a few more standard features
 
- src/hb-ot-shape.cc |  10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit 75f3469ca6d626b08eb411984a2ba7fd48ca5b5f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 75f3469ca6d626b08eb411984a2ba7fd48ca5b5f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22245,8 +33807,8 @@ Date:   Fri May 21 17:59:04 2010 +0100
 
     Add note
 
 
     Add note
 
- src/hb-ot-shape.cc |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 1094a294f6a44c47fc75867983f2b135a6442bab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1094a294f6a44c47fc75867983f2b135a6442bab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22254,8 +33816,8 @@ Date:   Fri May 21 17:58:20 2010 +0100
 
     Add rtlm
 
 
     Add rtlm
 
- src/hb-ot-shape.cc |  26 +++++++++++++++++++++-----
- 1 files changed, 21 insertions(+), 5 deletions(-)
+ src/hb-ot-shape.cc | 26 +++++++++++++++++++++-----
+ 1 file changed, 21 insertions(+), 5 deletions(-)
 
 commit 074ea787493a37ae8f68d17be7820f13fff57520
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 074ea787493a37ae8f68d17be7820f13fff57520
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22263,9 +33825,9 @@ Date:   Fri May 21 17:53:10 2010 +0100
 
     Add ltra, ltrm, and rtla features
 
 
     Add ltra, ltrm, and rtla features
 
- src/hb-ot-shape.cc |  60
- +++++++++++++++++++++++++++++++++++++++++----------
- 1 files changed, 48 insertions(+), 12 deletions(-)
+ src/hb-ot-shape.cc | 60
+ +++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 48 insertions(+), 12 deletions(-)
 
 commit 1ce7b87c4d8d1ab3ec1d5198351d71b7199f7c64
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1ce7b87c4d8d1ab3ec1d5198351d71b7199f7c64
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22273,10 +33835,10 @@ Date: Fri May 21 17:31:45 2010 +0100
 
     Cleanup bitmask allocation
 
 
     Cleanup bitmask allocation
 
- src/hb-buffer-private.hh |   16 ++++++++++++
- src/hb-buffer.cc        |   36 +++++++++++++++++++++++++++
- src/hb-ot-shape.cc      |   60
- ++++++++++++++++++++--------------------------
+ src/hb-buffer-private.hh | 16 +++++++++++++
+ src/hb-buffer.cc        | 36 +++++++++++++++++++++++++++++
+ src/hb-ot-shape.cc      | 60
+ +++++++++++++++++++++---------------------------
  3 files changed, 78 insertions(+), 34 deletions(-)
 
 commit dd22a8f7bfd424a69286e90f79d2a23af6e89ec1
  3 files changed, 78 insertions(+), 34 deletions(-)
 
 commit dd22a8f7bfd424a69286e90f79d2a23af6e89ec1
@@ -22285,8 +33847,8 @@ Date:   Fri May 21 16:43:17 2010 +0100
 
     Add note
 
 
     Add note
 
- src/hb-ot-layout-gsub-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit cbd1d6a63a5d696b7d6a5aba9ee7305ea228416a
 Author: Martin Hosken <martin_hosken@sil.org>
 
 commit cbd1d6a63a5d696b7d6a5aba9ee7305ea228416a
 Author: Martin Hosken <martin_hosken@sil.org>
@@ -22294,8 +33856,8 @@ Date:   Fri May 21 15:16:43 2010 +0100
 
     Rename Grxxx to HbGrxxx
 
 
     Rename Grxxx to HbGrxxx
 
- src/hb-graphite.cc |  26 +++++++++++++-------------
- 1 files changed, 13 insertions(+), 13 deletions(-)
+ src/hb-graphite.cc | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
 
 commit 0375bdd2027767ee7bebef1ed289b33dc64f430e
 Author: Martin Hosken <martin_hosken@sil.org>
 
 commit 0375bdd2027767ee7bebef1ed289b33dc64f430e
 Author: Martin Hosken <martin_hosken@sil.org>
@@ -22303,8 +33865,8 @@ Date:   Fri May 21 15:01:37 2010 +0100
 
     Rename classes from Grxxx to HbGrxxx
 
 
     Rename classes from Grxxx to HbGrxxx
 
- src/hb-graphite.cc |  22 +++++++++++-----------
- 1 files changed, 11 insertions(+), 11 deletions(-)
+ src/hb-graphite.cc | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
 
 commit a5a72e004bb7123445c2c3a94352d358fc80d904
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a5a72e004bb7123445c2c3a94352d358fc80d904
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22312,8 +33874,8 @@ Date:   Fri May 21 15:12:52 2010 +0100
 
     Add hb-ot-shape.h, oops.
 
 
     Add hb-ot-shape.h, oops.
 
- src/hb-ot-shape.h |   44 ++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 44 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 44 insertions(+)
 
 commit aa62a402a72bdecad2a955dbfaf6e24cd2c00e55
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa62a402a72bdecad2a955dbfaf6e24cd2c00e55
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22321,9 +33883,9 @@ Date:   Fri May 21 14:42:11 2010 +0100
 
     Fix Makefile to install hb-ot-shape.h
 
 
     Fix Makefile to install hb-ot-shape.h
 
- src/Makefile.am |    2 +-
- src/hb-ot.h    |    1 +
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ src/hb-ot.h    | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit 9722b8f005a10fd16e841df4da3ccd80be66e296
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9722b8f005a10fd16e841df4da3ccd80be66e296
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22331,8 +33893,8 @@ Date:   Fri May 21 14:37:47 2010 +0100
 
     Simple renames
 
 
     Simple renames
 
- src/hb-ot-shape.cc |  36 ++++++++++++++++++------------------
- 1 files changed, 18 insertions(+), 18 deletions(-)
+ src/hb-ot-shape.cc | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
 
 commit 02f28550d785671cf92fd4239c5f913f7e71585f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 02f28550d785671cf92fd4239c5f913f7e71585f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22340,8 +33902,8 @@ Date:   Fri May 21 14:37:28 2010 +0100
 
     Graphite also forces us to link to libstdc++ currently
 
 
     Graphite also forces us to link to libstdc++ currently
 
- src/Makefile.am |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit ca663bb23c16f6a1f04efa6e10dad0e3e7c260a3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ca663bb23c16f6a1f04efa6e10dad0e3e7c260a3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22349,10 +33911,10 @@ Date: Fri May 21 14:34:23 2010 +0100
 
     Move main shaper code into hb_ot_shape()
 
 
     Move main shaper code into hb_ot_shape()
 
- src/hb-ot-shape-private.hh |  53 ----------
- src/hb-ot-shape.cc        |  225
- +++++++++++++++++++++++++++++++++++++++++---
- src/hb-shape.cc           |  209
+ src/hb-ot-shape-private.hh |  53 -----------
+ src/hb-ot-shape.cc        | 225
+ ++++++++++++++++++++++++++++++++++++++++++---
+ src/hb-shape.cc           | 209
  +----------------------------------------
  3 files changed, 214 insertions(+), 273 deletions(-)
 
  +----------------------------------------
  3 files changed, 214 insertions(+), 273 deletions(-)
 
@@ -22362,8 +33924,8 @@ Date:   Fri May 21 14:20:48 2010 +0100
 
     Fix test failing
 
 
     Fix test failing
 
- src/hb-graphite.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-graphite.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit dd47924d88d86b83e7f3ab040de6e7136ac0ca09
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dd47924d88d86b83e7f3ab040de6e7136ac0ca09
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22371,8 +33933,8 @@ Date:   Fri May 21 14:18:08 2010 +0100
 
     Fix warnings
 
 
     Fix warnings
 
- src/hb-graphite.cc |  14 +++++---------
- 1 files changed, 5 insertions(+), 9 deletions(-)
+ src/hb-graphite.cc | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
 
 commit 305ba8671553cd955c20a54db622666c0bb02532
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 305ba8671553cd955c20a54db622666c0bb02532
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22380,13 +33942,13 @@ Date: Fri May 21 14:02:20 2010 +0100
 
     Import Graphite shaping backend by Martin Hosken
 
 
     Import Graphite shaping backend by Martin Hosken
 
- configure.ac      |    6 +
- src/Makefile.am    |  11 ++
- src/hb-graphite.cc |  308
- ++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-graphite.h  |  46 ++++++++
- src/hb-shape.cc    |  15 +++
- 5 files changed, 386 insertions(+), 0 deletions(-)
+ configure.ac      |   6 ++
+ src/Makefile.am    |  11 ++
+ src/hb-graphite.cc | 308
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-graphite.h  |  46 ++++++++
+ src/hb-shape.cc    |  15 +++
+ 5 files changed, 386 insertions(+)
 
 commit 3ba6818ba9be950e46902f0239f2451ec0e65d44
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ba6818ba9be950e46902f0239f2451ec0e65d44
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22394,9 +33956,9 @@ Date:   Fri May 21 13:51:29 2010 +0100
 
     Update the Python module
 
 
     Update the Python module
 
- contrib/python/lib/harfbuzz.pyx |   40
- ++++++++++++++++++++------------------
- 1 files changed, 21 insertions(+), 19 deletions(-)
+ contrib/python/lib/harfbuzz.pyx | 40
+ +++++++++++++++++++++-------------------
+ 1 file changed, 21 insertions(+), 19 deletions(-)
 
 commit 83f34677bcbc6bb194940407b0fcb23575650e3d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 83f34677bcbc6bb194940407b0fcb23575650e3d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22404,10 +33966,10 @@ Date: Fri May 21 13:43:49 2010 +0100
 
     Add hb_tag_from_string()
 
 
     Add hb_tag_from_string()
 
- src/Makefile.am |    1 +
- src/hb-common.c |   41 +++++++++++++++++++++++++++++++++++++++++
- src/hb-common.h |    3 +++
- 3 files changed, 45 insertions(+), 0 deletions(-)
+ src/Makefile.am |  1 +
+ src/hb-common.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ src/hb-common.h |  3 +++
+ 3 files changed, 45 insertions(+)
 
 commit 4a9a5c0b06e8aa5d15327242609a7c766d3e0e94
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a9a5c0b06e8aa5d15327242609a7c766d3e0e94
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22415,8 +33977,8 @@ Date:   Fri May 21 13:33:46 2010 +0100
 
     Don't allocate bits for features not available
 
 
     Don't allocate bits for features not available
 
- src/hb-ot-shape.cc |  10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-ot-shape.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit e53d77142ac4ecbe38ab3235491fa93cb7ff16ab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e53d77142ac4ecbe38ab3235491fa93cb7ff16ab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22426,8 +33988,8 @@ Date:   Fri May 21 13:32:38 2010 +0100
 
     Patch from Jonathan Kew.
 
 
     Patch from Jonathan Kew.
 
- src/hb-ot-shape.cc |  31 +++++++++++++++++++++++++------
- 1 files changed, 25 insertions(+), 6 deletions(-)
+ src/hb-ot-shape.cc | 31 +++++++++++++++++++++++++------
+ 1 file changed, 25 insertions(+), 6 deletions(-)
 
 commit 4fa67f34ecc65056ce60a572213fbdae66e0423b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4fa67f34ecc65056ce60a572213fbdae66e0423b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22435,10 +33997,10 @@ Date: Fri May 21 13:29:12 2010 +0100
 
     Add Unicode 5.2 scripts
 
 
     Add Unicode 5.2 scripts
 
- src/hb-icu.c    |   29 ++++++++++++++++++++++++++++-
- src/hb-ot-tag.c  |   21 +++++++++++++++++++--
- src/hb-unicode.c |   19 ++++++++++++++++++-
- src/hb-unicode.h |   19 ++++++++++++++++++-
+ src/hb-icu.c    | 29 ++++++++++++++++++++++++++++-
+ src/hb-ot-tag.c  | 21 +++++++++++++++++++--
+ src/hb-unicode.c | 19 ++++++++++++++++++-
+ src/hb-unicode.h | 19 ++++++++++++++++++-
  4 files changed, 83 insertions(+), 5 deletions(-)
 
 commit ee1b322100a6bd575b999904592abbd9fed5587f
  4 files changed, 83 insertions(+), 5 deletions(-)
 
 commit ee1b322100a6bd575b999904592abbd9fed5587f
@@ -22447,8 +34009,8 @@ Date:   Fri May 21 12:55:57 2010 +0100
 
     Fix feature mask setting
 
 
     Fix feature mask setting
 
- src/hb-ot-shape.cc |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit b490fa343322f1b5abaf880abc073287c1f34132
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b490fa343322f1b5abaf880abc073287c1f34132
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22456,9 +34018,9 @@ Date:   Fri May 21 11:15:07 2010 +0100
 
     Add hb_ot_tag_to_script()
 
 
     Add hb_ot_tag_to_script()
 
- src/hb-ot-tag.c |   14 ++++++++++++++
- src/hb-ot-tag.h |    3 +++
- 2 files changed, 17 insertions(+), 0 deletions(-)
+ src/hb-ot-tag.c | 14 ++++++++++++++
+ src/hb-ot-tag.h |  3 +++
+ 2 files changed, 17 insertions(+)
 
 commit 50355309047765558ef8f5d60aefed42a7f954cc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 50355309047765558ef8f5d60aefed42a7f954cc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22466,12 +34028,12 @@ Date: Fri May 21 10:33:23 2010 +0100
 
     Add Python wrapper from Martin Hosken
 
 
     Add Python wrapper from Martin Hosken
 
- contrib/python/lib/harfbuzz.pyx   |  306
- +++++++++++++++++++++++++++++++++++++
- contrib/python/runpy             |    2 +
- contrib/python/scripts/hbtestfont |   35 +++++
- contrib/python/setup.py          |   24 +++
- 4 files changed, 367 insertions(+), 0 deletions(-)
+ contrib/python/lib/harfbuzz.pyx   | 306
+ ++++++++++++++++++++++++++++++++++++++
+ contrib/python/runpy             |   2 +
+ contrib/python/scripts/hbtestfont |  35 +++++
+ contrib/python/setup.py          |  24 +++
+ 4 files changed, 367 insertions(+)
 
 commit 280af1bddb958ff97cf7ce12fe7ec2b6352e61d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 280af1bddb958ff97cf7ce12fe7ec2b6352e61d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22479,10 +34041,10 @@ Date: Thu May 20 18:33:35 2010 +0100
 
     Let hb_face_get_table() return NULL if table not found
 
 
     Let hb_face_get_table() return NULL if table not found
 
- src/hb-font.cc                     |    2 +-
- src/hb-font.h              |    1 +
- src/hb-open-type-private.hh |   3 +++
- 3 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-font.cc                     | 2 +-
+ src/hb-font.h              | 1 +
+ src/hb-open-type-private.hh | 3 +++
+ 3 files changed, 5 insertions(+), 1 deletion(-)
 
 commit 1cdbfd944eecb58587461f57f037e47a44f39990
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1cdbfd944eecb58587461f57f037e47a44f39990
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22490,8 +34052,8 @@ Date:   Thu May 20 17:47:28 2010 +0100
 
     Fix alternate, again
 
 
     Fix alternate, again
 
- src/hb-ot-layout-gsub-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit fdca3d51603bd6bef6a4b0ee4a560f7dcd2f1d37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fdca3d51603bd6bef6a4b0ee4a560f7dcd2f1d37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22499,8 +34061,8 @@ Date:   Thu May 20 17:46:20 2010 +0100
 
     Fix alternate off-by-one
 
 
     Fix alternate off-by-one
 
- src/hb-ot-layout-gsub-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b634beb39e0a4fef7167a8af646f6b2d8cafe69b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b634beb39e0a4fef7167a8af646f6b2d8cafe69b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22508,10 +34070,10 @@ Date: Thu May 20 17:44:52 2010 +0100
 
     Fix delta scale, again...
 
 
     Fix delta scale, again...
 
- src/hb-ot-layout-common-private.hh |   8 ++++++++
- src/hb-ot-layout-gdef-private.hh   |   3 +--
- src/hb-ot-layout-gpos-private.hh   |  12 ++++++------
- src/hb-ot-layout-private.hh       |    2 +-
+ src/hb-ot-layout-common-private.hh |  8 ++++++++
+ src/hb-ot-layout-gdef-private.hh   |  3 +--
+ src/hb-ot-layout-gpos-private.hh   | 12 ++++++------
+ src/hb-ot-layout-private.hh       |  2 +-
  4 files changed, 16 insertions(+), 9 deletions(-)
 
 commit 40335d4533ac2b08121c9dc6003f3ebc5b44a67b
  4 files changed, 16 insertions(+), 9 deletions(-)
 
 commit 40335d4533ac2b08121c9dc6003f3ebc5b44a67b
@@ -22520,8 +34082,8 @@ Date:   Thu May 20 17:35:14 2010 +0100
 
     Remove unused operator
 
 
     Remove unused operator
 
- src/hb-ot-layout-common-private.hh |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit f7acd8df5146155b51d6f50aeb04f54f3030c1c3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f7acd8df5146155b51d6f50aeb04f54f3030c1c3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22531,10 +34093,10 @@ Date: Thu May 20 17:26:35 2010 +0100
 
     Kinda hand-wavy right now. Not tested.
 
 
     Kinda hand-wavy right now. Not tested.
 
- src/hb-ot-layout-gpos-private.hh     |   12 +++++++-----
- src/hb-ot-layout-gsub-private.hh     |   20 +++++++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |    1 +
- src/hb-private.h                    |   19 ++++++++++++++++++-
+ src/hb-ot-layout-gpos-private.hh     | 12 +++++++-----
+ src/hb-ot-layout-gsub-private.hh     | 20 +++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh |  1 +
+ src/hb-private.h                    | 19 ++++++++++++++++++-
  4 files changed, 35 insertions(+), 17 deletions(-)
 
 commit 750a2294553d252e28875b605fe61fd9d6696e0f
  4 files changed, 35 insertions(+), 17 deletions(-)
 
 commit 750a2294553d252e28875b605fe61fd9d6696e0f
@@ -22543,8 +34105,8 @@ Date:   Thu May 20 16:23:27 2010 +0100
 
     get_table() is allowed to return NULL.  Use that to simplify code
 
 
     get_table() is allowed to return NULL.  Use that to simplify code
 
- src/hb-font.cc |    2 +-
- src/hb-ft.cc  |    6 +++---
+ src/hb-font.cc | 2 +-
+ src/hb-ft.cc  | 6 +++---
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 99d9ef785f108df76f80a307eaa2784685ea86ba
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 99d9ef785f108df76f80a307eaa2784685ea86ba
@@ -22556,8 +34118,8 @@ Date:   Thu May 20 15:47:49 2010 +0100
 
     Fixes lack of head_table initialization in create_for_tables() also.
 
 
     Fixes lack of head_table initialization in create_for_tables() also.
 
- src/hb-font.cc |   35 ++++++++++++-----------------------
- 1 files changed, 12 insertions(+), 23 deletions(-)
+ src/hb-font.cc | 35 ++++++++++++-----------------------
+ 1 file changed, 12 insertions(+), 23 deletions(-)
 
 commit 6774463883978b00b4d8c719ed75edfc4537c77f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6774463883978b00b4d8c719ed75edfc4537c77f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22565,8 +34127,8 @@ Date:   Thu May 20 15:40:12 2010 +0100
 
     Apply user features to ranges!
 
 
     Apply user features to ranges!
 
- src/hb-ot-shape.cc |  23 ++++++++++++++++++++++-
- 1 files changed, 22 insertions(+), 1 deletions(-)
+ src/hb-ot-shape.cc | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
 
 commit 9b6023338530a2dbb8214eb4391ef3e8372f3892
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9b6023338530a2dbb8214eb4391ef3e8372f3892
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22574,8 +34136,8 @@ Date:   Thu May 20 15:31:12 2010 +0100
 
     Add _hb_bit_storage()
 
 
     Add _hb_bit_storage()
 
- src/hb-private.h |   35 ++++++++++++++++++++++-------------
- 1 files changed, 22 insertions(+), 13 deletions(-)
+ src/hb-private.h | 35 ++++++++++++++++++++++-------------
+ 1 file changed, 22 insertions(+), 13 deletions(-)
 
 commit 6b1b957f6d2955cbe4fa97e2659e033b3eaaf4d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b1b957f6d2955cbe4fa97e2659e033b3eaaf4d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22583,9 +34145,8 @@ Date:   Thu May 20 15:14:44 2010 +0100
 
     Add lookup_map
 
 
     Add lookup_map
 
- src/hb-ot-shape.cc |  48
- +++++++++++++++++++++++++++++++++---------------
- 1 files changed, 33 insertions(+), 15 deletions(-)
+ src/hb-ot-shape.cc | 48 +++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 33 insertions(+), 15 deletions(-)
 
 commit 60010a0c4d8efae5c61a0c9cf10cfe2c1860f41e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60010a0c4d8efae5c61a0c9cf10cfe2c1860f41e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22595,8 +34156,8 @@ Date:   Thu May 20 14:05:02 2010 +0100
 
     We plan to use the first bit to be always on.
 
 
     We plan to use the first bit to be always on.
 
- src/hb-ot-shape.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 009aad567863c05ee2ec4a3ee76fe0ee79c767bb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 009aad567863c05ee2ec4a3ee76fe0ee79c767bb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22611,9 +34172,9 @@ Date:   Thu May 20 14:00:57 2010 +0100
     Now both are in sync.  When calling hb_buffer_add_glyph() manually,
     the mask should be 1 instead of 0.
 
     Now both are in sync.  When calling hb_buffer_add_glyph() manually,
     the mask should be 1 instead of 0.
 
- src/hb-buffer.cc                |    2 +-
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-buffer.cc                | 2 +-
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  3 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 7f411dbfd9f8d5360c948531ff9f6c3998d1d897
  3 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 7f411dbfd9f8d5360c948531ff9f6c3998d1d897
@@ -22624,8 +34185,8 @@ Date:   Thu May 20 13:40:18 2010 +0100
 
     No ranges yet
 
 
     No ranges yet
 
- src/hb-ot-shape.cc |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-ot-shape.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 0db299ccad346d9ea5573ea8408b78d9997bd379
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0db299ccad346d9ea5573ea8408b78d9997bd379
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22633,8 +34194,8 @@ Date:   Thu May 20 13:30:09 2010 +0100
 
     Change hb_feature_t to keep tag/int instead of string
 
 
     Change hb_feature_t to keep tag/int instead of string
 
- src/hb-shape.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-shape.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 0a4399ca228d244e646abdb3487da0f13b228889
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0a4399ca228d244e646abdb3487da0f13b228889
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22651,18 +34212,18 @@ Date: Wed May 19 15:45:06 2010 -0400
     get_glyph_metrics
     and get_kerning callbacks work in.
 
     get_glyph_metrics
     and get_kerning callbacks work in.
 
- src/hb-common.h                 |    1 -
- src/hb-font-private.hh                  |    8 +++-----
- src/hb-font.cc                          |   12 ++++++------
- src/hb-font.h                   |   12 +++---------
- src/hb-ft.cc                    |    4 ++--
- src/hb-ot-layout-gdef-private.hh |    6 +++---
- src/hb-ot-layout-gpos-private.hh |   37
+ src/hb-common.h                 |  1 -
+ src/hb-font-private.hh                  |  8 +++-----
+ src/hb-font.cc                          | 12 ++++++------
+ src/hb-font.h                   | 12 +++---------
+ src/hb-ft.cc                    |  4 ++--
+ src/hb-ot-layout-gdef-private.hh |  6 +++---
+ src/hb-ot-layout-gpos-private.hh | 37
  +++++++++++++++++--------------------
  +++++++++++++++++--------------------
- src/hb-ot-layout-gsub-private.hh |    2 +-
- src/hb-ot-layout-private.hh     |   20 +++++++++++---------
- src/hb-ot-layout.cc             |   31 +++++++++++++++----------------
- src/hb-private.h                |    4 ----
+ src/hb-ot-layout-gsub-private.hh |  2 +-
+ src/hb-ot-layout-private.hh     | 20 +++++++++++---------
+ src/hb-ot-layout.cc             | 31 +++++++++++++++----------------
+ src/hb-private.h                |  4 ----
  11 files changed, 61 insertions(+), 76 deletions(-)
 
 commit cf5585cfa6cac6fdf627a99941299e76af5ae0f7
  11 files changed, 61 insertions(+), 76 deletions(-)
 
 commit cf5585cfa6cac6fdf627a99941299e76af5ae0f7
@@ -22671,13 +34232,13 @@ Date: Wed May 19 12:03:35 2010 -0400
 
     Add 'head' table
 
 
     Add 'head' table
 
- src/Makefile.am            |    1 +
- src/hb-font-private.hh      |   5 ++
- src/hb-font.cc                     |    9 +++
- src/hb-open-type-private.hh |   2 +-
- src/hb-ot-head-private.hh   | 128
- +++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 144 insertions(+), 1 deletions(-)
+ src/Makefile.am            |   1 +
+ src/hb-font-private.hh      |  5 ++
+ src/hb-font.cc                     |   9 ++++
+ src/hb-open-type-private.hh |  2 +-
+ src/hb-ot-head-private.hh   | 128
+ ++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 144 insertions(+), 1 deletion(-)
 
 commit e29caf3f943b2b6f4997f469f7274252c82f465e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e29caf3f943b2b6f4997f469f7274252c82f465e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22685,8 +34246,8 @@ Date:   Wed May 19 11:47:17 2010 -0400
 
     Add LONGDATETIME
 
 
     Add LONGDATETIME
 
- src/hb-open-type-private.hh |  15 +++++++++++++++
- 1 files changed, 15 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
 
 commit f415755fdf011d3fa3b9aad04c38f2255dd7acf8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f415755fdf011d3fa3b9aad04c38f2255dd7acf8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22694,9 +34255,9 @@ Date:   Mon May 17 15:14:14 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout.cc |  52
- ++++++++++++++++++++++++++------------------------
- 1 files changed, 27 insertions(+), 25 deletions(-)
+ src/hb-ot-layout.cc | 52
+ +++++++++++++++++++++++++++-------------------------
+ 1 file changed, 27 insertions(+), 25 deletions(-)
 
 commit 73af7756dc6d3961f176854246e5722baff101fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 73af7756dc6d3961f176854246e5722baff101fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22704,8 +34265,8 @@ Date:   Fri May 14 23:38:08 2010 -0400
 
     Indent
 
 
     Indent
 
- src/hb-ot-layout-gsub-private.hh |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 3567b87cce541dfb0af7caf024ec67c9d3c09214
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3567b87cce541dfb0af7caf024ec67c9d3c09214
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22713,9 +34274,9 @@ Date:   Fri May 14 23:28:44 2010 -0400
 
     Add an inline version of hb_buffer_ensure()
 
 
     Add an inline version of hb_buffer_ensure()
 
- src/hb-buffer.cc |  117
- +++++++++++++++++++++++++++++-------------------------
- 1 files changed, 63 insertions(+), 54 deletions(-)
+ src/hb-buffer.cc | 117
+ ++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 63 insertions(+), 54 deletions(-)
 
 commit a6a79df5fe2ed2cd307e7a991346faee164e70d9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a6a79df5fe2ed2cd307e7a991346faee164e70d9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22723,10 +34284,10 @@ Date: Fri May 14 23:20:16 2010 -0400
 
     Handle malloc failture in the buffer
 
 
     Handle malloc failture in the buffer
 
- src/hb-buffer-private.hh |    5 ++-
- src/hb-buffer.cc        |   71
- ++++++++++++++++++++++++++++------------------
- src/hb-buffer.h         |    2 +-
+ src/hb-buffer-private.hh |  5 ++--
+ src/hb-buffer.cc        | 71
+ +++++++++++++++++++++++++++++-------------------
+ src/hb-buffer.h         |  2 +-
  3 files changed, 47 insertions(+), 31 deletions(-)
 
 commit ca54a12658510f9aa0b2db82f20a8fac230d6bb6
  3 files changed, 47 insertions(+), 31 deletions(-)
 
 commit ca54a12658510f9aa0b2db82f20a8fac230d6bb6
@@ -22735,9 +34296,9 @@ Date:   Fri May 14 22:25:42 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-shape.cc |   60
- +++++++++++++++++++++++-------------------------------
- 1 files changed, 26 insertions(+), 34 deletions(-)
+ src/hb-shape.cc | 60
+ +++++++++++++++++++++++++--------------------------------
+ 1 file changed, 26 insertions(+), 34 deletions(-)
 
 commit 910a33fe8457a8e13f7eb77fc92fa59c31f5e8fd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 910a33fe8457a8e13f7eb77fc92fa59c31f5e8fd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22745,8 +34306,8 @@ Date:   Fri May 14 22:13:38 2010 -0400
 
     Update buffer docs
 
 
     Update buffer docs
 
- src/hb-buffer-private.hh |   13 +++++++------
- src/hb-buffer.cc        |   16 ++++++++--------
+ src/hb-buffer-private.hh | 13 +++++++------
+ src/hb-buffer.cc        | 16 ++++++++--------
  2 files changed, 15 insertions(+), 14 deletions(-)
 
 commit 36b73c80df91e96492357c6da945e081e9046a93
  2 files changed, 15 insertions(+), 14 deletions(-)
 
 commit 36b73c80df91e96492357c6da945e081e9046a93
@@ -22755,13 +34316,13 @@ Date: Fri May 14 22:10:39 2010 -0400
 
     Shortening buffer accessors: rename buffer->in_pos to buffer->i
 
 
     Shortening buffer accessors: rename buffer->in_pos to buffer->i
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |   52 +++++++++---------
- src/hb-ot-layout-gpos-private.hh     |   94
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   48 +++++++++---------
- src/hb-ot-layout-gsubgpos-private.hh |   46 ++++++++--------
- src/hb-shape.cc                     |   40 +++++++-------
+ src/hb-buffer-private.hh            |  2 +-
+ src/hb-buffer.cc                    | 52 ++++++++++----------
+ src/hb-ot-layout-gpos-private.hh     | 94
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 48 +++++++++---------
+ src/hb-ot-layout-gsubgpos-private.hh | 46 +++++++++---------
+ src/hb-shape.cc                     | 40 +++++++--------
  6 files changed, 141 insertions(+), 141 deletions(-)
 
 commit 29427c5c51ac70aca53ed523fa5ddb3de4355fb0
  6 files changed, 141 insertions(+), 141 deletions(-)
 
 commit 29427c5c51ac70aca53ed523fa5ddb3de4355fb0
@@ -22771,11 +34332,11 @@ Date: Fri May 14 22:08:22 2010 -0400
     Shortening buffer accessors: rename buffer->out_length to
     buffer->out_len
 
     Shortening buffer accessors: rename buffer->out_length to
     buffer->out_len
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |   52
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++--
+ src/hb-buffer-private.hh            |  2 +-
+ src/hb-buffer.cc                    | 52
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  6 ++---
  4 files changed, 31 insertions(+), 31 deletions(-)
 
 commit 6960350be97f24e97140391025b56369c393a3df
  4 files changed, 31 insertions(+), 31 deletions(-)
 
 commit 6960350be97f24e97140391025b56369c393a3df
@@ -22784,12 +34345,12 @@ Date: Fri May 14 22:07:46 2010 -0400
 
     Shortening buffer accessors: rename buffer->in_length to buffer->len
 
 
     Shortening buffer accessors: rename buffer->in_length to buffer->len
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |   26 +++++++++++++-------------
- src/hb-ot-layout-gpos-private.hh     |    8 ++++----
- src/hb-ot-layout-gsub-private.hh     |    8 ++++----
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++----
- src/hb-shape.cc                     |   12 ++++++------
+ src/hb-buffer-private.hh            |  2 +-
+ src/hb-buffer.cc                    | 26 +++++++++++++-------------
+ src/hb-ot-layout-gpos-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsub-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsubgpos-private.hh |  8 ++++----
+ src/hb-shape.cc                     | 12 ++++++------
  6 files changed, 32 insertions(+), 32 deletions(-)
 
 commit 1b621823f3e31b48c80cc8b0691dfa873ba086cd
  6 files changed, 32 insertions(+), 32 deletions(-)
 
 commit 1b621823f3e31b48c80cc8b0691dfa873ba086cd
@@ -22798,10 +34359,10 @@ Date: Fri May 14 22:05:53 2010 -0400
 
     Shortening buffer accessors: rename buffer->positions to buffer->pos
 
 
     Shortening buffer accessors: rename buffer->positions to buffer->pos
 
- src/hb-buffer-private.hh        |    4 ++--
- src/hb-buffer.cc                |   32 ++++++++++++++++----------------
- src/hb-ot-layout-gpos-private.hh |   26 +++++++++++++-------------
- src/hb-shape.cc                 |   10 +++++-----
+ src/hb-buffer-private.hh        |  4 ++--
+ src/hb-buffer.cc                | 32 ++++++++++++++++----------------
+ src/hb-ot-layout-gpos-private.hh | 26 +++++++++++++-------------
+ src/hb-shape.cc                 | 10 +++++-----
  4 files changed, 36 insertions(+), 36 deletions(-)
 
 commit 9d5e26df0877aa5b187764ba09bd7bf221e92968
  4 files changed, 36 insertions(+), 36 deletions(-)
 
 commit 9d5e26df0877aa5b187764ba09bd7bf221e92968
@@ -22811,10 +34372,10 @@ Date: Fri May 14 22:03:11 2010 -0400
     Shortening buffer accessors: rename buffer->out_string to
     buffer->out_info
 
     Shortening buffer accessors: rename buffer->out_string to
     buffer->out_info
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |   56
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsubgpos-private.hh |    4 +-
+ src/hb-buffer-private.hh            |  2 +-
+ src/hb-buffer.cc                    | 56
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  4 +--
  3 files changed, 31 insertions(+), 31 deletions(-)
 
 commit 7e7007a1c9bf2c07a8369752126ece8fa6164248
  3 files changed, 31 insertions(+), 31 deletions(-)
 
 commit 7e7007a1c9bf2c07a8369752126ece8fa6164248
@@ -22823,13 +34384,13 @@ Date: Fri May 14 22:02:37 2010 -0400
 
     Shortening buffer accessors: rename buffer->in_string to buffer->info
 
 
     Shortening buffer accessors: rename buffer->in_string to buffer->info
 
- src/hb-buffer-private.hh            |    2 +-
- src/hb-buffer.cc                    |   82
- +++++++++++++++++-----------------
- src/hb-ot-layout-gpos-private.hh     |   58 ++++++++++++------------
- src/hb-ot-layout-gsub-private.hh     |   30 ++++++------
- src/hb-ot-layout-gsubgpos-private.hh |   26 +++++-----
- src/hb-shape.cc                     |   18 ++++----
+ src/hb-buffer-private.hh            |  2 +-
+ src/hb-buffer.cc                    | 82
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gpos-private.hh     | 58 ++++++++++++-------------
+ src/hb-ot-layout-gsub-private.hh     | 30 ++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 26 ++++++------
+ src/hb-shape.cc                     | 18 ++++----
  6 files changed, 108 insertions(+), 108 deletions(-)
 
 commit 8e6b6bb2932946ebc7b01c3abf575b654c741e20
  6 files changed, 108 insertions(+), 108 deletions(-)
 
 commit 8e6b6bb2932946ebc7b01c3abf575b654c741e20
@@ -22838,11 +34399,11 @@ Date: Fri May 14 21:58:22 2010 -0400
 
     Merge buffer->out_pos and buffer->out_length
 
 
     Merge buffer->out_pos and buffer->out_length
 
- src/hb-buffer-private.hh            |    1 -
- src/hb-buffer.cc                    |   48
- ++++++++++++++-------------------
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++--
+ src/hb-buffer-private.hh            |  1 -
+ src/hb-buffer.cc                    | 48
+ +++++++++++++++---------------------
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  6 ++---
  4 files changed, 24 insertions(+), 33 deletions(-)
 
 commit 22f668eb9ad5f62d9fcd2e0c826ea78977687e5c
  4 files changed, 24 insertions(+), 33 deletions(-)
 
 commit 22f668eb9ad5f62d9fcd2e0c826ea78977687e5c
@@ -22851,11 +34412,11 @@ Date: Fri May 14 21:41:04 2010 -0400
 
     Remove the unused BUFFER macro
 
 
     Remove the unused BUFFER macro
 
- src/hb-buffer-private.hh            |    6 ------
- src/hb-ot-layout-gpos-private.hh     |    6 ------
- src/hb-ot-layout-gsub-private.hh     |    6 ------
- src/hb-ot-layout-gsubgpos-private.hh |    5 -----
- 4 files changed, 0 insertions(+), 23 deletions(-)
+ src/hb-buffer-private.hh            | 6 ------
+ src/hb-ot-layout-gpos-private.hh     | 6 ------
+ src/hb-ot-layout-gsub-private.hh     | 6 ------
+ src/hb-ot-layout-gsubgpos-private.hh | 5 -----
+ 4 files changed, 23 deletions(-)
 
 commit 7e53ebe478597778c25c197ff9f0cb379f1d0043
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7e53ebe478597778c25c197ff9f0cb379f1d0043
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22863,11 +34424,11 @@ Date: Fri May 14 21:38:13 2010 -0400
 
     Remove the IN_CURGLYPH() macro
 
 
     Remove the IN_CURGLYPH() macro
 
- src/hb-buffer-private.hh            |    3 ---
- src/hb-ot-layout-gpos-private.hh     |   24 ++++++++++++------------
- src/hb-ot-layout-gsub-private.hh     |   16 ++++++++--------
- src/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++--------
- src/hb-shape.cc                     |   14 +++++++-------
+ src/hb-buffer-private.hh            |  3 ---
+ src/hb-ot-layout-gpos-private.hh     | 24 ++++++++++++------------
+ src/hb-ot-layout-gsub-private.hh     | 16 ++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++--------
+ src/hb-shape.cc                     | 14 +++++++-------
  5 files changed, 35 insertions(+), 38 deletions(-)
 
 commit d784da1923ff2ca093f8b0210449731d376b7513
  5 files changed, 35 insertions(+), 38 deletions(-)
 
 commit d784da1923ff2ca093f8b0210449731d376b7513
@@ -22876,10 +34437,10 @@ Date: Fri May 14 21:37:18 2010 -0400
 
     Remove the IN_CURINFO() macro
 
 
     Remove the IN_CURINFO() macro
 
- src/hb-buffer-private.hh            |    1 -
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-buffer-private.hh            | 1 -
+ src/hb-ot-layout-gpos-private.hh     | 2 +-
+ src/hb-ot-layout-gsub-private.hh     | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  4 files changed, 4 insertions(+), 5 deletions(-)
 
 commit 281f59b4fb16f7c73767eb042a91f70f4c109b3a
  4 files changed, 4 insertions(+), 5 deletions(-)
 
 commit 281f59b4fb16f7c73767eb042a91f70f4c109b3a
@@ -22888,11 +34449,11 @@ Date: Fri May 14 21:34:22 2010 -0400
 
     Remove IN_INFO() and IN_NEXTGLYPH() macros
 
 
     Remove IN_INFO() and IN_NEXTGLYPH() macros
 
- src/hb-buffer-private.hh            |    2 --
- src/hb-ot-layout-gpos-private.hh     |   10 +++++-----
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- src/hb-shape.cc                     |    4 ++--
+ src/hb-buffer-private.hh            |  2 --
+ src/hb-ot-layout-gpos-private.hh     | 10 +++++-----
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++--
+ src/hb-shape.cc                     |  4 ++--
  5 files changed, 10 insertions(+), 12 deletions(-)
 
 commit 6e489cdf7623ac627d06d59a80ecea03ca97dc1b
  5 files changed, 10 insertions(+), 12 deletions(-)
 
 commit 6e489cdf7623ac627d06d59a80ecea03ca97dc1b
@@ -22901,11 +34462,11 @@ Date: Fri May 14 21:07:35 2010 -0400
 
     Remove the IN_GLYPH() macro
 
 
     Remove the IN_GLYPH() macro
 
- src/hb-buffer-private.hh            |    1 -
- src/hb-ot-layout-gpos-private.hh     |   12 ++++++------
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- src/hb-shape.cc                     |    2 +-
+ src/hb-buffer-private.hh            |  1 -
+ src/hb-ot-layout-gpos-private.hh     | 12 ++++++------
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++--
+ src/hb-shape.cc                     |  2 +-
  5 files changed, 10 insertions(+), 11 deletions(-)
 
 commit 01feb74c78a3a302fa3472a0be7b2a1d52fd1ba3
  5 files changed, 10 insertions(+), 11 deletions(-)
 
 commit 01feb74c78a3a302fa3472a0be7b2a1d52fd1ba3
@@ -22914,9 +34475,9 @@ Date:   Fri May 14 21:00:08 2010 -0400
 
     Remove the IN_CLUSTER() macro
 
 
     Remove the IN_CLUSTER() macro
 
- src/hb-buffer-private.hh |    1 -
- src/hb-shape.cc         |    2 +-
- 2 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-buffer-private.hh | 1 -
+ src/hb-shape.cc         | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
 
 commit d63a1e089acad9ab9f80addd936d36b6d38fb46a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d63a1e089acad9ab9f80addd936d36b6d38fb46a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22924,9 +34485,9 @@ Date:   Fri May 14 20:30:07 2010 -0400
 
     Remove the IN_MASK() macro
 
 
     Remove the IN_MASK() macro
 
- src/hb-buffer-private.hh        |    1 -
- src/hb-ot-layout-gpos-private.hh |    2 +-
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-buffer-private.hh        | 1 -
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  3 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 89e2834dabd2d17f2823c51fe3a7fcadeaba7a59
  3 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 89e2834dabd2d17f2823c51fe3a7fcadeaba7a59
@@ -22935,9 +34496,9 @@ Date:   Fri May 14 20:25:55 2010 -0400
 
     Remove the IN_LIGID() macro
 
 
     Remove the IN_LIGID() macro
 
- src/hb-buffer-private.hh        |    1 -
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-ot-layout-gsub-private.hh |    2 +-
+ src/hb-buffer-private.hh        | 1 -
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ src/hb-ot-layout-gsub-private.hh | 2 +-
  3 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 4a871041f4718834afa312ed17cdd157603468b7
  3 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 4a871041f4718834afa312ed17cdd157603468b7
@@ -22946,9 +34507,9 @@ Date:   Fri May 14 20:25:04 2010 -0400
 
     Remove IN_COMPONENT() macro
 
 
     Remove IN_COMPONENT() macro
 
- src/hb-buffer-private.hh        |    1 -
- src/hb-ot-layout-gpos-private.hh |    8 ++++----
- src/hb-ot-layout-gsub-private.hh |    2 +-
+ src/hb-buffer-private.hh        | 1 -
+ src/hb-ot-layout-gpos-private.hh | 8 ++++----
+ src/hb-ot-layout-gsub-private.hh | 2 +-
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 27da6dd89a359f7ef340c646c4cb79373782261d
  3 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 27da6dd89a359f7ef340c646c4cb79373782261d
@@ -22957,8 +34518,8 @@ Date:   Fri May 14 20:17:50 2010 -0400
 
     Remove OUT_GLYPH() and OUT_INFO() macros
 
 
     Remove OUT_GLYPH() and OUT_INFO() macros
 
- src/hb-buffer-private.hh            |    2 --
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-buffer-private.hh            | 2 --
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
  2 files changed, 2 insertions(+), 4 deletions(-)
 
 commit cc6ae7ff91eeb93bef153f331ed02b500062f90e
  2 files changed, 2 insertions(+), 4 deletions(-)
 
 commit cc6ae7ff91eeb93bef153f331ed02b500062f90e
@@ -22967,8 +34528,8 @@ Date:   Fri May 14 20:09:48 2010 -0400
 
     Fix lookahead matching.  Oops!
 
 
     Fix lookahead matching.  Oops!
 
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3109375b849f340b4807724218010c53dea58082
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3109375b849f340b4807724218010c53dea58082
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -22976,10 +34537,10 @@ Date: Fri May 14 19:55:27 2010 -0400
 
     Remove POSITION() and CURPOSITION() macros
 
 
     Remove POSITION() and CURPOSITION() macros
 
- src/hb-buffer-private.hh        |    2 -
- src/hb-ot-layout-gpos-private.hh |   54
- +++++++++++++++++++-------------------
- src/hb-shape.cc                 |   10 +++---
+ src/hb-buffer-private.hh        |  2 --
+ src/hb-ot-layout-gpos-private.hh | 54
+ ++++++++++++++++++++--------------------
+ src/hb-shape.cc                 | 10 ++++----
  3 files changed, 32 insertions(+), 34 deletions(-)
 
 commit d7cfb3b2d1dd2e9fdae2b3e540bbe313660895e8
  3 files changed, 32 insertions(+), 34 deletions(-)
 
 commit d7cfb3b2d1dd2e9fdae2b3e540bbe313660895e8
@@ -22988,15 +34549,15 @@ Date: Thu May 13 14:18:49 2010 -0400
 
     s/\<context\>/c/g
 
 
     s/\<context\>/c/g
 
- src/hb-open-file-private.hh         |   28 +-
- src/hb-open-type-private.hh         |  100 ++++----
- src/hb-ot-layout-common-private.hh   |   84 +++---
- src/hb-ot-layout-gdef-private.hh     |   98 ++++----
- src/hb-ot-layout-gpos-private.hh     |  460
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |  306 +++++++++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |  258 ++++++++++----------
- src/hb-ot-layout.cc                 |   24 +-
+ src/hb-open-file-private.hh         |  28 +--
+ src/hb-open-type-private.hh         | 100 ++++----
+ src/hb-ot-layout-common-private.hh   |  84 +++----
+ src/hb-ot-layout-gdef-private.hh     |  98 ++++----
+ src/hb-ot-layout-gpos-private.hh     | 460
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 306 +++++++++++------------
+ src/hb-ot-layout-gsubgpos-private.hh | 258 ++++++++++----------
+ src/hb-ot-layout.cc                 |  24 +-
  8 files changed, 679 insertions(+), 679 deletions(-)
 
 commit f679635893eebc13402c5ee51a6f106eed0c76be
  8 files changed, 679 insertions(+), 679 deletions(-)
 
 commit f679635893eebc13402c5ee51a6f106eed0c76be
@@ -23005,8 +34566,8 @@ Date:   Thu May 13 13:34:17 2010 -0400
 
     Don't use variable-length-arrays
 
 
     Don't use variable-length-arrays
 
- src/hb-open-type-private.hh |  11 +++++++++--
- 1 files changed, 9 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
 
 commit 72071a8afaba2952fe42be093024ae9dbd37f233
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 72071a8afaba2952fe42be093024ae9dbd37f233
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23014,8 +34575,8 @@ Date:   Thu May 13 13:22:24 2010 -0400
 
     Add a few more buffer convenience methods
 
 
     Add a few more buffer convenience methods
 
- src/hb-buffer-private.hh        |   12 ++++++++++++
- src/hb-ot-layout-gsub-private.hh |   20 ++++++++++----------
+ src/hb-buffer-private.hh        | 12 ++++++++++++
+ src/hb-ot-layout-gsub-private.hh | 20 ++++++++++----------
  2 files changed, 22 insertions(+), 10 deletions(-)
 
 commit 11a81612e51c598e857507c268312206423cbfca
  2 files changed, 22 insertions(+), 10 deletions(-)
 
 commit 11a81612e51c598e857507c268312206423cbfca
@@ -23024,8 +34585,8 @@ Date:   Thu May 13 00:01:40 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-unicode.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-unicode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3f93518a634cb1852bf050877db23b9b9203ad03
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3f93518a634cb1852bf050877db23b9b9203ad03
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23033,8 +34594,8 @@ Date:   Wed May 12 23:48:40 2010 -0400
 
     Improve check for internal symbols
 
 
     Improve check for internal symbols
 
- src/check-internal-symbols.sh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/check-internal-symbols.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 357d0f29c431b842179ee4b56c21bcc402178ce7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 357d0f29c431b842179ee4b56c21bcc402178ce7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23044,10 +34605,10 @@ Date: Wed May 12 23:46:16 2010 -0400
 
     So we can apply it to class methods also.  Not sure if that works!
 
 
     So we can apply it to class methods also.  Not sure if that works!
 
- src/hb-blob-private.h   |    2 +-
- src/hb-font-private.hh   |    4 ++--
- src/hb-private.h        |    2 +-
- src/hb-unicode-private.h |    3 +--
+ src/hb-blob-private.h   | 2 +-
+ src/hb-font-private.hh   | 4 ++--
+ src/hb-private.h        | 2 +-
+ src/hb-unicode-private.h | 3 +--
  4 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 1d5e78013696b10751d8a35027619e81978e1312
  4 files changed, 5 insertions(+), 6 deletions(-)
 
 commit 1d5e78013696b10751d8a35027619e81978e1312
@@ -23056,10 +34617,10 @@ Date: Wed May 12 23:43:00 2010 -0400
 
     Add a few other buffer methods
 
 
     Add a few other buffer methods
 
- src/hb-buffer-private.hh            |   11 +++++++----
- src/hb-buffer.cc                    |    7 -------
- src/hb-ot-layout-gsub-private.hh     |   10 +++++-----
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-buffer-private.hh            | 11 +++++++----
+ src/hb-buffer.cc                    |  7 -------
+ src/hb-ot-layout-gsub-private.hh     | 10 +++++-----
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++--
  4 files changed, 14 insertions(+), 18 deletions(-)
 
 commit d0316a81f59a4e814b0af78797d915d7ce04d119
  4 files changed, 14 insertions(+), 18 deletions(-)
 
 commit d0316a81f59a4e814b0af78797d915d7ce04d119
@@ -23068,9 +34629,9 @@ Date:   Wed May 12 23:34:52 2010 -0400
 
     Add buffer->swap()
 
 
     Add buffer->swap()
 
- src/hb-buffer-private.hh        |   68
- ++++++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh |    2 +-
+ src/hb-buffer-private.hh        | 68
+ ++++++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh |  2 +-
  2 files changed, 38 insertions(+), 32 deletions(-)
 
 commit 3b649a38b5772dd7aba7f07ff7698a7f427f421f
  2 files changed, 38 insertions(+), 32 deletions(-)
 
 commit 3b649a38b5772dd7aba7f07ff7698a7f427f421f
@@ -23079,9 +34640,9 @@ Date:   Wed May 12 23:28:38 2010 -0400
 
     Add check for internal symbols
 
 
     Add check for internal symbols
 
- src/Makefile.am              |    3 ++-
- src/check-internal-symbols.sh |   28 ++++++++++++++++++++++++++++
- 2 files changed, 30 insertions(+), 1 deletions(-)
+ src/Makefile.am              |  3 ++-
+ src/check-internal-symbols.sh | 28 ++++++++++++++++++++++++++++
+ 2 files changed, 30 insertions(+), 1 deletion(-)
 
 commit eee8598d75d3af692d9ececf7e8ac458e892ba9e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eee8598d75d3af692d9ececf7e8ac458e892ba9e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23089,8 +34650,8 @@ Date:   Wed May 12 23:22:55 2010 -0400
 
     Hide internal symbols
 
 
     Hide internal symbols
 
- src/hb-ot-layout-private.hh |   4 ++--
- src/hb-private.h           |    8 ++++----
+ src/hb-ot-layout-private.hh | 4 ++--
+ src/hb-private.h           | 8 ++++----
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 8951fc2c82f2db4865da6d9e303fce419b6363bb
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 8951fc2c82f2db4865da6d9e303fce419b6363bb
@@ -23099,9 +34660,9 @@ Date:   Wed May 12 23:13:39 2010 -0400
 
     Add buffer->allocate_lig_id()
 
 
     Add buffer->allocate_lig_id()
 
- src/hb-buffer-private.hh        |    5 ++---
- src/hb-buffer.cc                |    6 ------
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-buffer-private.hh        | 5 ++---
+ src/hb-buffer.cc                | 6 ------
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  3 files changed, 4 insertions(+), 11 deletions(-)
 
 commit 1ce4dc95dbb28842085342aea4f9d12cbe9671a9
  3 files changed, 4 insertions(+), 11 deletions(-)
 
 commit 1ce4dc95dbb28842085342aea4f9d12cbe9671a9
@@ -23113,8 +34674,8 @@ Date:   Wed May 12 18:29:25 2010 -0400
     We already depend on the exact values of the direction enum
     in HB_DIRECTION_REVERSE(), so we may as well use that.
 
     We already depend on the exact values of the direction enum
     in HB_DIRECTION_REVERSE(), so we may as well use that.
 
- src/hb-common.h |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-common.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 22da7fd94d6318c52df69d70470a85464ffc533d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 22da7fd94d6318c52df69d70470a85464ffc533d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23124,31 +34685,31 @@ Date: Wed May 12 18:23:21 2010 -0400
 
     In anticipation for buffer revamp coming.
 
 
     In anticipation for buffer revamp coming.
 
- src/Makefile.am                     |   16 +-
- src/hb-buffer-private.h             |  155 --------
- src/hb-buffer-private.hh            |  155 ++++++++
- src/hb-buffer.c                     |  650
- ----------------------------------
- src/hb-buffer.cc                    |  650
- ++++++++++++++++++++++++++++++++++
- src/hb-common.h                     |    1 +
- src/hb-font-private.h               |   92 -----
- src/hb-font-private.hh                      |   92 +++++
- src/hb-font.cc                              |    4 +-
- src/hb-ft.c                         |  240 -------------
- src/hb-ft.cc                        |  240 +++++++++++++
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-ot-layout-private.h          |  121 -------
- src/hb-ot-layout-private.hh         |  121 +++++++
- src/hb-ot-layout.cc                 |    2 +-
- src/hb-ot-shape-private.h           |   53 ---
- src/hb-ot-shape-private.hh          |   53 +++
- src/hb-ot-shape.c                   |  164 ---------
- src/hb-ot-shape.cc                  |  164 +++++++++
- src/hb-shape.c                              |  258 --------------
- src/hb-shape.cc                     |  258 ++++++++++++++
+ src/Makefile.am                     |  16 +-
+ src/hb-buffer-private.h             | 155 ---------
+ src/hb-buffer-private.hh            | 155 +++++++++
+ src/hb-buffer.c                     | 650
+ -----------------------------------
+ src/hb-buffer.cc                    | 650
+ +++++++++++++++++++++++++++++++++++
+ src/hb-common.h                     |   1 +
+ src/hb-font-private.h               |  92 -----
+ src/hb-font-private.hh                      |  92 +++++
+ src/hb-font.cc                              |   4 +-
+ src/hb-ft.c                         | 240 -------------
+ src/hb-ft.cc                        | 240 +++++++++++++
+ src/hb-ot-layout-common-private.hh   |   2 +-
+ src/hb-ot-layout-gdef-private.hh     |   2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |   2 +-
+ src/hb-ot-layout-private.h          | 121 -------
+ src/hb-ot-layout-private.hh         | 121 +++++++
+ src/hb-ot-layout.cc                 |   2 +-
+ src/hb-ot-shape-private.h           |  53 ---
+ src/hb-ot-shape-private.hh          |  53 +++
+ src/hb-ot-shape.c                   | 164 ---------
+ src/hb-ot-shape.cc                  | 164 +++++++++
+ src/hb-shape.c                              | 258 --------------
+ src/hb-shape.cc                     | 258 ++++++++++++++
  23 files changed, 1748 insertions(+), 1747 deletions(-)
 
 commit c3df649f258b334e93c7626a43cd8ebfbd5a610e
  23 files changed, 1748 insertions(+), 1747 deletions(-)
 
 commit c3df649f258b334e93c7626a43cd8ebfbd5a610e
@@ -23157,8 +34718,8 @@ Date:   Tue May 11 13:54:12 2010 -0400
 
     Fix comment
 
 
     Fix comment
 
- src/hb-buffer-private.h |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-buffer-private.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 281f08954a1d96d7807153c25073b8eb7630703b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 281f08954a1d96d7807153c25073b8eb7630703b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23166,8 +34727,8 @@ Date:   Tue May 11 11:37:58 2010 -0400
 
     Remove obsolete friend
 
 
     Remove obsolete friend
 
- src/hb-ot-layout-gpos-private.hh |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 70c9bfd5646a4a55a7f43c0cf0b5ac5993615d5b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 70c9bfd5646a4a55a7f43c0cf0b5ac5993615d5b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23175,9 +34736,9 @@ Date:   Tue May 11 00:23:50 2010 -0400
 
     Simplify PairSet
 
 
     Simplify PairSet
 
- src/hb-ot-layout-gpos-private.hh |  101
- ++++++++++++++++++++------------------
- 1 files changed, 54 insertions(+), 47 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 101
+ +++++++++++++++++++++------------------
+ 1 file changed, 54 insertions(+), 47 deletions(-)
 
 commit 97e7f8f305c47caf2968a9da3b8407825547286d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 97e7f8f305c47caf2968a9da3b8407825547286d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23185,8 +34746,8 @@ Date:   Tue May 11 00:11:36 2010 -0400
 
     Add CONST_FUNC annotation
 
 
     Add CONST_FUNC annotation
 
- src/hb-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 494d28ad988e505c1c45cc35a7ec6b880cfec5fc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 494d28ad988e505c1c45cc35a7ec6b880cfec5fc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23196,8 +34757,8 @@ Date:   Mon May 10 23:50:07 2010 -0400
 
     Shrinks .text by 1%!
 
 
     Shrinks .text by 1%!
 
- src/hb-private.h |   10 +---------
- 1 files changed, 1 insertions(+), 9 deletions(-)
+ src/hb-private.h | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
 
 commit 75651b20871047d3ec17f4221794b8ef5d60e14b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 75651b20871047d3ec17f4221794b8ef5d60e14b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23205,8 +34766,8 @@ Date:   Mon May 10 23:44:51 2010 -0400
 
     Fix warnings
 
 
     Fix warnings
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4c20d8c057738b66150a88472714690e137884f8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c20d8c057738b66150a88472714690e137884f8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23216,8 +34777,8 @@ Date:   Mon May 10 23:27:54 2010 -0400
 
     Shrinks the code size by some 2% even.
 
 
     Shrinks the code size by some 2% even.
 
- src/hb-open-file-private.hh |   4 ++--
- src/hb-open-type-private.hh |  20 ++++++++++----------
+ src/hb-open-file-private.hh | 4 ++--
+ src/hb-open-type-private.hh | 20 ++++++++++----------
  2 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 69cb28bc13d236a01acf40da62e345c7e83ccba7
  2 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 69cb28bc13d236a01acf40da62e345c7e83ccba7
@@ -23226,8 +34787,8 @@ Date:   Mon May 10 23:13:08 2010 -0400
 
     Remove a few likely()'s
 
 
     Remove a few likely()'s
 
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gpos-private.hh   |   8 ++++----
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-ot-layout-gpos-private.hh   | 8 ++++----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 24552ecf92982fe561dc47d5102fcf1a7b337c70
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 24552ecf92982fe561dc47d5102fcf1a7b337c70
@@ -23236,9 +34797,9 @@ Date:   Mon May 10 23:08:41 2010 -0400
 
     Remove excess sub_format sanitize
 
 
     Remove excess sub_format sanitize
 
- src/hb-ot-layout-gpos-private.hh |    1 -
- src/hb-ot-layout-gsub-private.hh |    1 -
- 2 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 1 -
+ src/hb-ot-layout-gsub-private.hh | 1 -
+ 2 files changed, 2 deletions(-)
 
 commit f7adc5e9be352ac31ad3ab847abb6fceb239aa12
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f7adc5e9be352ac31ad3ab847abb6fceb239aa12
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23246,8 +34807,8 @@ Date:   Mon May 10 22:41:50 2010 -0400
 
     Shrink NullPool now that we have accurate size tracking
 
 
     Shrink NullPool now that we have accurate size tracking
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3d44fb6f15177dc6518166e435597936b044acc1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3d44fb6f15177dc6518166e435597936b044acc1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23255,8 +34816,8 @@ Date:   Mon May 10 22:22:54 2010 -0400
 
     Fix warning
 
 
     Fix warning
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b5db4f1e4eefa266a71a28b5496f47ff9d1a81e8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b5db4f1e4eefa266a71a28b5496f47ff9d1a81e8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23264,11 +34825,11 @@ Date: Mon May 10 22:22:22 2010 -0400
 
     Clean up NO_INDEX
 
 
     Clean up NO_INDEX
 
- src/hb-open-file-private.hh       |    2 +-
- src/hb-open-type-private.hh       |   10 ++++++----
- src/hb-ot-layout-common-private.hh |  17 ++++-------------
- src/hb-ot-layout.cc               |    8 ++++----
- src/main.cc                       |    2 +-
+ src/hb-open-file-private.hh       |  2 +-
+ src/hb-open-type-private.hh       | 10 ++++++----
+ src/hb-ot-layout-common-private.hh | 17 ++++-------------
+ src/hb-ot-layout.cc               |  8 ++++----
+ src/main.cc                       |  2 +-
  5 files changed, 16 insertions(+), 23 deletions(-)
 
 commit fe9bc070e1d545b0df2ea548eebf5a1fc4c92ddc
  5 files changed, 16 insertions(+), 23 deletions(-)
 
 commit fe9bc070e1d545b0df2ea548eebf5a1fc4c92ddc
@@ -23279,8 +34840,8 @@ Date:   Mon May 10 21:39:24 2010 -0400
 
     As reported by John Daggett.
 
 
     As reported by John Daggett.
 
- src/hb-ot-layout-gpos-private.hh |   14 +++++++-------
- src/hb-ot-layout-gsub-private.hh |   14 +++++++-------
+ src/hb-ot-layout-gpos-private.hh | 14 +++++++-------
+ src/hb-ot-layout-gsub-private.hh | 14 +++++++-------
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit 458ecbb60bb7e8e32aca62a562586d921d5396aa
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit 458ecbb60bb7e8e32aca62a562586d921d5396aa
@@ -23289,8 +34850,8 @@ Date:   Mon May 10 21:11:35 2010 -0400
 
     Fix tracing order
 
 
     Fix tracing order
 
- src/hb-open-type-private.hh         |   14 +++++---------
- src/hb-ot-layout-gsubgpos-private.hh |    3 +--
+ src/hb-open-type-private.hh         | 14 +++++---------
+ src/hb-ot-layout-gsubgpos-private.hh |  3 +--
  2 files changed, 6 insertions(+), 11 deletions(-)
 
 commit 48146e5612f6d272d6962f6829c6d64a31edef89
  2 files changed, 6 insertions(+), 11 deletions(-)
 
 commit 48146e5612f6d272d6962f6829c6d64a31edef89
@@ -23299,8 +34860,8 @@ Date:   Mon May 10 20:07:56 2010 -0400
 
     Don't fail sanitize on NULL data
 
 
     Don't fail sanitize on NULL data
 
- src/hb-open-type-private.hh |   5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit d2c2ca8faf62fc380d4717d286556139a62d2356
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d2c2ca8faf62fc380d4717d286556139a62d2356
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23308,8 +34869,8 @@ Date:   Mon May 10 19:58:25 2010 -0400
 
     Fix comment
 
 
     Fix comment
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b435ab7e29c388e3b100f729957319931625a3a8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b435ab7e29c388e3b100f729957319931625a3a8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23317,9 +34878,9 @@ Date:   Mon May 10 19:51:57 2010 -0400
 
     Fix accessing tables from NULL pointer
 
 
     Fix accessing tables from NULL pointer
 
- src/hb-font.cc                     |    2 +-
- src/hb-open-type-private.hh |   5 +++++
- src/hb-ot-layout.cc        |    6 +++---
+ src/hb-font.cc                     | 2 +-
+ src/hb-open-type-private.hh | 5 +++++
+ src/hb-ot-layout.cc        | 6 +++---
  3 files changed, 9 insertions(+), 4 deletions(-)
 
 commit dacebcadae36b35531d635d81df2afb937677b7a
  3 files changed, 9 insertions(+), 4 deletions(-)
 
 commit dacebcadae36b35531d635d81df2afb937677b7a
@@ -23328,13 +34889,13 @@ Date: Mon May 10 19:45:41 2010 -0400
 
     Simplify unions
 
 
     Simplify unions
 
- src/hb-open-file-private.hh         |   24 ++++---
- src/hb-ot-layout-common-private.hh   |   24 ++++----
- src/hb-ot-layout-gdef-private.hh     |   24 ++++----
- src/hb-ot-layout-gpos-private.hh     |  120
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   88 ++++++++++++------------
- src/hb-ot-layout-gsubgpos-private.hh |   44 ++++++------
+ src/hb-open-file-private.hh         |  24 +++----
+ src/hb-ot-layout-common-private.hh   |  24 +++----
+ src/hb-ot-layout-gdef-private.hh     |  24 +++----
+ src/hb-ot-layout-gpos-private.hh     | 120
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     |  88 ++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh |  44 ++++++-------
  6 files changed, 163 insertions(+), 161 deletions(-)
 
 commit fd671e02433bcbc1fd07901fa2d6065020f41ba8
  6 files changed, 163 insertions(+), 161 deletions(-)
 
 commit fd671e02433bcbc1fd07901fa2d6065020f41ba8
@@ -23343,8 +34904,8 @@ Date:   Mon May 10 19:02:32 2010 -0400
 
     Remove unused macro
 
 
     Remove unused macro
 
- src/hb-open-type-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 0eb9fc6e37935707dba2bf4b3705de2161a08cb7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0eb9fc6e37935707dba2bf4b3705de2161a08cb7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23352,13 +34913,13 @@ Date: Mon May 10 19:01:17 2010 -0400
 
     Change DEFINE_SIZE_VAR to DEFINE_SIZE_ARRAY
 
 
     Change DEFINE_SIZE_VAR to DEFINE_SIZE_ARRAY
 
- src/hb-open-file-private.hh         |    4 ++--
- src/hb-open-type-private.hh         |   10 +++++-----
- src/hb-ot-layout-common-private.hh   |   27 +++++++++++++++------------
- src/hb-ot-layout-gdef-private.hh     |   10 +++++-----
- src/hb-ot-layout-gpos-private.hh     |   25 ++++++++++++-------------
- src/hb-ot-layout-gsub-private.hh     |   14 +++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++--------
+ src/hb-open-file-private.hh         |  4 ++--
+ src/hb-open-type-private.hh         | 10 +++++-----
+ src/hb-ot-layout-common-private.hh   | 27 +++++++++++++++------------
+ src/hb-ot-layout-gdef-private.hh     | 10 +++++-----
+ src/hb-ot-layout-gpos-private.hh     | 25 ++++++++++++-------------
+ src/hb-ot-layout-gsub-private.hh     | 14 +++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++--------
  7 files changed, 54 insertions(+), 52 deletions(-)
 
 commit 596e471aa5053d955fb5d5b5923088c8814469b1
  7 files changed, 54 insertions(+), 52 deletions(-)
 
 commit 596e471aa5053d955fb5d5b5923088c8814469b1
@@ -23367,12 +34928,12 @@ Date: Mon May 10 18:47:48 2010 -0400
 
     Cleanup DEFINE_SIZE_VAR2
 
 
     Cleanup DEFINE_SIZE_VAR2
 
- src/hb-open-type-private.hh         |   18 +++++++++++-------
- src/hb-ot-layout-common-private.hh   |    6 +++---
- src/hb-ot-layout-gdef-private.hh     |    4 ++--
- src/hb-ot-layout-gpos-private.hh     |    4 ++--
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-open-type-private.hh         | 18 +++++++++++-------
+ src/hb-ot-layout-common-private.hh   |  6 +++---
+ src/hb-ot-layout-gdef-private.hh     |  4 ++--
+ src/hb-ot-layout-gpos-private.hh     |  4 ++--
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++--
  6 files changed, 21 insertions(+), 17 deletions(-)
 
 commit 33afa4e2dc352f08cc094703e3f01d3ecd83b354
  6 files changed, 21 insertions(+), 17 deletions(-)
 
 commit 33afa4e2dc352f08cc094703e3f01d3ecd83b354
@@ -23381,8 +34942,8 @@ Date:   Mon May 10 18:35:02 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh |  14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-open-type-private.hh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit b961518b9611471ff7060e97686e5625974847eb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b961518b9611471ff7060e97686e5625974847eb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23390,10 +34951,10 @@ Date: Mon May 10 18:20:54 2010 -0400
 
     Simplify array access
 
 
     Simplify array access
 
- src/hb-open-type-private.hh         |   29 ++++++++++-------------------
- src/hb-ot-layout-common-private.hh   |    8 ++++----
- src/hb-ot-layout-gsub-private.hh     |    6 +++---
- src/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++--------
+ src/hb-open-type-private.hh         | 29 ++++++++++-------------------
+ src/hb-ot-layout-common-private.hh   |  8 ++++----
+ src/hb-ot-layout-gsub-private.hh     |  6 +++---
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++--------
  4 files changed, 25 insertions(+), 34 deletions(-)
 
 commit 54842374c2b291ef208c51ae1d853ec0403ccf84
  4 files changed, 25 insertions(+), 34 deletions(-)
 
 commit 54842374c2b291ef208c51ae1d853ec0403ccf84
@@ -23402,8 +34963,8 @@ Date:   Mon May 10 18:13:32 2010 -0400
 
     Fix check_struct to check min_size instead of sizeof
 
 
     Fix check_struct to check min_size instead of sizeof
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ed07422c33bbb52ff4d79e65986171e3f07697d8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ed07422c33bbb52ff4d79e65986171e3f07697d8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23411,12 +34972,12 @@ Date: Mon May 10 18:08:46 2010 -0400
 
     Further cleanup of sizeof
 
 
     Further cleanup of sizeof
 
- src/hb-open-type-private.hh         |    7 +++++--
- src/hb-ot-layout-common-private.hh   |    4 ++++
- src/hb-ot-layout-gdef-private.hh     |    4 ++++
- src/hb-ot-layout-gpos-private.hh     |   10 +++++++---
- src/hb-ot-layout-gsub-private.hh     |    4 +++-
- src/hb-ot-layout-gsubgpos-private.hh |    2 ++
+ src/hb-open-type-private.hh         |  7 +++++--
+ src/hb-ot-layout-common-private.hh   |  4 ++++
+ src/hb-ot-layout-gdef-private.hh     |  4 ++++
+ src/hb-ot-layout-gpos-private.hh     | 10 +++++++---
+ src/hb-ot-layout-gsub-private.hh     |  4 +++-
+ src/hb-ot-layout-gsubgpos-private.hh |  2 ++
  6 files changed, 25 insertions(+), 6 deletions(-)
 
 commit a82ef7a893b773a17f7548375de9f588dfc83aba
  6 files changed, 25 insertions(+), 6 deletions(-)
 
 commit a82ef7a893b773a17f7548375de9f588dfc83aba
@@ -23425,9 +34986,8 @@ Date:   Mon May 10 17:55:03 2010 -0400
 
     Remove CastP completely
 
 
     Remove CastP completely
 
- src/hb-open-type-private.hh |  39
- +++++++++++++++++----------------------
- 1 files changed, 17 insertions(+), 22 deletions(-)
+ src/hb-open-type-private.hh | 39 +++++++++++++++++----------------------
+ 1 file changed, 17 insertions(+), 22 deletions(-)
 
 commit 40cbefe858192531ed64dd51d402f7ca7b8153a3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 40cbefe858192531ed64dd51d402f7ca7b8153a3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23435,12 +34995,12 @@ Date: Mon May 10 17:47:22 2010 -0400
 
     Remove unnecessary casts
 
 
     Remove unnecessary casts
 
- src/hb-open-type-private.hh         |   12 ++++++------
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gpos-private.hh     |   34
+ src/hb-open-type-private.hh         | 12 ++++++------
+ src/hb-ot-layout-common-private.hh   |  2 +-
+ src/hb-ot-layout-gpos-private.hh     | 34
  +++++++++++++++++-----------------
  +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |   34
+ src/hb-ot-layout-gsub-private.hh     |  4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 34
  +++++++++++++++++-----------------
  5 files changed, 43 insertions(+), 43 deletions(-)
 
  +++++++++++++++++-----------------
  5 files changed, 43 insertions(+), 43 deletions(-)
 
@@ -23452,9 +35012,9 @@ Date:   Mon May 10 17:36:03 2010 -0400
 
     Is safer.
 
 
     Is safer.
 
- src/hb-open-type-private.hh     |   26 +++++++++++++-------------
- src/hb-ot-layout-gpos-private.hh |    6 +++---
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-open-type-private.hh     | 26 +++++++++++++-------------
+ src/hb-ot-layout-gpos-private.hh |  6 +++---
+ src/hb-ot-layout-gsub-private.hh |  4 ++--
  3 files changed, 18 insertions(+), 18 deletions(-)
 
 commit bea34c7cbb583cf7660776e95cab3171590b8427
  3 files changed, 18 insertions(+), 18 deletions(-)
 
 commit bea34c7cbb583cf7660776e95cab3171590b8427
@@ -23463,13 +35023,13 @@ Date: Mon May 10 17:28:16 2010 -0400
 
     Further cleanup of DEFINE_SIZE
 
 
     Further cleanup of DEFINE_SIZE
 
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |   10 +++++-----
- src/hb-ot-layout-common-private.hh   |   16 ++++++++--------
- src/hb-ot-layout-gdef-private.hh     |    8 ++++----
- src/hb-ot-layout-gpos-private.hh     |   16 +++++-----------
- src/hb-ot-layout-gsub-private.hh     |   14 +++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   14 +++++++-------
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-type-private.hh         | 10 +++++-----
+ src/hb-ot-layout-common-private.hh   | 16 ++++++++--------
+ src/hb-ot-layout-gdef-private.hh     |  8 ++++----
+ src/hb-ot-layout-gpos-private.hh     | 16 +++++-----------
+ src/hb-ot-layout-gsub-private.hh     | 14 +++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 14 +++++++-------
  7 files changed, 37 insertions(+), 43 deletions(-)
 
 commit 0abcc3b48cfd51a22695c9e988938b2f45cb19d8
  7 files changed, 37 insertions(+), 43 deletions(-)
 
 commit 0abcc3b48cfd51a22695c9e988938b2f45cb19d8
@@ -23478,8 +35038,8 @@ Date:   Mon May 10 17:04:20 2010 -0400
 
     Cleanup
 
 
     Cleanup
 
- src/hb-open-type-private.hh |  18 ++++++++++--------
- 1 files changed, 10 insertions(+), 8 deletions(-)
+ src/hb-open-type-private.hh | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
 
 commit b3651231bf80bb7009214547a75ed90e21815c68
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b3651231bf80bb7009214547a75ed90e21815c68
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23487,15 +35047,15 @@ Date: Mon May 10 16:57:29 2010 -0400
 
     Remove ASSERT_SIZE in favor of the safer DEFINE_SIZE_STATIC
 
 
     Remove ASSERT_SIZE in favor of the safer DEFINE_SIZE_STATIC
 
- src/hb-open-file-private.hh         |    3 +-
- src/hb-open-type-private.hh         |   20 +++++++++++++--
- src/hb-ot-layout-common-private.hh   |   24 ++++++++++-------
- src/hb-ot-layout-gdef-private.hh     |   22 ++++++++++------
- src/hb-ot-layout-gpos-private.hh     |   44
- ++++++++++++++++++---------------
- src/hb-ot-layout-gsub-private.hh     |   32 +++++++++++++++---------
- src/hb-ot-layout-gsubgpos-private.hh |   27 ++++++++++++++-------
- src/hb-private.h                    |    2 -
+ src/hb-open-file-private.hh         |  3 ++-
+ src/hb-open-type-private.hh         | 20 +++++++++++++---
+ src/hb-ot-layout-common-private.hh   | 24 ++++++++++++--------
+ src/hb-ot-layout-gdef-private.hh     | 22 +++++++++++-------
+ src/hb-ot-layout-gpos-private.hh     | 44
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout-gsub-private.hh     | 32 ++++++++++++++++----------
+ src/hb-ot-layout-gsubgpos-private.hh | 27 ++++++++++++++--------
+ src/hb-private.h                    |  2 --
  8 files changed, 109 insertions(+), 65 deletions(-)
 
 commit 569da92bc6956f42d9b2d65c784e184fb6380efe
  8 files changed, 109 insertions(+), 65 deletions(-)
 
 commit 569da92bc6956f42d9b2d65c784e184fb6380efe
@@ -23504,14 +35064,13 @@ Date: Mon May 10 16:38:32 2010 -0400
 
     Cleanup ASSERT_SIZE_VAR
 
 
     Cleanup ASSERT_SIZE_VAR
 
- src/hb-open-file-private.hh         |    9 ++++++---
- src/hb-open-type-private.hh         |    6 ++++--
- src/hb-ot-layout-common-private.hh   |   22 ++++++++++++----------
- src/hb-ot-layout-gdef-private.hh     |    3 ++-
- src/hb-ot-layout-gpos-private.hh     |   30
- +++++++++++++++++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |   10 ++++++----
- src/hb-private.h                    |    8 --------
+ src/hb-open-file-private.hh         |  9 ++++++---
+ src/hb-open-type-private.hh         |  6 ++++--
+ src/hb-ot-layout-common-private.hh   | 22 ++++++++++++----------
+ src/hb-ot-layout-gdef-private.hh     |  3 ++-
+ src/hb-ot-layout-gpos-private.hh     | 30 +++++++++++++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh | 10 ++++++----
+ src/hb-private.h                    |  8 --------
  7 files changed, 49 insertions(+), 39 deletions(-)
 
 commit 99bf03459ff2f00cf3fb7fa3c8b8336ec9fcca56
  7 files changed, 49 insertions(+), 39 deletions(-)
 
 commit 99bf03459ff2f00cf3fb7fa3c8b8336ec9fcca56
@@ -23520,8 +35079,8 @@ Date:   Thu May 6 19:37:32 2010 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-ot-layout-gpos-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 65f46b00333e20ab8a52a4b350747507541ec1db
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 65f46b00333e20ab8a52a4b350747507541ec1db
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23531,8 +35090,8 @@ Date:   Thu May 6 19:35:19 2010 -0400
 
     Using ::min_size.
 
 
     Using ::min_size.
 
- src/hb-open-type-private.hh       |    6 +++---
- src/hb-ot-layout-common-private.hh |   9 +++++----
+ src/hb-open-type-private.hh       | 6 +++---
+ src/hb-ot-layout-common-private.hh | 9 +++++----
  2 files changed, 8 insertions(+), 7 deletions(-)
 
 commit e45d3f86f9a5f3d29ca35a282de7f98e702878f9
  2 files changed, 8 insertions(+), 7 deletions(-)
 
 commit e45d3f86f9a5f3d29ca35a282de7f98e702878f9
@@ -23543,12 +35102,12 @@ Date: Thu May 6 19:33:31 2010 -0400
 
     So we know when the size is static and when dynamic.
 
 
     So we know when the size is static and when dynamic.
 
- src/hb-open-file-private.hh         |    7 ++---
- src/hb-open-type-private.hh         |   42
- ++++++++++++++++++++++++---------
- src/hb-ot-layout-common-private.hh   |   14 +++++------
- src/hb-ot-layout-gpos-private.hh     |   17 +++++--------
- src/hb-ot-layout-gsubgpos-private.hh |   19 +++++++--------
+ src/hb-open-file-private.hh         |  7 +++---
+ src/hb-open-type-private.hh         | 42
+ +++++++++++++++++++++++++-----------
+ src/hb-ot-layout-common-private.hh   | 14 ++++++------
+ src/hb-ot-layout-gpos-private.hh     | 17 ++++++---------
+ src/hb-ot-layout-gsubgpos-private.hh | 19 ++++++++--------
  5 files changed, 55 insertions(+), 44 deletions(-)
 
 commit b157617644d1e38f680163889d1dc2e2f64d9ba3
  5 files changed, 55 insertions(+), 44 deletions(-)
 
 commit b157617644d1e38f680163889d1dc2e2f64d9ba3
@@ -23557,12 +35116,12 @@ Date: Thu May 6 14:48:27 2010 -0400
 
     Remove the last of SANITIZE macros: SANITIZE_SELF
 
 
     Remove the last of SANITIZE macros: SANITIZE_SELF
 
- src/hb-open-file-private.hh         |    4 ++--
- src/hb-open-type-private.hh         |   21 ++++++++++++---------
- src/hb-ot-layout-common-private.hh   |   16 ++++++++--------
- src/hb-ot-layout-gdef-private.hh     |    6 +++---
- src/hb-ot-layout-gpos-private.hh     |   26 +++++++++++++-------------
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ src/hb-open-file-private.hh         |  4 ++--
+ src/hb-open-type-private.hh         | 21 ++++++++++++---------
+ src/hb-ot-layout-common-private.hh   | 16 ++++++++--------
+ src/hb-ot-layout-gdef-private.hh     |  6 +++---
+ src/hb-ot-layout-gpos-private.hh     | 26 +++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh |  6 +++---
  6 files changed, 41 insertions(+), 38 deletions(-)
 
 commit 4f252fedc7136c66a9d7fbcb2978581986da6227
  6 files changed, 41 insertions(+), 38 deletions(-)
 
 commit 4f252fedc7136c66a9d7fbcb2978581986da6227
@@ -23571,13 +35130,13 @@ Date: Thu May 6 13:30:23 2010 -0400
 
     Remove SANITIZE macro
 
 
     Remove SANITIZE macro
 
- src/hb-open-file-private.hh         |    4 ++--
- src/hb-open-type-private.hh         |    6 ++----
- src/hb-ot-layout-common-private.hh   |   18 +++++++++---------
- src/hb-ot-layout-gdef-private.hh     |    6 +++---
- src/hb-ot-layout-gpos-private.hh     |   18 +++++++++---------
- src/hb-ot-layout-gsub-private.hh     |   26 +++++++++++++-------------
- src/hb-ot-layout-gsubgpos-private.hh |   22 +++++++++++-----------
+ src/hb-open-file-private.hh         |  4 ++--
+ src/hb-open-type-private.hh         |  6 ++----
+ src/hb-ot-layout-common-private.hh   | 18 +++++++++---------
+ src/hb-ot-layout-gdef-private.hh     |  6 +++---
+ src/hb-ot-layout-gpos-private.hh     | 18 +++++++++---------
+ src/hb-ot-layout-gsub-private.hh     | 26 +++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh | 22 +++++++++++-----------
  7 files changed, 49 insertions(+), 51 deletions(-)
 
 commit c2ddfd2d268385257c77c09a9abeacf4230d5377
  7 files changed, 49 insertions(+), 51 deletions(-)
 
 commit c2ddfd2d268385257c77c09a9abeacf4230d5377
@@ -23586,9 +35145,8 @@ Date:   Thu May 6 13:06:15 2010 -0400
 
     Cleanup Value casts
 
 
     Cleanup Value casts
 
- src/hb-ot-layout-gpos-private.hh |   34
- +++++++++++++++++++++-------------
- 1 files changed, 21 insertions(+), 13 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 34 +++++++++++++++++++++-------------
+ 1 file changed, 21 insertions(+), 13 deletions(-)
 
 commit 41a93d2c1ff175ef06328a99983577459c2d34b0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 41a93d2c1ff175ef06328a99983577459c2d34b0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23596,14 +35154,14 @@ Date: Thu May 6 12:55:14 2010 -0400
 
     Remove SANITIZE_WITH_BASE
 
 
     Remove SANITIZE_WITH_BASE
 
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |    2 -
- src/hb-ot-layout-common-private.hh   |    6 +-
- src/hb-ot-layout-gdef-private.hh     |   24 +++++-----
- src/hb-ot-layout-gpos-private.hh     |   90
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   31 ++++++------
- src/hb-ot-layout-gsubgpos-private.hh |   44 ++++++++--------
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-type-private.hh         |  2 -
+ src/hb-ot-layout-common-private.hh   |  6 +--
+ src/hb-ot-layout-gdef-private.hh     | 24 +++++-----
+ src/hb-ot-layout-gpos-private.hh     | 90
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 31 ++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 44 +++++++++---------
  7 files changed, 98 insertions(+), 101 deletions(-)
 
 commit f5fab0c71837371cce32dc3e9edca1ccb8d44e29
  7 files changed, 98 insertions(+), 101 deletions(-)
 
 commit f5fab0c71837371cce32dc3e9edca1ccb8d44e29
@@ -23612,10 +35170,10 @@ Date: Thu May 6 10:26:52 2010 -0400
 
     Remove SANITIZE_MEM
 
 
     Remove SANITIZE_MEM
 
- src/hb-open-type-private.hh         |    4 +---
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ src/hb-open-type-private.hh         | 4 +---
+ src/hb-ot-layout-common-private.hh   | 2 +-
+ src/hb-ot-layout-gpos-private.hh     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 6 +++---
  4 files changed, 6 insertions(+), 8 deletions(-)
 
 commit 4ad2cc5dec6b0639da2b1846282bdd99d06d5ff1
  4 files changed, 6 insertions(+), 8 deletions(-)
 
 commit 4ad2cc5dec6b0639da2b1846282bdd99d06d5ff1
@@ -23624,8 +35182,8 @@ Date:   Thu May 6 09:24:24 2010 -0400
 
     Rename check to check_range
 
 
     Rename check to check_range
 
- src/hb-open-type-private.hh |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-open-type-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 1cd1e117d060d38e314618b627d7663cb01ed584
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1cd1e117d060d38e314618b627d7663cb01ed584
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23633,10 +35191,10 @@ Date: Wed May 5 20:15:14 2010 -0400
 
     Remove SANITIZE_ARRAY
 
 
     Remove SANITIZE_ARRAY
 
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |   16 +++++++---------
- src/hb-ot-layout-gpos-private.hh     |    8 ++++----
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-type-private.hh         | 16 +++++++---------
+ src/hb-ot-layout-gpos-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsubgpos-private.hh |  4 ++--
  4 files changed, 14 insertions(+), 16 deletions(-)
 
 commit 583d7f9586ce69754f1354aa3895e6d732a0c2ce
  4 files changed, 14 insertions(+), 16 deletions(-)
 
 commit 583d7f9586ce69754f1354aa3895e6d732a0c2ce
@@ -23645,12 +35203,12 @@ Date: Wed May 5 01:49:22 2010 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-open-file-private.hh         |    3 ++-
- src/hb-open-type-private.hh         |    6 ++++--
- src/hb-ot-layout-common-private.hh   |   15 ++++++++++-----
- src/hb-ot-layout-gpos-private.hh     |    5 ++---
- src/hb-ot-layout-gsub-private.hh     |    3 ++-
- src/hb-ot-layout-gsubgpos-private.hh |    9 +++++----
+ src/hb-open-file-private.hh         |  3 ++-
+ src/hb-open-type-private.hh         |  6 ++++--
+ src/hb-ot-layout-common-private.hh   | 15 ++++++++++-----
+ src/hb-ot-layout-gpos-private.hh     |  5 ++---
+ src/hb-ot-layout-gsub-private.hh     |  3 ++-
+ src/hb-ot-layout-gsubgpos-private.hh |  9 +++++----
  6 files changed, 25 insertions(+), 16 deletions(-)
 
 commit 705e215268aa95c2bc6af8af9b48b72b690ec1f7
  6 files changed, 25 insertions(+), 16 deletions(-)
 
 commit 705e215268aa95c2bc6af8af9b48b72b690ec1f7
@@ -23659,10 +35217,10 @@ Date: Wed May 5 01:40:25 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh         |    4 ++--
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-type-private.hh         | 4 ++--
+ src/hb-ot-layout-gpos-private.hh     | 2 +-
+ src/hb-ot-layout-gsub-private.hh     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b18eafd0f62f854d15276c78f99843aecd47acad
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit b18eafd0f62f854d15276c78f99843aecd47acad
@@ -23671,8 +35229,8 @@ Date:   Wed May 5 01:39:26 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4169710911450e0f9bc045fe279bfc8ba9e8457c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4169710911450e0f9bc045fe279bfc8ba9e8457c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23680,9 +35238,9 @@ Date:   Wed May 5 01:37:58 2010 -0400
 
     Simplify chaining
 
 
     Simplify chaining
 
- src/hb-ot-layout-gsubgpos-private.hh |   61
- ++++++++++++++--------------------
- 1 files changed, 25 insertions(+), 36 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 61
+ +++++++++++++++---------------------
+ 1 file changed, 25 insertions(+), 36 deletions(-)
 
 commit 1911b9d21b2b7b6b8219ce6c888540e3a60aa9c3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1911b9d21b2b7b6b8219ce6c888540e3a60aa9c3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23690,12 +35248,12 @@ Date: Wed May 5 01:32:04 2010 -0400
 
     Remove APPLY_ARG_DEF and APPLY_ARG
 
 
     Remove APPLY_ARG_DEF and APPLY_ARG
 
- src/hb-ot-layout-gpos-private.hh     |   92
+ src/hb-ot-layout-gpos-private.hh     | 92
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 88
  +++++++++++++++++-----------------
  +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   88
- ++++++++++++++++----------------
- src/hb-ot-layout-gsubgpos-private.hh |   89
- +++++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos-private.hh | 89
+ ++++++++++++++++------------------
  3 files changed, 132 insertions(+), 137 deletions(-)
 
 commit 6c42cddfe53a1c664081862bb9a3e1c38d05a823
  3 files changed, 132 insertions(+), 137 deletions(-)
 
 commit 6c42cddfe53a1c664081862bb9a3e1c38d05a823
@@ -23704,9 +35262,9 @@ Date:   Wed May 5 01:30:48 2010 -0400
 
     Port apply to use hb_trace_t
 
 
     Port apply to use hb_trace_t
 
- src/hb-ot-layout-gpos-private.hh     |    9 ++++-----
- src/hb-ot-layout-gsub-private.hh     |   11 +++++------
- src/hb-ot-layout-gsubgpos-private.hh |   13 +++++--------
+ src/hb-ot-layout-gpos-private.hh     |  9 ++++-----
+ src/hb-ot-layout-gsub-private.hh     | 11 +++++------
+ src/hb-ot-layout-gsubgpos-private.hh | 13 +++++--------
  3 files changed, 14 insertions(+), 19 deletions(-)
 
 commit 969c9705ae0c64577c3f69f5300fec975f952e1f
  3 files changed, 14 insertions(+), 19 deletions(-)
 
 commit 969c9705ae0c64577c3f69f5300fec975f952e1f
@@ -23715,10 +35273,10 @@ Date: Wed May 5 01:23:44 2010 -0400
 
     Move context_length into apply_context
 
 
     Move context_length into apply_context
 
- src/hb-ot-layout-gpos-private.hh     |    9 ++--
- src/hb-ot-layout-gsub-private.hh     |    9 ++--
- src/hb-ot-layout-gsubgpos-private.hh |   70
- +++++++++++++++++++--------------
+ src/hb-ot-layout-gpos-private.hh     |  9 ++---
+ src/hb-ot-layout-gsub-private.hh     |  9 ++---
+ src/hb-ot-layout-gsubgpos-private.hh | 70
+ ++++++++++++++++++++----------------
  3 files changed, 50 insertions(+), 38 deletions(-)
 
 commit 94a23aaeca39c662614037ef887412249bdc8d49
  3 files changed, 50 insertions(+), 38 deletions(-)
 
 commit 94a23aaeca39c662614037ef887412249bdc8d49
@@ -23727,11 +35285,11 @@ Date: Wed May 5 01:13:09 2010 -0400
 
     Move buffer into apply_context
 
 
     Move buffer into apply_context
 
- src/hb-buffer-private.h             |   30 +++++++++-------
- src/hb-ot-layout-gpos-private.hh     |   64
- +++++++++++++++++++---------------
- src/hb-ot-layout-gsub-private.hh     |   45 ++++++++++++++----------
- src/hb-ot-layout-gsubgpos-private.hh |   49 ++++++++++++++------------
+ src/hb-buffer-private.h             | 30 +++++++++--------
+ src/hb-ot-layout-gpos-private.hh     | 64
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout-gsub-private.hh     | 45 ++++++++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh | 49 ++++++++++++++-------------
  4 files changed, 106 insertions(+), 82 deletions(-)
 
 commit 63493f956dca519df49da0a6badc3cb0a1b92779
  4 files changed, 106 insertions(+), 82 deletions(-)
 
 commit 63493f956dca519df49da0a6badc3cb0a1b92779
@@ -23740,10 +35298,10 @@ Date: Wed May 5 01:01:05 2010 -0400
 
     Move layout_context into apply_context
 
 
     Move layout_context into apply_context
 
- src/hb-ot-layout-gpos-private.hh     |  105
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   47 ++++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   11 ++--
+ src/hb-ot-layout-gpos-private.hh     | 105
+ ++++++++++++++++++-----------------
+ src/hb-ot-layout-gsub-private.hh     |  47 ++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh |  11 ++--
  3 files changed, 82 insertions(+), 81 deletions(-)
 
 commit fff9aa263d1daf7c5117cf383fafa5043d5eb5af
  3 files changed, 82 insertions(+), 81 deletions(-)
 
 commit fff9aa263d1daf7c5117cf383fafa5043d5eb5af
@@ -23752,8 +35310,8 @@ Date:   Wed May 5 00:32:21 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 27e302dc8e794ff6bf878bc76e17d336d510849e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 27e302dc8e794ff6bf878bc76e17d336d510849e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23761,8 +35319,8 @@ Date:   Wed May 5 00:26:16 2010 -0400
 
     I keep changing my mind about this
 
 
     I keep changing my mind about this
 
- src/hb-open-type-private.hh |  30 ++++++++++--------------------
- 1 files changed, 10 insertions(+), 20 deletions(-)
+ src/hb-open-type-private.hh | 30 ++++++++++--------------------
+ 1 file changed, 10 insertions(+), 20 deletions(-)
 
 commit 39840474afd2cda9ff576c08aff9c87095496c27
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 39840474afd2cda9ff576c08aff9c87095496c27
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23770,14 +35328,14 @@ Date: Wed May 5 00:23:19 2010 -0400
 
     Remove SANITIZE_ARG_DEF and SANITIZE_ARG
 
 
     Remove SANITIZE_ARG_DEF and SANITIZE_ARG
 
- src/hb-open-file-private.hh         |   16 ++--
- src/hb-open-type-private.hh         |   59 +++++++--------
- src/hb-ot-layout-common-private.hh   |   42 +++++-----
- src/hb-ot-layout-gdef-private.hh     |   28 ++++----
- src/hb-ot-layout-gpos-private.hh     |  136
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   72 +++++++++---------
- src/hb-ot-layout-gsubgpos-private.hh |   46 ++++++------
+ src/hb-open-file-private.hh         |  16 ++---
+ src/hb-open-type-private.hh         |  59 +++++++--------
+ src/hb-ot-layout-common-private.hh   |  42 +++++------
+ src/hb-ot-layout-gdef-private.hh     |  28 ++++----
+ src/hb-ot-layout-gpos-private.hh     | 136
+ +++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     |  72 +++++++++----------
+ src/hb-ot-layout-gsubgpos-private.hh |  46 ++++++------
  7 files changed, 197 insertions(+), 202 deletions(-)
 
 commit b261e2ad5c5a065599ce1dbc4ba437caa2cee1e9
  7 files changed, 197 insertions(+), 202 deletions(-)
 
 commit b261e2ad5c5a065599ce1dbc4ba437caa2cee1e9
@@ -23786,8 +35344,8 @@ Date:   Wed May 5 00:20:16 2010 -0400
 
     Remove trace from sanitize_shallow()
 
 
     Remove trace from sanitize_shallow()
 
- src/hb-open-type-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit dfc8cbe85479dde1ffdc6b2e73f4907331d77a19
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dfc8cbe85479dde1ffdc6b2e73f4907331d77a19
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23795,8 +35353,8 @@ Date:   Wed May 5 00:19:46 2010 -0400
 
     Add hb_trace_t
 
 
     Add hb_trace_t
 
- src/hb-open-type-private.hh |  33 +++++++++++++++++++--------------
- 1 files changed, 19 insertions(+), 14 deletions(-)
+ src/hb-open-type-private.hh | 33 +++++++++++++++++++--------------
+ 1 file changed, 19 insertions(+), 14 deletions(-)
 
 commit 20e3dd5d292b65f70d2eae63b8d8713a1c889d47
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 20e3dd5d292b65f70d2eae63b8d8713a1c889d47
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23805,9 +35363,9 @@ Date:   Tue May 4 23:21:57 2010 -0400
     Make sanitize_depth variable automatic and not passed through
     function args
 
     Make sanitize_depth variable automatic and not passed through
     function args
 
- src/hb-open-type-private.hh |  72
- +++++++++++++++++++++++++-----------------
- 1 files changed, 43 insertions(+), 29 deletions(-)
+ src/hb-open-type-private.hh | 72
+ +++++++++++++++++++++++++++------------------
+ 1 file changed, 43 insertions(+), 29 deletions(-)
 
 commit 4a446ac35136eff23d55f47bdd7b40095ad707ab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a446ac35136eff23d55f47bdd7b40095ad707ab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23815,8 +35373,8 @@ Date:   Tue May 4 22:46:21 2010 -0400
 
     Use function template for pass-thru argument
 
 
     Use function template for pass-thru argument
 
- src/hb-open-type-private.hh     |   26 ++++++--------------------
- src/hb-ot-layout-gpos-private.hh |    6 +++---
+ src/hb-open-type-private.hh     | 26 ++++++--------------------
+ src/hb-ot-layout-gpos-private.hh |  6 +++---
  2 files changed, 9 insertions(+), 23 deletions(-)
 
 commit 98daaf183d6dbf2b68959da608cd9876ba55d7aa
  2 files changed, 9 insertions(+), 23 deletions(-)
 
 commit 98daaf183d6dbf2b68959da608cd9876ba55d7aa
@@ -23825,9 +35383,9 @@ Date:   Tue May 4 22:42:49 2010 -0400
 
     Make _hb_sanitize_*() methods of the context object
 
 
     Make _hb_sanitize_*() methods of the context object
 
- src/hb-open-type-private.hh | 190
- ++++++++++++++++++++++---------------------
- 1 files changed, 98 insertions(+), 92 deletions(-)
+ src/hb-open-type-private.hh | 190
+ +++++++++++++++++++++++---------------------
+ 1 file changed, 98 insertions(+), 92 deletions(-)
 
 commit bb029af943faa9905e652d58856998687e60c31d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bb029af943faa9905e652d58856998687e60c31d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23835,14 +35393,14 @@ Date: Tue May 4 15:28:52 2010 -0400
 
     Remove SANITIZE_THIS
 
 
     Remove SANITIZE_THIS
 
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |    3 +-
- src/hb-ot-layout-common-private.hh   |    4 +-
- src/hb-ot-layout-gdef-private.hh     |   25 ++++++++-------
- src/hb-ot-layout-gpos-private.hh     |   55
- ++++++++++++++++++---------------
- src/hb-ot-layout-gsub-private.hh     |   29 ++++++++++--------
- src/hb-ot-layout-gsubgpos-private.hh |   42 +++++++++++++-------------
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-type-private.hh         |  3 +-
+ src/hb-ot-layout-common-private.hh   |  4 +--
+ src/hb-ot-layout-gdef-private.hh     | 25 ++++++++--------
+ src/hb-ot-layout-gpos-private.hh     | 55
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout-gsub-private.hh     | 29 ++++++++++---------
+ src/hb-ot-layout-gsubgpos-private.hh | 42 +++++++++++++--------------
  7 files changed, 85 insertions(+), 75 deletions(-)
 
 commit 2226fc93d1427b8830bfb892fe1b25b488ea36dc
  7 files changed, 85 insertions(+), 75 deletions(-)
 
 commit 2226fc93d1427b8830bfb892fe1b25b488ea36dc
@@ -23851,9 +35409,9 @@ Date:   Tue May 4 15:12:17 2010 -0400
 
     Rename SANITIZE_BASE to SANITIZE_WITH_BASE
 
 
     Rename SANITIZE_BASE to SANITIZE_WITH_BASE
 
- src/hb-open-type-private.hh       |   11 +++++++----
- src/hb-ot-layout-common-private.hh |   3 ++-
- src/hb-ot-layout-gpos-private.hh   |  15 ++++++++-------
+ src/hb-open-type-private.hh       | 11 +++++++----
+ src/hb-ot-layout-common-private.hh |  3 ++-
+ src/hb-ot-layout-gpos-private.hh   | 15 ++++++++-------
  3 files changed, 17 insertions(+), 12 deletions(-)
 
 commit 89da1346ec3a8dec8a368df46d61ca75356e22fa
  3 files changed, 17 insertions(+), 12 deletions(-)
 
 commit 89da1346ec3a8dec8a368df46d61ca75356e22fa
@@ -23862,8 +35420,8 @@ Date:   Tue May 4 15:01:45 2010 -0400
 
     Remove SANITIZE_OBJ
 
 
     Remove SANITIZE_OBJ
 
- src/hb-open-type-private.hh |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 4d4cce96266b777a01cec03e8766dc8c0b159351
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4d4cce96266b777a01cec03e8766dc8c0b159351
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23871,12 +35429,12 @@ Date: Tue May 4 14:57:55 2010 -0400
 
     Remove SANITIZE_THIS2
 
 
     Remove SANITIZE_THIS2
 
- src/hb-open-type-private.hh         |    2 --
- src/hb-ot-layout-common-private.hh   |    3 ++-
- src/hb-ot-layout-gdef-private.hh     |   10 ++++++----
- src/hb-ot-layout-gpos-private.hh     |    9 ++++++---
- src/hb-ot-layout-gsub-private.hh     |   11 +++++++----
- src/hb-ot-layout-gsubgpos-private.hh |   14 +++++++++-----
+ src/hb-open-type-private.hh         |  2 --
+ src/hb-ot-layout-common-private.hh   |  3 ++-
+ src/hb-ot-layout-gdef-private.hh     | 10 ++++++----
+ src/hb-ot-layout-gpos-private.hh     |  9 ++++++---
+ src/hb-ot-layout-gsub-private.hh     | 11 +++++++----
+ src/hb-ot-layout-gsubgpos-private.hh | 14 +++++++++-----
  6 files changed, 30 insertions(+), 19 deletions(-)
 
 commit 26bfcb64e473c40e439d6efbe974781dada28eca
  6 files changed, 30 insertions(+), 19 deletions(-)
 
 commit 26bfcb64e473c40e439d6efbe974781dada28eca
@@ -23885,8 +35443,8 @@ Date:   Tue May 4 14:49:45 2010 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-layout-gdef-private.hh     |    5 ++---
- src/hb-ot-layout-gsubgpos-private.hh |    7 +++----
+ src/hb-ot-layout-gdef-private.hh     | 5 ++---
+ src/hb-ot-layout-gsubgpos-private.hh | 7 +++----
  2 files changed, 5 insertions(+), 7 deletions(-)
 
 commit be74284673a1944e0f1884e861c3fe8f9855172c
  2 files changed, 5 insertions(+), 7 deletions(-)
 
 commit be74284673a1944e0f1884e861c3fe8f9855172c
@@ -23895,9 +35453,9 @@ Date:   Tue May 4 14:47:05 2010 -0400
 
     Remove SANITIZE_THIS3
 
 
     Remove SANITIZE_THIS3
 
- src/hb-open-type-private.hh         |    1 -
- src/hb-ot-layout-gpos-private.hh     |   21 +++++++++++++++------
- src/hb-ot-layout-gsubgpos-private.hh |    8 ++++++--
+ src/hb-open-type-private.hh         |  1 -
+ src/hb-ot-layout-gpos-private.hh     | 21 +++++++++++++++------
+ src/hb-ot-layout-gsubgpos-private.hh |  8 ++++++--
  3 files changed, 21 insertions(+), 9 deletions(-)
 
 commit fbab9f9bd8ba59e7e5811f33c1dda198f95cf05a
  3 files changed, 21 insertions(+), 9 deletions(-)
 
 commit fbab9f9bd8ba59e7e5811f33c1dda198f95cf05a
@@ -23906,8 +35464,8 @@ Date:   Tue May 4 14:42:10 2010 -0400
 
     Remove SANITIZE_BASE2
 
 
     Remove SANITIZE_BASE2
 
- src/hb-open-type-private.hh     |    1 -
- src/hb-ot-layout-gpos-private.hh |    3 ++-
+ src/hb-open-type-private.hh     | 1 -
+ src/hb-ot-layout-gpos-private.hh | 3 ++-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 73c7dbf7f5433c0cdd467ef32402f52867e9798e
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 73c7dbf7f5433c0cdd467ef32402f52867e9798e
@@ -23916,9 +35474,9 @@ Date:   Tue May 4 14:40:55 2010 -0400
 
     Remove SANITIZE2
 
 
     Remove SANITIZE2
 
- src/hb-open-type-private.hh     |    1 -
- src/hb-ot-layout-gsub-private.hh |    2 +-
- 2 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh     | 1 -
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
 
 commit c9f14687a30866181feb57ee2736a147ec9f25a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c9f14687a30866181feb57ee2736a147ec9f25a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23926,8 +35484,8 @@ Date:   Tue May 4 14:38:08 2010 -0400
 
     Remove the NEUTER macro, move code to a method
 
 
     Remove the NEUTER macro, move code to a method
 
- src/hb-open-type-private.hh |  21 +++++++++++++--------
- 1 files changed, 13 insertions(+), 8 deletions(-)
+ src/hb-open-type-private.hh | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
 
 commit 30fa2821c277df99a14089749313dfe2b541e2d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 30fa2821c277df99a14089749313dfe2b541e2d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23935,8 +35493,8 @@ Date:   Tue May 4 14:28:18 2010 -0400
 
     Make internal method private
 
 
     Make internal method private
 
- src/hb-open-type-private.hh |  12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit ce5694c79671bf75990923c1da17bb611e4e7d15
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ce5694c79671bf75990923c1da17bb611e4e7d15
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23944,8 +35502,8 @@ Date:   Tue May 4 14:10:18 2010 -0400
 
     [main] Recognize Apple SFNTs
 
 
     [main] Recognize Apple SFNTs
 
- src/hb-open-file-private.hh |   4 ++--
- src/main.cc                |    6 ++++++
+ src/hb-open-file-private.hh | 4 ++--
+ src/main.cc                | 6 ++++++
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit 710500a93ecc2a0c595045602aa367073485ff91
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit 710500a93ecc2a0c595045602aa367073485ff91
@@ -23954,8 +35512,8 @@ Date:   Mon May 3 23:11:16 2010 -0400
 
     Comment new SFNT tags
 
 
     Comment new SFNT tags
 
- src/hb-open-file-private.hh |  10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-open-file-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 64d3fc8d0dada673245cc8c0b1c12cd849b30997
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 64d3fc8d0dada673245cc8c0b1c12cd849b30997
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23963,24 +35521,24 @@ Date: Mon May 3 22:51:19 2010 -0400
 
     Cosmetic: Rename HB_LIKELY/HB_UNLIKELY to likely/unlikely
 
 
     Cosmetic: Rename HB_LIKELY/HB_UNLIKELY to likely/unlikely
 
- src/hb-buffer.c                     |   14 ++++----
- src/hb-font.cc                              |    6 ++--
- src/hb-ft.c                         |   14 ++++----
- src/hb-language.c                   |    2 +-
- src/hb-object-private.h             |   10 +++---
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |   38 ++++++++++----------
- src/hb-ot-layout-common-private.hh   |   16 ++++----
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gpos-private.hh     |   64
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   52 ++++++++++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |   40 ++++++++++----------
- src/hb-ot-layout.cc                 |   12 +++---
- src/hb-ot-tag.c                     |    2 +-
- src/hb-private.h                    |    8 ++--
- src/hb-shape.c                              |   10 +++---
- src/hb-unicode.c                    |    2 +-
+ src/hb-buffer.c                     | 14 ++++----
+ src/hb-font.cc                              |  6 ++--
+ src/hb-ft.c                         | 14 ++++----
+ src/hb-language.c                   |  2 +-
+ src/hb-object-private.h             | 10 +++---
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-type-private.hh         | 38 ++++++++++-----------
+ src/hb-ot-layout-common-private.hh   | 16 ++++-----
+ src/hb-ot-layout-gdef-private.hh     |  2 +-
+ src/hb-ot-layout-gpos-private.hh     | 64
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 52 ++++++++++++++---------------
+ src/hb-ot-layout-gsubgpos-private.hh | 40 +++++++++++-----------
+ src/hb-ot-layout.cc                 | 12 +++----
+ src/hb-ot-tag.c                     |  2 +-
+ src/hb-private.h                    |  8 ++---
+ src/hb-shape.c                              | 10 +++---
+ src/hb-unicode.c                    |  2 +-
  17 files changed, 147 insertions(+), 147 deletions(-)
 
 commit fa3b3d58443a7c22eca3f86243993ba2d4bd9f4a
  17 files changed, 147 insertions(+), 147 deletions(-)
 
 commit fa3b3d58443a7c22eca3f86243993ba2d4bd9f4a
@@ -23989,8 +35547,8 @@ Date:   Mon May 3 22:47:22 2010 -0400
 
     Mark a couple functions as inline
 
 
     Mark a couple functions as inline
 
- src/hb-open-type-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 6b84198f9d471defb6f55d44d4f5423df70b2a10
 Merge: 631d10b eaf29ed
 
 commit 6b84198f9d471defb6f55d44d4f5423df70b2a10
 Merge: 631d10b eaf29ed
@@ -24005,9 +35563,9 @@ Date:   Mon May 3 22:27:56 2010 -0400
 
     HB_UNUSED is unneeded on static inline functions
 
 
     HB_UNUSED is unneeded on static inline functions
 
- src/hb-object-private.h     |   2 +-
- src/hb-open-type-private.hh |   6 +++---
- src/hb-private.h           |    4 ++--
+ src/hb-object-private.h     | 2 +-
+ src/hb-open-type-private.hh | 6 +++---
+ src/hb-private.h           | 4 ++--
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4ce578ed369f1526c91deedcf9e72537b3e4328f
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4ce578ed369f1526c91deedcf9e72537b3e4328f
@@ -24016,8 +35574,8 @@ Date:   Mon May 3 15:03:53 2010 -0400
 
     Include the tags from the Apple specification for TrueType fonts
 
 
     Include the tags from the Apple specification for TrueType fonts
 
- src/hb-open-file-private.hh |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-open-file-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 631d10b728d9e1a02c7dddf505d4fae5e244c6e8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 631d10b728d9e1a02c7dddf505d4fae5e244c6e8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24025,8 +35583,8 @@ Date:   Sun May 2 21:14:21 2010 -0400
 
     Remove unused method
 
 
     Remove unused method
 
- src/hb-open-file-private.hh |   5 -----
- 1 files changed, 0 insertions(+), 5 deletions(-)
+ src/hb-open-file-private.hh | 5 -----
+ 1 file changed, 5 deletions(-)
 
 commit f0abcd69408a3af65207cdf8847575ade4579bd4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f0abcd69408a3af65207cdf8847575ade4579bd4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24034,8 +35592,8 @@ Date:   Sun May 2 18:14:25 2010 -0400
 
     Whitespace
 
 
     Whitespace
 
- src/hb-open-type-private.hh |   9 ++++-----
- 1 files changed, 4 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
 
 commit a8d960bd26883ee937b04ca2a3c16a3644870356
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a8d960bd26883ee937b04ca2a3c16a3644870356
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24043,8 +35601,8 @@ Date:   Thu Apr 29 14:31:56 2010 -0400
 
     [GPOS] Speedup apply_value()
 
 
     [GPOS] Speedup apply_value()
 
- src/hb-ot-layout-gpos-private.hh |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit 2cd1ea4411d0808559a942ff3fa4e637f9c9a9c8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2cd1ea4411d0808559a942ff3fa4e637f9c9a9c8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24052,8 +35610,8 @@ Date:   Thu Apr 29 14:15:32 2010 -0400
 
     [ft] Disallow getting the entire font data with tag=0
 
 
     [ft] Disallow getting the entire font data with tag=0
 
- src/hb-ft.c |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-ft.c | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 33d13fdda99acaeffa9600737e8870278d053ebe
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 33d13fdda99acaeffa9600737e8870278d053ebe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24061,20 +35619,20 @@ Date: Thu Apr 29 13:56:44 2010 -0400
 
     Rename HB_GNUC_UNUSED -> HB_UNUSED
 
 
     Rename HB_GNUC_UNUSED -> HB_UNUSED
 
- src/hb-buffer.c                     |    6 ++--
- src/hb-font.cc                              |   44
- +++++++++++++++++-----------------
- src/hb-ft.c                         |   16 ++++++------
- src/hb-object-private.h             |    2 +-
- src/hb-open-type-private.hh         |   18 +++++++-------
- src/hb-ot-layout-gdef-private.hh     |    4 +-
- src/hb-ot-layout-gpos-private.hh     |    4 +-
- src/hb-ot-layout-gsubgpos-private.hh |    6 ++--
- src/hb-ot-layout.cc                 |    4 +-
- src/hb-ot-shape.c                   |    2 +-
- src/hb-private.h                    |   16 ++++++------
- src/hb-shape.c                              |   32 ++++++++++++------------
- src/hb-unicode.c                    |    8 +++---
+ src/hb-buffer.c                     |  6 ++---
+ src/hb-font.cc                              | 44
+ ++++++++++++++++++------------------
+ src/hb-ft.c                         | 16 ++++++-------
+ src/hb-object-private.h             |  2 +-
+ src/hb-open-type-private.hh         | 18 +++++++--------
+ src/hb-ot-layout-gdef-private.hh     |  4 ++--
+ src/hb-ot-layout-gpos-private.hh     |  4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh |  6 ++---
+ src/hb-ot-layout.cc                 |  4 ++--
+ src/hb-ot-shape.c                   |  2 +-
+ src/hb-private.h                    | 16 ++++++-------
+ src/hb-shape.c                              | 32 +++++++++++++-------------
+ src/hb-unicode.c                    |  8 +++----
  13 files changed, 81 insertions(+), 81 deletions(-)
 
 commit 7d3a126334f8e6f6441561c1bb592bd3fa7a2c5c
  13 files changed, 81 insertions(+), 81 deletions(-)
 
 commit 7d3a126334f8e6f6441561c1bb592bd3fa7a2c5c
@@ -24083,9 +35641,9 @@ Date:   Thu Apr 29 13:54:01 2010 -0400
 
     Define HB_FUNC for portability to non-gcc
 
 
     Define HB_FUNC for portability to non-gcc
 
- src/hb-open-type-private.hh         |   12 ++++++------
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-private.h                    |    9 +++++++++
+ src/hb-open-type-private.hh         | 12 ++++++------
+ src/hb-ot-layout-gsubgpos-private.hh |  2 +-
+ src/hb-private.h                    |  9 +++++++++
  3 files changed, 16 insertions(+), 7 deletions(-)
 
 commit fa030175ca998b00cc42cbced6e98de323ec01ec
  3 files changed, 16 insertions(+), 7 deletions(-)
 
 commit fa030175ca998b00cc42cbced6e98de323ec01ec
@@ -24096,9 +35654,9 @@ Date:   Thu Apr 29 13:48:26 2010 -0400
 
     Such that we don't break debug build all the time.
 
 
     Such that we don't break debug build all the time.
 
- src/hb-open-type-private.hh |  71
- +++++++++++++++++++------------------------
- 1 files changed, 31 insertions(+), 40 deletions(-)
+ src/hb-open-type-private.hh | 71
+ ++++++++++++++++++++-------------------------
+ 1 file changed, 31 insertions(+), 40 deletions(-)
 
 commit fde6f5bd682f5ad0cc5e2ec69fc831b0192bf90b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fde6f5bd682f5ad0cc5e2ec69fc831b0192bf90b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24106,8 +35664,8 @@ Date:   Thu Apr 29 04:41:41 2010 -0400
 
     Convert to uppercase in hb_ot_tag_from_language()
 
 
     Convert to uppercase in hb_ot_tag_from_language()
 
- src/hb-ot-tag.c |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-tag.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit 6f729b45b04243c42ad7201b67cda9d5e5c363f1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6f729b45b04243c42ad7201b67cda9d5e5c363f1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24115,9 +35673,9 @@ Date:   Thu Apr 29 03:59:06 2010 -0400
 
     More contour point use
 
 
     More contour point use
 
- src/hb-font.cc                          |    1 +
- src/hb-ot-layout-gdef-private.hh |    8 +++++---
- src/hb-ot-layout-gpos-private.hh |   13 +++++++++----
+ src/hb-font.cc                          |  1 +
+ src/hb-ot-layout-gdef-private.hh |  8 +++++---
+ src/hb-ot-layout-gpos-private.hh | 13 +++++++++----
  3 files changed, 15 insertions(+), 7 deletions(-)
 
 commit 3840b6b50503ba2c9a99f774284e0077baffa8a0
  3 files changed, 15 insertions(+), 7 deletions(-)
 
 commit 3840b6b50503ba2c9a99f774284e0077baffa8a0
@@ -24126,8 +35684,8 @@ Date:   Thu Apr 29 03:48:27 2010 -0400
 
     [gdef] Fix delta scale
 
 
     [gdef] Fix delta scale
 
- src/hb-ot-layout-gdef-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gdef-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4ac6cc284b2c1eb670c2a3659ec385ed729acac4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ac6cc284b2c1eb670c2a3659ec385ed729acac4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24135,8 +35693,8 @@ Date:   Thu Apr 29 03:48:11 2010 -0400
 
     [gdef] Fix rounding
 
 
     [gdef] Fix rounding
 
- src/hb-ot-layout-gdef-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gdef-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit b52fbb1bab608bda76efb936f08344afaec600a1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b52fbb1bab608bda76efb936f08344afaec600a1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24144,8 +35702,8 @@ Date:   Thu Apr 29 03:47:00 2010 -0400
 
     [gdef] Implement getting contour point
 
 
     [gdef] Implement getting contour point
 
- src/hb-ot-layout-gdef-private.hh |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gdef-private.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 4c5fbae011a33b9efef5aedd61c357fc0ded1113
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c5fbae011a33b9efef5aedd61c357fc0ded1113
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24155,8 +35713,8 @@ Date:   Thu Apr 29 03:39:39 2010 -0400
 
     Reported by Jonathan Kew.
 
 
     Reported by Jonathan Kew.
 
- src/hb-shape.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-shape.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit ce23c9234b87513d6460fb89bad178fb8537e161
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ce23c9234b87513d6460fb89bad178fb8537e161
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24164,8 +35722,8 @@ Date:   Thu Apr 29 03:31:03 2010 -0400
 
     Use BCP47 private-use tags for OpenType tag language string mapping
 
 
     Use BCP47 private-use tags for OpenType tag language string mapping
 
- src/hb-ot-tag.c |   16 ++++++++--------
- 1 files changed, 8 insertions(+), 8 deletions(-)
+ src/hb-ot-tag.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
 
 commit eaf1d9a46c4a320f3b0026c0a610f95a620d566f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eaf1d9a46c4a320f3b0026c0a610f95a620d566f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24173,8 +35731,8 @@ Date:   Thu Apr 29 03:11:32 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-tag.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-tag.c | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3a4784fe88a0f14147ccdd3633952c9c0f3ae8f3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3a4784fe88a0f14147ccdd3633952c9c0f3ae8f3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24184,8 +35742,8 @@ Date:   Thu Apr 29 02:58:38 2010 -0400
 
     Reported by Jonathan Kew.
 
 
     Reported by Jonathan Kew.
 
- src/hb-language.c |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-language.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 602e4f8d5512cdf48c696ad64ad62ff97f6dbdcc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 602e4f8d5512cdf48c696ad64ad62ff97f6dbdcc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24193,8 +35751,8 @@ Date:   Thu Apr 29 02:28:54 2010 -0400
 
     Use const_cast
 
 
     Use const_cast
 
- src/hb-open-type-private.hh |   3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit abff3580a5b229641086e0da097efee11d22ff81
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit abff3580a5b229641086e0da097efee11d22ff81
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24202,8 +35760,8 @@ Date:   Thu Apr 29 02:27:20 2010 -0400
 
     Add const
 
 
     Add const
 
- src/hb-object-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6617eada95928457a25e29f793f1a93c6b3edaec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6617eada95928457a25e29f793f1a93c6b3edaec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24211,9 +35769,9 @@ Date:   Thu Apr 29 02:25:30 2010 -0400
 
     Rename apply_context -> context
 
 
     Rename apply_context -> context
 
- src/hb-ot-layout-gpos-private.hh     |   22 +++++++++++-----------
- src/hb-ot-layout-gsub-private.hh     |   26 +++++++++++++-------------
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
+ src/hb-ot-layout-gpos-private.hh     | 22 +++++++++++-----------
+ src/hb-ot-layout-gsub-private.hh     | 26 +++++++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++------
  3 files changed, 30 insertions(+), 30 deletions(-)
 
 commit b4c7fab762935b9c182b3e2ac3415f29fc6a5558
  3 files changed, 30 insertions(+), 30 deletions(-)
 
 commit b4c7fab762935b9c182b3e2ac3415f29fc6a5558
@@ -24222,10 +35780,10 @@ Date: Thu Apr 29 02:24:25 2010 -0400
 
     Rename
 
 
     Rename
 
- src/hb-ot-layout-gpos-private.hh     |   98
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   46 ++++++++--------
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++--
+ src/hb-ot-layout-gpos-private.hh     | 98
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 46 ++++++++---------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++---
  3 files changed, 78 insertions(+), 78 deletions(-)
 
 commit 1376fb7bf9ef07970f0ba13dc64d6a8ab8252762
  3 files changed, 78 insertions(+), 78 deletions(-)
 
 commit 1376fb7bf9ef07970f0ba13dc64d6a8ab8252762
@@ -24235,11 +35793,11 @@ Date: Thu Apr 29 02:19:21 2010 -0400
     [apply] Use a context object to reduce number of parameters passed
     around
 
     [apply] Use a context object to reduce number of parameters passed
     around
 
- src/hb-open-type-private.hh         |    5 +--
- src/hb-ot-layout-gpos-private.hh     |   26 +++++++++++++----------
- src/hb-ot-layout-gsub-private.hh     |   37
- ++++++++++++++++++---------------
- src/hb-ot-layout-gsubgpos-private.hh |   29 ++++++++++++++------------
+ src/hb-open-type-private.hh         |  5 ++---
+ src/hb-ot-layout-gpos-private.hh     | 26 ++++++++++++++-----------
+ src/hb-ot-layout-gsub-private.hh     | 37
+ +++++++++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos-private.hh | 29 +++++++++++++++-------------
  4 files changed, 53 insertions(+), 44 deletions(-)
 
 commit 173fde7087c0db3e99409f1119530477c14072f5
  4 files changed, 53 insertions(+), 44 deletions(-)
 
 commit 173fde7087c0db3e99409f1119530477c14072f5
@@ -24248,11 +35806,10 @@ Date: Thu Apr 29 01:47:30 2010 -0400
 
     Further simplify tracing
 
 
     Further simplify tracing
 
- src/hb-open-type-private.hh         |   31
- +++++++++++++++----------------
- src/hb-ot-layout-gpos-private.hh     |    9 +++++----
- src/hb-ot-layout-gsub-private.hh     |   11 ++++++-----
- src/hb-ot-layout-gsubgpos-private.hh |    8 --------
+ src/hb-open-type-private.hh         | 31 +++++++++++++++----------------
+ src/hb-ot-layout-gpos-private.hh     |  9 +++++----
+ src/hb-ot-layout-gsub-private.hh     | 11 ++++++-----
+ src/hb-ot-layout-gsubgpos-private.hh |  8 --------
  4 files changed, 26 insertions(+), 33 deletions(-)
 
 commit bc200457430c083914a64bf4b056153506749610
  4 files changed, 26 insertions(+), 33 deletions(-)
 
 commit bc200457430c083914a64bf4b056153506749610
@@ -24261,10 +35818,10 @@ Date: Thu Apr 29 01:40:26 2010 -0400
 
     Simplify trace code
 
 
     Simplify trace code
 
- src/hb-open-type-private.hh         |   41 ++++++++---------------------
- src/hb-ot-layout-gsubgpos-private.hh |   25 ++++-------------
- src/hb-private.h                    |   48
- ++++++++++++++++++++++++----------
+ src/hb-open-type-private.hh         | 41 +++++++++---------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 25 +++++--------------
+ src/hb-private.h                    | 48
+ +++++++++++++++++++++++++-----------
  3 files changed, 51 insertions(+), 63 deletions(-)
 
 commit 807c5b03a2251a3c29a520852639421783101b55
  3 files changed, 51 insertions(+), 63 deletions(-)
 
 commit 807c5b03a2251a3c29a520852639421783101b55
@@ -24275,9 +35832,8 @@ Date:   Wed Apr 28 20:25:22 2010 -0400
 
     Such that we don't break debug build all the time.
 
 
     Such that we don't break debug build all the time.
 
- src/hb-open-type-private.hh         |   31
- ++++++++++++++++++++-----------
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-type-private.hh         | 31 ++++++++++++++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.hh |  2 +-
  2 files changed, 21 insertions(+), 12 deletions(-)
 
 commit 74e313c016704e1d9157c2763691c4151f049dfc
  2 files changed, 21 insertions(+), 12 deletions(-)
 
 commit 74e313c016704e1d9157c2763691c4151f049dfc
@@ -24288,9 +35844,9 @@ Date:   Wed Apr 28 15:15:09 2010 -0400
 
     Such that we don't break debug build all the time.
 
 
     Such that we don't break debug build all the time.
 
- src/hb-ot-layout-gsubgpos-private.hh |   52
- +++++++++++++++++-----------------
- 1 files changed, 26 insertions(+), 26 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 52
+ ++++++++++++++++++------------------
+ 1 file changed, 26 insertions(+), 26 deletions(-)
 
 commit 41011a6ed7c4891b20c0eddbb6d4ad9c820cfddb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 41011a6ed7c4891b20c0eddbb6d4ad9c820cfddb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24298,8 +35854,8 @@ Date:   Wed Apr 28 13:33:09 2010 -0400
 
     Fix compiler warning about value unused
 
 
     Fix compiler warning about value unused
 
- src/hb-object-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 863df68e894b7644dcd12da88aa22f73edf829dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 863df68e894b7644dcd12da88aa22f73edf829dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24309,8 +35865,8 @@ Date:   Wed Apr 28 13:29:55 2010 -0400
 
     Such that we don't break debug build all the time.
 
 
     Such that we don't break debug build all the time.
 
- src/hb-object-private.h |   42 +++++++++++++++++++++++++++---------------
- 1 files changed, 27 insertions(+), 15 deletions(-)
+ src/hb-object-private.h | 42 +++++++++++++++++++++++++++---------------
+ 1 file changed, 27 insertions(+), 15 deletions(-)
 
 commit 1d52151a19ed8ec776276aac5cc6ce3769e0d947
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1d52151a19ed8ec776276aac5cc6ce3769e0d947
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24318,8 +35874,8 @@ Date:   Wed Apr 28 13:18:41 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-private.h |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/hb-private.h | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 444fffb1ab378cb3022e2a8e9f90d20a00c82f6a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 444fffb1ab378cb3022e2a8e9f90d20a00c82f6a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24329,9 +35885,9 @@ Date:   Wed Apr 28 13:16:38 2010 -0400
 
     Such that we don't break debug build all the time.
 
 
     Such that we don't break debug build all the time.
 
- src/hb-blob.c |   78
- +++++++++++++++++++++++---------------------------------
- 1 files changed, 32 insertions(+), 46 deletions(-)
+ src/hb-blob.c | 78
+ ++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 32 insertions(+), 46 deletions(-)
 
 commit ba51b25c7ba568aeced17f016eceba987569c5d9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ba51b25c7ba568aeced17f016eceba987569c5d9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24339,8 +35895,8 @@ Date:   Wed Apr 28 13:10:36 2010 -0400
 
     Fix build. Ouch!
 
 
     Fix build. Ouch!
 
- src/hb-object-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit a92f0fda7fee9d60b399b8865541bf73e6e30141
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a92f0fda7fee9d60b399b8865541bf73e6e30141
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24348,8 +35904,8 @@ Date:   Wed Apr 28 13:09:40 2010 -0400
 
     Fix debug build
 
 
     Fix debug build
 
- src/hb-open-type-private.hh         |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-type-private.hh         | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit c165f25410f817d248ad5d07e1827d33efd1b0a0
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit c165f25410f817d248ad5d07e1827d33efd1b0a0
@@ -24360,8 +35916,8 @@ Date:   Tue Apr 27 23:28:10 2010 -0400
 
     Caught by John Daggett.
 
 
     Caught by John Daggett.
 
- src/hb-object-private.h |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-object-private.h | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit caff7db93d205e32a535d49e51a3cad70f91dfdd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit caff7db93d205e32a535d49e51a3cad70f91dfdd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24369,8 +35925,8 @@ Date:   Mon Apr 26 10:07:35 2010 -0400
 
     Fix Device::get_size() calculation
 
 
     Fix Device::get_size() calculation
 
- src/hb-ot-layout-common-private.hh |   8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 66d6eb30eb0b8d61e00f86ea0c7829abaddb52fa
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 66d6eb30eb0b8d61e00f86ea0c7829abaddb52fa
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24378,8 +35934,8 @@ Date:   Sun Apr 25 23:01:45 2010 -0400
 
     Rename Var to Obj
 
 
     Rename Var to Obj
 
- src/hb-open-type-private.hh |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-open-type-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 690b9194619589c32ffc0c092e45262ae7776e79
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 690b9194619589c32ffc0c092e45262ae7776e79
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24390,10 +35946,10 @@ Date: Sun Apr 25 22:51:05 2010 -0400
     Also remove wrong ASSERT_SIZE that would trigger only when not using
     flexible arrays (which was the case on win32, but not with gcc).
 
     Also remove wrong ASSERT_SIZE that would trigger only when not using
     flexible arrays (which was the case on win32, but not with gcc).
 
- configure.ac               |    2 --
- src/hb-open-file-private.hh |   1 -
- src/hb-private.h           |    4 ----
- 3 files changed, 0 insertions(+), 7 deletions(-)
+ configure.ac               | 2 --
+ src/hb-open-file-private.hh | 1 -
+ src/hb-private.h           | 4 ----
+ 3 files changed, 7 deletions(-)
 
 commit 1cebfbb0636b13dc5dc6a4b8b7acbb7da28129d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1cebfbb0636b13dc5dc6a4b8b7acbb7da28129d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24401,12 +35957,12 @@ Date: Fri Apr 23 20:49:18 2010 -0400
 
     Cleanup hb_face_create_for_data()
 
 
     Cleanup hb_face_create_for_data()
 
- src/Makefile.am       |    1 +
- src/hb-blob-private.h |   57 ++++++++++++++++++++++++++++++
- src/hb-blob.c        |   20 +---------
- src/hb-font-private.h |    3 --
- src/hb-font.cc        |   92
- +++++++++++++++++++++++++++++++++---------------
+ src/Makefile.am       |  1 +
+ src/hb-blob-private.h | 57 +++++++++++++++++++++++++++++++
+ src/hb-blob.c        | 20 ++---------
+ src/hb-font-private.h |  3 --
+ src/hb-font.cc        | 92
+ +++++++++++++++++++++++++++++++++++----------------
  5 files changed, 123 insertions(+), 50 deletions(-)
 
 commit d6b3c83a90f60bedb4049750ffb351161710980d
  5 files changed, 123 insertions(+), 50 deletions(-)
 
 commit d6b3c83a90f60bedb4049750ffb351161710980d
@@ -24415,8 +35971,8 @@ Date:   Fri Apr 23 19:59:53 2010 -0400
 
     Allow get_table() to return NULL
 
 
     Allow get_table() to return NULL
 
- src/hb-font.cc |    6 +++++-
- src/hb-ft.c   |    2 +-
+ src/hb-font.cc | 6 +++++-
+ src/hb-ft.c   | 2 +-
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit ad3653751b1e4a03f7058200cb83f64db46722d5
  2 files changed, 6 insertions(+), 2 deletions(-)
 
 commit ad3653751b1e4a03f7058200cb83f64db46722d5
@@ -24425,8 +35981,8 @@ Date:   Fri Apr 23 19:43:40 2010 -0400
 
     Typo
 
 
     Typo
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 990443e5f282ad61de00dcf1ebff9cf1d5bc2d70
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 990443e5f282ad61de00dcf1ebff9cf1d5bc2d70
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24434,9 +35990,9 @@ Date:   Fri Apr 23 17:53:32 2010 -0400
 
     Remove lock_instance()
 
 
     Remove lock_instance()
 
- src/hb-font.cc                     |    2 +-
- src/hb-open-type-private.hh |   4 ----
- src/hb-ot-layout.cc        |    6 +++---
+ src/hb-font.cc                     | 2 +-
+ src/hb-open-type-private.hh | 4 ----
+ src/hb-ot-layout.cc        | 6 +++---
  3 files changed, 4 insertions(+), 8 deletions(-)
 
 commit 187454c595559ce48d072fee6bccb51f3de283d4
  3 files changed, 4 insertions(+), 8 deletions(-)
 
 commit 187454c595559ce48d072fee6bccb51f3de283d4
@@ -24445,10 +36001,10 @@ Date: Fri Apr 23 16:35:01 2010 -0400
 
     Add different casts from pointer and ref to avoid bugs
 
 
     Add different casts from pointer and ref to avoid bugs
 
- src/hb-open-type-private.hh     |   22 +++++++++++++++-------
- src/hb-ot-layout-gpos-private.hh |    8 ++++----
- src/hb-ot-layout-gsub-private.hh |   12 ++++++------
- src/main.cc                     |    6 +++---
+ src/hb-open-type-private.hh     | 22 +++++++++++++++-------
+ src/hb-ot-layout-gpos-private.hh |  8 ++++----
+ src/hb-ot-layout-gsub-private.hh | 12 ++++++------
+ src/main.cc                     |  6 +++---
  4 files changed, 28 insertions(+), 20 deletions(-)
 
 commit efb324a46ff64adb4ec8612b4089e8daff1e6d8e
  4 files changed, 28 insertions(+), 20 deletions(-)
 
 commit efb324a46ff64adb4ec8612b4089e8daff1e6d8e
@@ -24460,13 +36016,13 @@ Date: Fri Apr 23 16:22:54 2010 -0400
     The major-version check is now handled by sanitize.  If major
     doesn't match, we reject and fall back to the Null object.
 
     The major-version check is now handled by sanitize.  If major
     doesn't match, we reject and fall back to the Null object.
 
- src/hb-open-file-private.hh         |    4 ----
- src/hb-open-type-private.hh         |   23 ++---------------------
- src/hb-ot-layout-gdef-private.hh     |    2 --
- src/hb-ot-layout-gpos-private.hh     |    3 ---
- src/hb-ot-layout-gsub-private.hh     |    3 ---
- src/hb-ot-layout-gsubgpos-private.hh |    2 --
- src/main.cc                         |    6 +++---
+ src/hb-open-file-private.hh         |  4 ----
+ src/hb-open-type-private.hh         | 23 ++---------------------
+ src/hb-ot-layout-gdef-private.hh     |  2 --
+ src/hb-ot-layout-gpos-private.hh     |  3 ---
+ src/hb-ot-layout-gsub-private.hh     |  3 ---
+ src/hb-ot-layout-gsubgpos-private.hh |  2 --
+ src/main.cc                         |  6 +++---
  7 files changed, 5 insertions(+), 38 deletions(-)
 
 commit f1aaa2a43654c28405ffd393de2cb127437c99a5
  7 files changed, 5 insertions(+), 38 deletions(-)
 
 commit f1aaa2a43654c28405ffd393de2cb127437c99a5
@@ -24475,11 +36031,11 @@ Date: Fri Apr 23 15:19:50 2010 -0400
 
     Add TODO
 
 
     Add TODO
 
- src/hb-ft.c                       |    2 --
- src/hb-ft.h                       |    1 +
- src/hb-open-file-private.hh       |    2 +-
- src/hb-open-type-private.hh       |    2 ++
- src/hb-ot-layout-common-private.hh |  12 ++++++------
+ src/hb-ft.c                       |  2 --
+ src/hb-ft.h                       |  1 +
+ src/hb-open-file-private.hh       |  2 +-
+ src/hb-open-type-private.hh       |  2 ++
+ src/hb-ot-layout-common-private.hh | 12 ++++++------
  5 files changed, 10 insertions(+), 9 deletions(-)
 
 commit 33d4d4325e15e332105ea8f361bab79ee542f0f8
  5 files changed, 10 insertions(+), 9 deletions(-)
 
 commit 33d4d4325e15e332105ea8f361bab79ee542f0f8
@@ -24488,8 +36044,8 @@ Date:   Fri Apr 23 14:56:55 2010 -0400
 
     Zero glyph metrics before calling user callback
 
 
     Zero glyph metrics before calling user callback
 
- src/hb-font.cc |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-font.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 4206e9511a222c0c50cc9b4fe72ec421983bba2c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4206e9511a222c0c50cc9b4fe72ec421983bba2c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24497,9 +36053,9 @@ Date:   Fri Apr 23 14:44:55 2010 -0400
 
     More warning fixes
 
 
     More warning fixes
 
- src/hb-ot-layout.cc |   4 ++--
- src/hb-ot-shape.c   |   9 ++++-----
- src/hb-shape.c      |  32 ++++++++++++++++----------------
+ src/hb-ot-layout.cc | 4 ++--
+ src/hb-ot-shape.c   | 9 ++++-----
+ src/hb-shape.c      | 32 ++++++++++++++++----------------
  3 files changed, 22 insertions(+), 23 deletions(-)
 
 commit ef66ebeabc6c234004bd9e9bb67eb5c9711f4a1e
  3 files changed, 22 insertions(+), 23 deletions(-)
 
 commit ef66ebeabc6c234004bd9e9bb67eb5c9711f4a1e
@@ -24508,8 +36064,8 @@ Date:   Fri Apr 23 14:40:36 2010 -0400
 
     Remove unused parameter
 
 
     Remove unused parameter
 
- src/hb-open-file-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-file-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 1d720192b193f48b44be0385eda3c2c5d5cd28ad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1d720192b193f48b44be0385eda3c2c5d5cd28ad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24517,11 +36073,11 @@ Date: Fri Apr 23 14:39:10 2010 -0400
 
     Fix compile warnings (HB_GNUC_UNUSED)
 
 
     Fix compile warnings (HB_GNUC_UNUSED)
 
- src/hb-buffer.c            |    6 +++---
- src/hb-font.cc                     |   31 ++++++++++++++++++++++---------
- src/hb-ft.c                |   29 +++++++++++++++++++++--------
- src/hb-open-type-private.hh |   2 +-
- src/hb-unicode.c           |    8 ++++----
+ src/hb-buffer.c            |  6 +++---
+ src/hb-font.cc                     | 31 ++++++++++++++++++++++---------
+ src/hb-ft.c                | 29 +++++++++++++++++++++--------
+ src/hb-open-type-private.hh | 2 +-
+ src/hb-unicode.c           |  8 ++++----
  5 files changed, 51 insertions(+), 25 deletions(-)
 
 commit 8dfdca599c0a3ba5255131002910bca3b381acac
  5 files changed, 51 insertions(+), 25 deletions(-)
 
 commit 8dfdca599c0a3ba5255131002910bca3b381acac
@@ -24530,8 +36086,8 @@ Date:   Fri Apr 23 14:07:34 2010 -0400
 
     No need to keep blob in sanitize context
 
 
     No need to keep blob in sanitize context
 
- src/hb-open-type-private.hh |  13 +++++--------
- 1 files changed, 5 insertions(+), 8 deletions(-)
+ src/hb-open-type-private.hh | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
 
 commit 254933c397f1ce9796f59689a25f9fc2e58df4ea
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 254933c397f1ce9796f59689a25f9fc2e58df4ea
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24547,8 +36103,8 @@ Date:   Fri Apr 23 13:57:10 2010 -0400
     fallback
     was doing anyway.
 
     fallback
     was doing anyway.
 
- src/hb-open-type-private.hh |  11 +++++++----
- 1 files changed, 7 insertions(+), 4 deletions(-)
+ src/hb-open-type-private.hh | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
 
 commit 71e735e915c85536ee4d3035576f7426e8cd19dd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71e735e915c85536ee4d3035576f7426e8cd19dd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24556,8 +36112,8 @@ Date:   Fri Apr 23 13:48:06 2010 -0400
 
     [blob] Fallback to copying if mprotect() fails
 
 
     [blob] Fallback to copying if mprotect() fails
 
- src/hb-blob.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-blob.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 1aa4666b914da7747fc58a8f6f2d913c94e3b8da
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1aa4666b914da7747fc58a8f6f2d913c94e3b8da
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24565,9 +36121,9 @@ Date:   Fri Apr 23 13:32:03 2010 -0400
 
     Cleanup OpenTypeFontFile
 
 
     Cleanup OpenTypeFontFile
 
- src/hb-open-file-private.hh |  44
- +++++++++++++++++++++++++-----------------
- src/main.cc                |    2 +-
+ src/hb-open-file-private.hh | 44
+ ++++++++++++++++++++++++++------------------
+ src/main.cc                |  2 +-
  2 files changed, 27 insertions(+), 19 deletions(-)
 
 commit ae4190cafe927649f8ff8be6a0082478d1298fda
  2 files changed, 27 insertions(+), 19 deletions(-)
 
 commit ae4190cafe927649f8ff8be6a0082478d1298fda
@@ -24576,9 +36132,9 @@ Date:   Fri Apr 23 12:33:02 2010 -0400
 
     Properly define separate structs for TTCHeader and TTCHeaderVersion1
 
 
     Properly define separate structs for TTCHeader and TTCHeaderVersion1
 
- src/hb-open-file-private.hh |  71
- +++++++++++++++++++++++++++++++++----------
- 1 files changed, 55 insertions(+), 16 deletions(-)
+ src/hb-open-file-private.hh | 71
+ +++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 55 insertions(+), 16 deletions(-)
 
 commit a065f471b3bc23d33ef75217308efeaed4ffd033
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a065f471b3bc23d33ef75217308efeaed4ffd033
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24594,9 +36150,9 @@ Date:   Thu Apr 22 20:15:11 2010 -0400
     2. Move the check for all Extension subtables having the same lookup
     type to the correct place. Before it wasn't really working.
 
     2. Move the check for all Extension subtables having the same lookup
     type to the correct place. Before it wasn't really working.
 
- src/hb-ot-layout-gpos-private.hh |   29 +------------------
- src/hb-ot-layout-gsub-private.hh |   57
- +++++++++++++++++++++----------------
+ src/hb-ot-layout-gpos-private.hh | 29 +-------------------
+ src/hb-ot-layout-gsub-private.hh | 57
+ ++++++++++++++++++++++------------------
  2 files changed, 33 insertions(+), 53 deletions(-)
 
 commit a0bb49c5830f8a7f25d573ec57b79df2620ddba7
  2 files changed, 33 insertions(+), 53 deletions(-)
 
 commit a0bb49c5830f8a7f25d573ec57b79df2620ddba7
@@ -24605,8 +36161,8 @@ Date:   Thu Apr 22 18:47:03 2010 -0400
 
     Add comment re bsearch effect on sanitize
 
 
     Add comment re bsearch effect on sanitize
 
- src/hb-open-file-private.hh       |    2 +-
- src/hb-ot-layout-common-private.hh |   8 ++++----
+ src/hb-open-file-private.hh       | 2 +-
+ src/hb-ot-layout-common-private.hh | 8 ++++----
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d632ec4000b3079150e6424e88a3ab7509f7445c
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit d632ec4000b3079150e6424e88a3ab7509f7445c
@@ -24615,8 +36171,8 @@ Date:   Thu Apr 22 18:33:12 2010 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-open-type-private.hh         |    6 +++---
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-type-private.hh         | 6 +++---
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit a3263aa773ad7a914496792466c69047048b093c
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit a3263aa773ad7a914496792466c69047048b093c
@@ -24625,12 +36181,12 @@ Date: Thu Apr 22 18:29:09 2010 -0400
 
     Convert the last set of cast macros to templates
 
 
     Convert the last set of cast macros to templates
 
- src/hb-open-file-private.hh         |    4 +-
- src/hb-open-type-private.hh         |   53
- +++++++++++++++++++++------------
- src/hb-ot-layout-gpos-private.hh     |   16 +++++-----
- src/hb-ot-layout-gsub-private.hh     |   14 ++++----
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++++----
+ src/hb-open-file-private.hh         |  4 +--
+ src/hb-open-type-private.hh         | 53
+ +++++++++++++++++++++++-------------
+ src/hb-ot-layout-gpos-private.hh     | 16 +++++------
+ src/hb-ot-layout-gsub-private.hh     | 14 +++++-----
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++----
  5 files changed, 57 insertions(+), 42 deletions(-)
 
 commit c38188a1912f72d9ef90ae1bcbdbba7ecce63371
  5 files changed, 57 insertions(+), 42 deletions(-)
 
 commit c38188a1912f72d9ef90ae1bcbdbba7ecce63371
@@ -24639,8 +36195,8 @@ Date:   Thu Apr 22 16:52:09 2010 -0400
 
     Remove unused macro
 
 
     Remove unused macro
 
- src/hb-open-type-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 3b2c2df41b90f2a1d9e33b3dc15a92cff58a689a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3b2c2df41b90f2a1d9e33b3dc15a92cff58a689a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24648,10 +36204,10 @@ Date: Thu Apr 22 16:51:42 2010 -0400
 
     Cleanup Extension sanitize()
 
 
     Cleanup Extension sanitize()
 
- src/hb-ot-layout-common-private.hh   |   20 +++-----------------
- src/hb-ot-layout-gpos-private.hh     |   20 +++++++++++++-------
- src/hb-ot-layout-gsub-private.hh     |   20 +++++++++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   13 ++++---------
+ src/hb-ot-layout-common-private.hh   | 20 +++-----------------
+ src/hb-ot-layout-gpos-private.hh     | 20 +++++++++++++-------
+ src/hb-ot-layout-gsub-private.hh     | 20 +++++++++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 13 ++++---------
  4 files changed, 33 insertions(+), 40 deletions(-)
 
 commit 1856184b93760a1a54fb1a3c54281bb252df7ce6
  4 files changed, 33 insertions(+), 40 deletions(-)
 
 commit 1856184b93760a1a54fb1a3c54281bb252df7ce6
@@ -24663,9 +36219,9 @@ Date:   Thu Apr 22 14:15:11 2010 -0400
     We handle major-version differences via get_for_data(), so sanitize
     should never see a major version mismatch.
 
     We handle major-version differences via get_for_data(), so sanitize
     should never see a major version mismatch.
 
- src/hb-open-file-private.hh         |    4 ++--
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-file-private.hh         | 4 ++--
+ src/hb-ot-layout-gdef-private.hh     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  3 files changed, 4 insertions(+), 4 deletions(-)
 
 commit df3f505dcfeefc8cd395900b116767d22549f756
  3 files changed, 4 insertions(+), 4 deletions(-)
 
 commit df3f505dcfeefc8cd395900b116767d22549f756
@@ -24674,8 +36230,8 @@ Date:   Thu Apr 22 14:11:33 2010 -0400
 
     More sanitize cleanup
 
 
     More sanitize cleanup
 
- src/hb-open-file-private.hh |  24 ++----------------------
- src/main.cc                |    4 ++--
+ src/hb-open-file-private.hh | 24 ++----------------------
+ src/main.cc                |  4 ++--
  2 files changed, 4 insertions(+), 24 deletions(-)
 
 commit 278a91f0cd802ac817c2603429bae1fa4a350ea0
  2 files changed, 4 insertions(+), 24 deletions(-)
 
 commit 278a91f0cd802ac817c2603429bae1fa4a350ea0
@@ -24686,8 +36242,8 @@ Date:   Thu Apr 22 13:59:39 2010 -0400
 
     Done with an audit of all sanitize()
 
 
     Done with an audit of all sanitize()
 
- src/hb-ot-layout-gpos-private.hh |   18 +++++++++---------
- 1 files changed, 9 insertions(+), 9 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
 
 commit 9ac7dc73bc24b6dafb94df5de9cbf8fa0c82d5bc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9ac7dc73bc24b6dafb94df5de9cbf8fa0c82d5bc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24695,8 +36251,8 @@ Date:   Thu Apr 22 13:50:22 2010 -0400
 
     Check for (impossible) overflow
 
 
     Check for (impossible) overflow
 
- src/hb-ot-layout-gpos-private.hh |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 9fc8684fd85ef6ec82b3b54323761bbdd4c3d891
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9fc8684fd85ef6ec82b3b54323761bbdd4c3d891
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24704,8 +36260,8 @@ Date:   Thu Apr 22 13:37:58 2010 -0400
 
     Cleanup ContextFormat3 sanitize
 
 
     Cleanup ContextFormat3 sanitize
 
- src/hb-ot-layout-gsubgpos-private.hh |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit e77302c61f1f1620d1f438a997575fa6ee5c172e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e77302c61f1f1620d1f438a997575fa6ee5c172e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24713,8 +36269,8 @@ Date:   Thu Apr 22 13:34:00 2010 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-ot-layout-common-private.hh |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 7c469c3ca4ed4e45c50eff70df59b1a4780bae5b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7c469c3ca4ed4e45c50eff70df59b1a4780bae5b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24722,8 +36278,8 @@ Date:   Thu Apr 22 13:26:21 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit dc228048a813e43356373505168d3822deea5d72
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dc228048a813e43356373505168d3822deea5d72
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24733,9 +36289,9 @@ Date:   Thu Apr 22 13:22:41 2010 -0400
 
     Serves no useful purpose.
 
 
     Serves no useful purpose.
 
- src/hb-open-type-private.hh       |    9 ---------
- src/hb-ot-layout-common-private.hh |   2 +-
- 2 files changed, 1 insertions(+), 10 deletions(-)
+ src/hb-open-type-private.hh       | 9 ---------
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 2 files changed, 1 insertion(+), 10 deletions(-)
 
 commit 8015a8c762dc7be36998d529b7a3af59e3d14d87
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8015a8c762dc7be36998d529b7a3af59e3d14d87
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24745,8 +36301,8 @@ Date:   Thu Apr 22 11:06:30 2010 -0400
 
     That part is performed by individual table sanitize.
 
 
     That part is performed by individual table sanitize.
 
- src/hb-open-file-private.hh |  15 +++++++++------
- 1 files changed, 9 insertions(+), 6 deletions(-)
+ src/hb-open-file-private.hh | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
 
 commit c293581e962b7982622e7d607fa3909b40da718e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c293581e962b7982622e7d607fa3909b40da718e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24754,8 +36310,8 @@ Date:   Thu Apr 22 11:15:46 2010 -0400
 
     Add coment
 
 
     Add coment
 
- src/hb-open-type-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 1faa76c6e848c6b0e360d9ddcf567533b87f8f31
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1faa76c6e848c6b0e360d9ddcf567533b87f8f31
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24763,8 +36319,8 @@ Date:   Thu Apr 22 10:54:26 2010 -0400
 
     Remove unnecessary casts
 
 
     Remove unnecessary casts
 
- src/hb-open-type-private.hh |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-open-type-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 079dc40112d3908ff7b7028ea3019bfe82bf606d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 079dc40112d3908ff7b7028ea3019bfe82bf606d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24772,8 +36328,8 @@ Date:   Thu Apr 22 10:47:12 2010 -0400
 
     Avoid overflow in TableDirectory sanitize
 
 
     Avoid overflow in TableDirectory sanitize
 
- src/hb-open-file-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-file-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit fb5904ec935d925a423401bc975ffaa22022ce1b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb5904ec935d925a423401bc975ffaa22022ce1b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24781,8 +36337,8 @@ Date:   Thu Apr 22 10:43:30 2010 -0400
 
     Make casts more explicit
 
 
     Make casts more explicit
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 565c80bd2960366ace2d10dd71beaaf2a80213c8
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 565c80bd2960366ace2d10dd71beaaf2a80213c8
@@ -24791,8 +36347,8 @@ Date:   Thu Apr 22 10:26:35 2010 -0400
 
     Make sure semicolon is expected after DEFINE_NULL_DATA()
 
 
     Make sure semicolon is expected after DEFINE_NULL_DATA()
 
- src/hb-open-type-private.hh |   5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit bb1e16335e537231246f44740f73cc23c0707364
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bb1e16335e537231246f44740f73cc23c0707364
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24800,8 +36356,8 @@ Date:   Thu Apr 22 01:01:35 2010 -0400
 
     Improve Subst/Pos SubTable access and sanitize
 
 
     Improve Subst/Pos SubTable access and sanitize
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 81f2af40f9afd5bb9695018e6baddcd4aa3361c1
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 81f2af40f9afd5bb9695018e6baddcd4aa3361c1
@@ -24810,8 +36366,8 @@ Date:   Thu Apr 22 00:58:49 2010 -0400
 
     Simplify Extension offset now that our int types have no alignment
 
 
     Simplify Extension offset now that our int types have no alignment
 
- src/hb-ot-layout-gsubgpos-private.hh |    9 +++------
- 1 files changed, 3 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
 
 commit 19828ad42d8117563412aae3c70887aa117805a9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 19828ad42d8117563412aae3c70887aa117805a9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24819,8 +36375,8 @@ Date:   Thu Apr 22 00:49:16 2010 -0400
 
     Sanitize shallow in Lookup since the generic SubLookup has no methods
 
 
     Sanitize shallow in Lookup since the generic SubLookup has no methods
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e5546a4352c54311ac4a9ef138b187378155ebe1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e5546a4352c54311ac4a9ef138b187378155ebe1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24828,8 +36384,8 @@ Date:   Thu Apr 22 00:45:42 2010 -0400
 
     Watch for overflow in Array sanitize
 
 
     Watch for overflow in Array sanitize
 
- src/hb-open-type-private.hh       |   21 +++++++++++++++------
- src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-open-type-private.hh       | 21 +++++++++++++++------
+ src/hb-ot-layout-common-private.hh |  2 +-
  2 files changed, 16 insertions(+), 7 deletions(-)
 
 commit 4f5f1c34dda1e0629bfa6d7b0ffa2e1ce003b7c7
  2 files changed, 16 insertions(+), 7 deletions(-)
 
 commit 4f5f1c34dda1e0629bfa6d7b0ffa2e1ce003b7c7
@@ -24838,9 +36394,9 @@ Date:   Thu Apr 22 00:27:39 2010 -0400
 
     Rename const_sub_array to sub_array since all consts are implicit now
 
 
     Rename const_sub_array to sub_array since all consts are implicit now
 
- src/hb-open-type-private.hh       |    2 +-
- src/hb-ot-layout-common-private.hh |   4 ++--
- src/hb-ot-layout-gdef-private.hh   |   4 ++--
+ src/hb-open-type-private.hh       | 2 +-
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ src/hb-ot-layout-gdef-private.hh   | 4 ++--
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 0795b784dd1009976c185482a376df250167e73b
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 0795b784dd1009976c185482a376df250167e73b
@@ -24849,8 +36405,8 @@ Date:   Thu Apr 22 00:23:14 2010 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-layout-common-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-common-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 2d98d3bbaa0ddadcb08b5a8f437b18c211c50768
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2d98d3bbaa0ddadcb08b5a8f437b18c211c50768
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24858,8 +36414,8 @@ Date:   Thu Apr 22 00:19:30 2010 -0400
 
     Simplify Lookup sanitize
 
 
     Simplify Lookup sanitize
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c755cb3e3ac55156d0d2ec05adea7a650b97cc41
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c755cb3e3ac55156d0d2ec05adea7a650b97cc41
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24867,48 +36423,48 @@ Date: Thu Apr 22 00:11:43 2010 -0400
 
     Change header comment
 
 
     Change header comment
 
- README                                      |    2 +-
- src/hb-blob.c                       |    2 +-
- src/hb-blob.h                       |    2 +-
- src/hb-buffer-private.h             |    2 +-
- src/hb-buffer.c                     |    2 +-
- src/hb-buffer.h                     |    2 +-
- src/hb-common.h                     |    2 +-
- src/hb-font-private.h               |    2 +-
- src/hb-font.cc                              |    2 +-
- src/hb-font.h                       |    2 +-
- src/hb-ft.c                         |    2 +-
- src/hb-ft.h                         |    2 +-
- src/hb-glib.c                       |    2 +-
- src/hb-glib.h                       |    2 +-
- src/hb-icu.c                        |    2 +-
- src/hb-icu.h                        |    2 +-
- src/hb-language.c                   |    2 +-
- src/hb-language.h                   |    2 +-
- src/hb-object-private.h             |    2 +-
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-type-private.hh         |    2 +-
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
- src/hb-ot-layout-private.h          |    2 +-
- src/hb-ot-layout.cc                 |    2 +-
- src/hb-ot-layout.h                  |    2 +-
- src/hb-ot-shape-private.h           |    2 +-
- src/hb-ot-shape.c                   |    2 +-
- src/hb-ot-tag.c                     |    2 +-
- src/hb-ot-tag.h                     |    2 +-
- src/hb-ot.h                         |    2 +-
- src/hb-private.h                    |    2 +-
- src/hb-shape.c                              |    2 +-
- src/hb-shape.h                              |    2 +-
- src/hb-unicode-private.h            |    2 +-
- src/hb-unicode.c                    |    2 +-
- src/hb-unicode.h                    |    2 +-
- src/hb.h                            |    2 +-
- src/main.cc                         |    2 +-
+ README                                      | 2 +-
+ src/hb-blob.c                       | 2 +-
+ src/hb-blob.h                       | 2 +-
+ src/hb-buffer-private.h             | 2 +-
+ src/hb-buffer.c                     | 2 +-
+ src/hb-buffer.h                     | 2 +-
+ src/hb-common.h                     | 2 +-
+ src/hb-font-private.h               | 2 +-
+ src/hb-font.cc                              | 2 +-
+ src/hb-font.h                       | 2 +-
+ src/hb-ft.c                         | 2 +-
+ src/hb-ft.h                         | 2 +-
+ src/hb-glib.c                       | 2 +-
+ src/hb-glib.h                       | 2 +-
+ src/hb-icu.c                        | 2 +-
+ src/hb-icu.h                        | 2 +-
+ src/hb-language.c                   | 2 +-
+ src/hb-language.h                   | 2 +-
+ src/hb-object-private.h             | 2 +-
+ src/hb-open-file-private.hh         | 2 +-
+ src/hb-open-type-private.hh         | 2 +-
+ src/hb-ot-layout-common-private.hh   | 2 +-
+ src/hb-ot-layout-gdef-private.hh     | 2 +-
+ src/hb-ot-layout-gpos-private.hh     | 2 +-
+ src/hb-ot-layout-gsub-private.hh     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ src/hb-ot-layout-private.h          | 2 +-
+ src/hb-ot-layout.cc                 | 2 +-
+ src/hb-ot-layout.h                  | 2 +-
+ src/hb-ot-shape-private.h           | 2 +-
+ src/hb-ot-shape.c                   | 2 +-
+ src/hb-ot-tag.c                     | 2 +-
+ src/hb-ot-tag.h                     | 2 +-
+ src/hb-ot.h                         | 2 +-
+ src/hb-private.h                    | 2 +-
+ src/hb-shape.c                              | 2 +-
+ src/hb-shape.h                              | 2 +-
+ src/hb-unicode-private.h            | 2 +-
+ src/hb-unicode.c                    | 2 +-
+ src/hb-unicode.h                    | 2 +-
+ src/hb.h                            | 2 +-
+ src/main.cc                         | 2 +-
  42 files changed, 42 insertions(+), 42 deletions(-)
 
 commit 243d20e011e251462a07947275e0e98cc19c7e9b
  42 files changed, 42 insertions(+), 42 deletions(-)
 
 commit 243d20e011e251462a07947275e0e98cc19c7e9b
@@ -24917,8 +36473,8 @@ Date:   Wed Apr 21 23:57:01 2010 -0400
 
     More cast simplification
 
 
     More cast simplification
 
- src/hb-open-type-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 0dfcc13a4668cdd2c2ebdd5f4a7540a51222cf2f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0dfcc13a4668cdd2c2ebdd5f4a7540a51222cf2f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24926,11 +36482,11 @@ Date: Wed Apr 21 23:41:26 2010 -0400
 
     Rename ConstCharP to CharP (overloaded now)
 
 
     Rename ConstCharP to CharP (overloaded now)
 
- src/hb-open-file-private.hh         |   10 +++++-----
- src/hb-open-type-private.hh         |   24 ++++++++++++------------
- src/hb-ot-layout-gpos-private.hh     |   12 ++++++------
- src/hb-ot-layout-gsub-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |   14 +++++++-------
+ src/hb-open-file-private.hh         | 10 +++++-----
+ src/hb-open-type-private.hh         | 24 ++++++++++++------------
+ src/hb-ot-layout-gpos-private.hh     | 12 ++++++------
+ src/hb-ot-layout-gsub-private.hh     |  4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 14 +++++++-------
  5 files changed, 32 insertions(+), 32 deletions(-)
 
 commit 62c0fd75737a69721dbf29e773405a4c529f8b6d
  5 files changed, 32 insertions(+), 32 deletions(-)
 
 commit 62c0fd75737a69721dbf29e773405a4c529f8b6d
@@ -24939,10 +36495,10 @@ Date: Wed Apr 21 23:30:48 2010 -0400
 
     Cleanup de-const-casting during sanitize
 
 
     Cleanup de-const-casting during sanitize
 
- src/hb-open-file-private.hh       |    2 +-
- src/hb-open-type-private.hh       |   29 ++++++++++++++---------------
- src/hb-ot-layout-common-private.hh |   4 ++--
- src/hb-ot-layout-gpos-private.hh   |  12 ++++++------
+ src/hb-open-file-private.hh       |  2 +-
+ src/hb-open-type-private.hh       | 29 ++++++++++++++---------------
+ src/hb-ot-layout-common-private.hh |  4 ++--
+ src/hb-ot-layout-gpos-private.hh   | 12 ++++++------
  4 files changed, 23 insertions(+), 24 deletions(-)
 
 commit dd155870567cfb9647b2e71593ace8b2705d7cff
  4 files changed, 23 insertions(+), 24 deletions(-)
 
 commit dd155870567cfb9647b2e71593ace8b2705d7cff
@@ -24951,8 +36507,8 @@ Date:   Wed Apr 21 23:13:33 2010 -0400
 
     Add more comments
 
 
     Add more comments
 
- src/hb-open-type-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit c85c3620675f38ffdca59134aeec2641485f40ca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c85c3620675f38ffdca59134aeec2641485f40ca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24960,8 +36516,8 @@ Date:   Wed Apr 21 23:12:54 2010 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-open-type-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 2467c669c2aee4de2a6621a9d06cba0262376d41
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2467c669c2aee4de2a6621a9d06cba0262376d41
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24969,8 +36525,8 @@ Date:   Wed Apr 21 23:11:45 2010 -0400
 
     Add comment
 
 
     Add comment
 
- src/hb-open-type-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 29c3f5e1b6212c775a7b911becd44ba093b7b0eb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 29c3f5e1b6212c775a7b911becd44ba093b7b0eb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24978,8 +36534,8 @@ Date:   Wed Apr 21 23:01:00 2010 -0400
 
     Improve comment
 
 
     Improve comment
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 01c01618e98283611628cd54d5ba4bf122f24cd9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 01c01618e98283611628cd54d5ba4bf122f24cd9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24987,8 +36543,8 @@ Date:   Wed Apr 21 22:49:56 2010 -0400
 
     Further simplify IntType struct defs
 
 
     Further simplify IntType struct defs
 
- src/hb-open-type-private.hh |  21 ++++++++++++---------
- 1 files changed, 12 insertions(+), 9 deletions(-)
+ src/hb-open-type-private.hh | 21 ++++++++++++---------
+ 1 file changed, 12 insertions(+), 9 deletions(-)
 
 commit 2cb08458f674301cde9d962c13911035a251f7c5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2cb08458f674301cde9d962c13911035a251f7c5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -24996,10 +36552,10 @@ Date: Wed Apr 21 22:37:31 2010 -0400
 
     Rename const_array() to array() (overloaded)
 
 
     Rename const_array() to array() (overloaded)
 
- src/hb-open-type-private.hh         |   12 ++++++------
- src/hb-ot-layout-common-private.hh   |    4 ++--
- src/hb-ot-layout-gsub-private.hh     |    6 +++---
- src/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++--------
+ src/hb-open-type-private.hh         | 12 ++++++------
+ src/hb-ot-layout-common-private.hh   |  4 ++--
+ src/hb-ot-layout-gsub-private.hh     |  6 +++---
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++--------
  4 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 2e2f43edf2f49f4047e28b1ce2ea95938536de9c
  4 files changed, 19 insertions(+), 19 deletions(-)
 
 commit 2e2f43edf2f49f4047e28b1ce2ea95938536de9c
@@ -25008,8 +36564,8 @@ Date:   Wed Apr 21 22:30:36 2010 -0400
 
     Remove ArrayAfter, use StructAfter in place
 
 
     Remove ArrayAfter, use StructAfter in place
 
- src/hb-open-type-private.hh |  21 ++++++---------------
- 1 files changed, 6 insertions(+), 15 deletions(-)
+ src/hb-open-type-private.hh | 21 ++++++---------------
+ 1 file changed, 6 insertions(+), 15 deletions(-)
 
 commit e961c86c579fd98ee604342a9c70c4e7f8d4f220
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e961c86c579fd98ee604342a9c70c4e7f8d4f220
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25017,11 +36573,11 @@ Date: Wed Apr 21 15:56:11 2010 -0400
 
     Convert NEXT() and ARRAY_AFTER() macros to templates
 
 
     Convert NEXT() and ARRAY_AFTER() macros to templates
 
- src/hb-open-type-private.hh         |   40
- ++++++++++++++++++++++++---------
- src/hb-ot-layout-common-private.hh   |    4 +-
- src/hb-ot-layout-gsub-private.hh     |    8 +++---
- src/hb-ot-layout-gsubgpos-private.hh |   24 ++++++++++----------
+ src/hb-open-type-private.hh         | 40
+ ++++++++++++++++++++++++++----------
+ src/hb-ot-layout-common-private.hh   |  4 ++--
+ src/hb-ot-layout-gsub-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsubgpos-private.hh | 24 +++++++++++-----------
  4 files changed, 47 insertions(+), 29 deletions(-)
 
 commit 198facdc55756cb48cdfb8ba7fa50916fac54ec3
  4 files changed, 47 insertions(+), 29 deletions(-)
 
 commit 198facdc55756cb48cdfb8ba7fa50916fac54ec3
@@ -25030,13 +36586,13 @@ Date: Wed Apr 21 13:35:36 2010 -0400
 
     Use templates for const char * casts
 
 
     Use templates for const char * casts
 
- src/hb-open-file-private.hh         |   12 ++++----
- src/hb-open-type-private.hh         |   48
- +++++++++++++++++-----------------
- src/hb-ot-layout-common-private.hh   |    2 +-
- src/hb-ot-layout-gpos-private.hh     |   32 +++++++++++-----------
- src/hb-ot-layout-gsub-private.hh     |    4 +-
- src/hb-ot-layout-gsubgpos-private.hh |   14 +++++-----
+ src/hb-open-file-private.hh         | 12 ++++-----
+ src/hb-open-type-private.hh         | 48
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-common-private.hh   |  2 +-
+ src/hb-ot-layout-gpos-private.hh     | 32 ++++++++++++------------
+ src/hb-ot-layout-gsub-private.hh     |  4 +--
+ src/hb-ot-layout-gsubgpos-private.hh | 14 +++++------
  6 files changed, 56 insertions(+), 56 deletions(-)
 
 commit 1922ffe7013c46014803a9f18c42e193a25b1968
  6 files changed, 56 insertions(+), 56 deletions(-)
 
 commit 1922ffe7013c46014803a9f18c42e193a25b1968
@@ -25045,9 +36601,8 @@ Date:   Wed Apr 21 04:19:51 2010 -0400
 
     Const correctness
 
 
     Const correctness
 
- src/hb-ot-layout-gsub-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |   30
- +++++++++++++++---------------
+ src/hb-ot-layout-gsub-private.hh     |  4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 30 +++++++++++++++---------------
  2 files changed, 17 insertions(+), 17 deletions(-)
 
 commit e032ed9f75d4a0f365649a25706871bbb5ae6651
  2 files changed, 17 insertions(+), 17 deletions(-)
 
 commit e032ed9f75d4a0f365649a25706871bbb5ae6651
@@ -25056,9 +36611,9 @@ Date:   Wed Apr 21 03:11:46 2010 -0400
 
     Use templates for defining int typess
 
 
     Use templates for defining int typess
 
- src/hb-open-type-private.hh |  66
- ++++++++++++++++++++++++++++--------------
- src/hb-private.h           |   10 +-----
+ src/hb-open-type-private.hh | 66
+ ++++++++++++++++++++++++++++++---------------
+ src/hb-private.h           | 10 ++-----
  2 files changed, 46 insertions(+), 30 deletions(-)
 
 commit 2c9fd2adce5a6a9dcd62c874bd64613ea68d8d9b
  2 files changed, 46 insertions(+), 30 deletions(-)
 
 commit 2c9fd2adce5a6a9dcd62c874bd64613ea68d8d9b
@@ -25067,8 +36622,8 @@ Date:   Wed Apr 21 02:15:39 2010 -0400
 
     Remove unused macro
 
 
     Remove unused macro
 
- src/hb-open-type-private.hh |  15 ---------------
- 1 files changed, 0 insertions(+), 15 deletions(-)
+ src/hb-open-type-private.hh | 15 ---------------
+ 1 file changed, 15 deletions(-)
 
 commit 7a52f281178867379adb6e6c6fb0022102f75d17
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7a52f281178867379adb6e6c6fb0022102f75d17
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25076,8 +36631,8 @@ Date:   Wed Apr 21 02:14:44 2010 -0400
 
     Rename macros
 
 
     Rename macros
 
- src/hb-open-type-private.hh |   6 +++---
- src/hb-private.h           |   30 +++++++++++++++---------------
+ src/hb-open-type-private.hh | 6 +++---
+ src/hb-private.h           | 30 +++++++++++++++---------------
  2 files changed, 18 insertions(+), 18 deletions(-)
 
 commit ffff7dc44cb2a35a60f92831165e9d3c3a61ce19
  2 files changed, 18 insertions(+), 18 deletions(-)
 
 commit ffff7dc44cb2a35a60f92831165e9d3c3a61ce19
@@ -25086,8 +36641,8 @@ Date:   Wed Apr 21 02:13:55 2010 -0400
 
     Minor
 
 
     Minor
 
- src/hb-private.h |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/hb-private.h | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit f60f2166c48d07f556ff83f04e95181946eb03df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f60f2166c48d07f556ff83f04e95181946eb03df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25095,9 +36650,9 @@ Date:   Wed Apr 21 02:12:45 2010 -0400
 
     Move macros around
 
 
     Move macros around
 
- src/hb-private.h |  122
- +++++++++++++++++++++++++++--------------------------
- 1 files changed, 62 insertions(+), 60 deletions(-)
+ src/hb-private.h | 122
+ ++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 62 insertions(+), 60 deletions(-)
 
 commit 649a4344ca363da3d44cdd908350449ec40ed0f9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 649a4344ca363da3d44cdd908350449ec40ed0f9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25105,8 +36660,8 @@ Date:   Wed Apr 21 02:11:59 2010 -0400
 
     Remove unused macros
 
 
     Remove unused macros
 
- src/hb-private.h |    7 -------
- 1 files changed, 0 insertions(+), 7 deletions(-)
+ src/hb-private.h | 7 -------
+ 1 file changed, 7 deletions(-)
 
 commit eba8b4f644701cc6b78b0fcb4e932dce15561598
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eba8b4f644701cc6b78b0fcb4e932dce15561598
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25115,9 +36670,9 @@ Date:   Mon Mar 29 00:04:12 2010 -0400
     GNOME Bug 613015 - [HB] Does not sanitize Device tables referenced
     from ValueRecords
 
     GNOME Bug 613015 - [HB] Does not sanitize Device tables referenced
     from ValueRecords
 
- src/hb-ot-layout-gpos-private.hh |   47
- +++++++++++++++++++++++++++++---------
- 1 files changed, 36 insertions(+), 11 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 47
+ ++++++++++++++++++++++++++++++----------
+ 1 file changed, 36 insertions(+), 11 deletions(-)
 
 commit 673a4efcbc72a62105a24d9b0b54047417160f7d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 673a4efcbc72a62105a24d9b0b54047417160f7d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25125,9 +36680,9 @@ Date:   Wed Apr 21 02:02:57 2010 -0400
 
     WIP
 
 
     WIP
 
- src/hb-ot-layout-gpos-private.hh |  102
- ++++++++++++++++++++++++++++++--------
- 1 files changed, 81 insertions(+), 21 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 102
+ +++++++++++++++++++++++++++++++--------
+ 1 file changed, 81 insertions(+), 21 deletions(-)
 
 commit 40d73bc68dd828cf68f90fde0f9499a6ce9fbb19
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 40d73bc68dd828cf68f90fde0f9499a6ce9fbb19
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25135,8 +36690,8 @@ Date:   Wed Apr 21 00:49:40 2010 -0400
 
     Improve comments
 
 
     Improve comments
 
- src/hb-open-type-private.hh |  22 ++++++++++++++--------
- 1 files changed, 14 insertions(+), 8 deletions(-)
+ src/hb-open-type-private.hh | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
 
 commit 394bad41a76f90e441e327cef76efb99997e9ae0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 394bad41a76f90e441e327cef76efb99997e9ae0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25144,8 +36699,8 @@ Date:   Wed Apr 21 00:40:50 2010 -0400
 
     Remove stale TODO item
 
 
     Remove stale TODO item
 
- src/hb-open-type-private.hh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 9d3677899f90abdc7fb3e3d854db654a8707a84b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9d3677899f90abdc7fb3e3d854db654a8707a84b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25153,8 +36708,8 @@ Date:   Wed Apr 21 00:32:47 2010 -0400
 
     Use a function template instead of struct template for Null
 
 
     Use a function template instead of struct template for Null
 
- src/hb-open-type-private.hh |  24 ++++++++++--------------
- 1 files changed, 10 insertions(+), 14 deletions(-)
+ src/hb-open-type-private.hh | 24 ++++++++++--------------
+ 1 file changed, 10 insertions(+), 14 deletions(-)
 
 commit ffd321afd91429c5de7ab03d71ef1030044f53cb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ffd321afd91429c5de7ab03d71ef1030044f53cb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25162,9 +36717,9 @@ Date:   Wed Apr 21 00:14:12 2010 -0400
 
     Simplify Tag struct
 
 
     Simplify Tag struct
 
- src/hb-open-file-private.hh       |    3 ++-
- src/hb-open-type-private.hh       |    6 +-----
- src/hb-ot-layout-common-private.hh |   3 ++-
+ src/hb-open-file-private.hh       | 3 ++-
+ src/hb-open-type-private.hh       | 6 +-----
+ src/hb-ot-layout-common-private.hh | 3 ++-
  3 files changed, 5 insertions(+), 7 deletions(-)
 
 commit 00e23fcc6fd0eee5c582251bf3de6a2703fbbd3e
  3 files changed, 5 insertions(+), 7 deletions(-)
 
 commit 00e23fcc6fd0eee5c582251bf3de6a2703fbbd3e
@@ -25173,8 +36728,8 @@ Date:   Tue Apr 20 23:50:45 2010 -0400
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-open-type-private.hh       |    8 ++++----
- src/hb-ot-layout-common-private.hh |   6 +++---
+ src/hb-open-type-private.hh       | 8 ++++----
+ src/hb-ot-layout-common-private.hh | 6 +++---
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit a87072db5d41e25b2e31191545298bca4838c65c
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit a87072db5d41e25b2e31191545298bca4838c65c
@@ -25183,8 +36738,8 @@ Date:   Tue Apr 20 15:52:47 2010 -0400
 
     Fix Class operator return type
 
 
     Fix Class operator return type
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f9b37727985191c9b4aedb0e9835736027e59260
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f9b37727985191c9b4aedb0e9835736027e59260
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25192,8 +36747,8 @@ Date:   Tue Apr 20 15:51:53 2010 -0400
 
     Add couple consts to operators
 
 
     Add couple consts to operators
 
- src/hb-open-type-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 53d237ec6352d7c6fab3b2805b48154a25506beb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 53d237ec6352d7c6fab3b2805b48154a25506beb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25201,8 +36756,8 @@ Date:   Tue Apr 20 15:25:27 2010 -0400
 
     Remove ASSERT_SIZE_DATA
 
 
     Remove ASSERT_SIZE_DATA
 
- src/hb-open-type-private.hh       |    4 ----
- src/hb-ot-layout-common-private.hh |   9 ++++++---
+ src/hb-open-type-private.hh       | 4 ----
+ src/hb-ot-layout-common-private.hh | 9 ++++++---
  2 files changed, 6 insertions(+), 7 deletions(-)
 
 commit 06558d2a745b8f3af11a8d6dce956ae52187a7e5
  2 files changed, 6 insertions(+), 7 deletions(-)
 
 commit 06558d2a745b8f3af11a8d6dce956ae52187a7e5
@@ -25211,8 +36766,8 @@ Date:   Mon Apr 19 02:34:10 2010 -0400
 
     Round instead of trunc
 
 
     Round instead of trunc
 
- src/hb-ot-layout-gpos-private.hh |   20 ++++++++++----------
- src/hb-private.h                |    2 +-
+ src/hb-ot-layout-gpos-private.hh | 20 ++++++++++----------
+ src/hb-private.h                |  2 +-
  2 files changed, 11 insertions(+), 11 deletions(-)
 
 commit 0e206de98621ed8a55824b42e9e6bf320f4c6cc8
  2 files changed, 11 insertions(+), 11 deletions(-)
 
 commit 0e206de98621ed8a55824b42e9e6bf320f4c6cc8
@@ -25221,10 +36776,10 @@ Date: Mon Apr 19 02:29:04 2010 -0400
 
     Fix warnings
 
 
     Fix warnings
 
- src/hb-open-type-private.hh         |    2 +-
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gpos-private.hh     |    4 ++--
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ src/hb-open-type-private.hh         | 2 +-
+ src/hb-ot-layout-gdef-private.hh     | 2 +-
+ src/hb-ot-layout-gpos-private.hh     | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 6 +++---
  4 files changed, 7 insertions(+), 7 deletions(-)
 
 commit d5943407a4251cb947fbfc130c0facb2f6216bd6
  4 files changed, 7 insertions(+), 7 deletions(-)
 
 commit d5943407a4251cb947fbfc130c0facb2f6216bd6
@@ -25233,8 +36788,8 @@ Date:   Mon Apr 19 02:27:56 2010 -0400
 
     Fix debug build
 
 
     Fix debug build
 
- src/hb-open-type-private.hh         |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-open-type-private.hh         | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 12b27ed91de0192deee4e9feffcaf4aca4c78113
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 12b27ed91de0192deee4e9feffcaf4aca4c78113
@@ -25243,8 +36798,8 @@ Date:   Sat Mar 27 17:00:19 2010 -0400
 
     Fix leak when duplicating blob
 
 
     Fix leak when duplicating blob
 
- src/hb-blob.c |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-blob.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit 4b8487d83e0c10076a6c573cb3487790ce366607
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4b8487d83e0c10076a6c573cb3487790ce366607
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25277,12 +36832,12 @@ Date: Tue Mar 16 03:46:17 2010 -0400
     There's still another bug: we don't sanitize Device records
     referenced from value records.  Fixing that also.
 
     There's still another bug: we don't sanitize Device records
     referenced from value records.  Fixing that also.
 
- src/hb-open-file-private.hh         |    4 ++-
- src/hb-open-type-private.hh         |   11 +++++----
- src/hb-ot-layout-common-private.hh   |   10 +++++++-
- src/hb-ot-layout-gpos-private.hh     |   37
- +++++++++++++++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |   15 +++++++------
+ src/hb-open-file-private.hh         |  4 +++-
+ src/hb-open-type-private.hh         | 11 ++++++-----
+ src/hb-ot-layout-common-private.hh   | 10 ++++++++--
+ src/hb-ot-layout-gpos-private.hh     | 37
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout-gsubgpos-private.hh | 15 ++++++++-------
  5 files changed, 46 insertions(+), 31 deletions(-)
 
 commit 9b39755d104603d1163738f77637cc1923d4055b
  5 files changed, 46 insertions(+), 31 deletions(-)
 
 commit 9b39755d104603d1163738f77637cc1923d4055b
@@ -25291,8 +36846,8 @@ Date:   Thu Apr 15 14:00:25 2010 -0400
 
     Typo
 
 
     Typo
 
- src/hb-open-type-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit f85ec1c7da36d2c2c9b1c94a988563697dcc79c9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f85ec1c7da36d2c2c9b1c94a988563697dcc79c9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25300,8 +36855,8 @@ Date:   Wed Mar 10 04:14:40 2010 -0500
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e48ed72230a83499dabbd02af2ac63340220a353
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e48ed72230a83499dabbd02af2ac63340220a353
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25311,8 +36866,8 @@ Date:   Mon Mar 1 22:33:45 2010 -0500
 
     The former is more robust. See discussion on freetype-devel.
 
 
     The former is more robust. See discussion on freetype-devel.
 
- src/hb-ft.c |   5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ft.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 917c227500305aee543981ad24a39f868c5ca0b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 917c227500305aee543981ad24a39f868c5ca0b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25323,8 +36878,8 @@ Date:   Tue Feb 23 16:47:51 2010 -0500
     GNOME Bug 604128 - Applications crash when displaying Hebrew
     characters
 
     GNOME Bug 604128 - Applications crash when displaying Hebrew
     characters
 
- src/hb-blob.c |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-blob.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit ecd2e996d2137fef30011a41dd57ea45f9a796de
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ecd2e996d2137fef30011a41dd57ea45f9a796de
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25332,8 +36887,8 @@ Date:   Tue Feb 23 02:42:00 2010 -0500
 
     Improve the alignment for NullPool
 
 
     Improve the alignment for NullPool
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit bc7830e4259755ce7549025c6f5bf750e78c2ff1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bc7830e4259755ce7549025c6f5bf750e78c2ff1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25344,8 +36899,8 @@ Date:   Wed Feb 17 15:14:57 2010 -0500
     See discussion at:
     https://bugzilla.gnome.org/show_bug.cgi?id=610183
 
     See discussion at:
     https://bugzilla.gnome.org/show_bug.cgi?id=610183
 
- src/hb-private.h |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ src/hb-private.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 commit 555d11273ee4c30e84eda3a78ffadb3ee7da65d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 555d11273ee4c30e84eda3a78ffadb3ee7da65d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25353,8 +36908,8 @@ Date:   Tue Jan 26 12:58:59 2010 -0500
 
     [GDEF] Fix bug in building synthetic GDEF
 
 
     [GDEF] Fix bug in building synthetic GDEF
 
- src/hb-ot-layout.cc |   5 +++--
- src/hb-ot-layout.h  |   1 -
+ src/hb-ot-layout.cc | 5 +++--
+ src/hb-ot-layout.h  | 1 -
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 70834d89c30a56fcd78825fbc28fc9c6bec31124
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 commit 70834d89c30a56fcd78825fbc28fc9c6bec31124
@@ -25363,8 +36918,8 @@ Date:   Tue Jan 26 12:17:37 2010 -0500
 
     [TODO] Add kern/GPOS interaction
 
 
     [TODO] Add kern/GPOS interaction
 
- TODO |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ TODO | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit cd11a98fa1426e9dbc4b61e702913b23a4794ae2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd11a98fa1426e9dbc4b61e702913b23a4794ae2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25372,9 +36927,9 @@ Date:   Sun Dec 20 23:05:02 2009 +0100
 
     Fix compile with older FreeType
 
 
     Fix compile with older FreeType
 
- configure.ac |    7 +++++++
- src/hb-ft.c  |    2 ++
- 2 files changed, 9 insertions(+), 0 deletions(-)
+ configure.ac | 7 +++++++
+ src/hb-ft.c  | 2 ++
+ 2 files changed, 9 insertions(+)
 
 commit 7f7448a354c43650348b4e91b4e40ecf18718d66
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7f7448a354c43650348b4e91b4e40ecf18718d66
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25382,8 +36937,8 @@ Date:   Sun Dec 20 21:42:14 2009 +0100
 
     Indent
 
 
     Indent
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit e70f45eb522bcb41388cc218b79bbd6aaecf8050
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e70f45eb522bcb41388cc218b79bbd6aaecf8050
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25396,8 +36951,8 @@ Date:   Sun Dec 20 21:26:24 2009 +0100
     The change is wrong.  If there is a GPOS table, we should not use
     'kern'.
 
     The change is wrong.  If there is a GPOS table, we should not use
     'kern'.
 
- src/hb-ot-shape.c |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit d740c8f78bcbe80a8bcd8a9468830a406da37cc0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d740c8f78bcbe80a8bcd8a9468830a406da37cc0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25405,8 +36960,8 @@ Date:   Sun Dec 20 21:23:56 2009 +0100
 
     Fallback to 'kern' if no GPOS applied
 
 
     Fallback to 'kern' if no GPOS applied
 
- src/hb-ot-shape.c |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-shape.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 2f78c17197892b2bdc2f64caeb1c1c806ef44545
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f78c17197892b2bdc2f64caeb1c1c806ef44545
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25414,9 +36969,9 @@ Date:   Sun Dec 20 21:03:11 2009 +0100
 
     Remove glibism!
 
 
     Remove glibism!
 
- src/hb-ot-shape-private.h |   4 ++--
- src/hb-ot-shape.c        |    4 ++--
- src/hb-shape.c                   |    4 ++--
+ src/hb-ot-shape-private.h | 4 ++--
+ src/hb-ot-shape.c        | 4 ++--
+ src/hb-shape.c                   | 4 ++--
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 907e67da13b5ed719362702138703fe2f90e790d
  3 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 907e67da13b5ed719362702138703fe2f90e790d
@@ -25425,9 +36980,9 @@ Date:   Sun Dec 20 20:59:51 2009 +0100
 
     Oops, add file.
 
 
     Oops, add file.
 
- src/hb-ot-shape-private.h |   53
- +++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 53 insertions(+), 0 deletions(-)
+ src/hb-ot-shape-private.h | 53
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 53 insertions(+)
 
 commit 2014b8d110231b13e524008282ece7451f1ae9e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2014b8d110231b13e524008282ece7451f1ae9e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25437,12 +36992,12 @@ Date: Sun Dec 20 20:58:26 2009 +0100
 
     Default features only for now.
 
 
     Default features only for now.
 
- src/Makefile.am     |   2 +
- src/hb-ot-layout.cc |  28 +++++++++
- src/hb-ot-layout.h  |   7 ++
- src/hb-ot-shape.c   | 165
- +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-shape.c      |   8 +-
+ src/Makefile.am     |  2 +
+ src/hb-ot-layout.cc | 28 +++++++++
+ src/hb-ot-layout.h  |  7 +++
+ src/hb-ot-shape.c   | 165
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-shape.c      |  8 +--
  5 files changed, 206 insertions(+), 4 deletions(-)
 
 commit 196610ba4c7071c2b802d0fc921a63cbc0753114
  5 files changed, 206 insertions(+), 4 deletions(-)
 
 commit 196610ba4c7071c2b802d0fc921a63cbc0753114
@@ -25451,8 +37006,8 @@ Date:   Sun Dec 20 19:01:14 2009 +0100
 
     Pass features down
 
 
     Pass features down
 
- src/hb-shape.c |   49 +++++++++++++++++++++++++++++++++----------------
- 1 files changed, 33 insertions(+), 16 deletions(-)
+ src/hb-shape.c | 49 +++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 33 insertions(+), 16 deletions(-)
 
 commit 51f141a7f38a73f671b23f58cadf97a72c43b625
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 51f141a7f38a73f671b23f58cadf97a72c43b625
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25460,8 +37015,8 @@ Date:   Sun Dec 20 18:22:28 2009 +0100
 
     Avoid overflow
 
 
     Avoid overflow
 
- src/hb-shape.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-shape.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 26d7a75752631b2596a5bcb7e645b34cc3d139ab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 26d7a75752631b2596a5bcb7e645b34cc3d139ab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25469,9 +37024,9 @@ Date:   Sun Dec 20 17:58:25 2009 +0100
 
     Refactor hb_shape a bit
 
 
     Refactor hb_shape a bit
 
- src/hb-shape.c |   87
- +++++++++++++++++++++++++++++++++++++++++++++++--------
- 1 files changed, 74 insertions(+), 13 deletions(-)
+ src/hb-shape.c | 87
+ +++++++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 74 insertions(+), 13 deletions(-)
 
 commit 001fc2d2aa22f14302739fe4ca45f7535855e0fb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 001fc2d2aa22f14302739fe4ca45f7535855e0fb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25479,9 +37034,9 @@ Date:   Sun Dec 20 17:24:05 2009 +0100
 
     Add TrueType kern support
 
 
     Add TrueType kern support
 
- src/hb-shape.c |   74
- ++++++++++++++++++++++++++++++++++++-------------------
- 1 files changed, 48 insertions(+), 26 deletions(-)
+ src/hb-shape.c | 74
+ +++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 48 insertions(+), 26 deletions(-)
 
 commit 2c1b85cf66e5ecb7521b6018b76f0e161fb68967
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2c1b85cf66e5ecb7521b6018b76f0e161fb68967
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25489,8 +37044,8 @@ Date:   Sun Dec 20 16:29:17 2009 +0100
 
     Direct unicode->get_mirroring directly
 
 
     Direct unicode->get_mirroring directly
 
- src/hb-shape.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-shape.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 6a2ef5aa5459def232708af30ef8a484906b868b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6a2ef5aa5459def232708af30ef8a484906b868b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25498,8 +37053,8 @@ Date:   Sun Dec 20 16:28:01 2009 +0100
 
     Do mirroring
 
 
     Do mirroring
 
- src/hb-shape.c |   18 +++++++++++++++++-
- 1 files changed, 17 insertions(+), 1 deletions(-)
+ src/hb-shape.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
 
 commit 0465e69832393cc1ed36508ec5d597fbab64877a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0465e69832393cc1ed36508ec5d597fbab64877a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25507,9 +37062,9 @@ Date:   Sun Dec 20 16:25:18 2009 +0100
 
     Protect against NULL funcs
 
 
     Protect against NULL funcs
 
- src/hb-buffer.c |    3 +++
- src/hb-font.cc  |    3 +++
- 2 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-buffer.c | 3 +++
+ src/hb-font.cc  | 3 +++
+ 2 files changed, 6 insertions(+)
 
 commit 5ceefa1d8dbd310570ea8d1c47107fe8d3dc96d9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5ceefa1d8dbd310570ea8d1c47107fe8d3dc96d9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25517,9 +37072,9 @@ Date:   Sun Dec 20 15:29:16 2009 +0100
 
     Add hb_unicode_get_*() functions
 
 
     Add hb_unicode_get_*() functions
 
- src/hb-unicode.c |   37 +++++++++++++++++++++++++++++++++++++
- src/hb-unicode.h |   21 +++++++++++++++++++++
- 2 files changed, 58 insertions(+), 0 deletions(-)
+ src/hb-unicode.c | 37 +++++++++++++++++++++++++++++++++++++
+ src/hb-unicode.h | 21 +++++++++++++++++++++
+ 2 files changed, 58 insertions(+)
 
 commit b8a53e44ce05911ce98b7cff34dee165e19d87ba
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b8a53e44ce05911ce98b7cff34dee165e19d87ba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25532,8 +37087,8 @@ Date:   Sun Dec 20 14:56:25 2009 +0100
     best way
     to do it.
 
     best way
     to do it.
 
- src/Makefile.am |    9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/Makefile.am | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 314905d7548d5be58354546d660754b807b6efb2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 314905d7548d5be58354546d660754b807b6efb2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25541,8 +37096,8 @@ Date:   Sun Dec 20 14:50:42 2009 +0100
 
     Explicitly track whether the buffer has positions
 
 
     Explicitly track whether the buffer has positions
 
- src/hb-buffer-private.h |    3 ++-
- src/hb-buffer.c        |   27 ++++++++++++++-------------
+ src/hb-buffer-private.h |  3 ++-
+ src/hb-buffer.c        | 27 ++++++++++++++-------------
  2 files changed, 16 insertions(+), 14 deletions(-)
 
 commit 314b460d8a02ed4b2789ff527cf6c9bc19769114
  2 files changed, 16 insertions(+), 14 deletions(-)
 
 commit 314b460d8a02ed4b2789ff527cf6c9bc19769114
@@ -25551,8 +37106,8 @@ Date:   Sun Dec 20 13:58:50 2009 +0100
 
     Add HB_DIRECTION_IS_FORWARD/BACKWARD
 
 
     Add HB_DIRECTION_IS_FORWARD/BACKWARD
 
- src/hb-common.h |    2 ++
- src/hb-shape.c  |    3 +--
+ src/hb-common.h | 2 ++
+ src/hb-shape.c  | 3 +--
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit bdd0ff5290bae4db65c3fdf95c5728031f13ca84
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit bdd0ff5290bae4db65c3fdf95c5728031f13ca84
@@ -25561,8 +37116,8 @@ Date:   Tue Dec 15 04:07:40 2009 -0500
 
     Make main.cc compile without glib
 
 
     Make main.cc compile without glib
 
- src/main.cc |  18 ++++++++++++++++--
- 1 files changed, 16 insertions(+), 2 deletions(-)
+ src/main.cc | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
 
 commit 8a7d16808200f4fa02d6d12a8b8492bdedeb2c24
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8a7d16808200f4fa02d6d12a8b8492bdedeb2c24
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25570,8 +37125,8 @@ Date:   Tue Dec 15 03:53:45 2009 -0500
 
     Distribute autogen.sh
 
 
     Distribute autogen.sh
 
- Makefile.am |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 807b8aa486753474e05e09f4fcca8ac94021b97c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 807b8aa486753474e05e09f4fcca8ac94021b97c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25594,8 +37149,8 @@ Date:   Thu Nov 19 20:28:03 2009 -0500
     but hey,
     that's life.
 
     but hey,
     that's life.
 
- src/hb-open-type-private.hh       |    8 ++++----
- src/hb-ot-layout-common-private.hh |   2 +-
+ src/hb-open-type-private.hh       | 8 ++++----
+ src/hb-ot-layout-common-private.hh | 2 +-
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 8b9b866d3e495c186f0530fcf4e00ffcdc170d3f
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 8b9b866d3e495c186f0530fcf4e00ffcdc170d3f
@@ -25604,8 +37159,8 @@ Date:   Thu Nov 19 20:27:57 2009 -0500
 
     Fix warning
 
 
     Fix warning
 
- src/hb-ot-layout-gdef-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gdef-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c65b26acf28bd1a5b346fd8f6f28bec1f7d17a2a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c65b26acf28bd1a5b346fd8f6f28bec1f7d17a2a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25613,9 +37168,9 @@ Date:   Wed Nov 18 11:27:33 2009 -0500
 
     Use autoconf FLEXIBLE_ARRAY_MEMBER when available
 
 
     Use autoconf FLEXIBLE_ARRAY_MEMBER when available
 
- configure.ac                    |    2 ++
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-private.h                |   13 ++++++++++---
+ configure.ac                    |  2 ++
+ src/hb-ot-layout-gpos-private.hh |  4 ++--
+ src/hb-private.h                | 13 ++++++++++---
  3 files changed, 14 insertions(+), 5 deletions(-)
 
 commit d33f674cb793af40f1612df3660b138383f2de95
  3 files changed, 14 insertions(+), 5 deletions(-)
 
 commit d33f674cb793af40f1612df3660b138383f2de95
@@ -25624,8 +37179,8 @@ Date:   Wed Nov 18 09:47:44 2009 -0500
 
     Add Mongolian variation selectors
 
 
     Add Mongolian variation selectors
 
- src/hb-shape.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-shape.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit d6387757de2c27867d6f57c4ee7c4ef436b3a74f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d6387757de2c27867d6f57c4ee7c4ef436b3a74f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25633,8 +37188,8 @@ Date:   Wed Nov 11 17:15:03 2009 -0500
 
     Fix sanitize
 
 
     Fix sanitize
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 636f017e387d46d4083c9f9ee57647a94dc5dc6d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 636f017e387d46d4083c9f9ee57647a94dc5dc6d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25642,8 +37197,8 @@ Date:   Tue Nov 10 12:56:35 2009 -0500
 
     Remove obsolete TODO item
 
 
     Remove obsolete TODO item
 
- src/hb-open-file-private.hh |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-open-file-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit bf2b25dd8591e92f3944c763641b613a70c379a7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bf2b25dd8591e92f3944c763641b613a70c379a7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25651,8 +37206,8 @@ Date:   Fri Nov 6 19:52:47 2009 -0500
 
     Remove done item
 
 
     Remove done item
 
- src/hb-shape.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-shape.c | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 4a8605315901e0ff1e6e09437a92dd5ac39164cc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a8605315901e0ff1e6e09437a92dd5ac39164cc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25660,8 +37215,8 @@ Date:   Fri Nov 6 19:52:01 2009 -0500
 
     Reverse buffer at the end if RTL
 
 
     Reverse buffer at the end if RTL
 
- src/hb-shape.c |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-shape.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit ff44f88df2c46920f3ec2384ef321a4c7bb0f6ef
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ff44f88df2c46920f3ec2384ef321a4c7bb0f6ef
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25669,14 +37224,14 @@ Date: Fri Nov 6 19:48:16 2009 -0500
 
     Handle shaping in non-native direction
 
 
     Handle shaping in non-native direction
 
- src/hb-buffer-private.h  |    1 +
- src/hb-buffer.c         |   42 +++++++++++++++++--
- src/hb-buffer.h         |   10 +---
- src/hb-common.h         |   11 +++++
- src/hb-shape.c                  |   38 ++++++++++++++++-
- src/hb-unicode-private.h |    5 ++
- src/hb-unicode.c        |  103
- ++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer-private.h  |   1 +
+ src/hb-buffer.c         |  42 +++++++++++++++++--
+ src/hb-buffer.h         |  10 ++---
+ src/hb-common.h         |  11 +++++
+ src/hb-shape.c                  |  38 +++++++++++++++--
+ src/hb-unicode-private.h |   5 +++
+ src/hb-unicode.c        | 103
+ +++++++++++++++++++++++++++++++++++++++++++++++
  7 files changed, 196 insertions(+), 14 deletions(-)
 
 commit b4b4272c8d19ba3e0cb8f12b3b7d1590349e3d14
  7 files changed, 196 insertions(+), 14 deletions(-)
 
 commit b4b4272c8d19ba3e0cb8f12b3b7d1590349e3d14
@@ -25685,8 +37240,8 @@ Date:   Fri Nov 6 17:46:33 2009 -0500
 
     Oops, wrong change
 
 
     Oops, wrong change
 
- src/hb-ot-layout.h |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 52ea47767c7c35650ebddfba6ddc8203a3e33d3a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52ea47767c7c35650ebddfba6ddc8203a3e33d3a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25694,8 +37249,8 @@ Date:   Fri Nov 6 17:45:38 2009 -0500
 
     Change order of font and face for API consistency
 
 
     Change order of font and face for API consistency
 
- src/hb-ot-layout.cc |  14 +++++++-------
- src/hb-ot-layout.h  |  14 +++++++-------
+ src/hb-ot-layout.cc | 14 +++++++-------
+ src/hb-ot-layout.h  | 14 +++++++-------
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit f4f1fc970b3e37d9903cbf5e05bbd38be4df3047
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit f4f1fc970b3e37d9903cbf5e05bbd38be4df3047
@@ -25704,8 +37259,8 @@ Date:   Fri Nov 6 17:42:38 2009 -0500
 
     Remove debug info that crept in
 
 
     Remove debug info that crept in
 
- src/hb-ot-layout.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit aa196d6026b496ec70be3d3588cc8cd2b8ccdb36
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa196d6026b496ec70be3d3588cc8cd2b8ccdb36
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25717,8 +37272,8 @@ Date:   Fri Nov 6 17:23:31 2009 -0500
     not a
     component!
 
     not a
     component!
 
- src/hb-ot-layout-gsub-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 25e7ef704633447f109b148620336c42d6fb310e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 25e7ef704633447f109b148620336c42d6fb310e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25726,10 +37281,10 @@ Date: Fri Nov 6 17:21:01 2009 -0500
 
     Add _hb_buffer_add_output_glyphs() that takes codepoint_t*
 
 
     Add _hb_buffer_add_output_glyphs() that takes codepoint_t*
 
- src/hb-buffer-private.h         |   10 +++++++-
- src/hb-buffer.c                 |   45
- ++++++++++++++++++++++++++++++++++++-
- src/hb-ot-layout-gsub-private.hh |   16 ++++++------
+ src/hb-buffer-private.h         | 10 ++++++++-
+ src/hb-buffer.c                 | 45
+ ++++++++++++++++++++++++++++++++++++++--
+ src/hb-ot-layout-gsub-private.hh | 16 +++++++-------
  3 files changed, 60 insertions(+), 11 deletions(-)
 
 commit 9db8ad75317d589807e7725455f49cafece58d5d
  3 files changed, 60 insertions(+), 11 deletions(-)
 
 commit 9db8ad75317d589807e7725455f49cafece58d5d
@@ -25740,12 +37295,12 @@ Date: Fri Nov 6 16:47:31 2009 -0500
 
     We expect buffer to be setup with default positions before GPOS.
 
 
     We expect buffer to be setup with default positions before GPOS.
 
- src/hb-buffer-private.h         |    6 +---
- src/hb-buffer.h                 |   11 +-------
- src/hb-ot-layout-gpos-private.hh |    8 +++---
- src/hb-ot-layout.cc             |   52
- ++++++++++++++++++++++++++++++++++++++
- src/hb-ot-layout.h              |   16 ++++++++---
+ src/hb-buffer-private.h         |  6 +----
+ src/hb-buffer.h                 | 11 +--------
+ src/hb-ot-layout-gpos-private.hh |  8 +++----
+ src/hb-ot-layout.cc             | 52
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.h              | 16 +++++++++----
  5 files changed, 69 insertions(+), 24 deletions(-)
 
 commit edb54e9aeca25f4120a69ed3d5562cbb68fdb348
  5 files changed, 69 insertions(+), 24 deletions(-)
 
 commit edb54e9aeca25f4120a69ed3d5562cbb68fdb348
@@ -25754,8 +37309,8 @@ Date:   Fri Nov 6 15:19:22 2009 -0500
 
     Fix FT_Face finalizer call
 
 
     Fix FT_Face finalizer call
 
- src/hb-ft.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ft.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 3d14528b8b2e7da425a9df7057fc9fb326d8298c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3d14528b8b2e7da425a9df7057fc9fb326d8298c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25763,8 +37318,8 @@ Date:   Fri Nov 6 15:13:17 2009 -0500
 
     Rename hb_buffer_get_len() to hb_buffer_get_length()
 
 
     Rename hb_buffer_get_len() to hb_buffer_get_length()
 
- src/hb-buffer.c |    2 +-
- src/hb-buffer.h |    2 +-
+ src/hb-buffer.c | 2 +-
+ src/hb-buffer.h | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 1ff7775051559a8ca442be3938450c7ed3817806
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 1ff7775051559a8ca442be3938450c7ed3817806
@@ -25773,8 +37328,8 @@ Date:   Fri Nov 6 13:52:57 2009 -0500
 
     Minor.
 
 
     Minor.
 
- src/hb-shape.c |    6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/hb-shape.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit 3648bdf5b221adfe01ad99714de420b49964921e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3648bdf5b221adfe01ad99714de420b49964921e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25782,8 +37337,8 @@ Date:   Thu Nov 5 20:17:53 2009 -0500
 
     Fix FT_Face generic finalizer
 
 
     Fix FT_Face generic finalizer
 
- src/hb-ft.c |  10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
+ src/hb-ft.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
 
 commit 5a11c875d8c95d480e6f32b57e969ee34ca1940d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5a11c875d8c95d480e6f32b57e969ee34ca1940d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25791,8 +37346,8 @@ Date:   Thu Nov 5 20:08:17 2009 -0500
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-blob.c |   10 ++++++----
- 1 files changed, 6 insertions(+), 4 deletions(-)
+ src/hb-blob.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
 
 commit 44533e773f75b9a1171d884fcbe91a2f3879e2d8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 44533e773f75b9a1171d884fcbe91a2f3879e2d8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25800,8 +37355,8 @@ Date:   Thu Nov 5 19:58:02 2009 -0500
 
     Fix warning
 
 
     Fix warning
 
- src/hb-object-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-object-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit bcc0406a525ca3fe597aec5f2a97e5c50965d49c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bcc0406a525ca3fe597aec5f2a97e5c50965d49c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25809,8 +37364,8 @@ Date:   Thu Nov 5 19:54:23 2009 -0500
 
     include errno.h
 
 
     include errno.h
 
- src/hb-blob.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-blob.c | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 799b3c375ad0e1293fd37a0e3a0d422a3166dcd8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 799b3c375ad0e1293fd37a0e3a0d422a3166dcd8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25818,8 +37373,8 @@ Date:   Thu Nov 5 19:37:58 2009 -0500
 
     Add debugging to object lifecycle
 
 
     Add debugging to object lifecycle
 
- src/hb-object-private.h |   18 ++++++++++++++++++
- 1 files changed, 18 insertions(+), 0 deletions(-)
+ src/hb-object-private.h | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
 
 commit 25edb940ab050545f47a06648e73c192fa213548
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 25edb940ab050545f47a06648e73c192fa213548
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25827,8 +37382,8 @@ Date:   Thu Nov 5 19:20:06 2009 -0500
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ft.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ft.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 850dc5bb551409bb9bf6113ec2199bb3fb905e43
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 850dc5bb551409bb9bf6113ec2199bb3fb905e43
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25836,8 +37391,8 @@ Date:   Thu Nov 5 18:26:52 2009 -0500
 
     Return 0 from get_glyph_nil
 
 
     Return 0 from get_glyph_nil
 
- src/hb-font.cc |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 85555a953376ee68a8fcc64485e74d44a353577b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 85555a953376ee68a8fcc64485e74d44a353577b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25845,8 +37400,8 @@ Date:   Thu Nov 5 18:25:56 2009 -0500
 
     Initialize font->klass
 
 
     Initialize font->klass
 
- src/hb-font.cc |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-font.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit bcd26bd7b1c96057bf154d7d50a61018d40f0d29
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bcd26bd7b1c96057bf154d7d50a61018d40f0d29
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25854,8 +37409,8 @@ Date:   Thu Nov 5 18:03:26 2009 -0500
 
     Add TODO item
 
 
     Add TODO item
 
- src/hb-ft.c |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-ft.c | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit f4281e0a92a40746fa630fb15b877adaf3ff15b1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f4281e0a92a40746fa630fb15b877adaf3ff15b1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25863,8 +37418,8 @@ Date:   Thu Nov 5 17:58:41 2009 -0500
 
     Fix ref counting
 
 
     Fix ref counting
 
- src/hb-ft.c |  16 ++++++++--------
- 1 files changed, 8 insertions(+), 8 deletions(-)
+ src/hb-ft.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
 
 commit 6358ff45ae8cfc0b58b4976619319e3dde43add2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6358ff45ae8cfc0b58b4976619319e3dde43add2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25872,9 +37427,9 @@ Date:   Thu Nov 5 17:39:16 2009 -0500
 
     Add hb_ft_face_create_cached
 
 
     Add hb_ft_face_create_cached
 
- src/hb-ft.c |  16 ++++++++++++++++
- src/hb-ft.h |   3 +++
- 2 files changed, 19 insertions(+), 0 deletions(-)
+ src/hb-ft.c | 16 ++++++++++++++++
+ src/hb-ft.h | 3 +++
+ 2 files changed, 19 insertions(+)
 
 commit 2027f74b286cabe3c60c275170c4f4b437a30f55
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2027f74b286cabe3c60c275170c4f4b437a30f55
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25882,8 +37437,8 @@ Date:   Thu Nov 5 16:34:47 2009 -0500
 
     Add default positioning to hb-shape
 
 
     Add default positioning to hb-shape
 
- src/hb-shape.c |   28 ++++++++++++++++++++++++----
- 1 files changed, 24 insertions(+), 4 deletions(-)
+ src/hb-shape.c | 28 ++++++++++++++++++++++++----
+ 1 file changed, 24 insertions(+), 4 deletions(-)
 
 commit c3f9f7e59d865f8664862b7ca99d9a3a9221e456
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c3f9f7e59d865f8664862b7ca99d9a3a9221e456
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25891,8 +37446,8 @@ Date:   Thu Nov 5 16:16:14 2009 -0500
 
     Fix MarkMark issue with ligid and components
 
 
     Fix MarkMark issue with ligid and components
 
- src/hb-ot-layout-gpos-private.hh |   11 ++++++-----
- src/hb-ot-layout-gsub-private.hh |    6 +-----
+ src/hb-ot-layout-gpos-private.hh | 11 ++++++-----
+ src/hb-ot-layout-gsub-private.hh |  6 +-----
  2 files changed, 7 insertions(+), 10 deletions(-)
 
 commit d0351314cd29fbdf0efb5c7f89a569648f7a7fc7
  2 files changed, 7 insertions(+), 10 deletions(-)
 
 commit d0351314cd29fbdf0efb5c7f89a569648f7a7fc7
@@ -25901,10 +37456,10 @@ Date: Thu Nov 5 16:16:06 2009 -0500
 
     Include stdio.h if debugging
 
 
     Include stdio.h if debugging
 
- src/hb-blob.c                       |    4 ++++
- src/hb-open-type-private.hh         |    1 +
- src/hb-ot-layout-gsubgpos-private.hh |    1 +
- 3 files changed, 6 insertions(+), 0 deletions(-)
+ src/hb-blob.c                       | 4 ++++
+ src/hb-open-type-private.hh         | 1 +
+ src/hb-ot-layout-gsubgpos-private.hh | 1 +
+ 3 files changed, 6 insertions(+)
 
 commit 2e336692913405976392bf505028481a5caa53b4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2e336692913405976392bf505028481a5caa53b4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25912,10 +37467,10 @@ Date: Thu Nov 5 13:55:41 2009 -0500
 
     Add hb_font_get_*
 
 
     Add hb_font_get_*
 
- src/hb-font.cc |   35 +++++++++++++++++++++++++++++++++++
- src/hb-font.h |   18 ++++++++++++++++++
- src/hb-shape.c |    2 +-
- 3 files changed, 54 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 35 +++++++++++++++++++++++++++++++++++
+ src/hb-font.h | 18 ++++++++++++++++++
+ src/hb-shape.c |  2 +-
+ 3 files changed, 54 insertions(+), 1 deletion(-)
 
 commit 9bef3611f07b45ba8199a4a339c72f49d266216a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9bef3611f07b45ba8199a4a339c72f49d266216a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25923,14 +37478,14 @@ Date: Thu Nov 5 12:20:11 2009 -0500
 
     Rename [xy]_pos to [xy]_offset since we don't accumulate positions
 
 
     Rename [xy]_pos to [xy]_offset since we don't accumulate positions
 
- src/hb-buffer-private.h         |    4 +-
- src/hb-buffer.h                 |    4 +-
- src/hb-font.h                   |    4 +-
- src/hb-ft.c                     |   10 ++++----
- src/hb-ot-layout-gpos-private.hh |   40
- +++++++++++--------------------------
- src/hb-shape.c                          |   14 ++++++------
- src/hb-shape.h                          |    4 +-
+ src/hb-buffer-private.h         |  4 ++--
+ src/hb-buffer.h                 |  4 ++--
+ src/hb-font.h                   |  4 ++--
+ src/hb-ft.c                     | 10 +++++-----
+ src/hb-ot-layout-gpos-private.hh | 40
+ ++++++++++++----------------------------
+ src/hb-shape.c                          | 14 +++++++-------
+ src/hb-shape.h                          |  4 ++--
  7 files changed, 32 insertions(+), 48 deletions(-)
 
 commit 2daa47e9cdbfb027f76765301b3a78950e92eb09
  7 files changed, 32 insertions(+), 48 deletions(-)
 
 commit 2daa47e9cdbfb027f76765301b3a78950e92eb09
@@ -25939,8 +37494,8 @@ Date:   Thu Nov 5 12:08:34 2009 -0500
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-shape.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-shape.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2f50d873680ce0a43b6ec79df1ac946b91f31e63
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f50d873680ce0a43b6ec79df1ac946b91f31e63
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25948,9 +37503,9 @@ Date:   Wed Nov 4 21:07:03 2009 -0500
 
     Start filling hb_shape() in
 
 
     Start filling hb_shape() in
 
- src/hb-buffer-private.h |    1 +
- src/hb-shape.c                 |   40 +++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 40 insertions(+), 1 deletions(-)
+ src/hb-buffer-private.h |  1 +
+ src/hb-shape.c                 | 40 +++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 40 insertions(+), 1 deletion(-)
 
 commit ae070b7d39d03bd8bc1244f687b24db505f4af3f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ae070b7d39d03bd8bc1244f687b24db505f4af3f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25958,10 +37513,10 @@ Date: Wed Nov 4 20:29:54 2009 -0500
 
     Add script and language to buffer
 
 
     Add script and language to buffer
 
- TODO                   |    1 -
- src/hb-buffer-private.h |    6 +++---
- src/hb-buffer.c        |   26 ++++++++++++++++++++++++++
- src/hb-buffer.h        |   15 ++++++++++++++-
+ TODO                   |  1 -
+ src/hb-buffer-private.h |  6 +++---
+ src/hb-buffer.c        | 26 ++++++++++++++++++++++++++
+ src/hb-buffer.h        | 15 ++++++++++++++-
  4 files changed, 43 insertions(+), 5 deletions(-)
 
 commit 8a3511ac6c795226699c2b36e03401ecdf88f5f8
  4 files changed, 43 insertions(+), 5 deletions(-)
 
 commit 8a3511ac6c795226699c2b36e03401ecdf88f5f8
@@ -25970,17 +37525,17 @@ Date: Wed Nov 4 19:45:39 2009 -0500
 
     Add hb_language_t as well as language/script conversion to OT tags
 
 
     Add hb_language_t as well as language/script conversion to OT tags
 
- src/Makefile.am     |   4 +
- src/hb-language.c   | 113 +++++++++
- src/hb-language.h   |  44 ++++
- src/hb-ot-layout.cc |   6 +-
- src/hb-ot-layout.h  |   4 +-
- src/hb-ot-tag.c     | 662
- +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-ot-tag.h     |  49 ++++
- src/hb-ot.h        |    1 +
- src/hb-private.h    |   3 +
- src/hb.h           |    1 +
+ src/Makefile.am     |  4 +
+ src/hb-language.c   | 113 +++++++++
+ src/hb-language.h   | 44 ++++
+ src/hb-ot-layout.cc |  6 +-
+ src/hb-ot-layout.h  |  4 +-
+ src/hb-ot-tag.c     | 662
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-tag.h     | 49 ++++
+ src/hb-ot.h        |   1 +
+ src/hb-private.h    |  3 +
+ src/hb.h           |   1 +
  10 files changed, 882 insertions(+), 5 deletions(-)
 
 commit 4591753ad4b5ec0224e3f1befdfe4fc5f6075562
  10 files changed, 882 insertions(+), 5 deletions(-)
 
 commit 4591753ad4b5ec0224e3f1befdfe4fc5f6075562
@@ -25989,8 +37544,8 @@ Date:   Wed Nov 4 18:15:59 2009 -0500
 
     Define ARRAY_LENGTH
 
 
     Define ARRAY_LENGTH
 
- src/hb-private.h |   15 ++++++++-------
- 1 files changed, 8 insertions(+), 7 deletions(-)
+ src/hb-private.h | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
 
 commit 214ac7c1ff51b397d227832526f882e824cb9ea3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 214ac7c1ff51b397d227832526f882e824cb9ea3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25998,8 +37553,8 @@ Date:   Wed Nov 4 18:12:32 2009 -0500
 
     Another one
 
 
     Another one
 
- src/hb-unicode.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-unicode.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 1e91434569a9e9535ef021ca52b60b2e2af75d19
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1e91434569a9e9535ef021ca52b60b2e2af75d19
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26007,8 +37562,8 @@ Date:   Wed Nov 4 18:12:09 2009 -0500
 
     Minor
 
 
     Minor
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 48de3730cdf91b9f6473509e22260a902ccec992
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 48de3730cdf91b9f6473509e22260a902ccec992
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26016,9 +37571,9 @@ Date:   Wed Nov 4 16:59:50 2009 -0500
 
     Fix previous commit, ouch!
 
 
     Fix previous commit, ouch!
 
- src/hb-open-type-private.hh       |   12 ++++++++++++
- src/hb-ot-layout-common-private.hh |  12 ++++--------
- src/hb-ot-layout-gdef-private.hh   |  12 ++++--------
+ src/hb-open-type-private.hh       | 12 ++++++++++++
+ src/hb-ot-layout-common-private.hh | 12 ++++--------
+ src/hb-ot-layout-gdef-private.hh   | 12 ++++--------
  3 files changed, 20 insertions(+), 16 deletions(-)
 
 commit e21899bc3593aa0d3adf64cee21c5de2ea219783
  3 files changed, 20 insertions(+), 16 deletions(-)
 
 commit e21899bc3593aa0d3adf64cee21c5de2ea219783
@@ -26034,13 +37589,13 @@ Date: Wed Nov 4 16:36:14 2009 -0500
       - The _count IN/OUT variable always has number of items written
        into the array upon return of the function
 
       - The _count IN/OUT variable always has number of items written
        into the array upon return of the function
 
- TODO                                |    1 -
- src/hb-ot-layout-common-private.hh   |   59 ++++++++++++++----------
- src/hb-ot-layout-gdef-private.hh     |   84
- ++++++++++++++++++++--------------
- src/hb-ot-layout-gsubgpos-private.hh |   14 +++--
- src/hb-ot-layout.cc                 |   40 ++++++++++------
- src/hb-ot-layout.h                  |   24 ++++++---
+ TODO                                |  1 -
+ src/hb-ot-layout-common-private.hh   | 59 ++++++++++++++-----------
+ src/hb-ot-layout-gdef-private.hh     | 84
+ +++++++++++++++++++++---------------
+ src/hb-ot-layout-gsubgpos-private.hh | 14 +++---
+ src/hb-ot-layout.cc                 | 40 ++++++++++-------
+ src/hb-ot-layout.h                  | 24 +++++++----
  6 files changed, 131 insertions(+), 91 deletions(-)
 
 commit 3b59306b858d31d97be0ea8c64461de1d0d03572
  6 files changed, 131 insertions(+), 91 deletions(-)
 
 commit 3b59306b858d31d97be0ea8c64461de1d0d03572
@@ -26049,10 +37604,10 @@ Date: Wed Nov 4 15:48:32 2009 -0500
 
     Finish FT glue.  Rough and untested
 
 
     Finish FT glue.  Rough and untested
 
- src/hb-font.cc |    2 +-
- src/hb-font.h |    2 +-
- src/hb-ft.c   |  114
- ++++++++++++++++++++++++++++++--------------------------
+ src/hb-font.cc |   2 +-
+ src/hb-font.h |   2 +-
+ src/hb-ft.c   | 114
+ ++++++++++++++++++++++++++++++---------------------------
  3 files changed, 63 insertions(+), 55 deletions(-)
 
 commit f8be443aecd54b479470e6559b1dfbc8f33c5f55
  3 files changed, 63 insertions(+), 55 deletions(-)
 
 commit f8be443aecd54b479470e6559b1dfbc8f33c5f55
@@ -26061,8 +37616,8 @@ Date:   Tue Nov 3 20:28:27 2009 -0500
 
     Add TODO item
 
 
     Add TODO item
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 7951279b4a52b48f13631e7838dbc180c7249ea4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7951279b4a52b48f13631e7838dbc180c7249ea4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26070,14 +37625,14 @@ Date: Tue Nov 3 20:27:05 2009 -0500
 
     Implement nil font functions
 
 
     Implement nil font functions
 
- TODO                            |    1 +
- src/hb-font-private.h           |    8 ++--
- src/hb-font.cc                          |   72
- +++++++++++++++++++++++++++++++++++--
- src/hb-font.h                   |    9 ++---
- src/hb-ot-layout-gpos-private.hh |    7 ++--
- src/hb-ot-layout-gsub-private.hh |    2 +-
- src/hb-private.h                |   18 +++++-----
+ TODO                            |  1 +
+ src/hb-font-private.h           |  8 ++---
+ src/hb-font.cc                          | 72
+ +++++++++++++++++++++++++++++++++++++---
+ src/hb-font.h                   |  9 +++--
+ src/hb-ot-layout-gpos-private.hh |  7 ++--
+ src/hb-ot-layout-gsub-private.hh |  2 +-
+ src/hb-private.h                | 18 +++++-----
  7 files changed, 91 insertions(+), 26 deletions(-)
 
 commit 8fb3d1aa4e613cdf965a83bd650c668884c58ad8
  7 files changed, 91 insertions(+), 26 deletions(-)
 
 commit 8fb3d1aa4e613cdf965a83bd650c668884c58ad8
@@ -26086,17 +37641,17 @@ Date: Tue Nov 3 18:34:20 2009 -0500
 
     Start ft glue
 
 
     Start ft glue
 
- TODO                 |    3 -
- src/Makefile.am       |   16 ++++-
- src/hb-font-private.h |    4 +-
- src/hb-font.cc        |   17 ++++-
- src/hb-font.h        |    6 +-
- src/hb-ft.c          |  192
- +++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-ft.h          |   52 +++++++++++++
- src/hb-glib.h        |    2 -
- src/hb-icu.h         |    2 -
- src/hb.h             |    4 +-
+ TODO                 |   3 -
+ src/Makefile.am       |  16 ++++-
+ src/hb-font-private.h |   4 +-
+ src/hb-font.cc        |  17 ++++-
+ src/hb-font.h        |   6 +-
+ src/hb-ft.c          | 192
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ft.h          |  52 ++++++++++++++
+ src/hb-glib.h        |   2 -
+ src/hb-icu.h         |   2 -
+ src/hb.h             |   4 +-
  10 files changed, 281 insertions(+), 17 deletions(-)
 
 commit d94647e2cd187bf4a4c8fb1c0c15c3d23c1293ac
  10 files changed, 281 insertions(+), 17 deletions(-)
 
 commit d94647e2cd187bf4a4c8fb1c0c15c3d23c1293ac
@@ -26105,11 +37660,11 @@ Date: Tue Nov 3 16:35:10 2009 -0500
 
     Add ICU glue
 
 
     Add ICU glue
 
- configure.ac   |    8 ++-
- src/Makefile.am |   23 +++++-
- src/hb-icu.c   |  221
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-icu.h   |   41 ++++++++++
+ configure.ac   |   +-
+ src/Makefile.am |  23 +++++-
+ src/hb-icu.c   | 221
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-icu.h   |  41 +++++++++++
  4 files changed, 288 insertions(+), 5 deletions(-)
 
 commit b7dd4b945b4ec384526439b365a25739bf9cd2df
  4 files changed, 288 insertions(+), 5 deletions(-)
 
 commit b7dd4b945b4ec384526439b365a25739bf9cd2df
@@ -26118,8 +37673,8 @@ Date:   Tue Nov 3 15:21:15 2009 -0500
 
     Fix hb_be_uint16()
 
 
     Fix hb_be_uint16()
 
- src/hb-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit cd7555eef27cb18857c0c06d2afdaf3a354a3c15
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd7555eef27cb18857c0c06d2afdaf3a354a3c15
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26127,8 +37682,8 @@ Date:   Tue Nov 3 15:16:10 2009 -0500
 
     Namespace MSVC defines in public header
 
 
     Namespace MSVC defines in public header
 
- src/hb-common.h |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-common.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 5ebabecef382c3e8b0a2a5657b2c01f7ff37d796
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5ebabecef382c3e8b0a2a5657b2c01f7ff37d796
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26136,14 +37691,14 @@ Date: Tue Nov 3 15:15:07 2009 -0500
 
     Move unicode_funcs to buffer
 
 
     Move unicode_funcs to buffer
 
- TODO                   |    1 -
- src/hb-buffer-private.h |   12 +++++++++++-
- src/hb-buffer.c        |   47
+ TODO                   |  1 -
+ src/hb-buffer-private.h | 12 +++++++++++-
+ src/hb-buffer.c        | 47
  ++++++++++++++++++++++++++++++++++++++---------
  ++++++++++++++++++++++++++++++++++++++---------
- src/hb-buffer.h        |   10 ++++++++++
- src/hb-font-private.h  |    3 ---
- src/hb-font.cc                 |   17 -----------------
- src/hb-font.h          |    9 ++++-----
+ src/hb-buffer.h        | 10 ++++++++++
+ src/hb-font-private.h  |  3 ---
+ src/hb-font.cc                 | 17 -----------------
+ src/hb-font.h          |  9 ++++-----
  7 files changed, 63 insertions(+), 36 deletions(-)
 
 commit d5a8e46099e363d928b54de104126b1b34ba401c
  7 files changed, 63 insertions(+), 36 deletions(-)
 
 commit d5a8e46099e363d928b54de104126b1b34ba401c
@@ -26154,8 +37709,8 @@ Date:   Tue Nov 3 15:14:40 2009 -0500
 
     Separate OT headers also.
 
 
     Separate OT headers also.
 
- src/Makefile.am |   27 ++++++++++++++++-----------
- 1 files changed, 16 insertions(+), 11 deletions(-)
+ src/Makefile.am | 27 ++++++++++++++++-----------
+ 1 file changed, 16 insertions(+), 11 deletions(-)
 
 commit 63d7a41dd0704a7e89bd2872ad096f470f51866a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 63d7a41dd0704a7e89bd2872ad096f470f51866a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26163,8 +37718,8 @@ Date:   Tue Nov 3 15:14:08 2009 -0500
 
     [TODO] Add item for fixing buffer error handling
 
 
     [TODO] Add item for fixing buffer error handling
 
- TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 21d0fce3d5364c91e5582bd530210f03e054d1a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 21d0fce3d5364c91e5582bd530210f03e054d1a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26172,9 +37727,9 @@ Date:   Tue Nov 3 14:28:32 2009 -0500
 
     Add check for not linking to libstdc++
 
 
     Add check for not linking to libstdc++
 
- TODO                  |    3 +--
- src/Makefile.am       |    4 ++++
- src/check-libstdc++.sh |   28 ++++++++++++++++++++++++++++
+ TODO                  |  3 +--
+ src/Makefile.am       |  4 ++++
+ src/check-libstdc++.sh | 28 ++++++++++++++++++++++++++++
  3 files changed, 33 insertions(+), 2 deletions(-)
 
 commit ca95ce460adf2ca6901595d4a6107fd000d90151
  3 files changed, 33 insertions(+), 2 deletions(-)
 
 commit ca95ce460adf2ca6901595d4a6107fd000d90151
@@ -26185,8 +37740,8 @@ Date:   Tue Nov 3 14:18:33 2009 -0500
 
     Such that we don't link to libstdc++.
 
 
     Such that we don't link to libstdc++.
 
- src/Makefile.am |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit eb4ebda2d10637b966f42a4ed5cfaec46082a050
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eb4ebda2d10637b966f42a4ed5cfaec46082a050
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26194,8 +37749,8 @@ Date:   Tue Nov 3 14:09:32 2009 -0500
 
     [configure] Fix check for FreeType
 
 
     [configure] Fix check for FreeType
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit cb0e99a5a76136c128faba1c27d7e7eac2f219ee
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cb0e99a5a76136c128faba1c27d7e7eac2f219ee
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26203,8 +37758,8 @@ Date:   Tue Nov 3 14:09:10 2009 -0500
 
     [TODO] Remove obsolete item
 
 
     [TODO] Remove obsolete item
 
- TODO |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ TODO | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 3a59ec37c5576b711c7c36dcfa2a63f6c00a3f5c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3a59ec37c5576b711c7c36dcfa2a63f6c00a3f5c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26212,8 +37767,8 @@ Date:   Tue Nov 3 11:36:06 2009 -0500
 
     Add bunch of TODO items
 
 
     Add bunch of TODO items
 
- TODO |   15 ++++++++++++---
- 1 files changed, 12 insertions(+), 3 deletions(-)
+ TODO | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
 
 commit ffbe0a853d5e7defa85d0eef53814c22d1ecb412
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ffbe0a853d5e7defa85d0eef53814c22d1ecb412
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26221,9 +37776,9 @@ Date:   Tue Nov 3 10:52:45 2009 -0500
 
     More MSVC fixes from Jonathan Kew
 
 
     More MSVC fixes from Jonathan Kew
 
- src/hb-common.h  |    7 ++++++-
- src/hb-private.h |    5 +++++
- 2 files changed, 11 insertions(+), 1 deletions(-)
+ src/hb-common.h  | 7 ++++++-
+ src/hb-private.h | 5 +++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
 
 commit d3480ba37fbb5d4be75b094060f5b2f1ce98fb53
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d3480ba37fbb5d4be75b094060f5b2f1ce98fb53
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26235,15 +37790,15 @@ Date: Tue Nov 3 10:47:29 2009 -0500
     the code
     a lot less elegant than it used to be, but I think it should work now.
 
     the code
     a lot less elegant than it used to be, but I think it should work now.
 
- src/hb-open-file-private.hh         |    4 +-
- src/hb-open-type-private.hh         |   36 ++++++++++------
- src/hb-ot-layout-common-private.hh   |   33 ++++++++-------
- src/hb-ot-layout-gdef-private.hh     |   14 +++----
- src/hb-ot-layout-gpos-private.hh     |   76
- +++++++++++++--------------------
- src/hb-ot-layout-gsub-private.hh     |   44 ++++++++------------
- src/hb-ot-layout-gsubgpos-private.hh |   47 ++++++++++-----------
- src/hb-private.h                    |    5 ++
+ src/hb-open-file-private.hh         |  4 +-
+ src/hb-open-type-private.hh         | 36 +++++++++++------
+ src/hb-ot-layout-common-private.hh   | 33 ++++++++--------
+ src/hb-ot-layout-gdef-private.hh     | 14 +++----
+ src/hb-ot-layout-gpos-private.hh     | 76
+ ++++++++++++++----------------------
+ src/hb-ot-layout-gsub-private.hh     | 44 ++++++++-------------
+ src/hb-ot-layout-gsubgpos-private.hh | 47 +++++++++++-----------
+ src/hb-private.h                    |  5 +++
  8 files changed, 122 insertions(+), 137 deletions(-)
 
 commit 6bec81aa3a58b8be255568b2ea63b7854e1b0ea7
  8 files changed, 122 insertions(+), 137 deletions(-)
 
 commit 6bec81aa3a58b8be255568b2ea63b7854e1b0ea7
@@ -26252,8 +37807,8 @@ Date:   Mon Nov 2 19:17:36 2009 -0500
 
     Cosmetic
 
 
     Cosmetic
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f94cf6b969281cf8a7f701ff26ea4f134ff9746e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f94cf6b969281cf8a7f701ff26ea4f134ff9746e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26261,8 +37816,8 @@ Date:   Mon Nov 2 18:55:19 2009 -0500
 
     Another try at build without glib
 
 
     Another try at build without glib
 
- configure.ac |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
+ configure.ac | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 commit 2f3e69f3cb7e571cc62b0840d0b3f2072b29345a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2f3e69f3cb7e571cc62b0840d0b3f2072b29345a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26270,8 +37825,8 @@ Date:   Mon Nov 2 18:53:15 2009 -0500
 
     Fix build without glib, again
 
 
     Fix build without glib, again
 
- src/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit d03f81865914b40e941bf680557c0d8f98e30ad5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d03f81865914b40e941bf680557c0d8f98e30ad5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26279,8 +37834,8 @@ Date:   Mon Nov 2 18:52:21 2009 -0500
 
     Disable configure cache
 
 
     Disable configure cache
 
- autogen.sh |   1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ autogen.sh | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit a6451aa626fa5850d7c3b716bd52126995154e27
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a6451aa626fa5850d7c3b716bd52126995154e27
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26288,8 +37843,8 @@ Date:   Mon Nov 2 18:35:12 2009 -0500
 
     We don't really use gthread directly
 
 
     We don't really use gthread directly
 
- configure.ac |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 63a792a811e0ad69d05e8805d4f347bd533db4c3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 63a792a811e0ad69d05e8805d4f347bd533db4c3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26297,8 +37852,8 @@ Date:   Mon Nov 2 18:33:52 2009 -0500
 
     Update Makefile to build without glib
 
 
     Update Makefile to build without glib
 
- src/Makefile.am |   12 +++++++++---
- src/hb-glib.c  |    2 ++
+ src/Makefile.am | 12 +++++++++---
+ src/hb-glib.c  |  2 ++
  2 files changed, 11 insertions(+), 3 deletions(-)
 
 commit 68a2c771e2b923461a552bf3673e9e8245e1bfea
  2 files changed, 11 insertions(+), 3 deletions(-)
 
 commit 68a2c771e2b923461a552bf3673e9e8245e1bfea
@@ -26311,8 +37866,8 @@ Date:   Mon Nov 2 18:31:53 2009 -0500
     pthread, etc.
     Fun...
 
     pthread, etc.
     Fun...
 
- src/hb-private.h |   19 +++++++++++++++++--
- 1 files changed, 17 insertions(+), 2 deletions(-)
+ src/hb-private.h | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
 
 commit cc4c096a7e08ae96b3030fe27f871ce5b797f370
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc4c096a7e08ae96b3030fe27f871ce5b797f370
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26320,8 +37875,8 @@ Date:   Mon Nov 2 18:13:17 2009 -0500
 
     MSVC has no stdint.h
 
 
     MSVC has no stdint.h
 
- src/hb-common.h |   13 +++++++++++++
- 1 files changed, 13 insertions(+), 0 deletions(-)
+ src/hb-common.h | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
 
 commit 9a204c7ab57ca0a866c72e1431c54a8883b15605
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9a204c7ab57ca0a866c72e1431c54a8883b15605
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26329,8 +37884,8 @@ Date:   Mon Nov 2 18:11:55 2009 -0500
 
     Remove use of GINT16_FROM_BE
 
 
     Remove use of GINT16_FROM_BE
 
- src/hb-private.h |   10 ++--------
- 1 files changed, 2 insertions(+), 8 deletions(-)
+ src/hb-private.h | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
 
 commit 1f0ceeb8cf2fad0a0dfd338ce1472470a81789d4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1f0ceeb8cf2fad0a0dfd338ce1472470a81789d4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26338,8 +37893,8 @@ Date:   Mon Nov 2 16:28:39 2009 -0500
 
     Install library
 
 
     Install library
 
- autogen.sh     |    2 +-
- src/Makefile.am |    5 ++---
+ autogen.sh     | 2 +-
+ src/Makefile.am | 5 ++---
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 5932f8f7c3b73ade3752020351fa8b6a9a3bf500
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 commit 5932f8f7c3b73ade3752020351fa8b6a9a3bf500
@@ -26348,8 +37903,8 @@ Date:   Mon Nov 2 16:38:41 2009 -0500
 
     Generate ChangeLog
 
 
     Generate ChangeLog
 
- Makefile.am |  39 +++++++++++++++++++++++++++++++++++++++
- 1 files changed, 39 insertions(+), 0 deletions(-)
+ Makefile.am | 39 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
 
 commit 29aa40018301a4f138cd5e73463079c7704bf3ac
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 29aa40018301a4f138cd5e73463079c7704bf3ac
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26357,22 +37912,24 @@ Date: Mon Nov 2 16:28:39 2009 -0500
 
     Add build system
 
 
     Add build system
 
- COPYING        |   17 +++++
- Makefile.am    |    3 +
- README                 |    9 +++
- TODO           |    6 ++
- autogen.sh     |  189
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- configure.ac   |   40 ++++++++++++
- git.mk                 |  184
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
- harfbuzz.pc.in  |   11 +++
- src/.gitignore  |    1 -
- src/COPYING    |   17 -----
- src/Makefile.ng |   11 ---
- src/README     |    9 ---
- src/TODO       |    6 --
- 13 files changed, 459 insertions(+), 44 deletions(-)
+ AUTHORS        |   0
+ COPYING        |  17 +++++
+ Makefile.am    |   3 +
+ NEWS           |   0
+ README                 |   9 +++
+ TODO           |   6 ++
+ autogen.sh     | 189
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac   |  40 ++++++++++++
+ git.mk                 | 184
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ harfbuzz.pc.in  |  11 ++++
+ src/.gitignore  |   1 -
+ src/COPYING    |  17 -----
+ src/Makefile.ng |  11 ----
+ src/README     |   9 ---
+ src/TODO       |   6 --
+ 15 files changed, 459 insertions(+), 44 deletions(-)
 
 commit c09ed9801ead002d6f8e507ce664b83707b202e9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c09ed9801ead002d6f8e507ce664b83707b202e9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26380,8 +37937,8 @@ Date:   Thu Oct 29 03:08:42 2009 -0400
 
     [HB] Add glyph_metrics typedef
 
 
     [HB] Add glyph_metrics typedef
 
- src/hb-font.h |    9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ src/hb-font.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 commit 91b1e03e0312be2a7a165308239b40449e3ab360
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 91b1e03e0312be2a7a165308239b40449e3ab360
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26391,8 +37948,8 @@ Date:   Thu Oct 29 03:05:18 2009 -0400
 
     Pointed out by Keith Stribley on HarfBuzz list.
 
 
     Pointed out by Keith Stribley on HarfBuzz list.
 
- src/hb-font.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-font.h | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit aa87d951739f6beacb66daa235cd033fdcfcadd7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa87d951739f6beacb66daa235cd033fdcfcadd7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26402,9 +37959,9 @@ Date:   Thu Oct 29 03:00:44 2009 -0400
 
     Reported by Keith Stribley on HarfBuzz list.
 
 
     Reported by Keith Stribley on HarfBuzz list.
 
- src/hb-ot-layout-common-private.hh |   1 +
- src/hb-ot-layout.cc               |    2 +-
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 1 +
+ src/hb-ot-layout.cc               | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit 52e9a71d578c5171bbb0f4bfc1b70841c3270328
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 52e9a71d578c5171bbb0f4bfc1b70841c3270328
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26412,8 +37969,8 @@ Date:   Mon Sep 21 13:58:56 2009 -0400
 
     [HB] Add comment
 
 
     [HB] Add comment
 
- src/hb-ot-layout-gsubgpos-private.hh |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit f9c0a2dad09cd168fb28cdee09b4303f307ea56d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f9c0a2dad09cd168fb28cdee09b4303f307ea56d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26425,8 +37982,8 @@ Date:   Mon Sep 21 13:43:54 2009 -0400
     with
     OpenType font
 
     with
     OpenType font
 
- src/hb-ot-layout-gsubgpos-private.hh |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit c0ab43c05833e8fc06d770a89370bec58a627e74
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c0ab43c05833e8fc06d770a89370bec58a627e74
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26438,8 +37995,8 @@ Date:   Mon Sep 21 13:40:38 2009 -0400
     with
     OpenType font
 
     with
     OpenType font
 
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit e6bd4e93bd5722249ab977dfa98bdc8eb765318c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6bd4e93bd5722249ab977dfa98bdc8eb765318c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26447,8 +38004,8 @@ Date:   Sun Aug 30 21:02:28 2009 -0400
 
     [HB] Add TODO item
 
 
     [HB] Add TODO item
 
- src/TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3e2401f6c53d2b047954d75c37aef5e5e7cdc51a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3e2401f6c53d2b047954d75c37aef5e5e7cdc51a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26456,14 +38013,14 @@ Date: Fri Aug 28 17:17:11 2009 -0400
 
     [HB] Rename DEBUG to TRACE where appropriate
 
 
     [HB] Rename DEBUG to TRACE where appropriate
 
- src/hb-open-file-private.hh         |    8 ++--
- src/hb-open-type-private.hh         |   50 +++++++++---------
- src/hb-ot-layout-common-private.hh   |   32 ++++++------
- src/hb-ot-layout-gdef-private.hh     |   20 ++++----
- src/hb-ot-layout-gpos-private.hh     |   92
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.hh     |   72 +++++++++++++-------------
- src/hb-ot-layout-gsubgpos-private.hh |   78 ++++++++++++++--------------
+ src/hb-open-file-private.hh         |  8 ++--
+ src/hb-open-type-private.hh         | 50 ++++++++++----------
+ src/hb-ot-layout-common-private.hh   | 32 ++++++-------
+ src/hb-ot-layout-gdef-private.hh     | 20 ++++----
+ src/hb-ot-layout-gpos-private.hh     | 92
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.hh     | 72 ++++++++++++++--------------
+ src/hb-ot-layout-gsubgpos-private.hh | 78 +++++++++++++++---------------
  7 files changed, 176 insertions(+), 176 deletions(-)
 
 commit 0535b50f436f3dac85e6df1761957f86c2bd7213
  7 files changed, 176 insertions(+), 176 deletions(-)
 
 commit 0535b50f436f3dac85e6df1761957f86c2bd7213
@@ -26472,10 +38029,10 @@ Date: Fri Aug 28 17:14:33 2009 -0400
 
     [HB] Add GSUB/GPOS tracing
 
 
     [HB] Add GSUB/GPOS tracing
 
- src/hb-ot-layout-gpos-private.hh     |   29 ++++++++++++++++++--
- src/hb-ot-layout-gsub-private.hh     |   28 +++++++++++++++++--
- src/hb-ot-layout-gsubgpos-private.hh |   49
- ++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout-gpos-private.hh     | 29 ++++++++++++++++++---
+ src/hb-ot-layout-gsub-private.hh     | 28 ++++++++++++++++++---
+ src/hb-ot-layout-gsubgpos-private.hh | 49
+ ++++++++++++++++++++++++++++++++++--
  3 files changed, 98 insertions(+), 8 deletions(-)
 
 commit 95e202403ffa543c817f45cca21fbc116eb8e807
  3 files changed, 98 insertions(+), 8 deletions(-)
 
 commit 95e202403ffa543c817f45cca21fbc116eb8e807
@@ -26484,8 +38041,8 @@ Date:   Fri Aug 28 16:31:20 2009 -0400
 
     [HB] Allow enabling different debug facilities individually
 
 
     [HB] Allow enabling different debug facilities individually
 
- src/hb-blob.c              |   28 ++++++++++++++++------------
- src/hb-open-type-private.hh |  32 ++++++++++++++++++--------------
+ src/hb-blob.c              | 28 ++++++++++++++++------------
+ src/hb-open-type-private.hh | 32 ++++++++++++++++++--------------
  2 files changed, 34 insertions(+), 26 deletions(-)
 
 commit 37006bd1bd107ac1a1c1b131579e9c494ba3a20f
  2 files changed, 34 insertions(+), 26 deletions(-)
 
 commit 37006bd1bd107ac1a1c1b131579e9c494ba3a20f
@@ -26494,8 +38051,8 @@ Date:   Fri Aug 28 09:46:14 2009 -0400
 
     Fix stupid array growing bug
 
 
     Fix stupid array growing bug
 
- src/hb-ot-layout.cc |   5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-layout.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 9897749113f76dc26a83bfae8de62e55d384fcad
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9897749113f76dc26a83bfae8de62e55d384fcad
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26503,8 +38060,8 @@ Date:   Thu Aug 27 01:32:17 2009 -0400
 
     [HB] Simplify counting
 
 
     [HB] Simplify counting
 
- src/hb-ot-layout.cc |   9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
+ src/hb-ot-layout.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
 
 commit 81a5c4df94e7c6066314d5fe75bbaf24483bc022
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 81a5c4df94e7c6066314d5fe75bbaf24483bc022
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26512,8 +38069,8 @@ Date:   Thu Aug 27 00:21:04 2009 -0400
 
     [HB] Indent
 
 
     [HB] Indent
 
- src/hb-blob.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-blob.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit c91facd83b5dc3b9aed75617c7c35585ff18889f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c91facd83b5dc3b9aed75617c7c35585ff18889f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26521,8 +38078,8 @@ Date:   Wed Aug 26 18:53:43 2009 -0400
 
     [HB] Bug 593231 - < c99 compiler dislikes ValueRecord
 
 
     [HB] Bug 593231 - < c99 compiler dislikes ValueRecord
 
- src/hb-ot-layout-gpos-private.hh |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit f0c7540c4e217a7354072365a7301453d1e25b80
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f0c7540c4e217a7354072365a7301453d1e25b80
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26532,8 +38089,8 @@ Date:   Thu Aug 20 14:01:37 2009 -0400
 
     Fix off-by-one.
 
 
     Fix off-by-one.
 
- src/hb-ot-layout.cc |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit b614b004723ead60849dd37e7ba2faee67cebd93
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b614b004723ead60849dd37e7ba2faee67cebd93
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26541,8 +38098,8 @@ Date:   Thu Aug 20 13:07:50 2009 -0400
 
     [HB][glib] Make glib unicode funcs static
 
 
     [HB][glib] Make glib unicode funcs static
 
- src/hb-glib.c |   36 +++++++++++++++++-------------------
- 1 files changed, 17 insertions(+), 19 deletions(-)
+ src/hb-glib.c | 36 +++++++++++++++++-------------------
+ 1 file changed, 17 insertions(+), 19 deletions(-)
 
 commit 8b5346130425c7c101f6ff2432874ba2fd372edc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8b5346130425c7c101f6ff2432874ba2fd372edc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26550,8 +38107,8 @@ Date:   Wed Aug 19 18:16:50 2009 -0400
 
     [HB] Fix more casts
 
 
     [HB] Fix more casts
 
- src/hb-open-type-private.hh |  10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 9d2e02db74deb3b3b92beab96f112cc387c8bd88
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9d2e02db74deb3b3b92beab96f112cc387c8bd88
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26561,8 +38118,8 @@ Date:   Wed Aug 19 18:07:36 2009 -0400
 
     Hiss!
 
 
     Hiss!
 
- src/hb-private.h |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-private.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 388ad037ff399c23c5e24bbcede27e0e35bed07e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 388ad037ff399c23c5e24bbcede27e0e35bed07e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26578,8 +38135,8 @@ Date:   Wed Aug 19 16:45:41 2009 -0400
 
     Based on mailing list discussion with Carl Worth.
 
 
     Based on mailing list discussion with Carl Worth.
 
- src/hb-blob.c |   51 +++++++++++++++++++++++++--------------------------
- src/hb-blob.h |    1 -
+ src/hb-blob.c | 51 +++++++++++++++++++++++++--------------------------
+ src/hb-blob.h |  1 -
  2 files changed, 25 insertions(+), 27 deletions(-)
 
 commit 977eeb714454630bd045bb11f58ff6397f10b143
  2 files changed, 25 insertions(+), 27 deletions(-)
 
 commit 977eeb714454630bd045bb11f58ff6397f10b143
@@ -26588,9 +38145,9 @@ Date:   Wed Aug 19 16:17:24 2009 -0400
 
     [HB] s/writeable/writable/g
 
 
     [HB] s/writeable/writable/g
 
- src/hb-blob.c              |   38 +++++++++++++++++++-------------------
- src/hb-blob.h              |   10 +++++-----
- src/hb-open-type-private.hh |   6 +++---
+ src/hb-blob.c              | 38 +++++++++++++++++++-------------------
+ src/hb-blob.h              | 10 +++++-----
+ src/hb-open-type-private.hh | 6 +++---
  3 files changed, 27 insertions(+), 27 deletions(-)
 
 commit 2f5931e404cb56e31d24b2eb7ff0a849fb077b55
  3 files changed, 27 insertions(+), 27 deletions(-)
 
 commit 2f5931e404cb56e31d24b2eb7ff0a849fb077b55
@@ -26599,8 +38156,8 @@ Date:   Wed Aug 19 16:07:40 2009 -0400
 
     [HB] Hide lig_id and component members of hb_glyph_info_t
 
 
     [HB] Hide lig_id and component members of hb_glyph_info_t
 
- src/hb-buffer.h |    5 ++---
- 1 files changed, 2 insertions(+), 3 deletions(-)
+ src/hb-buffer.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
 
 commit 6b600dd6199104cff01b3fa43d2abb52ae4319ea
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b600dd6199104cff01b3fa43d2abb52ae4319ea
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26608,8 +38165,8 @@ Date:   Wed Aug 19 14:45:24 2009 -0400
 
     [HB] Fix typo
 
 
     [HB] Fix typo
 
- src/hb-font.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-font.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 32c65a5ca3bde673bf2aa8fca911dd32914d3122
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 32c65a5ca3bde673bf2aa8fca911dd32914d3122
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26617,9 +38174,9 @@ Date:   Tue Aug 18 18:37:36 2009 -0400
 
     [HB] Add font funcs prototypes
 
 
     [HB] Add font funcs prototypes
 
- src/hb-font-private.h |    2 --
- src/hb-font.cc        |   14 ++++++--------
- src/hb-font.h        |   23 ++++++++++++++++-------
+ src/hb-font-private.h |  2 --
+ src/hb-font.cc        | 14 ++++++--------
+ src/hb-font.h        | 23 ++++++++++++++++-------
  3 files changed, 22 insertions(+), 17 deletions(-)
 
 commit 8f034d5849627ee95a5889fa34c9ba294fff13ca
  3 files changed, 22 insertions(+), 17 deletions(-)
 
 commit 8f034d5849627ee95a5889fa34c9ba294fff13ca
@@ -26628,10 +38185,10 @@ Date: Tue Aug 18 16:41:59 2009 -0400
 
     Fix a few other pedantic warnings
 
 
     Fix a few other pedantic warnings
 
- src/hb-ot-layout-common-private.hh |   2 +-
- src/hb-ot-layout-gdef-private.hh   |   2 +-
- src/hb-ot-layout-gpos-private.hh   |   4 ++--
- src/hb-ot-layout-gsub-private.hh   |   2 +-
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-ot-layout-gdef-private.hh   | 2 +-
+ src/hb-ot-layout-gpos-private.hh   | 4 ++--
+ src/hb-ot-layout-gsub-private.hh   | 2 +-
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 864e2560b627f1e73be3b0635e02f00844cb67c3
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 864e2560b627f1e73be3b0635e02f00844cb67c3
@@ -26640,9 +38197,9 @@ Date:   Tue Aug 18 16:38:48 2009 -0400
 
     [HB] Fix pedantic warnings
 
 
     [HB] Fix pedantic warnings
 
- src/hb-blob.h          |    2 +-
- src/hb-buffer-private.h |   18 +++++++++---------
- src/hb-buffer.h        |    6 +++---
+ src/hb-blob.h          |  2 +-
+ src/hb-buffer-private.h | 18 +++++++++---------
+ src/hb-buffer.h        |  6 +++---
  3 files changed, 13 insertions(+), 13 deletions(-)
 
 commit 3e09722214d9bbcc9014409342072c79d0c4447f
  3 files changed, 13 insertions(+), 13 deletions(-)
 
 commit 3e09722214d9bbcc9014409342072c79d0c4447f
@@ -26651,8 +38208,8 @@ Date:   Tue Aug 18 16:32:31 2009 -0400
 
     [HB] Fix more wrong method signatures
 
 
     [HB] Fix more wrong method signatures
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 822e99fe9ae920df41a0bd3f1125495c2ea96b45
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 822e99fe9ae920df41a0bd3f1125495c2ea96b45
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26660,8 +38217,8 @@ Date:   Tue Aug 18 16:27:48 2009 -0400
 
     [HB] Fix wrong method signature
 
 
     [HB] Fix wrong method signature
 
- src/hb-ot-layout-common-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 4ff2a58952f010c6252f06e5f404d6840d257250
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4ff2a58952f010c6252f06e5f404d6840d257250
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26671,9 +38228,9 @@ Date:   Tue Aug 18 15:49:23 2009 -0400
 
     Autoconfiscate a simple call to mprotect() even more.
 
 
     Autoconfiscate a simple call to mprotect() even more.
 
- src/hb-blob.c |   94
- ++++++++++++++++++++++++++++++++++++--------------------
- 1 files changed, 60 insertions(+), 34 deletions(-)
+ src/hb-blob.c | 94
+ ++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 60 insertions(+), 34 deletions(-)
 
 commit 3c69bd46e27069fac0bfdefdecf5492c17eb01df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3c69bd46e27069fac0bfdefdecf5492c17eb01df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26684,8 +38241,8 @@ Date:   Mon Aug 17 16:48:13 2009 -0400
     Bug 592036 - integer overflow bug causes misrendering of Nepali
     characters
 
     Bug 592036 - integer overflow bug causes misrendering of Nepali
     characters
 
- src/hb-ot-layout-gpos-private.hh |   20 ++++++++++----------
- src/hb-private.h                |    3 +++
+ src/hb-ot-layout-gpos-private.hh | 20 ++++++++++----------
+ src/hb-private.h                |  3 +++
  2 files changed, 13 insertions(+), 10 deletions(-)
 
 commit b2b18ef43c5bac6a5bb8412da7c9a37f815d4deb
  2 files changed, 13 insertions(+), 10 deletions(-)
 
 commit b2b18ef43c5bac6a5bb8412da7c9a37f815d4deb
@@ -26694,8 +38251,8 @@ Date:   Fri Aug 14 19:37:18 2009 -0400
 
     [HB] Simplify loop
 
 
     [HB] Simplify loop
 
- src/hb-ot-layout-gpos-private.hh |   31 ++++++++++++++-----------------
- 1 files changed, 14 insertions(+), 17 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 31 ++++++++++++++-----------------
+ 1 file changed, 14 insertions(+), 17 deletions(-)
 
 commit b41f210d12d8df48e645823463343f7e14b0ddd0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b41f210d12d8df48e645823463343f7e14b0ddd0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26703,9 +38260,9 @@ Date:   Fri Aug 14 19:33:24 2009 -0400
 
     [HB] Merge mark positionin code between three types of lookups
 
 
     [HB] Merge mark positionin code between three types of lookups
 
- src/hb-ot-layout-gpos-private.hh |   95
- ++++++++++++--------------------------
- 1 files changed, 29 insertions(+), 66 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 95
+ ++++++++++++----------------------------
+ 1 file changed, 29 insertions(+), 66 deletions(-)
 
 commit cd33cb9ed84308da72bd7c64b9355dc2410c63ec
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd33cb9ed84308da72bd7c64b9355dc2410c63ec
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26713,8 +38270,8 @@ Date:   Fri Aug 14 18:42:42 2009 -0400
 
     [HB] More minor shuffling
 
 
     [HB] More minor shuffling
 
- src/hb-open-type-private.hh       |    3 ---
- src/hb-ot-layout-common-private.hh |   5 +++++
+ src/hb-open-type-private.hh       | 3 ---
+ src/hb-ot-layout-common-private.hh | 5 +++++
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 80e2aa2e1bfa2c8ecedcfa4cce8cadeb15792ac3
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 80e2aa2e1bfa2c8ecedcfa4cce8cadeb15792ac3
@@ -26723,8 +38280,8 @@ Date:   Fri Aug 14 18:40:56 2009 -0400
 
     [HB] Move code around
 
 
     [HB] Move code around
 
- src/hb-open-type-private.hh       |   21 +++++++++++++++++++++
- src/hb-ot-layout-common-private.hh |  19 -------------------
+ src/hb-open-type-private.hh       | 21 +++++++++++++++++++++
+ src/hb-ot-layout-common-private.hh | 19 -------------------
  2 files changed, 21 insertions(+), 19 deletions(-)
 
 commit 3564ee5216004d45d30b0ded61184cf8dde5dd89
  2 files changed, 21 insertions(+), 19 deletions(-)
 
 commit 3564ee5216004d45d30b0ded61184cf8dde5dd89
@@ -26733,10 +38290,10 @@ Date: Fri Aug 14 18:32:56 2009 -0400
 
     [HB] Correctly sanitize LigatureAttach
 
 
     [HB] Correctly sanitize LigatureAttach
 
- src/hb-open-type-private.hh       |   14 ++++++++++----
- src/hb-ot-layout-common-private.hh |   4 ++++
- src/hb-ot-layout-gdef-private.hh   |   4 ++--
- src/hb-ot-layout-gpos-private.hh   |   6 +++---
+ src/hb-open-type-private.hh       | 14 ++++++++++----
+ src/hb-ot-layout-common-private.hh |  4 ++++
+ src/hb-ot-layout-gdef-private.hh   |  4 ++--
+ src/hb-ot-layout-gpos-private.hh   |  6 +++---
  4 files changed, 19 insertions(+), 9 deletions(-)
 
 commit cb71a2fb76c6ddee050f775eb299ee44230c3ac9
  4 files changed, 19 insertions(+), 9 deletions(-)
 
 commit cb71a2fb76c6ddee050f775eb299ee44230c3ac9
@@ -26745,9 +38302,9 @@ Date:   Fri Aug 14 18:14:03 2009 -0400
 
     [HB] Simplify MarkBase and MarkLig too
 
 
     [HB] Simplify MarkBase and MarkLig too
 
- src/hb-ot-layout-gpos-private.hh |  127
- ++++++++++++++-----------------------
- 1 files changed, 48 insertions(+), 79 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 127
+ +++++++++++++++------------------------
+ 1 file changed, 48 insertions(+), 79 deletions(-)
 
 commit dfa54f4440960c39d37ef02fff4c0d9eb315d4b4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit dfa54f4440960c39d37ef02fff4c0d9eb315d4b4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26755,8 +38312,8 @@ Date:   Fri Aug 14 17:53:31 2009 -0400
 
     [HB] Simplify MarkMark
 
 
     [HB] Simplify MarkMark
 
- src/hb-ot-layout-gpos-private.hh |   29 ++++++++++++++++-------------
- 1 files changed, 16 insertions(+), 13 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 29 ++++++++++++++++-------------
+ 1 file changed, 16 insertions(+), 13 deletions(-)
 
 commit 815a73e4202ca17677f12e862b70ca8724cf2f57
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 815a73e4202ca17677f12e862b70ca8724cf2f57
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26764,9 +38321,9 @@ Date:   Fri Aug 14 17:31:16 2009 -0400
 
     [HB] Fix possible int overflows during sanitize
 
 
     [HB] Fix possible int overflows during sanitize
 
- src/TODO                        |    1 -
- src/hb-open-type-private.hh     |   22 ++++++++++++++++++++++
- src/hb-ot-layout-gpos-private.hh |   15 ++++++++-------
+ src/TODO                        |  1 -
+ src/hb-open-type-private.hh     | 22 ++++++++++++++++++++++
+ src/hb-ot-layout-gpos-private.hh | 15 ++++++++-------
  3 files changed, 30 insertions(+), 8 deletions(-)
 
 commit ae728e51e94d18d731b7c8dc524da1a4f427d63b
  3 files changed, 30 insertions(+), 8 deletions(-)
 
 commit ae728e51e94d18d731b7c8dc524da1a4f427d63b
@@ -26775,8 +38332,8 @@ Date:   Fri Aug 14 16:41:00 2009 -0400
 
     [HB] Debug output for SANITIZE_MEM()
 
 
     [HB] Debug output for SANITIZE_MEM()
 
- src/hb-open-type-private.hh |  34 +++++++++++++++++++++++-----------
- 1 files changed, 23 insertions(+), 11 deletions(-)
+ src/hb-open-type-private.hh | 34 +++++++++++++++++++++++-----------
+ 1 file changed, 23 insertions(+), 11 deletions(-)
 
 commit 41895506cb6a41b1a833866f8822261ea449ea0b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 41895506cb6a41b1a833866f8822261ea449ea0b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26784,8 +38341,8 @@ Date:   Fri Aug 14 16:25:33 2009 -0400
 
     [HB] Use inline function for SANITIZE_MEM()
 
 
     [HB] Use inline function for SANITIZE_MEM()
 
- src/hb-open-type-private.hh |  33 ++++++++++++++++++++-------------
- 1 files changed, 20 insertions(+), 13 deletions(-)
+ src/hb-open-type-private.hh | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
 
 commit 95528131b5ab9fc9e265ace715832135ebd457a4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 95528131b5ab9fc9e265ace715832135ebd457a4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26793,8 +38350,8 @@ Date:   Fri Aug 14 16:17:32 2009 -0400
 
     [HB] Use SANITIZE_THIS() when applicable
 
 
     [HB] Use SANITIZE_THIS() when applicable
 
- src/hb-open-type-private.hh |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 5769538abfe153c503da4801649493e57a9854c2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5769538abfe153c503da4801649493e57a9854c2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26802,9 +38359,9 @@ Date:   Fri Aug 14 16:12:22 2009 -0400
 
     [HB] Add note about auditing sanitize code for overflows
 
 
     [HB] Add note about auditing sanitize code for overflows
 
- src/TODO                        |    1 +
- src/hb-ot-layout-gpos-private.hh |    2 +-
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/TODO                        | 1 +
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit 15232e26f4a89dab1b6de35ad9d3d16e75bf93d0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 15232e26f4a89dab1b6de35ad9d3d16e75bf93d0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26812,11 +38369,11 @@ Date: Thu Aug 13 17:13:25 2009 -0400
 
     [HB] Add empty hb_shape() API
 
 
     [HB] Add empty hb_shape() API
 
- src/Makefile.am |    2 ++
- src/hb-shape.c  |   40 ++++++++++++++++++++++++++++++++++++++++
- src/hb-shape.h  |   53
+ src/Makefile.am |  2 ++
+ src/hb-shape.c  | 40 ++++++++++++++++++++++++++++++++++++++++
+ src/hb-shape.h  | 53
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 95 insertions(+), 0 deletions(-)
+ 3 files changed, 95 insertions(+)
 
 commit 2866d2974b6768e93cc7d473d14c5a8abae5f7fd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2866d2974b6768e93cc7d473d14c5a8abae5f7fd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26826,8 +38383,8 @@ Date:   Thu Aug 13 11:47:08 2009 -0400
 
     Fix the second instance.
 
 
     Fix the second instance.
 
- src/hb-buffer.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit ec90ee23b29aab187c3fa209970aa97434c84b1b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ec90ee23b29aab187c3fa209970aa97434c84b1b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26837,8 +38394,8 @@ Date:   Thu Aug 13 05:25:23 2009 -0400
 
     Check for sys/mman.h, not mprotect().
 
 
     Check for sys/mman.h, not mprotect().
 
- src/hb-blob.c |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-blob.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 12eae6d55d468ff2fbe2bc12bec188d313c671f9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 12eae6d55d468ff2fbe2bc12bec188d313c671f9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26850,8 +38407,8 @@ Date:   Thu Aug 13 05:20:46 2009 -0400
     3 here:
     http://bugzilla.gnome.org/show_bug.cgi?id=591511
 
     3 here:
     http://bugzilla.gnome.org/show_bug.cgi?id=591511
 
- src/hb-buffer-private.h |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/hb-buffer-private.h | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 6936706cd77f96961a1239d0c9dc8ede64d7f06d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6936706cd77f96961a1239d0c9dc8ede64d7f06d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26861,8 +38418,8 @@ Date:   Wed Aug 12 19:45:50 2009 -0400
 
     Enforce -fno-exceptions better.
 
 
     Enforce -fno-exceptions better.
 
- src/Makefile.am |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c486ea9c3582710474c1085c21c1dc5e2700adc3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c486ea9c3582710474c1085c21c1dc5e2700adc3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26873,8 +38430,8 @@ Date:   Wed Aug 12 19:36:29 2009 -0400
     Only call mprotect() when available.  For optimal performance, a win32
     way to make memory writeable needs to be added.
 
     Only call mprotect() when available.  For optimal performance, a win32
     way to make memory writeable needs to be added.
 
- src/hb-blob.c |    8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-blob.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit a579584594f1ca4781f1c5b92ad78513c0b37480
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a579584594f1ca4781f1c5b92ad78513c0b37480
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26882,8 +38439,8 @@ Date:   Wed Aug 12 19:23:16 2009 -0400
 
     [HB] Add comment
 
 
     [HB] Add comment
 
- src/hb-buffer-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b6e66ee102eb5b64d945e5a73ab63fe8cac5edcb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b6e66ee102eb5b64d945e5a73ab63fe8cac5edcb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26891,8 +38448,8 @@ Date:   Wed Aug 12 16:50:28 2009 -0400
 
     [HB] Always clear positions if dirty, before returning to user
 
 
     [HB] Always clear positions if dirty, before returning to user
 
- src/hb-buffer.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-buffer.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit e4679d9fae43f3219c476c5b9e411d1f5d0d5bae
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e4679d9fae43f3219c476c5b9e411d1f5d0d5bae
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26904,9 +38461,9 @@ Date:   Wed Aug 12 16:47:27 2009 -0400
     GPOS.  Back then it was fine, then some optimizations broke then
     assumption.
 
     GPOS.  Back then it was fine, then some optimizations broke then
     assumption.
 
- src/hb-buffer-private.h |    1 +
- src/hb-buffer.c        |   12 ++++++++++++
- 2 files changed, 13 insertions(+), 0 deletions(-)
+ src/hb-buffer-private.h |  1 +
+ src/hb-buffer.c        | 12 ++++++++++++
+ 2 files changed, 13 insertions(+)
 
 commit 5ccf1ba339d6ffb4469f1c4f20d8d8d00012c857
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5ccf1ba339d6ffb4469f1c4f20d8d8d00012c857
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26914,8 +38471,8 @@ Date:   Wed Aug 12 15:55:23 2009 -0400
 
     [HB] Fixed signedness warnings
 
 
     [HB] Fixed signedness warnings
 
- src/hb-open-type-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit f71329147bd3087588cfeafd6feff45f29d1ca7a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f71329147bd3087588cfeafd6feff45f29d1ca7a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26923,8 +38480,8 @@ Date:   Wed Aug 12 15:48:44 2009 -0400
 
     [HB] Ouch. Fix compilation.
 
 
     [HB] Ouch. Fix compilation.
 
- src/hb-ot-layout-gpos-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 0532ed160c678b5404b20594fd2ca9a640bf6a0a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0532ed160c678b5404b20594fd2ca9a640bf6a0a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26935,8 +38492,8 @@ Date:   Wed Aug 12 15:40:04 2009 -0400
     Bug 591557 – [HB] crash scrolling the evolution message list
     Bug 591576 – crashed with SIGSEGV at pango
 
     Bug 591557 – [HB] crash scrolling the evolution message list
     Bug 591576 – crashed with SIGSEGV at pango
 
- src/hb-ot-layout-gpos-private.hh |   21 ++++++++++++---------
- src/hb-ot-layout-gsub-private.hh |    2 --
+ src/hb-ot-layout-gpos-private.hh | 21 ++++++++++++---------
+ src/hb-ot-layout-gsub-private.hh |  2 --
  2 files changed, 12 insertions(+), 11 deletions(-)
 
 commit 8d70312c7b899131c3aafa7a43527ef3ced33bfe
  2 files changed, 12 insertions(+), 11 deletions(-)
 
 commit 8d70312c7b899131c3aafa7a43527ef3ced33bfe
@@ -26945,9 +38502,9 @@ Date:   Mon Aug 10 23:50:51 2009 -0400
 
     [HB] Add hb_font_funcs_make_immutable()
 
 
     [HB] Add hb_font_funcs_make_immutable()
 
- src/hb-font-private.h |    4 ++++
- src/hb-font.cc        |   17 +++++++++++++++--
- src/hb-font.h        |    3 +++
+ src/hb-font-private.h |  4 ++++
+ src/hb-font.cc        | 17 +++++++++++++++--
+ src/hb-font.h        |  3 +++
  3 files changed, 22 insertions(+), 2 deletions(-)
 
 commit 3284d05da27c338d94f0da99df66d924cd9d6717
  3 files changed, 22 insertions(+), 2 deletions(-)
 
 commit 3284d05da27c338d94f0da99df66d924cd9d6717
@@ -26956,8 +38513,8 @@ Date:   Mon Aug 10 23:45:57 2009 -0400
 
     [HB] Add missing initializer
 
 
     [HB] Add missing initializer
 
- src/hb-font.cc |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-font.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 081819ea8b98c0a4b4dffe8d4aca3512f9798719
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 081819ea8b98c0a4b4dffe8d4aca3512f9798719
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -26965,11 +38522,11 @@ Date: Mon Aug 10 23:40:28 2009 -0400
 
     [OT] Hookup glib unicode funcs
 
 
     [OT] Hookup glib unicode funcs
 
- src/hb-buffer.c     |  14 +++++++-------
- src/hb-glib.c      |    4 +++-
- src/hb-glib.h      |    4 ++--
- src/hb-ot-layout.cc |  10 +++++-----
- src/hb-private.h    |   2 +-
+ src/hb-buffer.c     | 14 +++++++-------
+ src/hb-glib.c      |  4 +++-
+ src/hb-glib.h      |  4 ++--
+ src/hb-ot-layout.cc | 10 +++++-----
+ src/hb-private.h    | 2 +-
  5 files changed, 18 insertions(+), 16 deletions(-)
 
 commit 49f261df2aa753e8b09e97f7835e6a827f92970a
  5 files changed, 18 insertions(+), 16 deletions(-)
 
 commit 49f261df2aa753e8b09e97f7835e6a827f92970a
@@ -26978,13 +38535,13 @@ Date: Mon Aug 10 23:35:05 2009 -0400
 
     [HB] Add hb-glib
 
 
     [HB] Add hb-glib
 
- src/Makefile.am         |    4 ++-
- src/hb-glib.c           |   56
- ++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-glib.h           |   41 +++++++++++++++++++++++++++++++++
- src/hb-unicode-private.h |    2 +-
- src/hb-unicode.c        |   10 ++++----
- src/hb-unicode.h        |    6 ++--
+ src/Makefile.am         |  4 +++-
+ src/hb-glib.c           | 56
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-glib.h           | 41 +++++++++++++++++++++++++++++++++++
+ src/hb-unicode-private.h |  2 +-
+ src/hb-unicode.c        | 10 ++++-----
+ src/hb-unicode.h        |  6 +++---
  6 files changed, 109 insertions(+), 10 deletions(-)
 
 commit eb27ec0cef0d92740875ab5035b53acc639e5fae
  6 files changed, 109 insertions(+), 10 deletions(-)
 
 commit eb27ec0cef0d92740875ab5035b53acc639e5fae
@@ -26993,9 +38550,9 @@ Date:   Mon Aug 10 23:25:28 2009 -0400
 
     [HB] Add hb_unicode_funcs_make_immutable()
 
 
     [HB] Add hb_unicode_funcs_make_immutable()
 
- src/hb-unicode-private.h |    2 ++
- src/hb-unicode.c        |   22 +++++++++++++++++-----
- src/hb-unicode.h        |    2 ++
+ src/hb-unicode-private.h |  2 ++
+ src/hb-unicode.c        | 22 +++++++++++++++++-----
+ src/hb-unicode.h        |  2 ++
  3 files changed, 21 insertions(+), 5 deletions(-)
 
 commit af9e104028b7cdc1fbba0eb1d86cfa4d5258657f
  3 files changed, 21 insertions(+), 5 deletions(-)
 
 commit af9e104028b7cdc1fbba0eb1d86cfa4d5258657f
@@ -27004,9 +38561,9 @@ Date:   Mon Aug 10 23:21:33 2009 -0400
 
     [HB] Use nil unicode funcs in nil face
 
 
     [HB] Use nil unicode funcs in nil face
 
- src/hb-font.cc                  |    7 ++++---
- src/hb-unicode-private.h |    3 +++
- src/hb-unicode.c        |    2 +-
+ src/hb-font.cc                  | 7 ++++---
+ src/hb-unicode-private.h | 3 +++
+ src/hb-unicode.c        | 2 +-
  3 files changed, 8 insertions(+), 4 deletions(-)
 
 commit 48910f8f0034c54b4e11cef3d08aa40e52c06b28
  3 files changed, 8 insertions(+), 4 deletions(-)
 
 commit 48910f8f0034c54b4e11cef3d08aa40e52c06b28
@@ -27015,8 +38572,8 @@ Date:   Mon Aug 10 23:05:05 2009 -0400
 
     [HB] Initialize unicode funcs to nil getters
 
 
     [HB] Initialize unicode funcs to nil getters
 
- src/hb-unicode.c |   29 +++++++++++++++++++----------
- 1 files changed, 19 insertions(+), 10 deletions(-)
+ src/hb-unicode.c | 29 +++++++++++++++++++----------
+ 1 file changed, 19 insertions(+), 10 deletions(-)
 
 commit 04cc0a29ee1472c318c36efcd19b9c1a6657d9ea
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 04cc0a29ee1472c318c36efcd19b9c1a6657d9ea
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27024,11 +38581,11 @@ Date: Mon Aug 10 22:58:56 2009 -0400
 
     [HB] Flesh out Unicode funcs
 
 
     [HB] Flesh out Unicode funcs
 
- src/hb-object-private.h  |    2 +-
- src/hb-unicode-private.h |   12 +++-----
- src/hb-unicode.c        |   67
- ++++++++++++++++++++++++++++++++++++++++-----
- src/hb-unicode.h        |    3 --
+ src/hb-object-private.h  |  2 +-
+ src/hb-unicode-private.h | 12 ++++-----
+ src/hb-unicode.c        | 67
+ ++++++++++++++++++++++++++++++++++++++++++------
+ src/hb-unicode.h        |  3 ---
  4 files changed, 65 insertions(+), 19 deletions(-)
 
 commit 299f08961ffcea27e8def4f0743d0c86ef8dadf1
  4 files changed, 65 insertions(+), 19 deletions(-)
 
 commit 299f08961ffcea27e8def4f0743d0c86ef8dadf1
@@ -27037,9 +38594,9 @@ Date:   Mon Aug 10 22:47:57 2009 -0400
 
     [HB] Implement buffer UTF-X input
 
 
     [HB] Implement buffer UTF-X input
 
- src/hb-buffer.c |  110
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-buffer.h |   12 +++---
+ src/hb-buffer.c | 110
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h |  12 +++----
  2 files changed, 116 insertions(+), 6 deletions(-)
 
 commit 1b7b97f28ac192006ca5b6d1cc9fbc80fa2bdb55
  2 files changed, 116 insertions(+), 6 deletions(-)
 
 commit 1b7b97f28ac192006ca5b6d1cc9fbc80fa2bdb55
@@ -27048,8 +38605,8 @@ Date:   Mon Aug 10 21:10:37 2009 -0400
 
     [HB] Add buffer UTF-X API
 
 
     [HB] Add buffer UTF-X API
 
- src/hb-buffer.h |   21 +++++++++++++++++++++
- 1 files changed, 21 insertions(+), 0 deletions(-)
+ src/hb-buffer.h | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
 
 commit fbaf8ffa098bd2b6fb4f4bc2d04b360a319c4af5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fbaf8ffa098bd2b6fb4f4bc2d04b360a319c4af5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27057,8 +38614,8 @@ Date:   Mon Aug 10 20:59:25 2009 -0400
 
     [HB] Add hb_buffer_reverse()
 
 
     [HB] Add hb_buffer_reverse()
 
- src/hb-buffer.c |   32 +++++++++++++++++++++++++++++---
- src/hb-buffer.h |    7 +++++++
+ src/hb-buffer.c | 32 +++++++++++++++++++++++++++++---
+ src/hb-buffer.h |  7 +++++++
  2 files changed, 36 insertions(+), 3 deletions(-)
 
 commit cbe5a4e08e6c2ccfdf98e630d48ec9da69374516
  2 files changed, 36 insertions(+), 3 deletions(-)
 
 commit cbe5a4e08e6c2ccfdf98e630d48ec9da69374516
@@ -27067,8 +38624,8 @@ Date:   Mon Aug 10 20:24:49 2009 -0400
 
     [HB] Reuse the positions array as alt string array
 
 
     [HB] Reuse the positions array as alt string array
 
- src/hb-buffer-private.h |    1 -
- src/hb-buffer.c        |   28 +++++++++-------------------
+ src/hb-buffer-private.h |  1 -
+ src/hb-buffer.c        | 28 +++++++++-------------------
  2 files changed, 9 insertions(+), 20 deletions(-)
 
 commit 5c44188455ca1b696aa24b20c3a83877dfae2fb2
  2 files changed, 9 insertions(+), 20 deletions(-)
 
 commit 5c44188455ca1b696aa24b20c3a83877dfae2fb2
@@ -27077,14 +38634,14 @@ Date: Mon Aug 10 20:05:16 2009 -0400
 
     [HB] Start adding Unicode funcs
 
 
     [HB] Start adding Unicode funcs
 
- src/Makefile.am         |    3 +
- src/hb-font-private.h   |   29 ++-----
- src/hb-font.cc                  |  163 +++++++++-------------------------
- src/hb-font.h           |  140 ++++++++++-------------------
- src/hb-unicode-private.h |   54 +++++++++++
- src/hb-unicode.c        |   89 +++++++++++++++++++
- src/hb-unicode.h        |  220
- ++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am         |   3 +
+ src/hb-font-private.h   |  29 ++-----
+ src/hb-font.cc                  | 163 ++++++++++-------------------------
+ src/hb-font.h           | 140 ++++++++++--------------------
+ src/hb-unicode-private.h |  54 ++++++++++++
+ src/hb-unicode.c        |  89 +++++++++++++++++++
+ src/hb-unicode.h        | 220
+ +++++++++++++++++++++++++++++++++++++++++++++++
  7 files changed, 463 insertions(+), 235 deletions(-)
 
 commit 20b035dad41247076815a2bbb0346d63058b322f
  7 files changed, 463 insertions(+), 235 deletions(-)
 
 commit 20b035dad41247076815a2bbb0346d63058b322f
@@ -27095,13 +38652,13 @@ Date: Mon Aug 10 19:00:36 2009 -0400
 
     Apparetly in C++, inline means a totally different thing.
 
 
     Apparetly in C++, inline means a totally different thing.
 
- src/hb-open-file-private.hh         |   14 +++++++-------
- src/hb-open-type-private.hh         |   16 ++++++++--------
- src/hb-ot-layout-common-private.hh   |   12 ++++++------
- src/hb-ot-layout-gdef-private.hh     |    4 ++--
- src/hb-ot-layout-gpos-private.hh     |   12 ++++++------
- src/hb-ot-layout-gsub-private.hh     |   12 ++++++------
- src/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
+ src/hb-open-file-private.hh         | 14 +++++++-------
+ src/hb-open-type-private.hh         | 16 ++++++++--------
+ src/hb-ot-layout-common-private.hh   | 12 ++++++------
+ src/hb-ot-layout-gdef-private.hh     |  4 ++--
+ src/hb-ot-layout-gpos-private.hh     | 12 ++++++------
+ src/hb-ot-layout-gsub-private.hh     | 12 ++++++------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++------
  7 files changed, 41 insertions(+), 41 deletions(-)
 
 commit a62f776d8e7e3e57d28ee71b34abab0a5b8471eb
  7 files changed, 41 insertions(+), 41 deletions(-)
 
 commit a62f776d8e7e3e57d28ee71b34abab0a5b8471eb
@@ -27112,8 +38669,8 @@ Date:   Mon Aug 10 13:57:02 2009 -0400
 
     Just add couple of options to it (still assuming gcc)
 
 
     Just add couple of options to it (still assuming gcc)
 
- src/Makefile.am |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 6bdab706ecb41c1305e85d041a586e86c54d0ab7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6bdab706ecb41c1305e85d041a586e86c54d0ab7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27121,8 +38678,8 @@ Date:   Mon Aug 10 09:35:11 2009 -0400
 
     [HB] Indent
 
 
     [HB] Indent
 
- src/hb-ot-layout.h |   8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/hb-ot-layout.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 797724904a3ab294f8390d4ff80c299d8213a5c6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 797724904a3ab294f8390d4ff80c299d8213a5c6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27130,8 +38687,8 @@ Date:   Sun Aug 9 22:25:17 2009 -0400
 
     [HB] Remove unused code
 
 
     [HB] Remove unused code
 
- src/hb-ot-layout-gdef-private.hh |   10 ----------
- 1 files changed, 0 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-gdef-private.hh | 10 ----------
+ 1 file changed, 10 deletions(-)
 
 commit 284899ccbe79fda7405ab09d3092fc25fd89e810
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 284899ccbe79fda7405ab09d3092fc25fd89e810
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27139,10 +38696,10 @@ Date: Sun Aug 9 22:10:39 2009 -0400
 
     [HB] Add a NEXT() macro
 
 
     [HB] Add a NEXT() macro
 
- src/hb-open-type-private.hh         |    2 ++
- src/hb-ot-layout-common-private.hh   |    4 ++--
- src/hb-ot-layout-gsub-private.hh     |    8 ++++----
- src/hb-ot-layout-gsubgpos-private.hh |   24 ++++++++++++------------
+ src/hb-open-type-private.hh         |  2 ++
+ src/hb-ot-layout-common-private.hh   |  4 ++--
+ src/hb-ot-layout-gsub-private.hh     |  8 ++++----
+ src/hb-ot-layout-gsubgpos-private.hh | 24 ++++++++++++------------
  4 files changed, 20 insertions(+), 18 deletions(-)
 
 commit 918572fc870dfd7596155ce700247a5bb024fb1a
  4 files changed, 20 insertions(+), 18 deletions(-)
 
 commit 918572fc870dfd7596155ce700247a5bb024fb1a
@@ -27151,8 +38708,8 @@ Date:   Sun Aug 9 18:31:47 2009 -0400
 
     [HB] Remove done TODO item
 
 
     [HB] Remove done TODO item
 
- src/TODO |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/TODO | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 67cb8111f209de26b3afa46e9fb7e4d01c9ecad4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 67cb8111f209de26b3afa46e9fb7e4d01c9ecad4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27160,8 +38717,8 @@ Date:   Sun Aug 9 13:05:08 2009 -0400
 
     [HB] Print mark sets in main.cc
 
 
     [HB] Print mark sets in main.cc
 
- src/main.cc |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/main.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 17878255fa88e76cd503461fc1ade2ed365cebd2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 17878255fa88e76cd503461fc1ade2ed365cebd2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27173,9 +38730,9 @@ Date:   Sat Aug 8 16:57:27 2009 -0400
     table may
     have the same tag.
 
     table may
     have the same tag.
 
- src/hb-ot-layout.cc |  16 ----------------
- src/hb-ot-layout.h  |   6 ------
- 2 files changed, 0 insertions(+), 22 deletions(-)
+ src/hb-ot-layout.cc | 16 ----------------
+ src/hb-ot-layout.h  | 6 ------
+ 2 files changed, 22 deletions(-)
 
 commit 468769b8f5332940278244e744ec2bd5a5dc5ee9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 468769b8f5332940278244e744ec2bd5a5dc5ee9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27183,16 +38740,15 @@ Date: Sat Aug 8 16:53:23 2009 -0400
 
     [HB] Rename hb_ot_layout_feature_mask_t to hb_mask_t
 
 
     [HB] Rename hb_ot_layout_feature_mask_t to hb_mask_t
 
- src/TODO                        |    1 -
- src/hb-buffer-private.h         |    4 ++--
- src/hb-buffer.c                 |   12 ++++++------
- src/hb-buffer.h                 |    4 ++--
- src/hb-common.h                 |    1 +
- src/hb-ot-layout-gpos-private.hh |   12 ++++++------
- src/hb-ot-layout-gsub-private.hh |   14 +++++++-------
- src/hb-ot-layout.cc             |   18 +++++++++---------
- src/hb-ot-layout.h              |   34
- +++++++++-------------------------
+ src/TODO                        |  1 -
+ src/hb-buffer-private.h         |  4 ++--
+ src/hb-buffer.c                 | 12 ++++++------
+ src/hb-buffer.h                 |  4 ++--
+ src/hb-common.h                 |  1 +
+ src/hb-ot-layout-gpos-private.hh | 12 ++++++------
+ src/hb-ot-layout-gsub-private.hh | 14 +++++++-------
+ src/hb-ot-layout.cc             | 18 +++++++++---------
+ src/hb-ot-layout.h              | 34 +++++++++-------------------------
  9 files changed, 42 insertions(+), 58 deletions(-)
 
 commit 7f96b39a9d5a81ba77e0c3dea8fe2cdb9957c4c7
  9 files changed, 42 insertions(+), 58 deletions(-)
 
 commit 7f96b39a9d5a81ba77e0c3dea8fe2cdb9957c4c7
@@ -27201,8 +38757,8 @@ Date:   Sat Aug 8 16:37:22 2009 -0400
 
     [HB] Fix bug introduced recently
 
 
     [HB] Fix bug introduced recently
 
- src/hb-open-type-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit bff3c0fde5da04a70d1f7aeeb9fa2a75fe5c07f6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bff3c0fde5da04a70d1f7aeeb9fa2a75fe5c07f6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27210,14 +38766,14 @@ Date: Fri Aug 7 19:46:30 2009 -0400
 
     [HB] Remove clumsy macros and improve API
 
 
     [HB] Remove clumsy macros and improve API
 
- src/TODO                            |    2 -
- src/hb-open-file-private.hh         |   41 ++++++++--
- src/hb-open-type-private.hh         |  104 +-----------------------
- src/hb-ot-layout-common-private.hh   |  103 ++++++++++++++++++------
- src/hb-ot-layout-gsubgpos-private.hh |   35 +++++++--
- src/hb-ot-layout.cc                 |  146
- ++++++++++++----------------------
- src/hb-ot-layout.h                  |  101 ++++++++++--------------
+ src/TODO                            |   2 -
+ src/hb-open-file-private.hh         |  41 ++++++++--
+ src/hb-open-type-private.hh         | 104 +------------------------
+ src/hb-ot-layout-common-private.hh   | 103 ++++++++++++++++++------
+ src/hb-ot-layout-gsubgpos-private.hh |  35 +++++++--
+ src/hb-ot-layout.cc                 | 146
+ ++++++++++++-----------------------
+ src/hb-ot-layout.h                  | 101 ++++++++++--------------
  7 files changed, 240 insertions(+), 292 deletions(-)
 
 commit d0b657379bbe63602953412d6bc944b2a0f430eb
  7 files changed, 240 insertions(+), 292 deletions(-)
 
 commit d0b657379bbe63602953412d6bc944b2a0f430eb
@@ -27226,8 +38782,8 @@ Date:   Thu Aug 6 18:34:47 2009 -0400
 
     [HB] Fix various XXX issues
 
 
     [HB] Fix various XXX issues
 
- src/hb-open-type-private.hh     |   13 ++++++++++---
- src/hb-ot-layout-gdef-private.hh |    5 ++---
+ src/hb-open-type-private.hh     | 13 ++++++++++---
+ src/hb-ot-layout-gdef-private.hh |  5 ++---
  2 files changed, 12 insertions(+), 6 deletions(-)
 
 commit 82199868fb036b63799af761762225d45d36f575
  2 files changed, 12 insertions(+), 6 deletions(-)
 
 commit 82199868fb036b63799af761762225d45d36f575
@@ -27236,8 +38792,8 @@ Date:   Thu Aug 6 18:28:45 2009 -0400
 
     [HB] Remove unused var
 
 
     [HB] Remove unused var
 
- src/hb-ot-layout-private.h |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-private.h | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 07e69226cbd4167741fd868a3125487bbabb99dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 07e69226cbd4167741fd868a3125487bbabb99dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27245,8 +38801,8 @@ Date:   Thu Aug 6 18:28:00 2009 -0400
 
     [HB] Remove another stale XXX
 
 
     [HB] Remove another stale XXX
 
- src/hb-ot-layout.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit e605c367c5627e7ab05af9cb59247a89290e598a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e605c367c5627e7ab05af9cb59247a89290e598a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27254,8 +38810,8 @@ Date:   Thu Aug 6 18:27:28 2009 -0400
 
     [HB] Rebrand XXX as TODO
 
 
     [HB] Rebrand XXX as TODO
 
- src/hb-open-file-private.hh |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-open-file-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit c5a13048e21fcfcfd3b74f800e8d521e6245b451
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c5a13048e21fcfcfd3b74f800e8d521e6245b451
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27263,8 +38819,8 @@ Date:   Thu Aug 6 18:26:38 2009 -0400
 
     [HB] Remove stale XXX
 
 
     [HB] Remove stale XXX
 
- src/hb-blob.c |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-blob.c | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 9e826ea2832f0444bcef9075b445d481a58a09c2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9e826ea2832f0444bcef9075b445d481a58a09c2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27272,8 +38828,8 @@ Date:   Thu Aug 6 18:24:55 2009 -0400
 
     [HB] Fix unaligned access
 
 
     [HB] Fix unaligned access
 
- src/hb-open-type-private.hh |  20 +++++++++++++++++---
- src/hb-private.h           |   22 ++++++++++++++++++++++
+ src/hb-open-type-private.hh | 20 +++++++++++++++++---
+ src/hb-private.h           | 22 ++++++++++++++++++++++
  2 files changed, 39 insertions(+), 3 deletions(-)
 
 commit 71a8344a5eeaa34e31d53138cf3bbe30b819f83c
  2 files changed, 39 insertions(+), 3 deletions(-)
 
 commit 71a8344a5eeaa34e31d53138cf3bbe30b819f83c
@@ -27282,9 +38838,9 @@ Date:   Thu Aug 6 14:28:18 2009 -0400
 
     [HB] Remove a few 'inline's, though the compiler mostly ignores them
 
 
     [HB] Remove a few 'inline's, though the compiler mostly ignores them
 
- src/hb-open-file-private.hh         |    1 -
- src/hb-open-type-private.hh         |   16 ++++++++--------
- src/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ src/hb-open-file-private.hh         |  1 -
+ src/hb-open-type-private.hh         | 16 ++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh |  6 +++---
  3 files changed, 11 insertions(+), 12 deletions(-)
 
 commit 7f3d5c8166e5205e9d9bf8b4b2f31d44387a8006
  3 files changed, 11 insertions(+), 12 deletions(-)
 
 commit 7f3d5c8166e5205e9d9bf8b4b2f31d44387a8006
@@ -27293,10 +38849,10 @@ Date: Thu Aug 6 13:33:51 2009 -0400
 
     [HB] Fix blob to use a actual mutex
 
 
     [HB] Fix blob to use a actual mutex
 
- src/hb-blob.c          |  125
- ++++++++++++++++++++++++++++++++++-------------
- src/hb-object-private.h |    4 +-
- src/hb-private.h       |   20 +++++---
+ src/hb-blob.c          | 125
+ +++++++++++++++++++++++++++++++++++-------------
+ src/hb-object-private.h |   4 +-
+ src/hb-private.h       |  20 +++++---
  3 files changed, 106 insertions(+), 43 deletions(-)
 
 commit a794ebf4be9896393f4badf02905a4007981a588
  3 files changed, 106 insertions(+), 43 deletions(-)
 
 commit a794ebf4be9896393f4badf02905a4007981a588
@@ -27305,10 +38861,10 @@ Date: Thu Aug 6 12:32:35 2009 -0400
 
     [HB] Use glib again
 
 
     [HB] Use glib again
 
- src/Makefile.am        |    5 +++--
- src/hb-blob.c          |    4 ++--
- src/hb-object-private.h |   19 ++++++-------------
- src/hb-private.h       |   45
+ src/Makefile.am        |  5 +++--
+ src/hb-blob.c          |  4 ++--
+ src/hb-object-private.h | 19 ++++++-------------
+ src/hb-private.h       | 45
  ++++++++++++++++++++++++++-------------------
  4 files changed, 37 insertions(+), 36 deletions(-)
 
  ++++++++++++++++++++++++++-------------------
  4 files changed, 37 insertions(+), 36 deletions(-)
 
@@ -27318,8 +38874,8 @@ Date:   Thu Aug 6 10:27:38 2009 -0400
 
     [HB] Improve debug output
 
 
     [HB] Improve debug output
 
- src/hb-open-type-private.hh |   7 ++++---
- 1 files changed, 4 insertions(+), 3 deletions(-)
+ src/hb-open-type-private.hh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
 
 commit 9faee63034d3965735bd6362c0beeca1613bd771
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9faee63034d3965735bd6362c0beeca1613bd771
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27327,8 +38883,8 @@ Date:   Thu Aug 6 10:24:49 2009 -0400
 
     [HB] Minor
 
 
     [HB] Minor
 
- src/hb-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f72059ee6946d9b4812b794f662ee83c7e25fe53
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f72059ee6946d9b4812b794f662ee83c7e25fe53
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27336,8 +38892,8 @@ Date:   Wed Aug 5 15:35:02 2009 -0400
 
     [HB] Add a few TODO items
 
 
     [HB] Add a few TODO items
 
- src/TODO |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ src/TODO | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 commit 0d77ab8a73f57c9fca4c6f9301dae394d79526e3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0d77ab8a73f57c9fca4c6f9301dae394d79526e3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27345,8 +38901,8 @@ Date:   Wed Aug 5 15:27:42 2009 -0400
 
     [HB] Improve debug output
 
 
     [HB] Improve debug output
 
- src/hb-open-type-private.hh |   8 ++++++++
- 1 files changed, 8 insertions(+), 0 deletions(-)
+ src/hb-open-type-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
 
 commit 268cac4c9ef8cb592cfb8507273332165b8d3ad3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 268cac4c9ef8cb592cfb8507273332165b8d3ad3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27354,8 +38910,8 @@ Date:   Wed Aug 5 15:21:48 2009 -0400
 
     [HB] Fix blob unlock
 
 
     [HB] Fix blob unlock
 
- src/hb-blob.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-blob.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 7acb389569cf99c6bae9db31a8ed7c7007fbb566
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7acb389569cf99c6bae9db31a8ed7c7007fbb566
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27363,10 +38919,10 @@ Date: Wed Aug 5 15:20:34 2009 -0400
 
     [HB] Improve debug output and fix mprotect bug
 
 
     [HB] Improve debug output and fix mprotect bug
 
- src/hb-blob.c              |   57
- +++++++++++++++++++++++++++++++++++++------
- src/hb-open-type-private.hh |  30 ++++++++++------------
- src/hb-private.h           |    3 +-
+ src/hb-blob.c              | 57
+ ++++++++++++++++++++++++++++++++++++++-------
+ src/hb-open-type-private.hh | 30 +++++++++++-------------
+ src/hb-private.h           |  3 ++-
  3 files changed, 65 insertions(+), 25 deletions(-)
 
 commit ec9f8db0d3cad146801b7dc5c59e517de3b6fa34
  3 files changed, 65 insertions(+), 25 deletions(-)
 
 commit ec9f8db0d3cad146801b7dc5c59e517de3b6fa34
@@ -27375,8 +38931,8 @@ Date:   Wed Aug 5 14:52:03 2009 -0400
 
     [HB] Minor
 
 
     [HB] Minor
 
- src/hb-private.h |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-private.h | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit d341881d9a0f835f691b121480046081ad162918
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d341881d9a0f835f691b121480046081ad162918
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27384,8 +38940,8 @@ Date:   Wed Aug 5 14:49:25 2009 -0400
 
     [HB] Fix build of main.cc
 
 
     [HB] Fix build of main.cc
 
- src/Makefile.am |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/Makefile.am | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 8f3be25e7ec88ea451ee8097bf32e5f729f4fef9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8f3be25e7ec88ea451ee8097bf32e5f729f4fef9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27393,8 +38949,8 @@ Date:   Tue Aug 4 23:43:40 2009 -0400
 
     [HB] turn debugging off
 
 
     [HB] turn debugging off
 
- src/hb-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 62ed5850d9e0e0d0231889470d58e815420c21e5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 62ed5850d9e0e0d0231889470d58e815420c21e5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27402,8 +38958,8 @@ Date:   Tue Aug 4 23:30:32 2009 -0400
 
     [HB] Fix another sanitize() bug;  hopefully it's the last one
 
 
     [HB] Fix another sanitize() bug;  hopefully it's the last one
 
- src/hb-ot-layout-common-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 90482b68178b687c0f0a3f82cd6a36b2c0bb9384
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 90482b68178b687c0f0a3f82cd6a36b2c0bb9384
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27411,8 +38967,8 @@ Date:   Tue Aug 4 23:24:35 2009 -0400
 
     [HB] Fix a couple other sanitize() bugs
 
 
     [HB] Fix a couple other sanitize() bugs
 
- src/hb-ot-layout-gpos-private.hh |    4 ++--
- src/hb-ot-layout-gsub-private.hh |    4 ++--
+ src/hb-ot-layout-gpos-private.hh | 4 ++--
+ src/hb-ot-layout-gsub-private.hh | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 4f3ad9115a4161fc23fa559c26082440196217ec
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 4f3ad9115a4161fc23fa559c26082440196217ec
@@ -27421,9 +38977,9 @@ Date:   Tue Aug 4 23:01:23 2009 -0400
 
     [HB] More debugging output
 
 
     [HB] More debugging output
 
- src/hb-open-type-private.hh |  45
- ++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 40 insertions(+), 5 deletions(-)
+ src/hb-open-type-private.hh | 45
+ ++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 40 insertions(+), 5 deletions(-)
 
 commit 8cd6fa28d1b77100491519b8dedb2e113508bf59
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8cd6fa28d1b77100491519b8dedb2e113508bf59
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27431,8 +38987,8 @@ Date:   Tue Aug 4 22:55:44 2009 -0400
 
     [HB] Fix fatal Sanitizer bug
 
 
     [HB] Fix fatal Sanitizer bug
 
- src/hb-open-type-private.hh |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2870ac5e5d5d87646a4b273a9805fb3fcf280f97
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2870ac5e5d5d87646a4b273a9805fb3fcf280f97
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27440,8 +38996,8 @@ Date:   Tue Aug 4 22:43:47 2009 -0400
 
     [HB] Add missing sanitize
 
 
     [HB] Add missing sanitize
 
- src/hb-open-file-private.hh |   1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/hb-open-file-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit b28815c1f6e46d38471cacbc31248ca6fda8c4d1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b28815c1f6e46d38471cacbc31248ca6fda8c4d1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27449,15 +39005,15 @@ Date: Tue Aug 4 22:35:36 2009 -0400
 
     [HB] Add sanitize debugging facilities
 
 
     [HB] Add sanitize debugging facilities
 
- src/hb-open-file-private.hh         |    4 +++
- src/hb-open-type-private.hh         |   43
- ++++++++++++++++++++++++++++++----
- src/hb-ot-layout-common-private.hh   |   17 +++++++++++++
- src/hb-ot-layout-gdef-private.hh     |   10 ++++++++
- src/hb-ot-layout-gpos-private.hh     |   28 ++++++++++++++++++++++
- src/hb-ot-layout-gsub-private.hh     |   18 ++++++++++++++
- src/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++++++
- src/hb-private.h                    |    6 ++++-
+ src/hb-open-file-private.hh         |  4 ++++
+ src/hb-open-type-private.hh         | 43
+ +++++++++++++++++++++++++++++++-----
+ src/hb-ot-layout-common-private.hh   | 17 ++++++++++++++
+ src/hb-ot-layout-gdef-private.hh     | 10 +++++++++
+ src/hb-ot-layout-gpos-private.hh     | 28 +++++++++++++++++++++++
+ src/hb-ot-layout-gsub-private.hh     | 18 +++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 16 ++++++++++++++
+ src/hb-private.h                    |  6 ++++-
  8 files changed, 136 insertions(+), 6 deletions(-)
 
 commit 7edb430f9182723b7b720708c56088cec1200a70
  8 files changed, 136 insertions(+), 6 deletions(-)
 
 commit 7edb430f9182723b7b720708c56088cec1200a70
@@ -27466,13 +39022,13 @@ Date: Tue Aug 4 22:06:57 2009 -0400
 
     [HB] Rename open-types to open-type; beauty
 
 
     [HB] Rename open-types to open-type; beauty
 
- src/Makefile.am                   |    2 +-
- src/hb-open-file-private.hh       |    2 +-
- src/hb-open-type-private.hh       |  565
- ++++++++++++++++++++++++++++++++++++
- src/hb-open-types-private.hh      |  565
- ------------------------------------
- src/hb-ot-layout-common-private.hh |   2 +-
+ src/Makefile.am                   |   2 +-
+ src/hb-open-file-private.hh       |   2 +-
+ src/hb-open-type-private.hh       | 565
+ +++++++++++++++++++++++++++++++++++++
+ src/hb-open-types-private.hh      | 565
+ -------------------------------------
+ src/hb-ot-layout-common-private.hh |  2 +-
  5 files changed, 568 insertions(+), 568 deletions(-)
 
 commit f4b58d3fc2956a9d1b6178588d809c781f7a5c0c
  5 files changed, 568 insertions(+), 568 deletions(-)
 
 commit f4b58d3fc2956a9d1b6178588d809c781f7a5c0c
@@ -27481,8 +39037,8 @@ Date:   Tue Aug 4 21:47:29 2009 -0400
 
     [HB] Save edit even if not writeable
 
 
     [HB] Save edit even if not writeable
 
- src/hb-open-types-private.hh |    6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ src/hb-open-types-private.hh | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 commit 9bd629ccd064e739789e504c41ad875eed93abba
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9bd629ccd064e739789e504c41ad875eed93abba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27490,9 +39046,9 @@ Date:   Tue Aug 4 21:42:23 2009 -0400
 
     [HB] Fix warnings
 
 
     [HB] Fix warnings
 
- src/hb-open-file-private.hh     |    1 +
- src/hb-open-types-private.hh    |    5 +++++
- src/hb-ot-layout-gsub-private.hh |    3 +--
+ src/hb-open-file-private.hh     | 1 +
+ src/hb-open-types-private.hh    | 5 +++++
+ src/hb-ot-layout-gsub-private.hh | 3 +--
  3 files changed, 7 insertions(+), 2 deletions(-)
 
 commit 5ff4e13143c227fa57854c987b5a98e610f89361
  3 files changed, 7 insertions(+), 2 deletions(-)
 
 commit 5ff4e13143c227fa57854c987b5a98e610f89361
@@ -27501,9 +39057,9 @@ Date:   Tue Aug 4 21:35:32 2009 -0400
 
     [HB] Avoid infinite recusion in Extension sanitize()
 
 
     [HB] Avoid infinite recusion in Extension sanitize()
 
- src/hb-ot-layout-gpos-private.hh |    1 +
- src/hb-ot-layout-gsub-private.hh |    1 +
- 2 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.hh | 1 +
+ src/hb-ot-layout-gsub-private.hh | 1 +
+ 2 files changed, 2 insertions(+)
 
 commit d60bb8ca2ae6edf29b2227b56c57f0d16879370b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d60bb8ca2ae6edf29b2227b56c57f0d16879370b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27511,9 +39067,9 @@ Date:   Tue Aug 4 21:32:57 2009 -0400
 
     [HB] Hook Sanitizer up.  Hell's breaking loose right now
 
 
     [HB] Hook Sanitizer up.  Hell's breaking loose right now
 
- src/hb-font.cc                      |    7 ++-----
- src/hb-open-types-private.hh |    2 +-
- src/hb-ot-layout.cc         |   12 ++++++------
+ src/hb-font.cc                      |  7 ++-----
+ src/hb-open-types-private.hh |  2 +-
+ src/hb-ot-layout.cc         | 12 ++++++------
  3 files changed, 9 insertions(+), 12 deletions(-)
 
 commit 679f41fe61242aa8d7f45b64bdb66395aa530fe2
  3 files changed, 9 insertions(+), 12 deletions(-)
 
 commit 679f41fe61242aa8d7f45b64bdb66395aa530fe2
@@ -27522,8 +39078,8 @@ Date:   Tue Aug 4 21:32:06 2009 -0400
 
     [HB] Fix leak
 
 
     [HB] Fix leak
 
- src/hb-ot-layout.cc |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout.cc | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 4e8a0602bb0b3cbf7f26cc38790e37cdec7b0b37
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4e8a0602bb0b3cbf7f26cc38790e37cdec7b0b37
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27531,9 +39087,9 @@ Date:   Tue Aug 4 20:52:47 2009 -0400
 
     [HB] Add Sanitizer
 
 
     [HB] Add Sanitizer
 
- src/hb-open-types-private.hh |   58
- ++++++++++++++++++++++++++++++++++++++---
- 1 files changed, 53 insertions(+), 5 deletions(-)
+ src/hb-open-types-private.hh | 58
+ ++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 53 insertions(+), 5 deletions(-)
 
 commit 2765d333e523a13dbd932fa33f3b39a5cf83f0f7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2765d333e523a13dbd932fa33f3b39a5cf83f0f7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27541,8 +39097,8 @@ Date:   Tue Aug 4 20:50:18 2009 -0400
 
     [HB] Add XXX
 
 
     [HB] Add XXX
 
- src/hb-open-file-private.hh |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/hb-open-file-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit a328d66e6a8122f7d4d71941449d4d0136203e08
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a328d66e6a8122f7d4d71941449d4d0136203e08
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27550,10 +39106,10 @@ Date: Tue Aug 4 20:27:05 2009 -0400
 
     [HB] Minor cleanup
 
 
     [HB] Minor cleanup
 
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ src/hb-ot-layout-gdef-private.hh     | 2 +-
+ src/hb-ot-layout-gpos-private.hh     | 2 +-
+ src/hb-ot-layout-gsub-private.hh     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 4 ++--
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 577c1116493d785d3455626612f97dabb383abf0
  4 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 577c1116493d785d3455626612f97dabb383abf0
@@ -27562,9 +39118,9 @@ Date:   Tue Aug 4 19:31:02 2009 -0400
 
     [HB] Shuffle code around
 
 
     [HB] Shuffle code around
 
- src/hb-open-types-private.hh |  127
- +++++++++++++++++++++--------------------
- 1 files changed, 65 insertions(+), 62 deletions(-)
+ src/hb-open-types-private.hh | 127
+ ++++++++++++++++++++++---------------------
+ 1 file changed, 65 insertions(+), 62 deletions(-)
 
 commit b1e187fc6365f5355c652a61494a5e9f6acf51b4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b1e187fc6365f5355c652a61494a5e9f6acf51b4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27572,8 +39128,8 @@ Date:   Tue Aug 4 15:28:49 2009 -0400
 
     [HB] More sanitize infrastructure
 
 
     [HB] More sanitize infrastructure
 
- src/hb-open-types-private.hh |   29 ++++++++++++++++++++++++++++-
- 1 files changed, 28 insertions(+), 1 deletions(-)
+ src/hb-open-types-private.hh | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
 
 commit b508e5ccd528f3f0f49f545bd5f30a525d5abd5a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b508e5ccd528f3f0f49f545bd5f30a525d5abd5a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27581,9 +39137,9 @@ Date:   Tue Aug 4 15:07:24 2009 -0400
 
     [HB] open-file sanitize()
 
 
     [HB] open-file sanitize()
 
- src/hb-open-file-private.hh  |   46
- ++++++++++++++++++++++++++++++++++++++---
- src/hb-open-types-private.hh |   13 +++++++++++
+ src/hb-open-file-private.hh  | 46
+ ++++++++++++++++++++++++++++++++++++++++----
+ src/hb-open-types-private.hh | 13 +++++++++++++
  2 files changed, 55 insertions(+), 4 deletions(-)
 
 commit 738c54d9caa3affc4b434e56bfb810ff6dc9b0b3
  2 files changed, 55 insertions(+), 4 deletions(-)
 
 commit 738c54d9caa3affc4b434e56bfb810ff6dc9b0b3
@@ -27592,8 +39148,8 @@ Date:   Tue Aug 4 14:42:46 2009 -0400
 
     [HB] Tag sanitize()
 
 
     [HB] Tag sanitize()
 
- src/hb-open-types-private.hh      |    8 ++++++++
- src/hb-ot-layout-common-private.hh |   6 +-----
+ src/hb-open-types-private.hh      | 8 ++++++++
+ src/hb-ot-layout-common-private.hh | 6 +-----
  2 files changed, 9 insertions(+), 5 deletions(-)
 
 commit e49a84c9e37c08808880e74e94c8160731ababa1
  2 files changed, 9 insertions(+), 5 deletions(-)
 
 commit e49a84c9e37c08808880e74e94c8160731ababa1
@@ -27602,11 +39158,11 @@ Date: Tue Aug 4 14:33:23 2009 -0400
 
     [HB] GDEF sanitize()
 
 
     [HB] GDEF sanitize()
 
- src/hb-ot-layout-gdef-private.hh     |   54
- ++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gpos-private.hh     |    2 +-
- src/hb-ot-layout-gsub-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-layout-gdef-private.hh     | 54
+ ++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gpos-private.hh     |  2 +-
+ src/hb-ot-layout-gsub-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh |  2 +-
  4 files changed, 57 insertions(+), 3 deletions(-)
 
 commit 18939487d04dba86880b0af8e89cf2cc44a431f5
  4 files changed, 57 insertions(+), 3 deletions(-)
 
 commit 18939487d04dba86880b0af8e89cf2cc44a431f5
@@ -27615,9 +39171,9 @@ Date:   Tue Aug 4 14:27:56 2009 -0400
 
     [HB] Fix Extension sanitize()
 
 
     [HB] Fix Extension sanitize()
 
- src/hb-ot-layout-gpos-private.hh     |    3 ++-
- src/hb-ot-layout-gsub-private.hh     |    3 ++-
- src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-layout-gpos-private.hh     | 3 ++-
+ src/hb-ot-layout-gsub-private.hh     | 3 ++-
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
  3 files changed, 5 insertions(+), 3 deletions(-)
 
 commit f2be750981be58a723831e69b1670275851d4be9
  3 files changed, 5 insertions(+), 3 deletions(-)
 
 commit f2be750981be58a723831e69b1670275851d4be9
@@ -27626,8 +39182,8 @@ Date:   Tue Aug 4 14:12:46 2009 -0400
 
     [HB] Remove stale TODO
 
 
     [HB] Remove stale TODO
 
- src/hb-ot-layout.cc |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout.cc | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit ac26e2a838d1266bb5f39c43245eb2a52c5e072d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ac26e2a838d1266bb5f39c43245eb2a52c5e072d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27635,8 +39191,8 @@ Date:   Tue Aug 4 14:10:39 2009 -0400
 
     [HB] Hookup NEUTER()
 
 
     [HB] Hookup NEUTER()
 
- src/hb-open-types-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-types-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 15164d9258a74122a4db748d35532bd72c47cec2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 15164d9258a74122a4db748d35532bd72c47cec2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27644,14 +39200,14 @@ Date: Tue Aug 4 13:57:41 2009 -0400
 
     [HB] Fix mix warnings
 
 
     [HB] Fix mix warnings
 
- src/Makefile.am                   |    2 +-
- src/hb-font.cc                            |   15 +++------------
- src/hb-open-types-private.hh      |    2 +-
- src/hb-ot-layout-common-private.hh |   6 +++---
- src/hb-ot-layout-gdef-private.hh   |   2 +-
- src/hb-ot-layout-gpos-private.hh   |   9 ++++-----
- src/hb-ot-layout.cc               |    2 +-
- src/main.cc                       |    4 +---
+ src/Makefile.am                   |  2 +-
+ src/hb-font.cc                            | 15 +++------------
+ src/hb-open-types-private.hh      |  2 +-
+ src/hb-ot-layout-common-private.hh |  6 +++---
+ src/hb-ot-layout-gdef-private.hh   |  2 +-
+ src/hb-ot-layout-gpos-private.hh   |  9 ++++-----
+ src/hb-ot-layout.cc               |  2 +-
+ src/main.cc                       |  4 +---
  8 files changed, 15 insertions(+), 27 deletions(-)
 
 commit 42b778f89e0818fe06910ce04e2203485823da09
  8 files changed, 15 insertions(+), 27 deletions(-)
 
 commit 42b778f89e0818fe06910ce04e2203485823da09
@@ -27660,10 +39216,10 @@ Date: Tue Aug 4 13:30:49 2009 -0400
 
     [HB] GPOS sanitize()
 
 
     [HB] GPOS sanitize()
 
- src/hb-open-types-private.hh    |   22 ++++-
- src/hb-ot-layout-gpos-private.hh |  195
- +++++++++++++++++++++++++++++++++++++-
- src/hb-ot-layout-gsub-private.hh |    2 -
+ src/hb-open-types-private.hh    |  22 ++++-
+ src/hb-ot-layout-gpos-private.hh | 195
+ ++++++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout-gsub-private.hh |   2 -
  3 files changed, 213 insertions(+), 6 deletions(-)
 
 commit dc9c4d93cd0f3ac991f32df08c1c17fc389054c0
  3 files changed, 213 insertions(+), 6 deletions(-)
 
 commit dc9c4d93cd0f3ac991f32df08c1c17fc389054c0
@@ -27672,9 +39228,9 @@ Date:   Tue Aug 4 12:26:26 2009 -0400
 
     [HB] Sanitize DeviceTable
 
 
     [HB] Sanitize DeviceTable
 
- src/hb-open-types-private.hh      |    8 ++++----
- src/hb-ot-layout-common-private.hh |  17 ++++++++++++++---
- src/hb-ot-layout-gsub-private.hh   |   2 +-
+ src/hb-open-types-private.hh      |  8 ++++----
+ src/hb-ot-layout-common-private.hh | 17 ++++++++++++++---
+ src/hb-ot-layout-gsub-private.hh   |  2 +-
  3 files changed, 19 insertions(+), 8 deletions(-)
 
 commit ad3a3cd4955661c591b20af1f2c493432f0bebf0
  3 files changed, 19 insertions(+), 8 deletions(-)
 
 commit ad3a3cd4955661c591b20af1f2c493432f0bebf0
@@ -27683,8 +39239,8 @@ Date:   Tue Aug 4 12:13:52 2009 -0400
 
     [HB] More casts
 
 
     [HB] More casts
 
- src/hb-ot-layout-gsub-private.hh |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 95639fccc1ef18eadeb737e8b611d1d1f1315fc2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 95639fccc1ef18eadeb737e8b611d1d1f1315fc2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27692,8 +39248,8 @@ Date:   Tue Aug 4 12:05:24 2009 -0400
 
     [HB] Fix couple of bugs
 
 
     [HB] Fix couple of bugs
 
- src/hb-open-types-private.hh |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-open-types-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 2b5a59c277f4c5bf7aac9a9005054763e322e02d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2b5a59c277f4c5bf7aac9a9005054763e322e02d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27701,11 +39257,11 @@ Date: Tue Aug 4 11:38:50 2009 -0400
 
     [HB] More cast cleanup
 
 
     [HB] More cast cleanup
 
- src/hb-open-types-private.hh        |   23 +++++++-----
- src/hb-ot-layout-common-private.hh   |    7 ++--
- src/hb-ot-layout-gsub-private.hh     |   27 +++++---------
- src/hb-ot-layout-gsubgpos-private.hh |   64
- ++++++++++++---------------------
+ src/hb-open-types-private.hh        | 23 ++++++++-----
+ src/hb-ot-layout-common-private.hh   |  7 ++--
+ src/hb-ot-layout-gsub-private.hh     | 27 ++++++---------
+ src/hb-ot-layout-gsubgpos-private.hh | 64
+ +++++++++++++-----------------------
  4 files changed, 50 insertions(+), 71 deletions(-)
 
 commit 196598bbccff08415ff5192314cba044df258cad
  4 files changed, 50 insertions(+), 71 deletions(-)
 
 commit 196598bbccff08415ff5192314cba044df258cad
@@ -27714,13 +39270,13 @@ Date: Tue Aug 4 11:04:32 2009 -0400
 
     [Hb] Use reinterpret casts instead of direct casts to char *
 
 
     [Hb] Use reinterpret casts instead of direct casts to char *
 
- src/hb-open-file-private.hh         |    4 +-
- src/hb-open-types-private.hh        |   19 ++++++++++----
- src/hb-ot-layout-common-private.hh   |    8 +++---
- src/hb-ot-layout-gpos-private.hh     |   12 ++++----
- src/hb-ot-layout-gsub-private.hh     |   20 +++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |   44
- +++++++++++++++++-----------------
+ src/hb-open-file-private.hh         |  4 ++--
+ src/hb-open-types-private.hh        | 19 +++++++++++-----
+ src/hb-ot-layout-common-private.hh   |  8 +++----
+ src/hb-ot-layout-gpos-private.hh     | 12 +++++-----
+ src/hb-ot-layout-gsub-private.hh     | 20 ++++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh | 44
+ ++++++++++++++++++------------------
  6 files changed, 57 insertions(+), 50 deletions(-)
 
 commit 92b5dd8e71e1bdeaa6e86a53f167683a3f5f4289
  6 files changed, 57 insertions(+), 50 deletions(-)
 
 commit 92b5dd8e71e1bdeaa6e86a53f167683a3f5f4289
@@ -27729,9 +39285,9 @@ Date:   Tue Aug 4 10:41:32 2009 -0400
 
     [HB] Merge more templates
 
 
     [HB] Merge more templates
 
- src/hb-open-types-private.hh |  167
- ++++++++++++++----------------------------
- 1 files changed, 55 insertions(+), 112 deletions(-)
+ src/hb-open-types-private.hh | 167
+ ++++++++++++++-----------------------------
+ 1 file changed, 55 insertions(+), 112 deletions(-)
 
 commit e6ab2c59ba2d37942ac5fcbfe61d38b7e359ac8c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e6ab2c59ba2d37942ac5fcbfe61d38b7e359ac8c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27739,9 +39295,9 @@ Date:   Tue Aug 4 10:23:01 2009 -0400
 
     [HB] Simplify indirect sanitize()
 
 
     [HB] Simplify indirect sanitize()
 
- src/hb-open-types-private.hh      |   52
- +++++++++++++++++------------------
- src/hb-ot-layout-common-private.hh |  11 +-------
+ src/hb-open-types-private.hh      | 52
+ ++++++++++++++++++--------------------
+ src/hb-ot-layout-common-private.hh | 11 +-------
  2 files changed, 26 insertions(+), 37 deletions(-)
 
 commit 29d8644a315ebe6976f15db2fe96069376d9b8cd
  2 files changed, 26 insertions(+), 37 deletions(-)
 
 commit 29d8644a315ebe6976f15db2fe96069376d9b8cd
@@ -27750,8 +39306,8 @@ Date:   Tue Aug 4 02:27:37 2009 -0400
 
     [HB] Finish GSUB sanitize()
 
 
     [HB] Finish GSUB sanitize()
 
- src/hb-ot-layout-gsub-private.hh |   21 ++++++++++++++++++++-
- 1 files changed, 20 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.hh | 21 ++++++++++++++++++++-
+ 1 file changed, 20 insertions(+), 1 deletion(-)
 
 commit cf086adca1b7b5a361a248808f9a847e513d3630
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cf086adca1b7b5a361a248808f9a847e513d3630
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27759,8 +39315,8 @@ Date:   Tue Aug 4 02:14:24 2009 -0400
 
     [HB] Add comment
 
 
     [HB] Add comment
 
- src/hb-ot-layout-common-private.hh |   6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-common-private.hh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit a97ce570ab693190350886e4e80942851c4d5727
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a97ce570ab693190350886e4e80942851c4d5727
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27768,8 +39324,8 @@ Date:   Tue Aug 4 02:10:48 2009 -0400
 
     [HB] Optimize sanitize()
 
 
     [HB] Optimize sanitize()
 
- src/hb-open-types-private.hh |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
+ src/hb-open-types-private.hh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
 commit cd3827ee567612c5500206b62840702fc956e0f5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cd3827ee567612c5500206b62840702fc956e0f5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27777,12 +39333,12 @@ Date: Tue Aug 4 02:09:34 2009 -0400
 
     [HB] More sanitize()
 
 
     [HB] More sanitize()
 
- src/hb-open-file-private.hh         |    2 +-
- src/hb-open-types-private.hh        |   12 ++++--
- src/hb-ot-layout-common-private.hh   |   64
- +++++++++++++++++++++++++++++----
- src/hb-ot-layout-gdef-private.hh     |    2 +-
- src/hb-ot-layout-gsubgpos-private.hh |   15 +++++++-
+ src/hb-open-file-private.hh         |  2 +-
+ src/hb-open-types-private.hh        | 12 ++++---
+ src/hb-ot-layout-common-private.hh   | 64
+ +++++++++++++++++++++++++++++++-----
+ src/hb-ot-layout-gdef-private.hh     |  2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 15 +++++++--
  5 files changed, 79 insertions(+), 16 deletions(-)
 
 commit 70de50c11ed7037b20eb6814ff60f6e32a9944e4
  5 files changed, 79 insertions(+), 16 deletions(-)
 
 commit 70de50c11ed7037b20eb6814ff60f6e32a9944e4
@@ -27791,11 +39347,11 @@ Date: Tue Aug 4 00:58:28 2009 -0400
 
     [HB] Start sanitize()
 
 
     [HB] Start sanitize()
 
- src/hb-open-types-private.hh        |  105 +++++++++++++++++++++++++++-
- src/hb-ot-layout-common-private.hh   |   48 ++++++++++++-
- src/hb-ot-layout-gsub-private.hh     |  125
- +++++++++++++++++++++++++++++++++-
- src/hb-ot-layout-gsubgpos-private.hh |  104 ++++++++++++++++++++++++++++
+ src/hb-open-types-private.hh        | 105 ++++++++++++++++++++++++++++-
+ src/hb-ot-layout-common-private.hh   |  48 +++++++++++++-
+ src/hb-ot-layout-gsub-private.hh     | 125
+ ++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout-gsubgpos-private.hh | 104 +++++++++++++++++++++++++++++
  4 files changed, 376 insertions(+), 6 deletions(-)
 
 commit 5fc22e647c8a2bf6d3cb59185e351ac625e7e322
  4 files changed, 376 insertions(+), 6 deletions(-)
 
 commit 5fc22e647c8a2bf6d3cb59185e351ac625e7e322
@@ -27804,10 +39360,10 @@ Date: Mon Aug 3 22:43:02 2009 -0400
 
     [HB] Remove use of typeof()
 
 
     [HB] Remove use of typeof()
 
- src/hb-blob.c          |    4 ++--
- src/hb-buffer.c        |    2 +-
- src/hb-font.cc                 |   14 +++++++-------
- src/hb-object-private.h |    4 ++--
+ src/hb-blob.c          |  4 ++--
+ src/hb-buffer.c        |  2 +-
+ src/hb-font.cc                 | 14 +++++++-------
+ src/hb-object-private.h |  4 ++--
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 70e0f2a75ec1559f2f70ada837ce4bc4baca49e3
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 70e0f2a75ec1559f2f70ada837ce4bc4baca49e3
@@ -27816,10 +39372,10 @@ Date: Mon Aug 3 22:01:47 2009 -0400
 
     [HB] Make it all work again
 
 
     [HB] Make it all work again
 
- src/hb-font.cc                    |   23 +++++++++++--------
- src/hb-ot-layout-private.h |   9 +++++--
- src/hb-ot-layout.cc       |   51
- +++++++++++++++++++++----------------------
+ src/hb-font.cc                    | 23 ++++++++++++---------
+ src/hb-ot-layout-private.h |  9 +++++---
+ src/hb-ot-layout.cc       | 51
+ +++++++++++++++++++++++-----------------------
  3 files changed, 44 insertions(+), 39 deletions(-)
 
 commit 23c86aa0009324433e78fcd0c47f2c0ff14b1949
  3 files changed, 44 insertions(+), 39 deletions(-)
 
 commit 23c86aa0009324433e78fcd0c47f2c0ff14b1949
@@ -27828,18 +39384,18 @@ Date: Mon Aug 3 21:40:20 2009 -0400
 
     [HB] Use face_t directly instead of ot_layout_t
 
 
     [HB] Use face_t directly instead of ot_layout_t
 
- src/TODO                            |    1 +
- src/hb-font-private.h               |    4 +
- src/hb-font.cc                              |   74 +++++++++---
- src/hb-font.h                       |    3 +
- src/hb-object-private.h             |   36 ++++--
- src/hb-ot-layout-gdef-private.hh     |    2 +
- src/hb-ot-layout-gpos-private.hh     |   14 +-
- src/hb-ot-layout-gsub-private.hh     |   32 +++---
- src/hb-ot-layout-gsubgpos-private.hh |    8 +-
- src/hb-ot-layout-private.h          |   40 ++++---
- src/hb-ot-layout.cc                 |  220
- +++++++++++++++-------------------
+ src/TODO                            |   1 +
+ src/hb-font-private.h               |   4 +
+ src/hb-font.cc                              |  74 +++++++++---
+ src/hb-font.h                       |   3 +
+ src/hb-object-private.h             |  36 +++---
+ src/hb-ot-layout-gdef-private.hh     |   2 +
+ src/hb-ot-layout-gpos-private.hh     |  14 +--
+ src/hb-ot-layout-gsub-private.hh     |  32 ++---
+ src/hb-ot-layout-gsubgpos-private.hh |   8 +-
+ src/hb-ot-layout-private.h          |  40 ++++---
+ src/hb-ot-layout.cc                 | 220
+ +++++++++++++++--------------------
  11 files changed, 237 insertions(+), 197 deletions(-)
 
 commit fc6c94002dd5478cf9fbdaff12d8374a786c85e1
  11 files changed, 237 insertions(+), 197 deletions(-)
 
 commit fc6c94002dd5478cf9fbdaff12d8374a786c85e1
@@ -27848,9 +39404,9 @@ Date:   Mon Aug 3 21:27:08 2009 -0400
 
     [HB] Simplify sub-blob support
 
 
     [HB] Simplify sub-blob support
 
- src/hb-blob.c |  172
- +++++++++++++++++++++-----------------------------------
- src/hb-blob.h |   14 +++--
+ src/hb-blob.c | 172
+ ++++++++++++++++++++++------------------------------------
+ src/hb-blob.h |  14 +++--
  2 files changed, 74 insertions(+), 112 deletions(-)
 
 commit a26442437ae9f11674e0d68cd5cbf395ade7695d
  2 files changed, 74 insertions(+), 112 deletions(-)
 
 commit a26442437ae9f11674e0d68cd5cbf395ade7695d
@@ -27859,9 +39415,9 @@ Date:   Mon Aug 3 17:53:29 2009 -0400
 
     [HB] Add sub-blobs
 
 
     [HB] Add sub-blobs
 
- src/hb-blob.c |  162
- ++++++++++++++++++++++++++++++++++++++++++++++++---------
- src/hb-blob.h |   12 ++++-
+ src/hb-blob.c | 162
+ +++++++++++++++++++++++++++++++++++++++++++++++++---------
+ src/hb-blob.h |  12 ++++-
  2 files changed, 147 insertions(+), 27 deletions(-)
 
 commit b28e21b90c4105a0c2e17009b748777294614664
  2 files changed, 147 insertions(+), 27 deletions(-)
 
 commit b28e21b90c4105a0c2e17009b748777294614664
@@ -27870,11 +39426,11 @@ Date: Sun Aug 2 20:06:48 2009 -0400
 
     [HB] Rename hb-font.c to hb-font.cc
 
 
     [HB] Rename hb-font.c to hb-font.cc
 
- src/Makefile.am |    2 +-
- src/hb-font.c  |  349
- -------------------------------------------------------
- src/hb-font.cc  |  349
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am |   2 +-
+ src/hb-font.c  | 349
+ --------------------------------------------------------
+ src/hb-font.cc  | 349
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 350 insertions(+), 350 deletions(-)
 
 commit 5f5b24f99f52bbc922e238b65c06061ba07c8548
  3 files changed, 350 insertions(+), 350 deletions(-)
 
 commit 5f5b24f99f52bbc922e238b65c06061ba07c8548
@@ -27910,14 +39466,14 @@ Date: Sun Aug 2 19:57:00 2009 -0400
 
     [HB] Move OT file handling out of ot-layout
 
 
     [HB] Move OT file handling out of ot-layout
 
- src/Makefile.am                  |    3 +-
- src/hb-open-file-private.h       |  145 +++++++++++
- src/hb-open-types-private.h      |  386 +++++++++++++++++++++++++++++
- src/hb-ot-layout-common-private.h |   4 +-
- src/hb-ot-layout-open-private.h   |  495
- -------------------------------------
- src/hb-ot-layout.cc              |    2 +-
- src/main.cc                      |    4 +-
+ src/Makefile.am                  |   3 +-
+ src/hb-open-file-private.h       | 145 +++++++++++
+ src/hb-open-types-private.h      | 386 +++++++++++++++++++++++++++++
+ src/hb-ot-layout-common-private.h |   4 +-
+ src/hb-ot-layout-open-private.h   | 495
+ --------------------------------------
+ src/hb-ot-layout.cc              |   2 +-
+ src/main.cc                      |   4 +-
  7 files changed, 539 insertions(+), 500 deletions(-)
 
 commit 0ead481a5a8623103565fd7d924666e7342278dd
  7 files changed, 539 insertions(+), 500 deletions(-)
 
 commit 0ead481a5a8623103565fd7d924666e7342278dd
@@ -27926,18 +39482,18 @@ Date: Sun Aug 2 17:41:36 2009 -0400
 
     [HB] Port ot-layout to new public API
 
 
     [HB] Port ot-layout to new public API
 
- src/TODO                           |    1 +
- src/hb-common.h                    |    1 +
- src/hb-font.c                      |    9 +
- src/hb-font.h                      |    3 +
- src/hb-ot-layout-gdef-private.h     |  32 ++--
- src/hb-ot-layout-gpos-private.h     | 106 ++++++------
- src/hb-ot-layout-gsub-private.h     |  50 +++---
- src/hb-ot-layout-gsubgpos-private.h |  12 +-
- src/hb-ot-layout-private.h         |   36 +++-
- src/hb-ot-layout.cc                |  334
- +++++++++++++++++++----------------
- src/hb-ot-layout.h                 |  207 ++++++++++------------
+ src/TODO                           |   1 +
+ src/hb-common.h                    |   1 +
+ src/hb-font.c                      |   9 +
+ src/hb-font.h                      |   3 +
+ src/hb-ot-layout-gdef-private.h     | 32 ++--
+ src/hb-ot-layout-gpos-private.h     | 106 ++++++------
+ src/hb-ot-layout-gsub-private.h     | 50 +++---
+ src/hb-ot-layout-gsubgpos-private.h | 12 +-
+ src/hb-ot-layout-private.h         |  36 +++-
+ src/hb-ot-layout.cc                | 334
+ ++++++++++++++++++++----------------
+ src/hb-ot-layout.h                 | 207 ++++++++++------------
  11 files changed, 415 insertions(+), 376 deletions(-)
 
 commit 678bed433371d90536976a2d57195c1e1867f766
  11 files changed, 415 insertions(+), 376 deletions(-)
 
 commit 678bed433371d90536976a2d57195c1e1867f766
@@ -27946,10 +39502,10 @@ Date: Sun Aug 2 15:35:31 2009 -0400
 
     [HB] Add top-level header files
 
 
     [HB] Add top-level header files
 
- src/Makefile.am |    2 ++
- src/hb-ot.h    |   34 ++++++++++++++++++++++++++++++++++
- src/hb.h       |   35 +++++++++++++++++++++++++++++++++++
- 3 files changed, 71 insertions(+), 0 deletions(-)
+ src/Makefile.am |  2 ++
+ src/hb-ot.h    | 34 ++++++++++++++++++++++++++++++++++
+ src/hb.h       | 35 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 71 insertions(+)
 
 commit 2c80296aa5991ad67483889147f5c84fefe54af2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2c80296aa5991ad67483889147f5c84fefe54af2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27957,8 +39513,8 @@ Date:   Sun Aug 2 15:20:22 2009 -0400
 
     [HB] Add XXX marks
 
 
     [HB] Add XXX marks
 
- src/hb-ot-layout-private.h |   2 ++
- src/hb-ot-layout.cc       |    7 ++-----
+ src/hb-ot-layout-private.h | 2 ++
+ src/hb-ot-layout.cc       | 7 ++-----
  2 files changed, 4 insertions(+), 5 deletions(-)
 
 commit c46f8efd6ddd981b5724b2600ac98a80193385be
  2 files changed, 4 insertions(+), 5 deletions(-)
 
 commit c46f8efd6ddd981b5724b2600ac98a80193385be
@@ -27969,8 +39525,8 @@ Date:   Sat Aug 1 23:06:27 2009 -0400
 
     To be in line with cairo
 
 
     To be in line with cairo
 
- src/hb-font.c |    4 ++--
- src/hb-font.h |    4 ++--
+ src/hb-font.c | 4 ++--
+ src/hb-font.h | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f1ebe44985e2192844cf1747a4e36ed81e715ce6
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f1ebe44985e2192844cf1747a4e36ed81e715ce6
@@ -27979,8 +39535,8 @@ Date:   Sat Aug 1 22:55:11 2009 -0400
 
     [HB] Cleanup TODO
 
 
     [HB] Cleanup TODO
 
- src/TODO |   10 +---------
- 1 files changed, 1 insertions(+), 9 deletions(-)
+ src/TODO | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
 
 commit f1322e52d557726baa010be8d35a594748e8fa1a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f1322e52d557726baa010be8d35a594748e8fa1a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27988,14 +39544,14 @@ Date: Sat Aug 1 22:53:04 2009 -0400
 
     [HB] Cleanup public buffer structs
 
 
     [HB] Cleanup public buffer structs
 
- src/hb-buffer-private.h        |   46
- ++++++++++++++++++++++++++++++------
- src/hb-buffer.c                |   49
- ++++++++++++++++++++-------------------
- src/hb-buffer.h                |   35 +++++++++++++--------------
- src/hb-ot-layout-gpos-private.h |    8 +++---
- src/hb-ot-layout-private.h     |    5 ++-
- src/hb-ot-layout.cc            |   20 ++++++++--------
+ src/hb-buffer-private.h        | 46
+ +++++++++++++++++++++++++++++++-------
+ src/hb-buffer.c                | 49
+ +++++++++++++++++++++--------------------
+ src/hb-buffer.h                | 35 ++++++++++++++---------------
+ src/hb-ot-layout-gpos-private.h |  8 +++----
+ src/hb-ot-layout-private.h     |  5 +++--
+ src/hb-ot-layout.cc            | 20 ++++++++---------
  6 files changed, 97 insertions(+), 66 deletions(-)
 
 commit 6d5bb18e93d2a53350b342869a3ec8f25f0396c2
  6 files changed, 97 insertions(+), 66 deletions(-)
 
 commit 6d5bb18e93d2a53350b342869a3ec8f25f0396c2
@@ -28004,9 +39560,9 @@ Date:   Sat Aug 1 22:25:04 2009 -0400
 
     [OT] Match struct with HB's
 
 
     [OT] Match struct with HB's
 
- src/hb-buffer.c     |   6 +++---
- src/hb-buffer.h     |   2 +-
- src/hb-ot-layout.cc |  12 ++++++------
+ src/hb-buffer.c     | 6 +++---
+ src/hb-buffer.h     | 2 +-
+ src/hb-ot-layout.cc | 12 ++++++------
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 11fbb5487d9900a019440ef8235f35c9f525decb
  3 files changed, 10 insertions(+), 10 deletions(-)
 
 commit 11fbb5487d9900a019440ef8235f35c9f525decb
@@ -28015,10 +39571,10 @@ Date: Sat Aug 1 22:19:06 2009 -0400
 
     [HB] Port buffert to new object API
 
 
     [HB] Port buffert to new object API
 
- src/hb-buffer-private.h |   24 +++++++++++++++--
- src/hb-buffer.c        |   65
- ++++++++++++++++++++++++++++++++++++-----------
- src/hb-buffer.h        |   53 ++++++++++++++++++++++++--------------
+ src/hb-buffer-private.h | 24 +++++++++++++++---
+ src/hb-buffer.c        | 65
+ +++++++++++++++++++++++++++++++++++++------------
+ src/hb-buffer.h        | 53 +++++++++++++++++++++++++---------------
  3 files changed, 104 insertions(+), 38 deletions(-)
 
 commit 0cc7bc59ea6e8f38bf1e196c558cca9862ac3302
  3 files changed, 104 insertions(+), 38 deletions(-)
 
 commit 0cc7bc59ea6e8f38bf1e196c558cca9862ac3302
@@ -28027,9 +39583,9 @@ Date:   Sat Aug 1 21:38:39 2009 -0400
 
     [HB] Move typedef's around
 
 
     [HB] Move typedef's around
 
- src/hb-blob.h  |    2 ++
- src/hb-common.h |    9 ---------
- src/hb-font.h  |   10 ++++++++++
+ src/hb-blob.h  |  2 ++
+ src/hb-common.h |  9 ---------
+ src/hb-font.h  | 10 ++++++++++
  3 files changed, 12 insertions(+), 9 deletions(-)
 
 commit a12dd324a3859496a95602d426aee34ce6c5c8a6
  3 files changed, 12 insertions(+), 9 deletions(-)
 
 commit a12dd324a3859496a95602d426aee34ce6c5c8a6
@@ -28038,12 +39594,12 @@ Date: Sat Aug 1 21:36:15 2009 -0400
 
     [HB] Add get_reference_count()
 
 
     [HB] Add get_reference_count()
 
- src/hb-blob.c          |    6 ++++++
- src/hb-blob.h          |    3 +++
- src/hb-font.c          |   24 ++++++++++++++++++++++++
- src/hb-font.h          |   12 ++++++++++++
- src/hb-object-private.h |    7 +++++++
- 5 files changed, 52 insertions(+), 0 deletions(-)
+ src/hb-blob.c          |  6 ++++++
+ src/hb-blob.h          |  3 +++
+ src/hb-font.c          | 24 ++++++++++++++++++++++++
+ src/hb-font.h          | 12 ++++++++++++
+ src/hb-object-private.h |  7 +++++++
+ 5 files changed, 52 insertions(+)
 
 commit baec684fde2303edb16341bfcf1022cd72acf129
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit baec684fde2303edb16341bfcf1022cd72acf129
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28051,10 +39607,10 @@ Date: Sat Aug 1 21:06:11 2009 -0400
 
     [HB] Remove glib dependency
 
 
     [HB] Remove glib dependency
 
- src/Makefile.am  |    7 ++-----
- src/hb-buffer.c  |    2 +-
- src/hb-private.h |   30 ++++++++++++++++++------------
- src/main.cc     |    1 +
+ src/Makefile.am  |  7 ++-----
+ src/hb-buffer.c  |  2 +-
+ src/hb-private.h | 30 ++++++++++++++++++------------
+ src/main.cc     |  1 +
  4 files changed, 22 insertions(+), 18 deletions(-)
 
 commit df66028781a7609a515980e64396e6f1044d764a
  4 files changed, 22 insertions(+), 18 deletions(-)
 
 commit df66028781a7609a515980e64396e6f1044d764a
@@ -28063,9 +39619,9 @@ Date:   Sat Aug 1 20:46:02 2009 -0400
 
     [HB] Assorted compiler macros
 
 
     [HB] Assorted compiler macros
 
- src/hb-ot-layout-open-private.h |    4 +-
- src/hb-private.h               |   88
- ++++++++++++++++++++++++++++++---------
+ src/hb-ot-layout-open-private.h |  4 +-
+ src/hb-private.h               | 88
+ +++++++++++++++++++++++++++++++----------
  2 files changed, 70 insertions(+), 22 deletions(-)
 
 commit ba8d94ce3360bfaf2c530d01f2af69237018a531
  2 files changed, 70 insertions(+), 22 deletions(-)
 
 commit ba8d94ce3360bfaf2c530d01f2af69237018a531
@@ -28074,14 +39630,14 @@ Date: Sat Aug 1 20:29:22 2009 -0400
 
     [HB] Simplify object creation
 
 
     [HB] Simplify object creation
 
- src/Makefile.am          |    2 +-
- src/hb-blob.c            |    6 +--
- src/hb-font-private.h    |    1 -
- src/hb-font.c            |   37 +++++------------
- src/hb-object-private.h   |   97
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-private.h         |    2 +
- src/hb-refcount-private.h |   87 ----------------------------------------
+ src/Makefile.am          |  2 +-
+ src/hb-blob.c            |  6 +--
+ src/hb-font-private.h    |  1 -
+ src/hb-font.c            | 37 ++++++------------
+ src/hb-object-private.h   | 97
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-private.h         |  2 +
+ src/hb-refcount-private.h | 87 ------------------------------------------
  7 files changed, 112 insertions(+), 120 deletions(-)
 
 commit c62b503770325819f249885dfc9d4683a69c9efd
  7 files changed, 112 insertions(+), 120 deletions(-)
 
 commit c62b503770325819f249885dfc9d4683a69c9efd
@@ -28092,13 +39648,13 @@ Date: Sat Aug 1 19:54:49 2009 -0400
 
     Not used yet.
 
 
     Not used yet.
 
- src/Makefile.am          |    3 +
- src/hb-blob.c            |    6 +-
- src/hb-font-private.h    |  108 +++++++++++++++
- src/hb-font.c            |  331
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-font.h            |  182 +++++++++++++++++++++++++
- src/hb-refcount-private.h |   14 ++-
+ src/Makefile.am          |   3 +
+ src/hb-blob.c            |   6 +-
+ src/hb-font-private.h    | 108 +++++++++++++++
+ src/hb-font.c            | 331
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-font.h            | 182 +++++++++++++++++++++++++
+ src/hb-refcount-private.h |  14 +-
  6 files changed, 636 insertions(+), 8 deletions(-)
 
 commit 35a7383c6138fd705560f0d4bb30659cbd1ab64c
  6 files changed, 636 insertions(+), 8 deletions(-)
 
 commit 35a7383c6138fd705560f0d4bb30659cbd1ab64c
@@ -28107,10 +39663,10 @@ Date: Sat Aug 1 19:30:31 2009 -0400
 
     [HB] Simplify refcounting functions
 
 
     [HB] Simplify refcounting functions
 
- src/hb-blob.c            |   32 ++++++++++----------------------
- src/hb-common.h          |    2 ++
- src/hb-private.h         |    2 ++
- src/hb-refcount-private.h |   31 ++++++++++++++++++++++++++++++-
+ src/hb-blob.c            | 32 ++++++++++----------------------
+ src/hb-common.h          |  2 ++
+ src/hb-private.h         |  2 ++
+ src/hb-refcount-private.h | 31 ++++++++++++++++++++++++++++++-
  4 files changed, 44 insertions(+), 23 deletions(-)
 
 commit 23af767a4475fecc1fe9fe9108f12c05c89bc8c9
  4 files changed, 44 insertions(+), 23 deletions(-)
 
 commit 23af767a4475fecc1fe9fe9108f12c05c89bc8c9
@@ -28119,8 +39675,8 @@ Date:   Sat Aug 1 19:10:41 2009 -0400
 
     [HB] Fix for dfont's with multiple faces
 
 
     [HB] Fix for dfont's with multiple faces
 
- src/hb-ot-layout-open-private.h |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-open-private.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit e97a95f2ea2770689bbf076d3c3ac404f273271e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e97a95f2ea2770689bbf076d3c3ac404f273271e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28128,8 +39684,8 @@ Date:   Sat Aug 1 19:05:44 2009 -0400
 
     [HB] Use calloc instead of malloc where feasible
 
 
     [HB] Use calloc instead of malloc where feasible
 
- src/hb-blob.c  |    8 +++++---
- src/hb-buffer.c |    4 ++--
+ src/hb-blob.c  | 8 +++++---
+ src/hb-buffer.c | 4 ++--
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit 0090dc0f67b553d2f6eaaedc289c0956ade09ef6
  2 files changed, 7 insertions(+), 5 deletions(-)
 
 commit 0090dc0f67b553d2f6eaaedc289c0956ade09ef6
@@ -28138,13 +39694,12 @@ Date: Thu Jul 30 16:28:45 2009 -0400
 
     [HB] Remove hinting setting and use ppem==0 to mean "no hinting"
 
 
     [HB] Remove hinting setting and use ppem==0 to mean "no hinting"
 
- src/hb-blob.h                  |    3 ---
- src/hb-common.h                |    9 +++++++++
- src/hb-ot-layout-gpos-private.h |   36
- ++++++++++++++++++++++++------------
- src/hb-ot-layout-private.h     |    2 --
- src/hb-ot-layout.cc            |    7 -------
- src/hb-ot-layout.h             |    4 ----
+ src/hb-blob.h                  |  3 ---
+ src/hb-common.h                |  9 +++++++++
+ src/hb-ot-layout-gpos-private.h | 36 ++++++++++++++++++++++++------------
+ src/hb-ot-layout-private.h     |  2 --
+ src/hb-ot-layout.cc            |  7 -------
+ src/hb-ot-layout.h             |  4 ----
  6 files changed, 33 insertions(+), 28 deletions(-)
 
 commit f0954d1e08ae288eda9904e17108fc73f48c0b98
  6 files changed, 33 insertions(+), 28 deletions(-)
 
 commit f0954d1e08ae288eda9904e17108fc73f48c0b98
@@ -28153,13 +39708,13 @@ Date: Thu Jul 30 15:33:57 2009 -0400
 
     [HB] Add a "blob" manager
 
 
     [HB] Add a "blob" manager
 
- src/Makefile.am          |    5 +-
- src/hb-blob.c            |  181
- +++++++++++++++++++++++++++++++++++++++++++++
- src/hb-blob.h            |   74 ++++++++++++++++++
- src/hb-private.h         |    2 +
- src/hb-refcount-private.h |   54 +++++++++++++
- 5 files changed, 315 insertions(+), 1 deletions(-)
+ src/Makefile.am          |   5 +-
+ src/hb-blob.c            | 181
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-blob.h            |  74 +++++++++++++++++++
+ src/hb-private.h         |   2 +
+ src/hb-refcount-private.h |  54 ++++++++++++++
+ 5 files changed, 315 insertions(+), 1 deletion(-)
 
 commit 02a370697d25b986dbf1d5c38f46a89a4833b495
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 02a370697d25b986dbf1d5c38f46a89a4833b495
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28167,12 +39722,12 @@ Date: Wed Jul 29 18:41:25 2009 -0400
 
     [HB] Move direction to buffer
 
 
     [HB] Move direction to buffer
 
- src/hb-buffer.c                |    9 +++++++++
- src/hb-buffer.h                |   14 ++++++++++++++
- src/hb-ot-layout-gpos-private.h |    2 +-
- src/hb-ot-layout-private.h     |    1 -
- src/hb-ot-layout.cc            |    7 -------
- src/hb-ot-layout.h             |    5 -----
+ src/hb-buffer.c                |  9 +++++++++
+ src/hb-buffer.h                | 14 ++++++++++++++
+ src/hb-ot-layout-gpos-private.h |  2 +-
+ src/hb-ot-layout-private.h     |  1 -
+ src/hb-ot-layout.cc            |  7 -------
+ src/hb-ot-layout.h             |  5 -----
  6 files changed, 24 insertions(+), 14 deletions(-)
 
 commit 7cda6fa24c26887c5543d0657b07aad466452cb3
  6 files changed, 24 insertions(+), 14 deletions(-)
 
 commit 7cda6fa24c26887c5543d0657b07aad466452cb3
@@ -28181,9 +39736,9 @@ Date:   Wed Jul 29 18:37:57 2009 -0400
 
     [HB] Rename internal vars
 
 
     [HB] Rename internal vars
 
- src/hb-ot-layout-gsubgpos-private.h |  56
- +++++++++++++++++-----------------
- 1 files changed, 28 insertions(+), 28 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 56
+ ++++++++++++++++++-------------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
 
 commit b196e6f2743d631ef181f1116370be3055063d36
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b196e6f2743d631ef181f1116370be3055063d36
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28191,8 +39746,8 @@ Date:   Tue Jul 28 15:50:42 2009 -0400
 
     [HB] Fix buffer enlargement.  Ouch
 
 
     [HB] Fix buffer enlargement.  Ouch
 
- src/hb-buffer.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f9cd1014f8f4d0394b5e0e9eefc1e2af13c59cab
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f9cd1014f8f4d0394b5e0e9eefc1e2af13c59cab
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28200,12 +39755,12 @@ Date: Tue Jul 28 15:43:34 2009 -0400
 
     Apply patch from Jonathan Kew
 
 
     Apply patch from Jonathan Kew
 
- src/hb-buffer.c     |  75
- ++++++++++++++++++++++++++------------------------
- src/hb-buffer.h     |   6 +++-
- src/hb-ot-layout.cc |  31 +++++++++++++++++++++
- src/hb-ot-layout.h  |  15 ++++++++++
- src/hb-private.h    |   2 +-
+ src/hb-buffer.c     | 75
+ ++++++++++++++++++++++++++++-------------------------
+ src/hb-buffer.h     | 6 ++++-
+ src/hb-ot-layout.cc | 31 ++++++++++++++++++++++
+ src/hb-ot-layout.h  | 15 +++++++++++
+ src/hb-private.h    | 2 +-
  5 files changed, 91 insertions(+), 38 deletions(-)
 
 commit 2ebb89d63dd27e800f2b6cbf624924601105f48a
  5 files changed, 91 insertions(+), 38 deletions(-)
 
 commit 2ebb89d63dd27e800f2b6cbf624924601105f48a
@@ -28216,19 +39771,19 @@ Date: Sat Jul 25 19:09:01 2009 -0400
 
     This reverts commit c939f6aff405ca7b10b1f1538f46148bff719fcb.
 
 
     This reverts commit c939f6aff405ca7b10b1f1538f46148bff719fcb.
 
- src/Makefile.am                    |    2 -
- src/hb-buffer.c                    |    9 ---
- src/hb-buffer.h                    |   14 -----
- src/hb-common.h                    |    3 -
- src/hb-ot-layout-gdef-private.h     |  32 +++++-----
- src/hb-ot-layout-gpos-private.h     | 108
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.h     |  46 +++++++-------
- src/hb-ot-layout-gsubgpos-private.h |  68 +++++++++++-----------
- src/hb-ot-layout-private.h         |   28 ++++-----
- src/hb-ot-layout.cc                |   30 ++++++++++
- src/hb-ot-layout.h                 |    5 ++
- src/hb-private.h                   |   16 -----
+ src/Makefile.am                    |   2 -
+ src/hb-buffer.c                    |   9 ---
+ src/hb-buffer.h                    |  14 -----
+ src/hb-common.h                    |   3 -
+ src/hb-ot-layout-gdef-private.h     | 32 +++++------
+ src/hb-ot-layout-gpos-private.h     | 108
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.h     | 46 +++++++--------
+ src/hb-ot-layout-gsubgpos-private.h | 68 +++++++++++------------
+ src/hb-ot-layout-private.h         |  28 ++++------
+ src/hb-ot-layout.cc                |  30 ++++++++++
+ src/hb-ot-layout.h                 |   5 ++
+ src/hb-private.h                   |  16 ------
  12 files changed, 174 insertions(+), 187 deletions(-)
 
 commit 55520d2af172f5f6617b909e80cbd7d898f2bc15
  12 files changed, 174 insertions(+), 187 deletions(-)
 
 commit 55520d2af172f5f6617b909e80cbd7d898f2bc15
@@ -28237,19 +39792,19 @@ Date: Wed Jun 10 23:26:51 2009 -0400
 
     XX
 
 
     XX
 
- src/Makefile.am                    |    2 +
- src/hb-buffer.c                    |    9 +++
- src/hb-buffer.h                    |   14 +++++
- src/hb-common.h                    |    3 +
- src/hb-ot-layout-gdef-private.h     |  32 +++++-----
- src/hb-ot-layout-gpos-private.h     | 108
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.h     |  46 +++++++-------
- src/hb-ot-layout-gsubgpos-private.h |  68 +++++++++++-----------
- src/hb-ot-layout-private.h         |   28 +++++----
- src/hb-ot-layout.cc                |   30 ----------
- src/hb-ot-layout.h                 |    5 --
- src/hb-private.h                   |   16 +++++
+ src/Makefile.am                    |   2 +
+ src/hb-buffer.c                    |   9 +++
+ src/hb-buffer.h                    |  14 +++++
+ src/hb-common.h                    |   3 +
+ src/hb-ot-layout-gdef-private.h     | 32 +++++------
+ src/hb-ot-layout-gpos-private.h     | 108
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.h     | 46 +++++++--------
+ src/hb-ot-layout-gsubgpos-private.h | 68 +++++++++++------------
+ src/hb-ot-layout-private.h         |  28 ++++++----
+ src/hb-ot-layout.cc                |  30 ----------
+ src/hb-ot-layout.h                 |   5 --
+ src/hb-private.h                   |  16 ++++++
  12 files changed, 187 insertions(+), 174 deletions(-)
 
 commit f53d434b9151c4ec43c148734b49bb165e522cc9
  12 files changed, 187 insertions(+), 174 deletions(-)
 
 commit f53d434b9151c4ec43c148734b49bb165e522cc9
@@ -28258,8 +39813,8 @@ Date:   Sat May 30 22:17:32 2009 -0400
 
     [GPOS] Advance buffer cursor in SinglePos lookups. Ouch!
 
 
     [GPOS] Advance buffer cursor in SinglePos lookups. Ouch!
 
- src/hb-ot-layout-gpos-private.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit e35bbd570a5d914f86f1ea83941ee4328f268059
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e35bbd570a5d914f86f1ea83941ee4328f268059
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28270,9 +39825,9 @@ Date:   Sat May 30 12:02:46 2009 -0400
 
     That is, we work in-place even for ligatures now.
 
 
     That is, we work in-place even for ligatures now.
 
- src/hb-buffer.c |  156
- ++++++++++++++++++++++++-------------------------------
- src/hb-buffer.h |    7 +--
+ src/hb-buffer.c | 156
+ ++++++++++++++++++++++++--------------------------------
+ src/hb-buffer.h |   7 ++-
  2 files changed, 71 insertions(+), 92 deletions(-)
 
 commit 6734ed4b6b2ce382917bf644aaf1acfa993f00ad
  2 files changed, 71 insertions(+), 92 deletions(-)
 
 commit 6734ed4b6b2ce382917bf644aaf1acfa993f00ad
@@ -28281,8 +39836,8 @@ Date:   Wed May 27 18:16:55 2009 -0400
 
     [GPOS] Fix property checking
 
 
     [GPOS] Fix property checking
 
- src/hb-ot-layout-gpos-private.h |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit cc83ae12484108586fba6586bd9008971338b322
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cc83ae12484108586fba6586bd9008971338b322
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28290,8 +39845,8 @@ Date:   Wed May 27 00:17:37 2009 -0400
 
     [GPOS] Add vertical TODO
 
 
     [GPOS] Add vertical TODO
 
- src/hb-ot-layout-gpos-private.h |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit b69d38e7eaea544ba6c1876cdc6ddac61a698dd3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b69d38e7eaea544ba6c1876cdc6ddac61a698dd3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28299,8 +39854,8 @@ Date:   Tue May 26 22:29:02 2009 -0400
 
     [HB] Remove useless include
 
 
     [HB] Remove useless include
 
- src/hb-ot-layout-private.h |   3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-private.h | 3 ---
+ 1 file changed, 3 deletions(-)
 
 commit 6c8108cb583292a679b05844ab613b7f4587adc6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6c8108cb583292a679b05844ab613b7f4587adc6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28308,8 +39863,8 @@ Date:   Tue May 26 22:26:08 2009 -0400
 
     [GPOS] Remove unused variables
 
 
     [GPOS] Remove unused variables
 
- src/hb-ot-layout-gpos-private.h |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 09c292e3b688a67fbae67b645d1e6ffcf8d8eb6e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 09c292e3b688a67fbae67b645d1e6ffcf8d8eb6e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28317,9 +39872,9 @@ Date:   Tue May 26 19:48:16 2009 -0400
 
     [HB] Fix glyph properties
 
 
     [HB] Fix glyph properties
 
- src/hb-ot-layout-common-private.h |   6 +++---
- src/hb-ot-layout-open-private.h   |   2 +-
- src/hb-ot-layout.cc              |    2 +-
+ src/hb-ot-layout-common-private.h | 6 +++---
+ src/hb-ot-layout-open-private.h   | 2 +-
+ src/hb-ot-layout.cc              | 2 +-
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 64e33f008ff9cc807fdfdc4553ad3fe01bb0615f
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 64e33f008ff9cc807fdfdc4553ad3fe01bb0615f
@@ -28328,8 +39883,8 @@ Date:   Tue May 26 18:57:56 2009 -0400
 
     [GPOS] Fix PairPos signedness
 
 
     [GPOS] Fix PairPos signedness
 
- src/hb-ot-layout-gpos-private.h |   11 ++++-------
- 1 files changed, 4 insertions(+), 7 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
 
 commit 80ea5bd10e72561a7627a5196621a6d7eccd91b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 80ea5bd10e72561a7627a5196621a6d7eccd91b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28337,9 +39892,9 @@ Date:   Tue May 26 17:58:37 2009 -0400
 
     [GPOS] Fix mark matching
 
 
     [GPOS] Fix mark matching
 
- src/hb-ot-layout-gpos-private.h |   44
- +++++++++++++++++---------------------
- 1 files changed, 20 insertions(+), 24 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 44
+ +++++++++++++++++++----------------------
+ 1 file changed, 20 insertions(+), 24 deletions(-)
 
 commit 4189b92aaa41e4a1756c561cc6e08b0ed024afda
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4189b92aaa41e4a1756c561cc6e08b0ed024afda
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28347,13 +39902,13 @@ Date: Tue May 26 17:31:56 2009 -0400
 
     [HB] When looking back/forward, skip marks only
 
 
     [HB] When looking back/forward, skip marks only
 
- src/TODO                           |    1 -
- src/hb-ot-layout-gpos-private.h     |  13 +------
- src/hb-ot-layout-gsub-private.h     |  38 ++++++++-----------
- src/hb-ot-layout-gsubgpos-private.h |  14 ++++----
- src/hb-ot-layout-private.h         |    6 +++
- src/hb-ot-layout.cc                |   69
- +++++++++++++++++++++++------------
+ src/TODO                           |  1 -
+ src/hb-ot-layout-gpos-private.h     | 13 ++-----
+ src/hb-ot-layout-gsub-private.h     | 38 +++++++++-----------
+ src/hb-ot-layout-gsubgpos-private.h | 14 ++++----
+ src/hb-ot-layout-private.h         |  6 ++++
+ src/hb-ot-layout.cc                | 69
+ ++++++++++++++++++++++++-------------
  6 files changed, 76 insertions(+), 65 deletions(-)
 
 commit 1246e41021ab1d782b4c97e5d81c4917a57e3ed4
  6 files changed, 76 insertions(+), 65 deletions(-)
 
 commit 1246e41021ab1d782b4c97e5d81c4917a57e3ed4
@@ -28362,9 +39917,9 @@ Date:   Tue May 26 15:58:34 2009 -0400
 
     [GDEF] Support MarkFilteringSets
 
 
     [GDEF] Support MarkFilteringSets
 
- src/hb-ot-layout.cc |  59
- ++++++++++++++++++--------------------------------
- 1 files changed, 21 insertions(+), 38 deletions(-)
+ src/hb-ot-layout.cc | 59
+ +++++++++++++++++++----------------------------------
+ 1 file changed, 21 insertions(+), 38 deletions(-)
 
 commit 5130c35e93528bcf3095fee5baf3847589167a58
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5130c35e93528bcf3095fee5baf3847589167a58
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28372,9 +39927,9 @@ Date:   Tue May 26 15:45:41 2009 -0400
 
     [HB] Simplify MarkAttachmentType handling
 
 
     [HB] Simplify MarkAttachmentType handling
 
- src/hb-ot-layout-gpos-private.h |    6 +++---
- src/hb-ot-layout-gsub-private.h |    6 ++----
- src/hb-ot-layout.cc            |   18 ++++++++----------
+ src/hb-ot-layout-gpos-private.h |  6 +++---
+ src/hb-ot-layout-gsub-private.h |  6 ++----
+ src/hb-ot-layout.cc            | 18 ++++++++----------
  3 files changed, 13 insertions(+), 17 deletions(-)
 
 commit e4b92b85a7750bd4271ad607b3c41f0184e89feb
  3 files changed, 13 insertions(+), 17 deletions(-)
 
 commit e4b92b85a7750bd4271ad607b3c41f0184e89feb
@@ -28383,10 +39938,10 @@ Date: Tue May 26 15:38:53 2009 -0400
 
     [HB] Support parsing MarkFilteringSets introduced in OpenType 1.6
 
 
     [HB] Support parsing MarkFilteringSets introduced in OpenType 1.6
 
- src/hb-ot-layout-gdef-private.h |   55
- +++++++++++++++++++++++++++++++++-----
- src/hb-ot-layout-gpos-private.h |    1 +
- src/hb-ot-layout.cc            |    6 ++--
+ src/hb-ot-layout-gdef-private.h | 55
+ +++++++++++++++++++++++++++++++++++------
+ src/hb-ot-layout-gpos-private.h |  1 +
+ src/hb-ot-layout.cc            |  6 ++---
  3 files changed, 51 insertions(+), 11 deletions(-)
 
 commit 515ce4ceb2ab0151d8dfc03ff0bfc7d110dd93b5
  3 files changed, 51 insertions(+), 11 deletions(-)
 
 commit 515ce4ceb2ab0151d8dfc03ff0bfc7d110dd93b5
@@ -28395,8 +39950,8 @@ Date:   Tue May 26 13:08:00 2009 -0400
 
     [HB] More de-C++'ization
 
 
     [HB] More de-C++'ization
 
- src/hb-ot-layout-gsubgpos-private.h |  24 ++++++++++++------------
- 1 files changed, 12 insertions(+), 12 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
 commit d7df42d7ee586219475878d160f85ae5a188bd59
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d7df42d7ee586219475878d160f85ae5a188bd59
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28404,8 +39959,8 @@ Date:   Tue May 26 13:04:59 2009 -0400
 
     [HB] Start MarkFilteringSet support
 
 
     [HB] Start MarkFilteringSet support
 
- src/hb-ot-layout-common-private.h |   24 +++++++++++++++++++-----
- 1 files changed, 19 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-common-private.h | 24 +++++++++++++++++++-----
+ 1 file changed, 19 insertions(+), 5 deletions(-)
 
 commit 62964afcecd96038cfaa8bc2bc931f43ee83be7e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 62964afcecd96038cfaa8bc2bc931f43ee83be7e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28413,11 +39968,11 @@ Date: Tue May 26 12:40:10 2009 -0400
 
     [HB] Implement get_lig_carets()
 
 
     [HB] Implement get_lig_carets()
 
- src/hb-ot-layout-gdef-private.h |   57
- ++++++++++++++++++++++++++++++--------
- src/hb-ot-layout.cc            |   17 +++++++++---
- src/hb-ot-layout.h             |    8 +++++-
- src/main.cc                    |    9 +-----
+ src/hb-ot-layout-gdef-private.h | 57
+ ++++++++++++++++++++++++++++++++---------
+ src/hb-ot-layout.cc            | 17 +++++++++---
+ src/hb-ot-layout.h             |  8 +++++-
+ src/main.cc                    |  9 +------
  4 files changed, 66 insertions(+), 25 deletions(-)
 
 commit 79420ad9caf2d5fc94c3693e8292edfa27060b2d
  4 files changed, 66 insertions(+), 25 deletions(-)
 
 commit 79420ad9caf2d5fc94c3693e8292edfa27060b2d
@@ -28426,15 +39981,14 @@ Date: Tue May 26 12:24:16 2009 -0400
 
     [HB] Add get_attach_points()
 
 
     [HB] Add get_attach_points()
 
- src/Makefile.am                |    2 +-
- src/hb-ot-layout-gdef-private.h |   35
- +++++++++++++++++++++++++----------
- src/hb-ot-layout-gpos-private.h |   28 +++++++---------------------
- src/hb-ot-layout-gsub-private.h |   28 +++++++---------------------
- src/hb-ot-layout-open-private.h |   12 +++---------
- src/hb-ot-layout.cc            |    9 +++++++++
- src/hb-ot-layout.h             |    6 ++++++
- src/main.cc                    |    8 ++++----
+ src/Makefile.am                |  2 +-
+ src/hb-ot-layout-gdef-private.h | 35 +++++++++++++++++++++++++----------
+ src/hb-ot-layout-gpos-private.h | 28 +++++++---------------------
+ src/hb-ot-layout-gsub-private.h | 28 +++++++---------------------
+ src/hb-ot-layout-open-private.h | 12 +++---------
+ src/hb-ot-layout.cc            |  9 +++++++++
+ src/hb-ot-layout.h             |  6 ++++++
+ src/main.cc                    |  8 ++++----
  8 files changed, 62 insertions(+), 66 deletions(-)
 
 commit 855720ca47bf5a7a44eb5b84dce9f7da6e7156bd
  8 files changed, 62 insertions(+), 66 deletions(-)
 
 commit 855720ca47bf5a7a44eb5b84dce9f7da6e7156bd
@@ -28443,8 +39997,8 @@ Date:   Tue May 26 12:00:28 2009 -0400
 
     [HB] Remove more macros
 
 
     [HB] Remove more macros
 
- src/hb-ot-layout-gdef-private.h |   18 +++++++++---------
- 1 files changed, 9 insertions(+), 9 deletions(-)
+ src/hb-ot-layout-gdef-private.h | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
 
 commit c968fc2dc87cf85b53f60a40db59d5ee7b992edf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c968fc2dc87cf85b53f60a40db59d5ee7b992edf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28452,16 +40006,16 @@ Date: Mon May 25 04:04:24 2009 -0400
 
     [HB] More buffer cleanup
 
 
     [HB] More buffer cleanup
 
- src/hb-buffer-private.h            |   39 +++--------
- src/hb-buffer.c                    |  136
- +++++++++++++++++-----------------
- src/hb-buffer.h                    |   22 +++---
- src/hb-ot-layout-gpos-private.h     |  29 ++++----
- src/hb-ot-layout-gsub-private.h     |  10 ++--
- src/hb-ot-layout-gsubgpos-private.h |   8 +-
- src/hb-ot-layout-private.h         |   13 +---
- src/hb-ot-layout.cc                |   16 ++--
- src/hb-private.h                   |   29 --------
+ src/hb-buffer-private.h            |  39 +++--------
+ src/hb-buffer.c                    | 136
+ ++++++++++++++++++------------------
+ src/hb-buffer.h                    |  22 +++---
+ src/hb-ot-layout-gpos-private.h     | 29 ++++----
+ src/hb-ot-layout-gsub-private.h     | 10 +--
+ src/hb-ot-layout-gsubgpos-private.h |  8 +--
+ src/hb-ot-layout-private.h         |  13 ++--
+ src/hb-ot-layout.cc                |  16 ++---
+ src/hb-private.h                   |  29 --------
  9 files changed, 125 insertions(+), 177 deletions(-)
 
 commit 88a5f5a49b6809d88560791f9cf6b8f78f22a4ad
  9 files changed, 125 insertions(+), 177 deletions(-)
 
 commit 88a5f5a49b6809d88560791f9cf6b8f78f22a4ad
@@ -28470,12 +40024,12 @@ Date: Mon May 25 03:39:11 2009 -0400
 
     [HB] Cleanup buffer
 
 
     [HB] Cleanup buffer
 
- src/hb-buffer-private.h            |    2 +-
- src/hb-buffer.c                    |   26 +++++++-----
- src/hb-ot-layout-gsub-private.h     |  26 ++++---------
- src/hb-ot-layout-gsubgpos-private.h |   2 +-
- src/hb-ot-layout.cc                |   71
- -----------------------------------
+ src/hb-buffer-private.h            |  2 +-
+ src/hb-buffer.c                    | 26 ++++++++------
+ src/hb-ot-layout-gsub-private.h     | 26 +++++---------
+ src/hb-ot-layout-gsubgpos-private.h | 2 +-
+ src/hb-ot-layout.cc                | 71
+ -------------------------------------
  5 files changed, 25 insertions(+), 102 deletions(-)
 
 commit 347f0b8621d3adfec157e5634ff3defc818ea37f
  5 files changed, 25 insertions(+), 102 deletions(-)
 
 commit 347f0b8621d3adfec157e5634ff3defc818ea37f
@@ -28484,8 +40038,8 @@ Date:   Mon May 25 03:30:31 2009 -0400
 
     [HB] Clean more
 
 
     [HB] Clean more
 
- src/hb-ot-layout-private.h |  10 ++++------
- src/hb-ot-layout.cc       |    8 ++++----
+ src/hb-ot-layout-private.h | 10 ++++------
+ src/hb-ot-layout.cc       |  8 ++++----
  2 files changed, 8 insertions(+), 10 deletions(-)
 
 commit d9d2a07f4a8696666a12f5a206aa9cfb56dc2b35
  2 files changed, 8 insertions(+), 10 deletions(-)
 
 commit d9d2a07f4a8696666a12f5a206aa9cfb56dc2b35
@@ -28494,8 +40048,8 @@ Date:   Mon May 25 03:24:19 2009 -0400
 
     [HB] Remove one XXX, add another
 
 
     [HB] Remove one XXX, add another
 
- src/hb-buffer.h           |    2 ++
- src/hb-ot-layout-private.h |   3 +--
+ src/hb-buffer.h           | 2 ++
+ src/hb-ot-layout-private.h | 3 +--
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 6c78683c042250a7b5a6fc6ebae4717b03fadf9e
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 commit 6c78683c042250a7b5a6fc6ebae4717b03fadf9e
@@ -28504,12 +40058,12 @@ Date: Mon May 25 03:22:19 2009 -0400
 
     [HB] Update copyright years
 
 
     [HB] Update copyright years
 
- src/hb-buffer-private.h    |   2 +-
- src/hb-buffer.h           |    2 +-
- src/hb-common.h           |    2 +-
- src/hb-ot-layout-private.h |   2 +-
- src/hb-ot-layout.h        |    2 +-
- src/hb-private.h          |    2 +-
+ src/hb-buffer-private.h    | 2 +-
+ src/hb-buffer.h           | 2 +-
+ src/hb-common.h           | 2 +-
+ src/hb-ot-layout-private.h | 2 +-
+ src/hb-ot-layout.h        | 2 +-
+ src/hb-private.h          | 2 +-
  6 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4497af0069a94c69fc1518b1db2c1282721b732a
  6 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 4497af0069a94c69fc1518b1db2c1282721b732a
@@ -28518,8 +40072,8 @@ Date:   Mon May 25 03:20:18 2009 -0400
 
     [HB] Would have helped if I actually knew C++ before using it...
 
 
     [HB] Would have helped if I actually knew C++ before using it...
 
- src/hb-ot-layout-gsubgpos-private.h |   4 ++--
- src/hb-ot-layout-open-private.h     |  24 ++++++++++++------------
+ src/hb-ot-layout-gsubgpos-private.h | 4 ++--
+ src/hb-ot-layout-open-private.h     | 24 ++++++++++++------------
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit cc6c644ff2af5f6669b6ec100ff13e904872b21c
  2 files changed, 14 insertions(+), 14 deletions(-)
 
 commit cc6c644ff2af5f6669b6ec100ff13e904872b21c
@@ -28528,8 +40082,8 @@ Date:   Mon May 25 03:10:06 2009 -0400
 
     [HB] More cleanup
 
 
     [HB] More cleanup
 
- src/hb-ot-layout-common-private.h |   4 ++--
- src/hb-ot-layout-open-private.h   |   9 +++++----
+ src/hb-ot-layout-common-private.h | 4 ++--
+ src/hb-ot-layout-open-private.h   | 9 +++++----
  2 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 20cc86b3592db33731de671f008d7d222776be49
  2 files changed, 7 insertions(+), 6 deletions(-)
 
 commit 20cc86b3592db33731de671f008d7d222776be49
@@ -28538,9 +40092,9 @@ Date:   Mon May 25 02:41:49 2009 -0400
 
     [HB] Simplify Tag
 
 
     [HB] Simplify Tag
 
- src/hb-ot-layout-open-private.h |   46
- +++++++++++++++-----------------------
- 1 files changed, 18 insertions(+), 28 deletions(-)
+ src/hb-ot-layout-open-private.h | 46
+ ++++++++++++++++-------------------------
+ 1 file changed, 18 insertions(+), 28 deletions(-)
 
 commit 3ec0092c5e2d48e8c4fc1618d3bee427adddb1e7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3ec0092c5e2d48e8c4fc1618d3bee427adddb1e7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28548,8 +40102,8 @@ Date:   Mon May 25 02:34:25 2009 -0400
 
     [HB] Simplify more
 
 
     [HB] Simplify more
 
- src/hb-ot-layout-open-private.h |   31 ++++++++++---------------------
- 1 files changed, 10 insertions(+), 21 deletions(-)
+ src/hb-ot-layout-open-private.h | 31 ++++++++++---------------------
+ 1 file changed, 10 insertions(+), 21 deletions(-)
 
 commit 6ad8d5f3c7028147b371137ae4bca6aae66b3489
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6ad8d5f3c7028147b371137ae4bca6aae66b3489
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28557,9 +40111,9 @@ Date:   Mon May 25 02:27:29 2009 -0400
 
     [HB] Simplify some basic things
 
 
     [HB] Simplify some basic things
 
- src/hb-ot-layout-open-private.h |   90
- +++++++++++++++++++++++++-------------
- src/main.cc                    |    8 ++-
+ src/hb-ot-layout-open-private.h | 90
+ +++++++++++++++++++++++++++--------------
+ src/main.cc                    |  8 ++--
  2 files changed, 64 insertions(+), 34 deletions(-)
 
 commit f96ffd43bce0ac6d9c897933c9be0e51d543e570
  2 files changed, 64 insertions(+), 34 deletions(-)
 
 commit f96ffd43bce0ac6d9c897933c9be0e51d543e570
@@ -28568,11 +40122,11 @@ Date: Sun May 24 15:01:16 2009 -0400
 
     [HB] simplify macros
 
 
     [HB] simplify macros
 
- src/hb-buffer-private.h    |   4 ++--
- src/hb-buffer.h           |    4 ++--
- src/hb-common.h           |    8 ++++----
- src/hb-ot-layout-private.h |   4 ++--
- src/hb-ot-layout.h        |    4 ++--
+ src/hb-buffer-private.h    | 4 ++--
+ src/hb-buffer.h           | 4 ++--
+ src/hb-common.h           | 8 ++++----
+ src/hb-ot-layout-private.h | 4 ++--
+ src/hb-ot-layout.h        | 4 ++--
  5 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 8e7b30782a12f3997b9a5a18e6b9d01f6bff8b46
  5 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 8e7b30782a12f3997b9a5a18e6b9d01f6bff8b46
@@ -28581,8 +40135,8 @@ Date:   Sun May 24 14:27:24 2009 -0400
 
     [HB] Update text files
 
 
     [HB] Update text files
 
- src/COPYING |   7 -------
- src/README  |  13 ++-----------
+ src/COPYING | 7 -------
+ src/README  | 13 ++-----------
  2 files changed, 2 insertions(+), 18 deletions(-)
 
 commit fa7d47249496fe00ea1ab6943b385c8dd80e5ce6
  2 files changed, 2 insertions(+), 18 deletions(-)
 
 commit fa7d47249496fe00ea1ab6943b385c8dd80e5ce6
@@ -28591,8 +40145,8 @@ Date:   Sun May 24 14:24:35 2009 -0400
 
     [HB] Remove stale makefile.msc too
 
 
     [HB] Remove stale makefile.msc too
 
- src/makefile.msc |   19 -------------------
- 1 files changed, 0 insertions(+), 19 deletions(-)
+ src/makefile.msc | 19 -------------------
+ 1 file changed, 19 deletions(-)
 
 commit da2c52abcd75d46929b34cad55c4fb2c8892bc08
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit da2c52abcd75d46929b34cad55c4fb2c8892bc08
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28625,7 +40179,7 @@ Date:   Sun May 24 14:22:22 2009 -0400
  src/harfbuzz-stream.c        |  257 --
  src/harfbuzz.c                       |   31 -
  src/harfbuzz.h                       |   35 -
  src/harfbuzz-stream.c        |  257 --
  src/harfbuzz.c                       |   31 -
  src/harfbuzz.h                       |   35 -
- 22 files changed, 0 insertions(+), 16691 deletions(-)
+ 22 files changed, 16691 deletions(-)
 
 commit e5372f1621602dcee4e14a4b22dc182c21502a50
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e5372f1621602dcee4e14a4b22dc182c21502a50
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28633,8 +40187,8 @@ Date:   Sun May 24 14:21:27 2009 -0400
 
     [HB] Remove stale TODO mark
 
 
     [HB] Remove stale TODO mark
 
- src/hb-ot-layout-open-private.h |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-open-private.h | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 96908b898476ca5d7da5f386b15be76f9e83d76e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 96908b898476ca5d7da5f386b15be76f9e83d76e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28642,8 +40196,8 @@ Date:   Sun May 24 12:30:40 2009 -0400
 
     [HB] Add FixedVersion cast to int
 
 
     [HB] Add FixedVersion cast to int
 
- src/hb-ot-layout-open-private.h |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-open-private.h | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 957740dd253475020a94a62ec5dfcd03e3358176
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 957740dd253475020a94a62ec5dfcd03e3358176
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28651,8 +40205,8 @@ Date:   Sun May 24 12:29:55 2009 -0400
 
     [HB] Simplify tag
 
 
     [HB] Simplify tag
 
- src/hb-ot-layout-open-private.h |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-open-private.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 commit 87fcdcbe3644da10154688765db2d62eb9ac079a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 87fcdcbe3644da10154688765db2d62eb9ac079a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28660,10 +40214,10 @@ Date: Sun May 24 01:03:24 2009 -0400
 
     [HB] Remove unused data types
 
 
     [HB] Remove unused data types
 
- src/hb-ot-layout-gdef-private.h     |   2 +-
- src/hb-ot-layout-gsubgpos-private.h |   2 +-
- src/hb-ot-layout-open-private.h     |  54
- +++-------------------------------
+ src/hb-ot-layout-gdef-private.h     | 2 +-
+ src/hb-ot-layout-gsubgpos-private.h | 2 +-
+ src/hb-ot-layout-open-private.h     | 54
+ ++++---------------------------------
  3 files changed, 7 insertions(+), 51 deletions(-)
 
 commit 5876bf1b73fcb56cc41b4d348248a4817f9688cb
  3 files changed, 7 insertions(+), 51 deletions(-)
 
 commit 5876bf1b73fcb56cc41b4d348248a4817f9688cb
@@ -28672,8 +40226,8 @@ Date:   Sun May 24 00:53:28 2009 -0400
 
     [HB] Simplify version check in GSUB/GPOS
 
 
     [HB] Simplify version check in GSUB/GPOS
 
- src/hb-ot-layout-gpos-private.h |    5 ++++-
- src/hb-ot-layout-gsub-private.h |    5 ++++-
+ src/hb-ot-layout-gpos-private.h | 5 ++++-
+ src/hb-ot-layout-gsub-private.h | 5 ++++-
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit 212aba6189d7aaac0bab169b77ae6bdab16800a5
  2 files changed, 8 insertions(+), 2 deletions(-)
 
 commit 212aba6189d7aaac0bab169b77ae6bdab16800a5
@@ -28682,11 +40236,11 @@ Date: Sun May 24 00:50:27 2009 -0400
 
     [HB] Check for GDEF/GSUB/GPOS versions
 
 
     [HB] Check for GDEF/GSUB/GPOS versions
 
- src/hb-ot-layout-gdef-private.h     |   3 +--
- src/hb-ot-layout-gpos-private.h     |   3 +--
- src/hb-ot-layout-gsub-private.h     |   3 +--
- src/hb-ot-layout-gsubgpos-private.h |   5 ++---
- src/hb-ot-layout-open-private.h     |  11 ++++++++++-
+ src/hb-ot-layout-gdef-private.h     | 3 +--
+ src/hb-ot-layout-gpos-private.h     | 3 +--
+ src/hb-ot-layout-gsub-private.h     | 3 +--
+ src/hb-ot-layout-gsubgpos-private.h | 5 ++---
+ src/hb-ot-layout-open-private.h     | 11 ++++++++++-
  5 files changed, 15 insertions(+), 10 deletions(-)
 
 commit a21b5062cc32c04eeee3c4b20d26c7e2b34133e9
  5 files changed, 15 insertions(+), 10 deletions(-)
 
 commit a21b5062cc32c04eeee3c4b20d26c7e2b34133e9
@@ -28695,8 +40249,8 @@ Date:   Sat May 23 22:39:42 2009 -0400
 
     [HB] Minor
 
 
     [HB] Minor
 
- src/hb-ot-layout-gdef-private.h |    6 +++---
- src/hb-ot-layout-open-private.h |    4 ++--
+ src/hb-ot-layout-gdef-private.h | 6 +++---
+ src/hb-ot-layout-open-private.h | 4 ++--
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit a080b1cc2f66d6e109d431a1e09519d7cf53bb9a
  2 files changed, 5 insertions(+), 5 deletions(-)
 
 commit a080b1cc2f66d6e109d431a1e09519d7cf53bb9a
@@ -28705,8 +40259,8 @@ Date:   Sat May 23 18:50:44 2009 -0400
 
     [HB] Add TODO items
 
 
     [HB] Add TODO items
 
- src/TODO |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ src/TODO | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 commit e4efdd80a8fa4edbcdec9cd84f35f5f4521943c2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e4efdd80a8fa4edbcdec9cd84f35f5f4521943c2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28714,9 +40268,8 @@ Date:   Fri May 22 18:54:24 2009 -0400
 
     [GDEF] Add some get_carret_value() code
 
 
     [GDEF] Add some get_carret_value() code
 
- src/hb-ot-layout-gdef-private.h |   36
- ++++++++++++++++++------------------
- 1 files changed, 18 insertions(+), 18 deletions(-)
+ src/hb-ot-layout-gdef-private.h | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
 
 commit 9b006bc0322723d065271e4b0ea4f137f81101e1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9b006bc0322723d065271e4b0ea4f137f81101e1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28726,9 +40279,9 @@ Date:   Fri May 22 18:29:45 2009 -0400
 
     GPOS is complete now!  Yay!
 
 
     GPOS is complete now!  Yay!
 
- src/hb-ot-layout-gpos-private.h |  128
- ++++++++++++++++++++++++++++-----------
- 1 files changed, 92 insertions(+), 36 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 128
+ +++++++++++++++++++++++++++++-----------
+ 1 file changed, 92 insertions(+), 36 deletions(-)
 
 commit 923923feb248250626c637c11a886804011197b0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 923923feb248250626c637c11a886804011197b0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28736,8 +40289,8 @@ Date:   Fri May 22 17:58:09 2009 -0400
 
     [HB] Remove apply_subtables() again
 
 
     [HB] Remove apply_subtables() again
 
- src/hb-ot-layout-gpos-private.h |   31 +++++++++++--------------------
- src/hb-ot-layout-gsub-private.h |   33 ++++++++++++---------------------
+ src/hb-ot-layout-gpos-private.h | 31 +++++++++++--------------------
+ src/hb-ot-layout-gsub-private.h | 33 ++++++++++++---------------------
  2 files changed, 23 insertions(+), 41 deletions(-)
 
 commit d468f9af5b9fdc2713b0b86f28129e4190ee5053
  2 files changed, 23 insertions(+), 41 deletions(-)
 
 commit d468f9af5b9fdc2713b0b86f28129e4190ee5053
@@ -28746,10 +40299,10 @@ Date: Thu May 21 22:31:33 2009 -0400
 
     [HB] Share Extension lookup code between GSUB and GPOS
 
 
     [HB] Share Extension lookup code between GSUB and GPOS
 
- src/hb-ot-layout-gpos-private.h     |  64 +++++----------------------
- src/hb-ot-layout-gsub-private.h     |  83
- ++++++-----------------------------
- src/hb-ot-layout-gsubgpos-private.h |  52 ++++++++++++++++++++++
+ src/hb-ot-layout-gpos-private.h     | 64 +++++-----------------------
+ src/hb-ot-layout-gsub-private.h     | 83
+ +++++++------------------------------
+ src/hb-ot-layout-gsubgpos-private.h | 52 +++++++++++++++++++++++
  3 files changed, 77 insertions(+), 122 deletions(-)
 
 commit 498f1909e0f7a32484b2058622c4a018cbfc1334
  3 files changed, 77 insertions(+), 122 deletions(-)
 
 commit 498f1909e0f7a32484b2058622c4a018cbfc1334
@@ -28760,8 +40313,8 @@ Date:   Thu May 21 15:51:04 2009 -0400
 
     The "bug" was in the font.
 
 
     The "bug" was in the font.
 
- src/hb-ot-layout-gpos-private.h |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit c7d457aa3ae7138630f52ca7263f663a3ea284c0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c7d457aa3ae7138630f52ca7263f663a3ea284c0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28769,9 +40322,9 @@ Date:   Thu May 21 12:46:29 2009 -0400
 
     [HB] Ouch. Add files.
 
 
     [HB] Ouch. Add files.
 
- src/hb-common.h  |   13 ++++-----
- src/hb-private.h |   74
- ++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-common.h  | 13 +++++-----
+ src/hb-private.h | 74
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
  2 files changed, 78 insertions(+), 9 deletions(-)
 
 commit fe550f4dd815285e9de8c3cbff810b0a1c7b377f
  2 files changed, 78 insertions(+), 9 deletions(-)
 
 commit fe550f4dd815285e9de8c3cbff810b0a1c7b377f
@@ -28782,9 +40335,9 @@ Date:   Thu May 21 08:27:07 2009 -0400
 
     Still not quite working.
 
 
     Still not quite working.
 
- src/TODO                       |    4 +-
- src/hb-ot-layout-gpos-private.h |  105
- ++++++++++++++++++++++++++++-----------
+ src/TODO                       |   4 +-
+ src/hb-ot-layout-gpos-private.h | 105
+ +++++++++++++++++++++++++++++-----------
  2 files changed, 79 insertions(+), 30 deletions(-)
 
 commit 357ccde36bba01a405d59b7da061fc5048cdc7b4
  2 files changed, 79 insertions(+), 30 deletions(-)
 
 commit 357ccde36bba01a405d59b7da061fc5048cdc7b4
@@ -28793,9 +40346,9 @@ Date:   Thu May 21 06:32:01 2009 -0400
 
     [GPOS] MarkBasePosFormat1
 
 
     [GPOS] MarkBasePosFormat1
 
- src/TODO                       |    1 +
- src/hb-ot-layout-gpos-private.h |   62
- +++++++++++++++++++++++++++++++++++---
+ src/TODO                       |  1 +
+ src/hb-ot-layout-gpos-private.h | 62
+ +++++++++++++++++++++++++++++++++++++----
  2 files changed, 58 insertions(+), 5 deletions(-)
 
 commit 377bfc5860ae018f54e4a2dd737b4b000383ab54
  2 files changed, 58 insertions(+), 5 deletions(-)
 
 commit 377bfc5860ae018f54e4a2dd737b4b000383ab54
@@ -28804,8 +40357,8 @@ Date:   Thu May 21 04:58:24 2009 -0400
 
     [GPOS] Implement MarkArray interface
 
 
     [GPOS] Implement MarkArray interface
 
- src/hb-ot-layout-gpos-private.h |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit c18ec2b1d7b8c7abe6ebf4b53c9ec75d5c9bb255
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c18ec2b1d7b8c7abe6ebf4b53c9ec75d5c9bb255
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28813,8 +40366,8 @@ Date:   Thu May 21 04:54:01 2009 -0400
 
     [GPOS] Implement Device support in AnchorFormat3
 
 
     [GPOS] Implement Device support in AnchorFormat3
 
- src/hb-ot-layout-gpos-private.h |   11 ++++++++---
- 1 files changed, 8 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
 
 commit fca6a0d158b847181dcf67a13f34499177df899b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fca6a0d158b847181dcf67a13f34499177df899b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28822,9 +40375,9 @@ Date:   Thu May 21 04:49:04 2009 -0400
 
     [GPOS] Remove apply_value() return value
 
 
     [GPOS] Remove apply_value() return value
 
- src/hb-ot-layout-gpos-private.h |   75
- +++++++++++++++++---------------------
- 1 files changed, 34 insertions(+), 41 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 75
+ +++++++++++++++++++----------------------
+ 1 file changed, 34 insertions(+), 41 deletions(-)
 
 commit fb3b5ccfefc4c38c9184d432703e81f73e1f5bc7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fb3b5ccfefc4c38c9184d432703e81f73e1f5bc7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28832,8 +40385,8 @@ Date:   Thu May 21 04:47:05 2009 -0400
 
     [GPOS] Start MarkBasePosFormat1
 
 
     [GPOS] Start MarkBasePosFormat1
 
- src/TODO                       |    1 +
- src/hb-ot-layout-gpos-private.h |   38
+ src/TODO                       |  1 +
+ src/hb-ot-layout-gpos-private.h | 38
  +++++++++++++++++---------------------
  2 files changed, 18 insertions(+), 21 deletions(-)
 
  +++++++++++++++++---------------------
  2 files changed, 18 insertions(+), 21 deletions(-)
 
@@ -28843,9 +40396,9 @@ Date:   Wed May 20 15:46:12 2009 -0400
 
     [HB] Add TODO item
 
 
     [HB] Add TODO item
 
- src/hb-ot-layout-gpos-private.h |    1 +
- src/hb-ot-layout-gsub-private.h |    1 +
- 2 files changed, 2 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 1 +
+ src/hb-ot-layout-gsub-private.h | 1 +
+ 2 files changed, 2 insertions(+)
 
 commit c6456ca5cfc35095378dcf29f8edc33ece9c3ea1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c6456ca5cfc35095378dcf29f8edc33ece9c3ea1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28853,8 +40406,8 @@ Date:   Wed May 20 06:15:23 2009 -0400
 
     [HB] Add TODO item
 
 
     [HB] Add TODO item
 
- src/TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 3015c4175179a1816aad2a4950da9a3b8baf2578
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 3015c4175179a1816aad2a4950da9a3b8baf2578
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28862,12 +40415,12 @@ Date: Wed May 20 06:01:16 2009 -0400
 
     [HB] Remove last dependence on the old code base!
 
 
     [HB] Remove last dependence on the old code base!
 
- src/hb-buffer-private.h        |   88
- +++++++++++++++++++-------------------
- src/hb-buffer.c                |   47 ++++++++++-----------
- src/hb-ot-layout-gpos-private.h |   11 ++---
- src/hb-ot-layout-gsub-private.h |   12 +++---
- src/hb-ot-layout.cc            |   16 ++++----
+ src/hb-buffer-private.h        | 88
+ ++++++++++++++++++++---------------------
+ src/hb-buffer.c                | 47 +++++++++++-----------
+ src/hb-ot-layout-gpos-private.h | 11 ++----
+ src/hb-ot-layout-gsub-private.h | 12 +++---
+ src/hb-ot-layout.cc            | 16 ++++----
  5 files changed, 85 insertions(+), 89 deletions(-)
 
 commit 5c0adce1ccc739415c4b26ff13ffd2d77ea4bc6c
  5 files changed, 85 insertions(+), 89 deletions(-)
 
 commit 5c0adce1ccc739415c4b26ff13ffd2d77ea4bc6c
@@ -28876,19 +40429,19 @@ Date: Wed May 20 05:42:12 2009 -0400
 
     [HB] Rename harfbuzz-buffer to hb-buffer
 
 
     [HB] Rename harfbuzz-buffer to hb-buffer
 
- src/Makefile.am                    |    5 +-
- src/harfbuzz-buffer-private.h      |  106 -----------
- src/harfbuzz-buffer.c              |  349
- -----------------------------------
- src/harfbuzz-buffer.h              |   94 ----------
- src/hb-buffer-private.h            |  106 +++++++++++
- src/hb-buffer.c                    |  347
- ++++++++++++++++++++++++++++++++++
- src/hb-buffer.h                    |   94 ++++++++++
- src/hb-ot-layout-gsubgpos-private.h |   2 +-
- src/hb-ot-layout-private.h         |    2 +-
- src/hb-ot-layout.cc                |    5 +-
- src/hb-ot-layout.h                 |    2 +-
+ src/Makefile.am                    |   5 +-
+ src/harfbuzz-buffer-private.h      | 106 -----------
+ src/harfbuzz-buffer.c              | 349
+ ------------------------------------
+ src/harfbuzz-buffer.h              |  94 ----------
+ src/hb-buffer-private.h            | 106 +++++++++++
+ src/hb-buffer.c                    | 347
+ +++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h                    |  94 ++++++++++
+ src/hb-ot-layout-gsubgpos-private.h |  2 +-
+ src/hb-ot-layout-private.h         |   2 +-
+ src/hb-ot-layout.cc                |   5 +-
+ src/hb-ot-layout.h                 |   2 +-
  11 files changed, 556 insertions(+), 556 deletions(-)
 
 commit b857b49c82782d29d6d189f1a9f4a84d39cd84ea
  11 files changed, 556 insertions(+), 556 deletions(-)
 
 commit b857b49c82782d29d6d189f1a9f4a84d39cd84ea
@@ -28897,13 +40450,13 @@ Date: Wed May 20 05:35:14 2009 -0400
 
     [HB] Remove all references to the old code!
 
 
     [HB] Remove all references to the old code!
 
- src/Makefile.am           |   76 +++++++---------------
- src/harfbuzz-buffer.c     |  154
- ++++++++++++++++++--------------------------
- src/harfbuzz-buffer.h     |   80 +++++++++++-----------
- src/hb-ot-layout-private.h |   6 +-
- src/hb-ot-layout.cc       |   17 ++---
- src/hb-ot-layout.h        |    1 +
+ src/Makefile.am           |  76 +++++++---------------
+ src/harfbuzz-buffer.c     | 154
+ +++++++++++++++++++--------------------------
+ src/harfbuzz-buffer.h     |  80 +++++++++++------------
+ src/hb-ot-layout-private.h |  6 +-
+ src/hb-ot-layout.cc       |  17 ++---
+ src/hb-ot-layout.h        |   1 +
  6 files changed, 137 insertions(+), 197 deletions(-)
 
 commit e1593a6e620ee6a8184487185d1c95e0d1820ba5
  6 files changed, 137 insertions(+), 197 deletions(-)
 
 commit e1593a6e620ee6a8184487185d1c95e0d1820ba5
@@ -28914,9 +40467,9 @@ Date:   Wed May 20 04:51:30 2009 -0400
 
     Wow, IranNastaliq renders perfectly again!
 
 
     Wow, IranNastaliq renders perfectly again!
 
- src/hb-ot-layout.cc |  24 ++++++++++++++++++++++++
- src/hb-ot-layout.h  |  12 ++++++++++++
- 2 files changed, 36 insertions(+), 0 deletions(-)
+ src/hb-ot-layout.cc | 24 ++++++++++++++++++++++++
+ src/hb-ot-layout.h  | 12 ++++++++++++
+ 2 files changed, 36 insertions(+)
 
 commit 0f7e6b2cead0c7d527ef68ededb27e0afd71d819
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0f7e6b2cead0c7d527ef68ededb27e0afd71d819
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28924,11 +40477,11 @@ Date: Wed May 20 04:16:35 2009 -0400
 
     [GPOS] Fix more brokenness
 
 
     [GPOS] Fix more brokenness
 
- src/Makefile.am                |    2 +-
- src/hb-ot-layout-gpos-private.h |   37
+ src/Makefile.am                |  2 +-
+ src/hb-ot-layout-gpos-private.h | 37
  ++++++++++++++++++++-----------------
  ++++++++++++++++++++-----------------
- src/hb-ot-layout.cc            |    7 +++++++
- src/hb-ot-layout.h             |    5 +++++
+ src/hb-ot-layout.cc            |  7 +++++++
+ src/hb-ot-layout.h             |  5 +++++
  4 files changed, 33 insertions(+), 18 deletions(-)
 
 commit ff05d257dd43221b7c8ebead188e78495daa8eda
  4 files changed, 33 insertions(+), 18 deletions(-)
 
 commit ff05d257dd43221b7c8ebead188e78495daa8eda
@@ -28937,9 +40490,9 @@ Date:   Wed May 20 03:53:00 2009 -0400
 
     [HB] Move lookup types enum into subtable class
 
 
     [HB] Move lookup types enum into subtable class
 
- src/hb-ot-layout-gpos-private.h |   66
- +++++++++++++++++++-------------------
- src/hb-ot-layout-gsub-private.h |   44 +++++++++++++-------------
+ src/hb-ot-layout-gpos-private.h | 66
+ ++++++++++++++++++++---------------------
+ src/hb-ot-layout-gsub-private.h | 44 +++++++++++++--------------
  2 files changed, 55 insertions(+), 55 deletions(-)
 
 commit 263bbef7670b59aa88ef9ba910579dfa51226524
  2 files changed, 55 insertions(+), 55 deletions(-)
 
 commit 263bbef7670b59aa88ef9ba910579dfa51226524
@@ -28948,8 +40501,8 @@ Date:   Wed May 20 00:00:09 2009 -0400
 
     [GDEF] Simplify Device access
 
 
     [GDEF] Simplify Device access
 
- src/hb-ot-layout-gdef-private.h |   12 +++---------
- 1 files changed, 3 insertions(+), 9 deletions(-)
+ src/hb-ot-layout-gdef-private.h | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
 
 commit 60d77cf05fddc5304b4b1fc19cdedba15cbee1e9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 60d77cf05fddc5304b4b1fc19cdedba15cbee1e9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28957,14 +40510,13 @@ Date: Tue May 19 23:58:54 2009 -0400
 
     [HB] Indentation
 
 
     [HB] Indentation
 
- src/hb-ot-layout-common-private.h   | 170
- +++++++++++++++++------------------
- src/hb-ot-layout-gdef-private.h     |  65 +++++++------
- src/hb-ot-layout-gsubgpos-private.h | 150
- +++++++++++++++++--------------
- src/hb-ot-layout-open-private.h     | 159
- +++++++++++++++++----------------
- src/hb-ot-layout-private.h         |    9 ++-
+ src/hb-ot-layout-common-private.h   | 170
+ +++++++++++++++++-------------------
+ src/hb-ot-layout-gdef-private.h     | 65 +++++++-------
+ src/hb-ot-layout-gsubgpos-private.h | 150 +++++++++++++++++--------------
+ src/hb-ot-layout-open-private.h     | 159
+ ++++++++++++++++-----------------
+ src/hb-ot-layout-private.h         |   9 +-
  5 files changed, 288 insertions(+), 265 deletions(-)
 
 commit 90de3dfff9e82dae20b7517642511aebaf736b74
  5 files changed, 288 insertions(+), 265 deletions(-)
 
 commit 90de3dfff9e82dae20b7517642511aebaf736b74
@@ -28973,8 +40525,8 @@ Date:   Tue May 19 23:43:04 2009 -0400
 
     [HB] Remove unused methods
 
 
     [HB] Remove unused methods
 
- src/hb-ot-layout-common-private.h |   6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-common-private.h | 6 ------
+ 1 file changed, 6 deletions(-)
 
 commit 4c44d830d79431fcb143df2b5a29cdc8e8fccef3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c44d830d79431fcb143df2b5a29cdc8e8fccef3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28982,10 +40534,10 @@ Date: Tue May 19 23:42:30 2009 -0400
 
     [HB] Indentation
 
 
     [HB] Indentation
 
- src/hb-ot-layout-gpos-private.h |  253
+ src/hb-ot-layout-gpos-private.h | 253
  +++++++++++++++++++++-----------------
  +++++++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.h |  262
- +++++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.h | 262
+ ++++++++++++++++++++++------------------
  2 files changed, 284 insertions(+), 231 deletions(-)
 
 commit d18fd8e3f7185f531fa4c4988d3f5d5c5282b8eb
  2 files changed, 284 insertions(+), 231 deletions(-)
 
 commit d18fd8e3f7185f531fa4c4988d3f5d5c5282b8eb
@@ -28994,9 +40546,9 @@ Date:   Tue May 19 23:25:41 2009 -0400
 
     [GPOS] CursivePosFormat1
 
 
     [GPOS] CursivePosFormat1
 
- src/hb-ot-layout-gpos-private.h |  174
- +++++++++++++++++++++++++++++++++++++--
- src/hb-ot-layout-private.h     |    2 +-
+ src/hb-ot-layout-gpos-private.h | 174
+ ++++++++++++++++++++++++++++++++++++++--
+ src/hb-ot-layout-private.h     |   2 +-
  2 files changed, 169 insertions(+), 7 deletions(-)
 
 commit 70632add333e4ab38f8f485bb87b25116128cf92
  2 files changed, 169 insertions(+), 7 deletions(-)
 
 commit 70632add333e4ab38f8f485bb87b25116128cf92
@@ -29005,9 +40557,9 @@ Date:   Tue May 19 22:30:09 2009 -0400
 
     [GSUB] PairPosFormat2
 
 
     [GSUB] PairPosFormat2
 
- src/hb-ot-layout-gpos-private.h |   43
- ++++++++++++++++++++++++++++++++++----
- 1 files changed, 38 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 43
+ ++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 38 insertions(+), 5 deletions(-)
 
 commit b24ecbadf44d56fd3286d1d3ff6928151ccec9bd
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b24ecbadf44d56fd3286d1d3ff6928151ccec9bd
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29015,9 +40567,9 @@ Date:   Tue May 19 22:16:04 2009 -0400
 
     [GPOS] PairPosFormat1
 
 
     [GPOS] PairPosFormat1
 
- src/hb-ot-layout-gpos-private.h |   91
- +++++++++++++++++++++++++++++++--------
- 1 files changed, 73 insertions(+), 18 deletions(-)
+ src/hb-ot-layout-gpos-private.h | 91
+ +++++++++++++++++++++++++++++++++--------
+ 1 file changed, 73 insertions(+), 18 deletions(-)
 
 commit 056c7ec1aea1eca60a3b20b583b8a8072be9d758
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 056c7ec1aea1eca60a3b20b583b8a8072be9d758
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29025,11 +40577,11 @@ Date: Mon May 18 19:47:52 2009 -0400
 
     [GPOS] Start filling apply() functions in
 
 
     [GPOS] Start filling apply() functions in
 
- src/harfbuzz-buffer-private.h    |    1 +
- src/harfbuzz-buffer.c            |    3 -
- src/hb-ot-layout-common-private.h |   35 ++++++----
- src/hb-ot-layout-gpos-private.h   |  127
- +++++++++++++++++++++++++++----------
+ src/harfbuzz-buffer-private.h    |   1 +
+ src/harfbuzz-buffer.c            |   3 -
+ src/hb-ot-layout-common-private.h |  35 ++++++-----
+ src/hb-ot-layout-gpos-private.h   | 127
+ ++++++++++++++++++++++++++++----------
  4 files changed, 116 insertions(+), 50 deletions(-)
 
 commit 4fa77d3c4305a76b956de8c1a9b83a961d035a80
  4 files changed, 116 insertions(+), 50 deletions(-)
 
 commit 4fa77d3c4305a76b956de8c1a9b83a961d035a80
@@ -29038,8 +40590,8 @@ Date:   Mon May 18 18:44:54 2009 -0400
 
     [HB] Use enums
 
 
     [HB] Use enums
 
- src/hb-ot-layout-common-private.h |   14 ++++++++------
- src/hb-ot-layout-gdef-private.h   |   22 +++++++++++++---------
+ src/hb-ot-layout-common-private.h | 14 ++++++++------
+ src/hb-ot-layout-gdef-private.h   | 22 +++++++++++++---------
  2 files changed, 21 insertions(+), 15 deletions(-)
 
 commit 6b54c5d0446b514fbb6521e7e9e614d153435f0e
  2 files changed, 21 insertions(+), 15 deletions(-)
 
 commit 6b54c5d0446b514fbb6521e7e9e614d153435f0e
@@ -29048,9 +40600,9 @@ Date:   Mon May 18 18:30:25 2009 -0400
 
     [HB] More reference cast simplification
 
 
     [HB] More reference cast simplification
 
- src/hb-ot-layout-gsub-private.h     |   8 ++++----
- src/hb-ot-layout-gsubgpos-private.h |  28 ++++++++++++++--------------
- src/hb-ot-layout-open-private.h     |   2 +-
+ src/hb-ot-layout-gsub-private.h     | 8 ++++----
+ src/hb-ot-layout-gsubgpos-private.h | 28 ++++++++++++++--------------
+ src/hb-ot-layout-open-private.h     | 2 +-
  3 files changed, 19 insertions(+), 19 deletions(-)
 
 commit eb0dfc830e09405492f494c85380e133ac5d0ea3
  3 files changed, 19 insertions(+), 19 deletions(-)
 
 commit eb0dfc830e09405492f494c85380e133ac5d0ea3
@@ -29059,12 +40611,12 @@ Date: Mon May 18 18:22:44 2009 -0400
 
     [HB] Rename LOOKUP_ARGS to APPLY_ARGS
 
 
     [HB] Rename LOOKUP_ARGS to APPLY_ARGS
 
- src/hb-ot-layout-gpos-private.h     |  88
- +++++++++++++++++-----------------
- src/hb-ot-layout-gsub-private.h     |  84
- ++++++++++++++++----------------
- src/hb-ot-layout-gsubgpos-private.h |  90
+ src/hb-ot-layout-gpos-private.h     | 88
+ ++++++++++++++++++------------------
+ src/hb-ot-layout-gsub-private.h     | 84
  +++++++++++++++++-----------------
  +++++++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos-private.h | 90
+ ++++++++++++++++++-------------------
  3 files changed, 131 insertions(+), 131 deletions(-)
 
 commit 2a8e6accdf798a78ff180dcb593140592d62b872
  3 files changed, 131 insertions(+), 131 deletions(-)
 
 commit 2a8e6accdf798a78ff180dcb593140592d62b872
@@ -29073,10 +40625,10 @@ Date: Mon May 18 18:21:44 2009 -0400
 
     [HB] Internally rename position() and substitute() to apply()
 
 
     [HB] Internally rename position() and substitute() to apply()
 
- src/hb-ot-layout-gpos-private.h |  110
- +++++++++++++++++++-------------------
- src/hb-ot-layout-gsub-private.h |  104
- ++++++++++++++++++------------------
+ src/hb-ot-layout-gpos-private.h | 110
+ ++++++++++++++++++++--------------------
+ src/hb-ot-layout-gsub-private.h | 104
+ ++++++++++++++++++-------------------
  2 files changed, 107 insertions(+), 107 deletions(-)
 
 commit f6c8a6eacf27fd1c509d07c85985f0367c5e475f
  2 files changed, 107 insertions(+), 107 deletions(-)
 
 commit f6c8a6eacf27fd1c509d07c85985f0367c5e475f
@@ -29085,10 +40637,10 @@ Date: Mon May 18 18:01:19 2009 -0400
 
     [HB] Simplify casts
 
 
     [HB] Simplify casts
 
- src/hb-ot-layout-gdef-private.h |    2 +-
- src/hb-ot-layout-gpos-private.h |    6 +++---
- src/hb-ot-layout-gsub-private.h |    6 +++---
- src/hb-ot-layout-open-private.h |   10 +++++-----
+ src/hb-ot-layout-gdef-private.h |  2 +-
+ src/hb-ot-layout-gpos-private.h |  6 +++---
+ src/hb-ot-layout-gsub-private.h |  6 +++---
+ src/hb-ot-layout-open-private.h | 10 +++++-----
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 9c42f05a5ccbb48a9367b80ecdf3679e88088fcf
  4 files changed, 12 insertions(+), 12 deletions(-)
 
 commit 9c42f05a5ccbb48a9367b80ecdf3679e88088fcf
@@ -29097,9 +40649,9 @@ Date:   Mon May 18 17:43:49 2009 -0400
 
     Switch Pango to new, defunt, GPOS
 
 
     Switch Pango to new, defunt, GPOS
 
- src/hb-ot-layout-gpos-private.h |   22 +++++++++++++++-------
- src/hb-ot-layout.cc            |   13 +++++++++++++
- src/hb-ot-layout.h             |    5 +++++
+ src/hb-ot-layout-gpos-private.h | 22 +++++++++++++++-------
+ src/hb-ot-layout.cc            | 13 +++++++++++++
+ src/hb-ot-layout.h             |  5 +++++
  3 files changed, 33 insertions(+), 7 deletions(-)
 
 commit 5e5eb0573f7ea2ce2cf037fef0df70a4351e82c0
  3 files changed, 33 insertions(+), 7 deletions(-)
 
 commit 5e5eb0573f7ea2ce2cf037fef0df70a4351e82c0
@@ -29108,12 +40660,12 @@ Date: Mon May 18 17:09:33 2009 -0400
 
     [HB] Start GPOS!
 
 
     [HB] Start GPOS!
 
- src/hb-ot-layout-gpos-private.h |  915
- +++++++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gsub-private.h |    2 -
- src/hb-ot-layout-private.h     |   15 +-
- src/hb-ot-layout.cc            |    5 +-
- src/hb-ot-layout.h             |    8 +-
+ src/hb-ot-layout-gpos-private.h | 915
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsub-private.h |   2 -
+ src/hb-ot-layout-private.h     |  15 +-
+ src/hb-ot-layout.cc            |   5 +-
+ src/hb-ot-layout.h             |   8 +-
  5 files changed, 936 insertions(+), 9 deletions(-)
 
 commit 64e67f7599deeec98b104f8b70d0d321cf96799d
  5 files changed, 936 insertions(+), 9 deletions(-)
 
 commit 64e67f7599deeec98b104f8b70d0d321cf96799d
@@ -29122,8 +40674,8 @@ Date:   Mon May 18 15:32:40 2009 -0400
 
     [GSUB] Minor
 
 
     [GSUB] Minor
 
- src/hb-ot-layout-gsub-private.h |   16 ++++++----------
- 1 files changed, 6 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
 
 commit d79cae0b4eef8c2694ada791bb8e427c1202875e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d79cae0b4eef8c2694ada791bb8e427c1202875e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29131,8 +40683,8 @@ Date:   Mon May 18 13:50:15 2009 -0400
 
     [HB] Minor
 
 
     [HB] Minor
 
- src/hb-ot-layout-gsub-private.h |   22 +++++++++++-----------
- 1 files changed, 11 insertions(+), 11 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
 
 commit 8533bb985e6af2b656d7c45620d8f11f36330b85
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8533bb985e6af2b656d7c45620d8f11f36330b85
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29140,8 +40692,8 @@ Date:   Mon May 18 06:00:12 2009 -0400
 
     [GSUB] Protect against mismatching Extension subtable types
 
 
     [GSUB] Protect against mismatching Extension subtable types
 
- src/hb-ot-layout-gsub-private.h |    9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
 
 commit 969afd706e9b52adc79f6210c0088b2c6bbae9bc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 969afd706e9b52adc79f6210c0088b2c6bbae9bc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29151,9 +40703,9 @@ Date:   Mon May 18 05:47:47 2009 -0400
 
     GSUB is done!
 
 
     GSUB is done!
 
- src/hb-ot-layout-gsub-private.h     |  55
- ++++++++++++++++++++++++++---------
- src/hb-ot-layout-gsubgpos-private.h |  43 ++++++++-------------------
+ src/hb-ot-layout-gsub-private.h     | 55
+ +++++++++++++++++++++++++++----------
+ src/hb-ot-layout-gsubgpos-private.h | 43 +++++++++--------------------
  2 files changed, 54 insertions(+), 44 deletions(-)
 
 commit 4acaffd786a11b5bd7d41b39fc65625fd8cd5077
  2 files changed, 54 insertions(+), 44 deletions(-)
 
 commit 4acaffd786a11b5bd7d41b39fc65625fd8cd5077
@@ -29162,10 +40714,10 @@ Date: Mon May 18 05:29:29 2009 -0400
 
     [HB] Don't use G_LIKELY!
 
 
     [HB] Don't use G_LIKELY!
 
- src/hb-ot-layout-gsub-private.h     |  12 ++++++------
- src/hb-ot-layout-gsubgpos-private.h |  12 ++++++------
- src/hb-ot-layout-open-private.h     |   4 ++--
- src/hb-ot-layout.cc                |    6 +++---
+ src/hb-ot-layout-gsub-private.h     | 12 ++++++------
+ src/hb-ot-layout-gsubgpos-private.h | 12 ++++++------
+ src/hb-ot-layout-open-private.h     | 4 ++--
+ src/hb-ot-layout.cc                |  6 +++---
  4 files changed, 17 insertions(+), 17 deletions(-)
 
 commit 3dcb12f171ebbf44461e6ce6439d286c9520dd88
  4 files changed, 17 insertions(+), 17 deletions(-)
 
 commit 3dcb12f171ebbf44461e6ce6439d286c9520dd88
@@ -29174,8 +40726,8 @@ Date:   Mon May 18 05:22:32 2009 -0400
 
     [GSUB] Oops, fix Extension check
 
 
     [GSUB] Oops, fix Extension check
 
- src/hb-ot-layout-gsub-private.h |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 commit 2e8fb6c38dbc01cb77b384c0ae0212514dfbb588
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2e8fb6c38dbc01cb77b384c0ae0212514dfbb588
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29183,9 +40735,9 @@ Date:   Mon May 18 04:37:37 2009 -0400
 
     [HB] Tweak some constants and fix Coverage
 
 
     [HB] Tweak some constants and fix Coverage
 
- src/hb-ot-layout-common-private.h   |  11 ++++++-----
- src/hb-ot-layout-gsubgpos-private.h |   2 ++
- src/hb-ot-layout-open-private.h     |   6 +++---
+ src/hb-ot-layout-common-private.h   | 11 ++++++-----
+ src/hb-ot-layout-gsubgpos-private.h | 2 ++
+ src/hb-ot-layout-open-private.h     | 6 +++---
  3 files changed, 11 insertions(+), 8 deletions(-)
 
 commit d6aae5f5cad54fc5dac8b0ff10a3921ebda533d4
  3 files changed, 11 insertions(+), 8 deletions(-)
 
 commit d6aae5f5cad54fc5dac8b0ff10a3921ebda533d4
@@ -29194,9 +40746,9 @@ Date:   Mon May 18 04:25:22 2009 -0400
 
     [HB] Cleanup TODOs
 
 
     [HB] Cleanup TODOs
 
- src/hb-ot-layout-gsub-private.h |   12 ++++++------
- src/hb-ot-layout-open-private.h |    2 +-
- src/hb-ot-layout.cc            |    4 ++--
+ src/hb-ot-layout-gsub-private.h | 12 ++++++------
+ src/hb-ot-layout-open-private.h |  2 +-
+ src/hb-ot-layout.cc            |  4 ++--
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 122f21fb9a3a0b914575929a3be11884f1ae00c0
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 commit 122f21fb9a3a0b914575929a3be11884f1ae00c0
@@ -29205,8 +40757,8 @@ Date:   Mon May 18 04:21:53 2009 -0400
 
     [GSUB] Fix context_length handling in Ligature too
 
 
     [GSUB] Fix context_length handling in Ligature too
 
- src/hb-ot-layout-gsub-private.h     |   9 ++++-----
- src/hb-ot-layout-gsubgpos-private.h |   5 +++--
+ src/hb-ot-layout-gsub-private.h     | 9 ++++-----
+ src/hb-ot-layout-gsubgpos-private.h | 5 +++--
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 47958dea214fd55725bf04aa13d233870255fb03
  2 files changed, 7 insertions(+), 7 deletions(-)
 
 commit 47958dea214fd55725bf04aa13d233870255fb03
@@ -29215,8 +40767,8 @@ Date:   Mon May 18 04:17:47 2009 -0400
 
     [HB] Minor cleanup
 
 
     [HB] Minor cleanup
 
- src/hb-ot-layout-gsubgpos-private.h |  10 ++++------
- 1 files changed, 4 insertions(+), 6 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
 
 commit e73a0c2a903112ce9a35b95e14e10ab8ea2dc337
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e73a0c2a903112ce9a35b95e14e10ab8ea2dc337
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29224,8 +40776,8 @@ Date:   Mon May 18 04:15:25 2009 -0400
 
     [HB] Correctly skip glyphs when applying (Chain)Context lookups
 
 
     [HB] Correctly skip glyphs when applying (Chain)Context lookups
 
- src/hb-ot-layout-gsubgpos-private.h |  14 +++++++++++---
- 1 files changed, 11 insertions(+), 3 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
 
 commit 7cff75babd64cd49dd2b3faaa15193d12c098f42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7cff75babd64cd49dd2b3faaa15193d12c098f42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29233,8 +40785,8 @@ Date:   Mon May 18 04:09:05 2009 -0400
 
     [HB] Fix context_length checking
 
 
     [HB] Fix context_length checking
 
- src/hb-ot-layout-gsubgpos-private.h |  23 +++++++++++++----------
- src/hb-ot-layout-open-private.h     |   2 +-
+ src/hb-ot-layout-gsubgpos-private.h | 23 +++++++++++++----------
+ src/hb-ot-layout-open-private.h     | 2 +-
  2 files changed, 14 insertions(+), 11 deletions(-)
 
 commit d0ba0557007798db2c60ddd0b7a5a0624cd1698d
  2 files changed, 14 insertions(+), 11 deletions(-)
 
 commit d0ba0557007798db2c60ddd0b7a5a0624cd1698d
@@ -29245,9 +40797,9 @@ Date:   Mon May 18 03:56:39 2009 -0400
 
     IranNastaliq renders perfectly again!
 
 
     IranNastaliq renders perfectly again!
 
- src/hb-ot-layout-gsubgpos-private.h |  63
- +++++++++++++++++++++++++---------
- 1 files changed, 46 insertions(+), 17 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 63
+ +++++++++++++++++++++++++++----------
+ 1 file changed, 46 insertions(+), 17 deletions(-)
 
 commit e072c24e79f0e7c1e078a87c782ab5dd8f21dcda
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e072c24e79f0e7c1e078a87c782ab5dd8f21dcda
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29255,9 +40807,9 @@ Date:   Mon May 18 03:47:31 2009 -0400
 
     [HB] Implement backtrack matching
 
 
     [HB] Implement backtrack matching
 
- src/hb-ot-layout-gsubgpos-private.h |  61
- +++++++++++++++++++++++++---------
- 1 files changed, 45 insertions(+), 16 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 61
+ +++++++++++++++++++++++++++----------
+ 1 file changed, 45 insertions(+), 16 deletions(-)
 
 commit 02e1e5c63fa4f896053fa3c21e495239e1e9caa2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 02e1e5c63fa4f896053fa3c21e495239e1e9caa2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29265,9 +40817,9 @@ Date:   Mon May 18 02:47:57 2009 -0400
 
     [HB] One more step to go, for fully working GSUB and ChainContext
 
 
     [HB] One more step to go, for fully working GSUB and ChainContext
 
- src/hb-ot-layout-gsubgpos-private.h | 107
- ++++++++++++++++++++---------------
- 1 files changed, 61 insertions(+), 46 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 107
+ ++++++++++++++++++++----------------
+ 1 file changed, 61 insertions(+), 46 deletions(-)
 
 commit f14c2b7acfba75b8a6880f41ceec758f9a56abce
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f14c2b7acfba75b8a6880f41ceec758f9a56abce
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29275,9 +40827,9 @@ Date:   Mon May 18 02:36:18 2009 -0400
 
     [HB] Further modularize Context matching
 
 
     [HB] Further modularize Context matching
 
- src/hb-ot-layout-gsubgpos-private.h |  92
- ++++++++++++++++++++++++-----------
- 1 files changed, 63 insertions(+), 29 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 92
+ +++++++++++++++++++++++++------------
+ 1 file changed, 63 insertions(+), 29 deletions(-)
 
 commit 13ed4405c558e445b052360f1ed8ee27ecf48e6e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13ed4405c558e445b052360f1ed8ee27ecf48e6e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29285,9 +40837,9 @@ Date:   Mon May 18 02:14:37 2009 -0400
 
     [HB] A step closer to working ChainContext
 
 
     [HB] A step closer to working ChainContext
 
- src/hb-ot-layout-gsubgpos-private.h |  36
- +++++++++++++++++++++++++---------
- 1 files changed, 26 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 36
+ ++++++++++++++++++++++++++----------
+ 1 file changed, 26 insertions(+), 10 deletions(-)
 
 commit e8cbaaf6d538036ff9b880b018db402e0895ed01
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit e8cbaaf6d538036ff9b880b018db402e0895ed01
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29295,9 +40847,9 @@ Date:   Mon May 18 02:03:58 2009 -0400
 
     [HB] Add HeadlessArrayTo<>
 
 
     [HB] Add HeadlessArrayTo<>
 
- src/hb-ot-layout-gsub-private.h     |  10 ++++------
- src/hb-ot-layout-gsubgpos-private.h |   5 ++---
- src/hb-ot-layout-open-private.h     |  19 +++++++++++++++++++
+ src/hb-ot-layout-gsub-private.h     | 10 ++++------
+ src/hb-ot-layout-gsubgpos-private.h | 5 ++---
+ src/hb-ot-layout-open-private.h     | 19 +++++++++++++++++++
  3 files changed, 25 insertions(+), 9 deletions(-)
 
 commit dcb6b60254951a2831c03f3196962d229f7e556c
  3 files changed, 25 insertions(+), 9 deletions(-)
 
 commit dcb6b60254951a2831c03f3196962d229f7e556c
@@ -29306,9 +40858,9 @@ Date:   Mon May 18 01:49:57 2009 -0400
 
     [HB] More template goodness
 
 
     [HB] More template goodness
 
- src/hb-ot-layout-gsubgpos-private.h |  37
- ++++++++++++++--------------------
- 1 files changed, 15 insertions(+), 22 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 37
+ +++++++++++++++----------------------
+ 1 file changed, 15 insertions(+), 22 deletions(-)
 
 commit aa3d7adca5c821c91a2a1b5380fd6b3d19656ab1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit aa3d7adca5c821c91a2a1b5380fd6b3d19656ab1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29316,10 +40868,10 @@ Date: Sun May 17 23:17:56 2009 -0400
 
     [HB] More churning towards ChainContext lookups
 
 
     [HB] More churning towards ChainContext lookups
 
- src/hb-ot-layout-common-private.h   |   6 +-
- src/hb-ot-layout-gsub-private.h     |  15 +++-
- src/hb-ot-layout-gsubgpos-private.h | 174
- +++++++++++++++++++++-------------
+ src/hb-ot-layout-common-private.h   |  6 +-
+ src/hb-ot-layout-gsub-private.h     | 15 +++-
+ src/hb-ot-layout-gsubgpos-private.h | 174
+ ++++++++++++++++++++++--------------
  3 files changed, 125 insertions(+), 70 deletions(-)
 
 commit 48f16ed96ac7041b511d9e0864623d2aa09c6da3
  3 files changed, 125 insertions(+), 70 deletions(-)
 
 commit 48f16ed96ac7041b511d9e0864623d2aa09c6da3
@@ -29328,9 +40880,9 @@ Date:   Sun May 17 22:11:30 2009 -0400
 
     [HB] Towards sharing Context and ChainContext code
 
 
     [HB] Towards sharing Context and ChainContext code
 
- src/hb-ot-layout-gsubgpos-private.h | 220
- ++++++++++++++++-------------------
- 1 files changed, 99 insertions(+), 121 deletions(-)
+ src/hb-ot-layout-gsubgpos-private.h | 220
+ ++++++++++++++++--------------------
+ 1 file changed, 99 insertions(+), 121 deletions(-)
 
 commit 6cf2a52593cb4b23e3efe5e16228e3172bdcdd05
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6cf2a52593cb4b23e3efe5e16228e3172bdcdd05
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29338,8 +40890,8 @@ Date:   Sun May 17 21:11:49 2009 -0400
 
     [HB] Add check to avoid infinite recursion
 
 
     [HB] Add check to avoid infinite recursion
 
- src/hb-ot-layout-gsub-private.h |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
 
 commit 887c4b44165eeb8ac7fb09bc4474d11720b94a9e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 887c4b44165eeb8ac7fb09bc4474d11720b94a9e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29347,8 +40899,8 @@ Date:   Sun May 17 21:06:08 2009 -0400
 
     [HB] Cosmetic
 
 
     [HB] Cosmetic
 
- src/hb-ot-layout-gsub-private.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit ca5290f4994e1b2db4dac03f7a22b7071441ba06
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ca5290f4994e1b2db4dac03f7a22b7071441ba06
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29356,9 +40908,9 @@ Date:   Sun May 17 20:48:27 2009 -0400
 
     [HB] Start ChainContext and ReverseChainSingleSubst lookups
 
 
     [HB] Start ChainContext and ReverseChainSingleSubst lookups
 
- src/hb-ot-layout-gsub-private.h     | 269
- ++++++++---------------------------
- src/hb-ot-layout-gsubgpos-private.h | 214 +++++++++++++++++++++++++++-
+ src/hb-ot-layout-gsub-private.h     | 269
+ ++++++++----------------------------
+ src/hb-ot-layout-gsubgpos-private.h | 214 +++++++++++++++++++++++++++-
  2 files changed, 268 insertions(+), 215 deletions(-)
 
 commit 433f4aea741e39df079126769441b79ab64fd236
  2 files changed, 268 insertions(+), 215 deletions(-)
 
 commit 433f4aea741e39df079126769441b79ab64fd236
@@ -29367,8 +40919,8 @@ Date:   Sun May 17 20:30:05 2009 -0400
 
     [HB] Remove stale TODO
 
 
     [HB] Remove stale TODO
 
- src/hb-ot-layout-private.h |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-private.h | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 6f20f72e9c58ba23db2e31afa5d331acfea3d77e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6f20f72e9c58ba23db2e31afa5d331acfea3d77e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29376,13 +40928,13 @@ Date: Sun May 17 20:28:01 2009 -0400
 
     [HB] Split Layout-common tables into new files
 
 
     [HB] Split Layout-common tables into new files
 
- src/hb-ot-layout-common-private.h   | 429
- +++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-gdef-private.h     |   3 +-
- src/hb-ot-layout-gsub-private.h     |   1 +
- src/hb-ot-layout-gsubgpos-private.h |   2 +
- src/hb-ot-layout-open-private.h     | 408
- ---------------------------------
+ src/hb-ot-layout-common-private.h   | 429
+ ++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gdef-private.h     |  3 +-
+ src/hb-ot-layout-gsub-private.h     |  1 +
+ src/hb-ot-layout-gsubgpos-private.h |  2 +
+ src/hb-ot-layout-open-private.h     | 408
+ ----------------------------------
  5 files changed, 434 insertions(+), 409 deletions(-)
 
 commit f45107fe0904414f1266648a6c42849c494fe611
  5 files changed, 434 insertions(+), 409 deletions(-)
 
 commit f45107fe0904414f1266648a6c42849c494fe611
@@ -29391,10 +40943,10 @@ Date: Sun May 17 20:13:02 2009 -0400
 
     [HB] More shuffling
 
 
     [HB] More shuffling
 
- src/hb-ot-layout-gsub-private.h     |  71
- ++++++++++++++++++++---------------
- src/hb-ot-layout-gsubgpos-private.h |  30 +++++++++++++++
- src/hb-ot-layout-open-private.h     |  41 --------------------
+ src/hb-ot-layout-gsub-private.h     | 71
+ +++++++++++++++++++++----------------
+ src/hb-ot-layout-gsubgpos-private.h | 30 ++++++++++++++++
+ src/hb-ot-layout-open-private.h     | 41 ---------------------
  3 files changed, 71 insertions(+), 71 deletions(-)
 
 commit f8dc67b3c24dfc805da756a73cb217b36e16b4b8
  3 files changed, 71 insertions(+), 71 deletions(-)
 
 commit f8dc67b3c24dfc805da756a73cb217b36e16b4b8
@@ -29403,11 +40955,11 @@ Date: Sun May 17 19:47:54 2009 -0400
 
     [HB] Cleanup format unions
 
 
     [HB] Cleanup format unions
 
- src/hb-ot-layout-gdef-private.h     |  18 ++++----
- src/hb-ot-layout-gsub-private.h     |  87
- ++++++++++++++++++-----------------
- src/hb-ot-layout-gsubgpos-private.h |  16 +++---
- src/hb-ot-layout-open-private.h     |  41 ++++++----------
+ src/hb-ot-layout-gdef-private.h     | 18 ++++----
+ src/hb-ot-layout-gsub-private.h     | 87
+ +++++++++++++++++++------------------
+ src/hb-ot-layout-gsubgpos-private.h | 16 +++----
+ src/hb-ot-layout-open-private.h     | 41 +++++++----------
  4 files changed, 77 insertions(+), 85 deletions(-)
 
 commit da1097bc3b1995776c205707fd2b17603b804646
  4 files changed, 77 insertions(+), 85 deletions(-)
 
 commit da1097bc3b1995776c205707fd2b17603b804646
@@ -29416,8 +40968,8 @@ Date:   Sun May 17 19:31:18 2009 -0400
 
     [HB] Use four bytes for Null Tag, not 5
 
 
     [HB] Use four bytes for Null Tag, not 5
 
- src/hb-ot-layout-open-private.h |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-open-private.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 19fc24f268b985d30971307ac2055622d11cb21f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 19fc24f268b985d30971307ac2055622d11cb21f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29425,9 +40977,9 @@ Date:   Sun May 17 09:45:32 2009 -0400
 
     [HB] Couple size checks
 
 
     [HB] Couple size checks
 
- src/hb-ot-layout-gsub-private.h     |   7 +++++--
- src/hb-ot-layout-gsubgpos-private.h |   4 ++--
- src/hb-ot-layout-open-private.h     |   4 ++--
+ src/hb-ot-layout-gsub-private.h     | 7 +++++--
+ src/hb-ot-layout-gsubgpos-private.h | 4 ++--
+ src/hb-ot-layout-open-private.h     | 4 ++--
  3 files changed, 9 insertions(+), 6 deletions(-)
 
 commit ecf17e849db19599bbb816d0018380ebf979576b
  3 files changed, 9 insertions(+), 6 deletions(-)
 
 commit ecf17e849db19599bbb816d0018380ebf979576b
@@ -29438,9 +40990,9 @@ Date:   Sun May 17 09:34:41 2009 -0400
 
     This slightly grows code size.
 
 
     This slightly grows code size.
 
- src/hb-ot-layout-gsub-private.h     | 100
- ++++++++++++++++++-----------------
- src/hb-ot-layout-gsubgpos-private.h |   7 ++-
+ src/hb-ot-layout-gsub-private.h     | 100
+ +++++++++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos-private.h |  7 +--
  2 files changed, 56 insertions(+), 51 deletions(-)
 
 commit eca8e33710cfce51454e64d974ff0c28b0eefa14
  2 files changed, 56 insertions(+), 51 deletions(-)
 
 commit eca8e33710cfce51454e64d974ff0c28b0eefa14
@@ -29449,8 +41001,8 @@ Date:   Sun May 17 09:07:27 2009 -0400
 
     [GSUB] Further optimize the main switch
 
 
     [GSUB] Further optimize the main switch
 
- src/hb-ot-layout-gsub-private.h |   31 +++++++++++++++++--------------
- 1 files changed, 17 insertions(+), 14 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 31 +++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
 
 commit 13068232e7054748ae5ba0d961ee5a95b959e92e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 13068232e7054748ae5ba0d961ee5a95b959e92e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29458,9 +41010,9 @@ Date:   Sun May 17 08:59:01 2009 -0400
 
     [HB] Unify first glyph property checking
 
 
     [HB] Unify first glyph property checking
 
- src/hb-ot-layout-gsub-private.h     |  81
- +++++++++++++++--------------------
- src/hb-ot-layout-gsubgpos-private.h |  12 -----
+ src/hb-ot-layout-gsub-private.h     | 81
+ ++++++++++++++++---------------------
+ src/hb-ot-layout-gsubgpos-private.h | 12 ------
  2 files changed, 35 insertions(+), 58 deletions(-)
 
 commit 66bf7ce4e3135535c110a917178b84c4a2b1d11f
  2 files changed, 35 insertions(+), 58 deletions(-)
 
 commit 66bf7ce4e3135535c110a917178b84c4a2b1d11f
@@ -29469,11 +41021,11 @@ Date: Sun May 17 08:28:42 2009 -0400
 
     [HB] Move Context matching logic out of GSUB
 
 
     [HB] Move Context matching logic out of GSUB
 
- src/hb-ot-layout-gdef-private.h     |   2 -
- src/hb-ot-layout-gsub-private.h     | 331
- +--------------------------------
- src/hb-ot-layout-gsubgpos-private.h | 347
- +++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gdef-private.h     |  2 -
+ src/hb-ot-layout-gsub-private.h     | 331
+ +---------------------------------
+ src/hb-ot-layout-gsubgpos-private.h | 347
+ ++++++++++++++++++++++++++++++++++++
  3 files changed, 352 insertions(+), 328 deletions(-)
 
 commit a1625528cd5ed94bc8f18903da3300e823ee5b54
  3 files changed, 352 insertions(+), 328 deletions(-)
 
 commit a1625528cd5ed94bc8f18903da3300e823ee5b54
@@ -29482,9 +41034,9 @@ Date:   Sun May 17 07:52:11 2009 -0400
 
     [GSUB] Unify ContextSubst matching
 
 
     [GSUB] Unify ContextSubst matching
 
- src/hb-ot-layout-gsub-private.h |  378
- ++++++++++++++++-----------------------
- 1 files changed, 154 insertions(+), 224 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 378
+ ++++++++++++++++------------------------
+ 1 file changed, 154 insertions(+), 224 deletions(-)
 
 commit c36238bea40e9e2b589028eb6de0710455b31585
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c36238bea40e9e2b589028eb6de0710455b31585
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29492,9 +41044,9 @@ Date:   Sun May 17 07:39:34 2009 -0400
 
     [HB] Renames
 
 
     [HB] Renames
 
- src/hb-ot-layout-gsub-private.h |  122
- +++++++++++++++++++-------------------
- 1 files changed, 61 insertions(+), 61 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 122
+ ++++++++++++++++++++--------------------
+ 1 file changed, 61 insertions(+), 61 deletions(-)
 
 commit 15c3e75b39797a153b6bc0598f87b27c4a487228
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 15c3e75b39797a153b6bc0598f87b27c4a487228
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29502,11 +41054,10 @@ Date: Sun May 17 06:03:42 2009 -0400
 
     [HB] Simplify buffer
 
 
     [HB] Simplify buffer
 
- src/harfbuzz-buffer-private.h  |   14 ++++++--------
- src/harfbuzz-buffer.c          |   35
- ++++++++++++++++-------------------
- src/harfbuzz-gsub.c            |    6 +++---
- src/hb-ot-layout-gsub-private.h |   12 ++++++------
+ src/harfbuzz-buffer-private.h  | 14 ++++++--------
+ src/harfbuzz-buffer.c          | 35 ++++++++++++++++-------------------
+ src/harfbuzz-gsub.c            |  6 +++---
+ src/hb-ot-layout-gsub-private.h | 12 ++++++------
  4 files changed, 31 insertions(+), 36 deletions(-)
 
 commit 36f78446cef8a7cbae000d5e742c9d13e1cc7f83
  4 files changed, 31 insertions(+), 36 deletions(-)
 
 commit 36f78446cef8a7cbae000d5e742c9d13e1cc7f83
@@ -29515,9 +41066,9 @@ Date:   Sun May 17 05:52:32 2009 -0400
 
     [HB] Add TODO item
 
 
     [HB] Add TODO item
 
- src/TODO             |    1 +
- src/harfbuzz-buffer.c |    2 +-
- 2 files changed, 2 insertions(+), 1 deletions(-)
+ src/TODO             | 1 +
+ src/harfbuzz-buffer.c | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
 commit ee58aaebd296ea8237516754fd4e825d524b11b7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit ee58aaebd296ea8237516754fd4e825d524b11b7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29525,10 +41076,10 @@ Date: Sun May 17 05:14:33 2009 -0400
 
     [HB] Update copyright years
 
 
     [HB] Update copyright years
 
- src/hb-ot-layout-gdef-private.h |    2 +-
- src/hb-ot-layout-open-private.h |    2 +-
- src/hb-ot-layout.cc            |    2 +-
- src/main.cc                    |    2 +-
+ src/hb-ot-layout-gdef-private.h | 2 +-
+ src/hb-ot-layout-open-private.h | 2 +-
+ src/hb-ot-layout.cc            | 2 +-
+ src/main.cc                    | 2 +-
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f4c9514935cf97a58dcb3b1962ac3f3b5ba61264
  4 files changed, 4 insertions(+), 4 deletions(-)
 
 commit f4c9514935cf97a58dcb3b1962ac3f3b5ba61264
@@ -29537,9 +41088,9 @@ Date:   Sun May 17 04:59:56 2009 -0400
 
     [HB] Simplify more arrays
 
 
     [HB] Simplify more arrays
 
- src/hb-ot-layout-open-private.h |  241
- ++++++++++++++++-----------------------
- src/hb-ot-layout.cc            |    8 +-
+ src/hb-ot-layout-open-private.h | 241
+ ++++++++++++++++------------------------
+ src/hb-ot-layout.cc            |   8 +-
  2 files changed, 100 insertions(+), 149 deletions(-)
 
 commit c9a7cbe9cb52264af9954e5ce9ac7a45d7e310cd
  2 files changed, 100 insertions(+), 149 deletions(-)
 
 commit c9a7cbe9cb52264af9954e5ce9ac7a45d7e310cd
@@ -29548,10 +41099,10 @@ Date: Sun May 17 01:22:51 2009 -0400
 
     [HB] Use ArrayOf<> in GSUB
 
 
     [HB] Use ArrayOf<> in GSUB
 
- src/hb-ot-layout-gdef-private.h |    3 +-
- src/hb-ot-layout-gsub-private.h |  157
- +++++++++++++--------------------------
- src/hb-ot-layout-open-private.h |    5 -
+ src/hb-ot-layout-gdef-private.h |   3 +-
+ src/hb-ot-layout-gsub-private.h | 157
+ +++++++++++++---------------------------
+ src/hb-ot-layout-open-private.h |   5 --
  3 files changed, 53 insertions(+), 112 deletions(-)
 
 commit 5f810363acc3ad3cba631a68620e3d37e54c95c4
  3 files changed, 53 insertions(+), 112 deletions(-)
 
 commit 5f810363acc3ad3cba631a68620e3d37e54c95c4
@@ -29560,9 +41111,9 @@ Date:   Sun May 17 00:54:25 2009 -0400
 
     [HB] Add ArrayOf<>
 
 
     [HB] Add ArrayOf<>
 
- src/hb-ot-layout-gdef-private.h |   62 +++++++------------------------
- src/hb-ot-layout-open-private.h |   77
- +++++++++++++++++++++++++++++----------
+ src/hb-ot-layout-gdef-private.h | 62 ++++++++-------------------------
+ src/hb-ot-layout-open-private.h | 77
+ ++++++++++++++++++++++++++++++-----------
  2 files changed, 71 insertions(+), 68 deletions(-)
 
 commit 238c855fcd4f0ef97a94a8662d2a2f2bb5c21ecb
  2 files changed, 71 insertions(+), 68 deletions(-)
 
 commit 238c855fcd4f0ef97a94a8662d2a2f2bb5c21ecb
@@ -29571,10 +41122,10 @@ Date: Sun May 17 00:22:37 2009 -0400
 
     [HB] Use OffsetTo<> for Coverage
 
 
     [HB] Use OffsetTo<> for Coverage
 
- src/hb-ot-layout-gdef-private.h |    1 +
- src/hb-ot-layout-gsub-private.h |   55
- +++++++++++++++------------------------
- src/hb-ot-layout-open-private.h |   10 +------
+ src/hb-ot-layout-gdef-private.h |  1 +
+ src/hb-ot-layout-gsub-private.h | 55
+ ++++++++++++++++-------------------------
+ src/hb-ot-layout-open-private.h | 10 +-------
  3 files changed, 23 insertions(+), 43 deletions(-)
 
 commit 3d54bd1293069fc3d3bdeeea8ad45036f3ee65f3
  3 files changed, 23 insertions(+), 43 deletions(-)
 
 commit 3d54bd1293069fc3d3bdeeea8ad45036f3ee65f3
@@ -29583,8 +41134,8 @@ Date:   Sun May 17 00:15:51 2009 -0400
 
     [HB] Use OffsetTo<> in more places
 
 
     [HB] Use OffsetTo<> in more places
 
- src/hb-ot-layout-gdef-private.h |   12 +++++-------
- src/hb-ot-layout-open-private.h |    4 ++++
+ src/hb-ot-layout-gdef-private.h | 12 +++++-------
+ src/hb-ot-layout-open-private.h |  4 ++++
  2 files changed, 9 insertions(+), 7 deletions(-)
 
 commit 9e4d9d7b2721859172bc9c59c1aea27b01eb9c07
  2 files changed, 9 insertions(+), 7 deletions(-)
 
 commit 9e4d9d7b2721859172bc9c59c1aea27b01eb9c07
@@ -29593,9 +41144,9 @@ Date:   Sun May 17 00:09:20 2009 -0400
 
     [HB] Add OffsetTo template.
 
 
     [HB] Add OffsetTo template.
 
- src/hb-ot-layout-gdef-private.h |   26 ++++++++++++++------------
- src/hb-ot-layout-gsub-private.h |    6 +++---
- src/hb-ot-layout-open-private.h |   27 ++++++++++++++++++---------
+ src/hb-ot-layout-gdef-private.h | 26 ++++++++++++++------------
+ src/hb-ot-layout-gsub-private.h |  6 +++---
+ src/hb-ot-layout-open-private.h | 27 ++++++++++++++++++---------
  3 files changed, 35 insertions(+), 24 deletions(-)
 
 commit e07f89295b9b38d233dfd4acec1f6b4a3416f267
  3 files changed, 35 insertions(+), 24 deletions(-)
 
 commit e07f89295b9b38d233dfd4acec1f6b4a3416f267
@@ -29604,8 +41155,8 @@ Date:   Sat May 16 23:20:48 2009 -0400
 
     [HB] Automate int-type size assertion
 
 
     [HB] Automate int-type size assertion
 
- src/hb-ot-layout-open-private.h |   13 +++----------
- 1 files changed, 3 insertions(+), 10 deletions(-)
+ src/hb-ot-layout-open-private.h | 13 +++----------
+ 1 file changed, 3 insertions(+), 10 deletions(-)
 
 commit 8b8358033184198ff638ee1379093717596e162d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 8b8358033184198ff638ee1379093717596e162d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29615,11 +41166,11 @@ Date: Sat May 16 22:48:14 2009 -0400
 
     Also use a common pool for all nul-content ones.
 
 
     Also use a common pool for all nul-content ones.
 
- src/hb-ot-layout-gdef-private.h |   12 ++--
- src/hb-ot-layout-gsub-private.h |   28 ++++----
- src/hb-ot-layout-open-private.h |  142
- ++++++++++++++++++++++----------------
- src/hb-ot-layout.cc            |    8 +-
+ src/hb-ot-layout-gdef-private.h |  12 ++--
+ src/hb-ot-layout-gsub-private.h |  28 ++++----
+ src/hb-ot-layout-open-private.h | 142
+ +++++++++++++++++++++++-----------------
+ src/hb-ot-layout.cc            |   8 +--
  4 files changed, 105 insertions(+), 85 deletions(-)
 
 commit 6e13d4140158aff736647fc53d8c0ae3a02c2afc
  4 files changed, 105 insertions(+), 85 deletions(-)
 
 commit 6e13d4140158aff736647fc53d8c0ae3a02c2afc
@@ -29628,8 +41179,8 @@ Date:   Sat May 16 20:15:16 2009 -0400
 
     [HB] Remove obsolete comment
 
 
     [HB] Remove obsolete comment
 
- src/hb-ot-layout-gdef-private.h |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gdef-private.h | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 9f721cf380954d67415dbfd0404a983cdd75b7df
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 9f721cf380954d67415dbfd0404a983cdd75b7df
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29637,9 +41188,9 @@ Date:   Sat May 16 19:59:15 2009 -0400
 
     [GSUB] Start ChainContextSubst
 
 
     [GSUB] Start ChainContextSubst
 
- src/hb-ot-layout-gsub-private.h |   50
- ++++++++++++++++++++++++++++++--------
- 1 files changed, 39 insertions(+), 11 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 50
+ ++++++++++++++++++++++++++++++++---------
+ 1 file changed, 39 insertions(+), 11 deletions(-)
 
 commit 7fca9e5245d2d283e8b5354eb1ddf553a7ffc033
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7fca9e5245d2d283e8b5354eb1ddf553a7ffc033
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29647,9 +41198,9 @@ Date:   Sat May 16 19:44:24 2009 -0400
 
     [GSUB] Implement ContextSubstFormat3
 
 
     [GSUB] Implement ContextSubstFormat3
 
- src/hb-ot-layout-gsub-private.h |   62
- ++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 61 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 62
+ ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 61 insertions(+), 1 deletion(-)
 
 commit 1ff926a5681b5d4bfce65351062cda9dc1ffeba2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 1ff926a5681b5d4bfce65351062cda9dc1ffeba2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29657,9 +41208,9 @@ Date:   Fri May 15 20:25:37 2009 -0400
 
     [GSUB] Implement ContextSubstFormat2
 
 
     [GSUB] Implement ContextSubstFormat2
 
- src/hb-ot-layout-gsub-private.h |  105
- ++++++++++++++++++++++++++++++++++++---
- 1 files changed, 97 insertions(+), 8 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 105
+ +++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 97 insertions(+), 8 deletions(-)
 
 commit fc36d9453ed7edb0a570abc44d7caa87aafb0fcf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit fc36d9453ed7edb0a570abc44d7caa87aafb0fcf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29667,8 +41218,8 @@ Date:   Fri May 15 20:11:10 2009 -0400
 
     [GSUB] Add GSUB::substitute_lookup()
 
 
     [GSUB] Add GSUB::substitute_lookup()
 
- src/hb-ot-layout-gsub-private.h |    7 +++++++
- src/hb-ot-layout.cc            |    5 +----
+ src/hb-ot-layout-gsub-private.h | 7 +++++++
+ src/hb-ot-layout.cc            | 5 +----
  2 files changed, 8 insertions(+), 4 deletions(-)
 
 commit c43562b2a7587fa3f9ef4c1c4338e4eda77368b5
  2 files changed, 8 insertions(+), 4 deletions(-)
 
 commit c43562b2a7587fa3f9ef4c1c4338e4eda77368b5
@@ -29677,10 +41228,10 @@ Date: Fri May 15 18:54:53 2009 -0400
 
     [GSUB] Finish ContextSubstFormat1
 
 
     [GSUB] Finish ContextSubstFormat1
 
- src/hb-ot-layout-gsub-private.h |   77
- ++++++++++++++++++++++++++++++---------
- src/hb-ot-layout-private.h     |   14 +++++++
- src/hb-ot-layout.cc            |   13 -------
+ src/hb-ot-layout-gsub-private.h | 77
+ ++++++++++++++++++++++++++++++++---------
+ src/hb-ot-layout-private.h     | 14 ++++++++
+ src/hb-ot-layout.cc            | 13 -------
  3 files changed, 74 insertions(+), 30 deletions(-)
 
 commit 5ee21896224e3a9835a9695037a94ccf1c35a217
  3 files changed, 74 insertions(+), 30 deletions(-)
 
 commit 5ee21896224e3a9835a9695037a94ccf1c35a217
@@ -29689,8 +41240,8 @@ Date:   Fri May 15 13:28:56 2009 -0400
 
     [HB] Fix typo
 
 
     [HB] Fix typo
 
- src/hb-ot-layout-open-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-open-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6b59c9b445b6d2454008c83a2c7d6a995ea5995e
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b59c9b445b6d2454008c83a2c7d6a995ea5995e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29698,8 +41249,8 @@ Date:   Fri May 15 01:00:36 2009 -0400
 
     [HB] Add TODO item
 
 
     [HB] Add TODO item
 
- src/TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit c5419b6cf28822e07f1ef9b0394825e9cb01a445
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c5419b6cf28822e07f1ef9b0394825e9cb01a445
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29707,10 +41258,10 @@ Date: Fri May 8 21:17:56 2009 -0400
 
     [HB] Remove DEFINE_NON_INSTANTIABLE
 
 
     [HB] Remove DEFINE_NON_INSTANTIABLE
 
- src/hb-ot-layout-gdef-private.h |    2 --
- src/hb-ot-layout-gsub-private.h |    3 ---
- src/hb-ot-layout-open-private.h |   18 +-----------------
- 3 files changed, 1 insertions(+), 22 deletions(-)
+ src/hb-ot-layout-gdef-private.h |  2 --
+ src/hb-ot-layout-gsub-private.h |  3 ---
+ src/hb-ot-layout-open-private.h | 18 +-----------------
+ 3 files changed, 1 insertion(+), 22 deletions(-)
 
 commit 0dff25f0368c5f14ebb0a4af35f3bb6658740d57
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0dff25f0368c5f14ebb0a4af35f3bb6658740d57
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29718,10 +41269,10 @@ Date: Fri May 8 21:12:18 2009 -0400
 
     [HB] Remove get_size()
 
 
     [HB] Remove get_size()
 
- src/hb-ot-layout-gdef-private.h |    9 -----
- src/hb-ot-layout-gsub-private.h |   63
- ---------------------------------------
- src/hb-ot-layout-open-private.h |   42 ++------------------------
+ src/hb-ot-layout-gdef-private.h |  9 ------
+ src/hb-ot-layout-gsub-private.h | 63
+ -----------------------------------------
+ src/hb-ot-layout-open-private.h | 42 ++-------------------------
  3 files changed, 3 insertions(+), 111 deletions(-)
 
 commit 25c6c9a3f6c062ec639d9202a8b9844be64d6fc0
  3 files changed, 3 insertions(+), 111 deletions(-)
 
 commit 25c6c9a3f6c062ec639d9202a8b9844be64d6fc0
@@ -29730,9 +41281,9 @@ Date:   Fri May 8 19:09:17 2009 -0400
 
     [GSUB] ContextSubst format 1
 
 
     [GSUB] ContextSubst format 1
 
- src/hb-ot-layout-gsub-private.h |   52
- +++++++++++++++++++++++++++++++++-----
- 1 files changed, 45 insertions(+), 7 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 52
+ +++++++++++++++++++++++++++++++++++------
+ 1 file changed, 45 insertions(+), 7 deletions(-)
 
 commit f70229510303109bd0f71423cdf13aa200066d17
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f70229510303109bd0f71423cdf13aa200066d17
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29740,9 +41291,9 @@ Date:   Fri May 8 18:45:53 2009 -0400
 
     [GSUB] Shuffle
 
 
     [GSUB] Shuffle
 
- src/hb-ot-layout-gsub-private.h |  170
- ++++++++++++++++++++-------------------
- 1 files changed, 86 insertions(+), 84 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 170
+ ++++++++++++++++++++--------------------
+ 1 file changed, 86 insertions(+), 84 deletions(-)
 
 commit a83e08f8728439ef75e3dfab2191ac913d8f907b
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a83e08f8728439ef75e3dfab2191ac913d8f907b
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29750,8 +41301,8 @@ Date:   Thu May 7 12:53:02 2009 -0400
 
     [HarfBuzz] Start a TODO file
 
 
     [HarfBuzz] Start a TODO file
 
- src/TODO |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/TODO | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit eed05b04ebc2cbb3fa699c99200db12a0081cefb
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eed05b04ebc2cbb3fa699c99200db12a0081cefb
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29759,8 +41310,8 @@ Date:   Wed May 6 00:25:59 2009 -0400
 
     [GSUB] minor
 
 
     [GSUB] minor
 
- src/hb-ot-layout-open-private.h |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/hb-ot-layout-open-private.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit cdb317bc4e188421cad997b448abb19223d39e96
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit cdb317bc4e188421cad997b448abb19223d39e96
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29768,9 +41319,9 @@ Date:   Wed May 6 00:12:29 2009 -0400
 
     [GSUB] Towards Context subtitutes
 
 
     [GSUB] Towards Context subtitutes
 
- src/hb-ot-layout-gsub-private.h |  137
- ++++++++++++++++++++++++++++++--------
- 1 files changed, 108 insertions(+), 29 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 137
+ +++++++++++++++++++++++++++++++---------
+ 1 file changed, 108 insertions(+), 29 deletions(-)
 
 commit c9c6a78aec2b16ac06dfca8cbfaf28a77a10bae2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c9c6a78aec2b16ac06dfca8cbfaf28a77a10bae2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29778,9 +41329,9 @@ Date:   Tue May 5 16:22:02 2009 -0400
 
     [GSUB] Minor refactoring
 
 
     [GSUB] Minor refactoring
 
- src/hb-ot-layout-gsub-private.h |   42
- +++++++++++++++++++++-----------------
- 1 files changed, 23 insertions(+), 19 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 42
+ ++++++++++++++++++++++-------------------
+ 1 file changed, 23 insertions(+), 19 deletions(-)
 
 commit bb3899a579b00134b24df8891b69bf1621a8190f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bb3899a579b00134b24df8891b69bf1621a8190f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29788,9 +41339,9 @@ Date:   Tue May 5 13:25:13 2009 -0400
 
     [GSUB] Implement ligature substitutions
 
 
     [GSUB] Implement ligature substitutions
 
- src/Makefile.am                |    2 +
- src/hb-ot-layout-gsub-private.h |  113
- +++++++++++++++++++++++++++++++--------
+ src/Makefile.am                |   2 +
+ src/hb-ot-layout-gsub-private.h | 113
+ ++++++++++++++++++++++++++++++++--------
  2 files changed, 93 insertions(+), 22 deletions(-)
 
 commit 38b011a293181856463dd08d43e2106e5bf1d56e
  2 files changed, 93 insertions(+), 22 deletions(-)
 
 commit 38b011a293181856463dd08d43e2106e5bf1d56e
@@ -29799,8 +41350,8 @@ Date:   Mon May 4 20:21:57 2009 -0400
 
     [GSUB] Hook new GSUB up in Pango
 
 
     [GSUB] Hook new GSUB up in Pango
 
- src/hb-ot-layout-gsub-private.h |   15 ++++++++++-----
- 1 files changed, 10 insertions(+), 5 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
 
 commit a84e71ad11a72feff47ead16772a8c4bcf4f69d5
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit a84e71ad11a72feff47ead16772a8c4bcf4f69d5
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29808,9 +41359,9 @@ Date:   Thu Apr 16 16:53:40 2009 -0400
 
     [GSUB] Start Ligature subtable support
 
 
     [GSUB] Start Ligature subtable support
 
- src/hb-ot-layout-gsub-private.h |  132
- ++++++++++++++++++++++++++++-----------
- src/hb-ot-layout.h             |    2 +-
+ src/hb-ot-layout-gsub-private.h | 132
+ +++++++++++++++++++++++++++++-----------
+ src/hb-ot-layout.h             |   2 +-
  2 files changed, 96 insertions(+), 38 deletions(-)
 
 commit 52886ca56b24a8335614b1df16a33dd4e2d7ae56
  2 files changed, 96 insertions(+), 38 deletions(-)
 
 commit 52886ca56b24a8335614b1df16a33dd4e2d7ae56
@@ -29819,9 +41370,9 @@ Date:   Thu Apr 16 14:19:42 2009 -0400
 
     [GSUB] Implement Alternate subtables
 
 
     [GSUB] Implement Alternate subtables
 
- src/hb-ot-layout-gsub-private.h |  104
- ++++++++++++++++++++++++++++++++++++---
- src/hb-ot-layout-open-private.h |    2 +-
+ src/hb-ot-layout-gsub-private.h | 104
+ ++++++++++++++++++++++++++++++++++++----
+ src/hb-ot-layout-open-private.h |   2 +-
  2 files changed, 97 insertions(+), 9 deletions(-)
 
 commit 4f27ce7e0213ac5ba356f0fd2ec0a175ffd002e6
  2 files changed, 97 insertions(+), 9 deletions(-)
 
 commit 4f27ce7e0213ac5ba356f0fd2ec0a175ffd002e6
@@ -29830,9 +41381,9 @@ Date:   Thu Apr 16 13:40:13 2009 -0400
 
     [GSUB] Implement Extension subtables
 
 
     [GSUB] Implement Extension subtables
 
- src/hb-ot-layout-gsub-private.h |  169
- +++++++++++++++++++++++++--------------
- 1 files changed, 108 insertions(+), 61 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 169
+ +++++++++++++++++++++++++---------------
+ 1 file changed, 108 insertions(+), 61 deletions(-)
 
 commit 83e61ff4702121d3418fe82a8fe7ef6bb63bb5d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 83e61ff4702121d3418fe82a8fe7ef6bb63bb5d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29840,8 +41391,8 @@ Date:   Thu Apr 16 12:30:51 2009 -0400
 
     [GSUB] Fix reverse lookup loop like we did in the old code before
 
 
     [GSUB] Fix reverse lookup loop like we did in the old code before
 
- src/hb-ot-layout-gsub-private.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-gsub-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 5a0b791184cf6ef39eae0570e14aca21abc32845
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5a0b791184cf6ef39eae0570e14aca21abc32845
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29849,16 +41400,16 @@ Date: Thu Apr 16 04:45:30 2009 -0400
 
     [harfbuzz/GSUB] towards a partially working GSUB
 
 
     [harfbuzz/GSUB] towards a partially working GSUB
 
- src/harfbuzz-buffer.c          |    2 +-
- src/harfbuzz-impl.h            |    2 +-
- src/harfbuzz.c                         |    1 -
- src/hb-ot-layout-gdef-private.h |    4 +-
- src/hb-ot-layout-gsub-private.h |  383
- +++++++++++++++++++++++++++++----------
- src/hb-ot-layout-open-private.h |   31 +++-
- src/hb-ot-layout-private.h     |    6 +-
- src/hb-ot-layout.cc            |   94 +++++++---
- src/hb-ot-layout.h             |    2 -
+ src/harfbuzz-buffer.c          |   2 +-
+ src/harfbuzz-impl.h            |   2 +-
+ src/harfbuzz.c                         |   1 -
+ src/hb-ot-layout-gdef-private.h |   4 +-
+ src/hb-ot-layout-gsub-private.h | 383
+ +++++++++++++++++++++++++++++-----------
+ src/hb-ot-layout-open-private.h |  31 +++-
+ src/hb-ot-layout-private.h     |   6 +-
+ src/hb-ot-layout.cc            |  94 +++++++---
+ src/hb-ot-layout.h             |   2 -
  9 files changed, 381 insertions(+), 144 deletions(-)
 
 commit 30bd763fa2fa4aceee51433ec9fc8dc28480b5d7
  9 files changed, 381 insertions(+), 144 deletions(-)
 
 commit 30bd763fa2fa4aceee51433ec9fc8dc28480b5d7
@@ -29867,21 +41418,21 @@ Date: Wed Apr 15 22:56:15 2009 -0400
 
     Implement the first substitute()
 
 
     Implement the first substitute()
 
- src/harfbuzz-buffer-private.h  |    8 ++--
- src/harfbuzz-buffer.c          |    4 +-
- src/harfbuzz-buffer.h          |    2 +-
- src/harfbuzz-gdef-private.h    |    4 +-
- src/harfbuzz-gdef.c            |    6 +-
- src/harfbuzz-gdef.h            |    2 +-
- src/harfbuzz-gpos.c            |    8 ++--
- src/harfbuzz-gpos.h            |    2 +-
- src/harfbuzz-gsub.h            |    2 +-
- src/hb-ot-layout-gsub-private.h |   88
- +++++++++++++++++++++++++++++++++++----
- src/hb-ot-layout-open-private.h |    2 +-
- src/hb-ot-layout-private.h     |   23 ++++++----
- src/hb-ot-layout.cc            |   54 ++++++++++++++++-------
- src/hb-ot-layout.h             |    2 +-
+ src/harfbuzz-buffer-private.h  |  8 ++--
+ src/harfbuzz-buffer.c          |  4 +-
+ src/harfbuzz-buffer.h          |  2 +-
+ src/harfbuzz-gdef-private.h    |  4 +-
+ src/harfbuzz-gdef.c            |  6 +--
+ src/harfbuzz-gdef.h            |  2 +-
+ src/harfbuzz-gpos.c            |  8 ++--
+ src/harfbuzz-gpos.h            |  2 +-
+ src/harfbuzz-gsub.h            |  2 +-
+ src/hb-ot-layout-gsub-private.h | 88
+ +++++++++++++++++++++++++++++++++++++----
+ src/hb-ot-layout-open-private.h |  2 +-
+ src/hb-ot-layout-private.h     | 23 ++++++-----
+ src/hb-ot-layout.cc            | 54 +++++++++++++++++--------
+ src/hb-ot-layout.h             |  2 +-
  14 files changed, 151 insertions(+), 56 deletions(-)
 
 commit ce48f03946bef895912019046bdbe62bb1301d0b
  14 files changed, 151 insertions(+), 56 deletions(-)
 
 commit ce48f03946bef895912019046bdbe62bb1301d0b
@@ -29897,8 +41448,8 @@ Date:   Fri Apr 17 17:03:39 2009 -0400
 
     Use git.mk
 
 
     Use git.mk
 
- src/Makefile.am |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 2d15e72c75931398db5e027e660f1320bb979117
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2d15e72c75931398db5e027e660f1320bb979117
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29906,15 +41457,15 @@ Date: Wed Apr 15 19:50:16 2009 -0400
 
     Give it a start at GSUB
 
 
     Give it a start at GSUB
 
- src/hb-common.h                |    5 +-
- src/hb-ot-layout-gdef-private.h |   24 ++++----
- src/hb-ot-layout-gsub-private.h |  120
- ++++++++++++++++++++++++++++++++++++++-
- src/hb-ot-layout-open-private.h |   51 ++++++++++-------
- src/hb-ot-layout-private.h     |    2 +-
- src/hb-ot-layout.cc            |   63 +++++++++++++++++++-
- src/hb-ot-layout.h             |   29 ++++++++-
- src/main.cc                    |    4 +-
+ src/hb-common.h                |   5 +-
+ src/hb-ot-layout-gdef-private.h |  24 ++++----
+ src/hb-ot-layout-gsub-private.h | 120
+ +++++++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout-open-private.h |  51 ++++++++++-------
+ src/hb-ot-layout-private.h     |   2 +-
+ src/hb-ot-layout.cc            |  63 +++++++++++++++++++--
+ src/hb-ot-layout.h             |  29 +++++++++-
+ src/main.cc                    |   4 +-
  8 files changed, 253 insertions(+), 45 deletions(-)
 
 commit 9d870f2a558f4e463e3ff953312202a8d144158b
  8 files changed, 253 insertions(+), 45 deletions(-)
 
 commit 9d870f2a558f4e463e3ff953312202a8d144158b
@@ -29926,8 +41477,8 @@ Date:   Thu Apr 9 13:30:26 2009 -0400
     Detect TrueType Collections by checking the font data header instead
     of checking for "face->num_faces >1".
 
     Detect TrueType Collections by checking the font data header instead
     of checking for "face->num_faces >1".
 
- src/harfbuzz-stream.c |   11 +++++++++--
- 1 files changed, 9 insertions(+), 2 deletions(-)
+ src/harfbuzz-stream.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
 
 commit d49caf1f77743550d83fc7feced1293ba34a4e99
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit d49caf1f77743550d83fc7feced1293ba34a4e99
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29935,8 +41486,8 @@ Date:   Mon Mar 2 15:16:11 2009 +0330
 
     [opentype] Protect against illegal access for arrays of length zero
 
 
     [opentype] Protect against illegal access for arrays of length zero
 
- src/harfbuzz-gpos.c |  22 ++++++++++++++++++----
- src/harfbuzz-gsub.c |   6 ++++++
+ src/harfbuzz-gpos.c | 22 ++++++++++++++++++----
+ src/harfbuzz-gsub.c | 6 ++++++
  2 files changed, 24 insertions(+), 4 deletions(-)
 
 commit 66871797af194f9d2161faf8bfbc9684f09e207e
  2 files changed, 24 insertions(+), 4 deletions(-)
 
 commit 66871797af194f9d2161faf8bfbc9684f09e207e
@@ -29945,8 +41496,8 @@ Date:   Mon Mar 2 14:20:20 2009 +0330
 
     [opentype] Use size_t instead of uint for malloc wrappers
 
 
     [opentype] Use size_t instead of uint for malloc wrappers
 
- src/harfbuzz-impl.c |   4 ++--
- src/harfbuzz-impl.h |   6 ++++--
+ src/harfbuzz-impl.c | 4 ++--
+ src/harfbuzz-impl.h | 6 ++++--
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit 3664e59c52ed56486a3e38126c0c3abb78f42233
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 commit 3664e59c52ed56486a3e38126c0c3abb78f42233
@@ -29955,8 +41506,8 @@ Date:   Mon Mar 2 11:09:29 2009 +0330
 
     Fix Bug 572529 – Poor -I ordering can break build
 
 
     Fix Bug 572529 – Poor -I ordering can break build
 
- src/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit aca4d11388eedd532a73bd34747abb65c0ea9291
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit aca4d11388eedd532a73bd34747abb65c0ea9291
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -29973,9 +41524,9 @@ Date:   Mon Feb 2 00:13:07 2009 +0000
            100
            alloc calls when loading DejaVu Sans,
 
            100
            alloc calls when loading DejaVu Sans,
 
- src/harfbuzz-gpos.c |  59
- ++++++++++++++------------------------------------
- 1 files changed, 17 insertions(+), 42 deletions(-)
+ src/harfbuzz-gpos.c | 59
+ +++++++++++++++--------------------------------------
+ 1 file changed, 17 insertions(+), 42 deletions(-)
 
 commit c561d69c721105b78bb06d1e3c5f21ca314d924a
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit c561d69c721105b78bb06d1e3c5f21ca314d924a
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30033,11 +41584,11 @@ Date: Thu Jan 29 09:20:08 2009 +0000
 
            Bug originally reported by nsf.
 
 
            Bug originally reported by nsf.
 
- src/harfbuzz-gdef.c |   8 --------
- src/harfbuzz-gpos.c |  32 --------------------------------
- src/harfbuzz-gsub.c |  31 -------------------------------
- src/harfbuzz-open.c |  30 +++---------------------------
- src/harfbuzz-open.h |   8 --------
+ src/harfbuzz-gdef.c | 8 --------
+ src/harfbuzz-gpos.c | 32 --------------------------------
+ src/harfbuzz-gsub.c | 31 -------------------------------
+ src/harfbuzz-open.c | 30 +++---------------------------
+ src/harfbuzz-open.h | 8 --------
  5 files changed, 3 insertions(+), 106 deletions(-)
 
 commit 9372edd6f020c92609853609dcb504c72551c9c3
  5 files changed, 3 insertions(+), 106 deletions(-)
 
 commit 9372edd6f020c92609853609dcb504c72551c9c3
@@ -30051,8 +41602,8 @@ Date:   Thu Jan 29 09:19:56 2009 +0000
            * pango/opentype/harfbuzz-impl.c (_hb_alloc): Use calloc(),
            instead of malloc()ing and memset()ing.
 
            * pango/opentype/harfbuzz-impl.c (_hb_alloc): Use calloc(),
            instead of malloc()ing and memset()ing.
 
- src/harfbuzz-impl.c |   4 +---
- 1 files changed, 1 insertions(+), 3 deletions(-)
+ src/harfbuzz-impl.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
 
 commit 94c21d26ba878b3168a21f2e76f02bc52e8fe6fd
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 94c21d26ba878b3168a21f2e76f02bc52e8fe6fd
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30065,9 +41616,9 @@ Date:   Thu Jan 29 09:19:43 2009 +0000
            * pango/opentype/harfbuzz-dump-main.c (main): Remove old
            cruft.
 
            * pango/opentype/harfbuzz-dump-main.c (main): Remove old
            cruft.
 
- src/harfbuzz-dump-main.c |  144
- +---------------------------------------------
- 1 files changed, 1 insertions(+), 143 deletions(-)
+ src/harfbuzz-dump-main.c | 144
+ +----------------------------------------------
+ 1 file changed, 1 insertion(+), 143 deletions(-)
 
 commit 0a47c4f78e8a9e81cd305f24ec92ea61ead7dd8d
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 0a47c4f78e8a9e81cd305f24ec92ea61ead7dd8d
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30083,9 +41634,9 @@ Date:   Thu Jan 29 09:19:20 2009 +0000
            2000
            alloc calls when loading DejaVu Sans!
 
            2000
            alloc calls when loading DejaVu Sans!
 
- src/harfbuzz-gpos.c |  57
- +++++++++++++++-----------------------------------
- 1 files changed, 17 insertions(+), 40 deletions(-)
+ src/harfbuzz-gpos.c | 57
+ ++++++++++++++++-------------------------------------
+ 1 file changed, 17 insertions(+), 40 deletions(-)
 
 commit 549be924bccd187f53791dfa27647981ac909545
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 549be924bccd187f53791dfa27647981ac909545
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30113,8 +41664,8 @@ Date:   Fri Dec 26 02:31:47 2008 +0000
            (draw_error_underline), (pango_cairo_renderer_class_init):
            Fix all the remaining warnings.
 
            (draw_error_underline), (pango_cairo_renderer_class_init):
            Fix all the remaining warnings.
 
- src/harfbuzz-dump.c |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/harfbuzz-dump.c | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 719f9eaa755396ff377da10c5eeced01d3456b1b
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 719f9eaa755396ff377da10c5eeced01d3456b1b
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30152,8 +41703,8 @@ Date:   Fri Dec 26 02:31:35 2008 +0000
            (pango_ft2_free_glyph_info_callback):
            Fix more warnings.
 
            (pango_ft2_free_glyph_info_callback):
            Fix more warnings.
 
- src/harfbuzz-gpos.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-gpos.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 21f7d507f4b50e2743ab47954270f4c72d5a722a
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 21f7d507f4b50e2743ab47954270f4c72d5a722a
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30171,8 +41722,8 @@ Date:   Wed Oct 15 03:45:29 2008 +0000
            parsing
            null anchor tables.
 
            parsing
            null anchor tables.
 
- src/harfbuzz-gpos.c |   7 +++++++
- 1 files changed, 7 insertions(+), 0 deletions(-)
+ src/harfbuzz-gpos.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
 
 commit a26c6ae70502b4d60c52a0648662b1619c688b9a
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit a26c6ae70502b4d60c52a0648662b1619c688b9a
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30185,8 +41736,8 @@ Date:   Mon Sep 29 22:28:47 2008 +0000
            * pango/opentype/harfbuzz-gpos.c (Position_CursiveChain):
            Fix left-to-right positioning.  Reported by Peter Hunter.
 
            * pango/opentype/harfbuzz-gpos.c (Position_CursiveChain):
            Fix left-to-right positioning.  Reported by Peter Hunter.
 
- src/harfbuzz-gpos.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-gpos.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b6c06c56a33f1e1ec15e3b525ecafe8fadc679db
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit b6c06c56a33f1e1ec15e3b525ecafe8fadc679db
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30203,8 +41754,8 @@ Date:   Sun Jun 29 18:30:14 2008 +0000
            Fix reverse
            loops for type 8 lookups.
 
            Fix reverse
            loops for type 8 lookups.
 
- src/harfbuzz-gsub.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-gsub.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit c44733596c6648e209c12349e18e35424edf3d59
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c44733596c6648e209c12349e18e35424edf3d59
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -30212,9 +41763,9 @@ Date:   Mon Feb 18 21:14:23 2008 -0500
 
     [hb-ot-layout] Add proper namespace to accessors
 
 
     [hb-ot-layout] Add proper namespace to accessors
 
- src/hb-ot-layout.cc | 165
- +++++++++++++++++++++++++++++++++++++-------------
- src/hb-ot-layout.h  | 115 +++++++++++++++++++++++------------
+ src/hb-ot-layout.cc | 165
+ ++++++++++++++++++++++++++++++++++++++--------------
+ src/hb-ot-layout.h  | 115 +++++++++++++++++++++++-------------
  2 files changed, 198 insertions(+), 82 deletions(-)
 
 commit 57225672098ebdafb0c06ae091a1b55635daca29
  2 files changed, 198 insertions(+), 82 deletions(-)
 
 commit 57225672098ebdafb0c06ae091a1b55635daca29
@@ -30223,8 +41774,8 @@ Date:   Mon Feb 18 20:58:39 2008 -0500
 
     Fix typo, add TODOs
 
 
     Fix typo, add TODOs
 
- src/hb-ot-layout-open-private.h |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ src/hb-ot-layout-open-private.h | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 commit 4a26ea408c87f0bb59deca9ff44008d138471aa3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4a26ea408c87f0bb59deca9ff44008d138471aa3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -30232,10 +41783,10 @@ Date: Mon Jan 28 07:40:10 2008 -0500
 
     Finish script, language, and feature public API
 
 
     Finish script, language, and feature public API
 
- src/hb-ot-layout-open-private.h |   22 ++++++---
- src/hb-ot-layout.cc            |  107
- +++++++++++++++++++++++++++++++--------
- src/hb-ot-layout.h             |   34 ++++++++++++-
+ src/hb-ot-layout-open-private.h |  22 ++++++---
+ src/hb-ot-layout.cc            | 107
+ +++++++++++++++++++++++++++++++---------
+ src/hb-ot-layout.h             |  34 ++++++++++++-
  3 files changed, 132 insertions(+), 31 deletions(-)
 
 commit 706ab25a4cb043d46e6088aa0a7184ee200276c9
  3 files changed, 132 insertions(+), 31 deletions(-)
 
 commit 706ab25a4cb043d46e6088aa0a7184ee200276c9
@@ -30244,11 +41795,11 @@ Date: Mon Jan 28 05:58:50 2008 -0500
 
     Add script and language public getter API
 
 
     Add script and language public getter API
 
- src/hb-ot-layout-open-private.h |   40 ++++++++-----
- src/hb-ot-layout.cc            |  127
- ++++++++++++++++++++++++++++++++++++++-
- src/hb-ot-layout.h             |   56 +++++++++++++++++
- src/main.cc                    |    2 +-
+ src/hb-ot-layout-open-private.h |  40 ++++++++-----
+ src/hb-ot-layout.cc            | 127
+ +++++++++++++++++++++++++++++++++++++++-
+ src/hb-ot-layout.h             |  56 ++++++++++++++++++
+ src/main.cc                    |   2 +-
  4 files changed, 207 insertions(+), 18 deletions(-)
 
 commit 40a81314fa3eb7c701aea47b43f81bfad985f717
  4 files changed, 207 insertions(+), 18 deletions(-)
 
 commit 40a81314fa3eb7c701aea47b43f81bfad985f717
@@ -30257,9 +41808,9 @@ Date:   Mon Jan 28 02:30:48 2008 -0500
 
     Make main.cc compile again, which means finished getter API
 
 
     Make main.cc compile again, which means finished getter API
 
- src/hb-ot-layout-open-private.h |  117
- ++++++++++++++++++++++++++++----------
- src/main.cc                    |   99 +++++++++++++++++++++++----------
+ src/hb-ot-layout-open-private.h | 117
+ +++++++++++++++++++++++++++++-----------
+ src/main.cc                    |  99 +++++++++++++++++++++++-----------
  2 files changed, 155 insertions(+), 61 deletions(-)
 
 commit e50c3978d37b2c0d6ddd4ced6a6196f6857cd596
  2 files changed, 155 insertions(+), 61 deletions(-)
 
 commit e50c3978d37b2c0d6ddd4ced6a6196f6857cd596
@@ -30268,9 +41819,9 @@ Date:   Mon Jan 28 00:16:49 2008 -0500
 
     Rename HB_OT_Layout to hb_ot_layout_t
 
 
     Rename HB_OT_Layout to hb_ot_layout_t
 
- src/hb-ot-layout-private.h |   8 ++++----
- src/hb-ot-layout.cc       |   34 +++++++++++++++++-----------------
- src/hb-ot-layout.h        |   33 +++++++++++++++------------------
+ src/hb-ot-layout-private.h |  8 ++++----
+ src/hb-ot-layout.cc       | 34 +++++++++++++++++-----------------
+ src/hb-ot-layout.h        | 33 +++++++++++++++------------------
  3 files changed, 36 insertions(+), 39 deletions(-)
 
 commit dfa811965133bc4d1696fa5a0166e17ed4142c98
  3 files changed, 36 insertions(+), 39 deletions(-)
 
 commit dfa811965133bc4d1696fa5a0166e17ed4142c98
@@ -30279,8 +41830,8 @@ Date:   Mon Jan 28 00:12:21 2008 -0500
 
     Rename hb_ot_layout_create() to hb_ot_layout_create_for_data()
 
 
     Rename hb_ot_layout_create() to hb_ot_layout_create_for_data()
 
- src/hb-ot-layout.cc |   4 ++--
- src/hb-ot-layout.h  |   4 ++--
+ src/hb-ot-layout.cc | 4 ++--
+ src/hb-ot-layout.h  | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 54e5aac5e2947d4e2864c6f2987e4d275da73100
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 54e5aac5e2947d4e2864c6f2987e4d275da73100
@@ -30289,11 +41840,11 @@ Date: Sun Jan 27 21:19:51 2008 -0500
 
     GDEF completely working now
 
 
     GDEF completely working now
 
- src/hb-ot-layout-open-private.h |   11 ++++++++---
- src/hb-ot-layout-private.h     |   16 +++++++++-------
- src/hb-ot-layout.cc            |   19 +++++++++----------
- src/hb-private.h               |    7 +++++++
- src/main.cc                    |   12 ++++++------
+ src/hb-ot-layout-open-private.h | 11 ++++++++---
+ src/hb-ot-layout-private.h     | 16 +++++++++-------
+ src/hb-ot-layout.cc            | 19 +++++++++----------
+ src/hb-private.h               |  7 +++++++
+ src/main.cc                    | 12 ++++++------
  5 files changed, 39 insertions(+), 26 deletions(-)
 
 commit 6f425b11799aa20dab553085f05744191b7318e2
  5 files changed, 39 insertions(+), 26 deletions(-)
 
 commit 6f425b11799aa20dab553085f05744191b7318e2
@@ -30302,10 +41853,10 @@ Date: Thu Jan 24 19:38:56 2008 -0500
 
     [GDEF] Finish internal API
 
 
     [GDEF] Finish internal API
 
- src/hb-ot-layout-private.h |  15 ++++++-
- src/hb-ot-layout.cc       |   95
- +++++++++++++++++++++-----------------------
- src/hb-ot-layout.h        |   16 ++++----
+ src/hb-ot-layout-private.h | 15 +++++++-
+ src/hb-ot-layout.cc       | 95
+ ++++++++++++++++++++++------------------------
+ src/hb-ot-layout.h        | 16 ++++----
  3 files changed, 66 insertions(+), 60 deletions(-)
 
 commit 590d55cbb9e21ef74dfd88eee51fd0a763958cd2
  3 files changed, 66 insertions(+), 60 deletions(-)
 
 commit 590d55cbb9e21ef74dfd88eee51fd0a763958cd2
@@ -30314,13 +41865,13 @@ Date: Thu Jan 24 19:13:50 2008 -0500
 
     [GDEF] Finish public API
 
 
     [GDEF] Finish public API
 
- src/hb-common.h                |   11 ++++
- src/hb-ot-layout-gdef-private.h |   28 ++++-----
- src/hb-ot-layout-open-private.h |   25 +++++---
- src/hb-ot-layout-private.h     |   23 ++------
- src/hb-ot-layout.cc            |  123
- ++++++++++++++++++++++++++++++++++++---
- src/hb-ot-layout.h             |   29 +++++----
+ src/hb-common.h                |  11 ++++
+ src/hb-ot-layout-gdef-private.h |  28 +++++----
+ src/hb-ot-layout-open-private.h |  25 ++++----
+ src/hb-ot-layout-private.h     |  23 ++------
+ src/hb-ot-layout.cc            | 123
+ +++++++++++++++++++++++++++++++++++++---
+ src/hb-ot-layout.h             |  29 ++++++----
  6 files changed, 176 insertions(+), 63 deletions(-)
 
 commit aff831ed6787abe8e24a977e34d97ff2e0b7dc21
  6 files changed, 176 insertions(+), 63 deletions(-)
 
 commit aff831ed6787abe8e24a977e34d97ff2e0b7dc21
@@ -30329,11 +41880,11 @@ Date: Thu Jan 24 06:03:45 2008 -0500
 
     Implement glyph properties
 
 
     Implement glyph properties
 
- src/hb-ot-layout-gdef-private.h |   10 ++++-
- src/hb-ot-layout-private.h     |   16 ++++++-
- src/hb-ot-layout.cc            |   84
- +++++++++++++++++++++++++++++++++++---
- src/hb-ot-layout.h             |   25 ++++++++---
+ src/hb-ot-layout-gdef-private.h | 10 ++++-
+ src/hb-ot-layout-private.h     | 16 +++++++-
+ src/hb-ot-layout.cc            | 84
+ +++++++++++++++++++++++++++++++++++++----
+ src/hb-ot-layout.h             | 25 ++++++++----
  4 files changed, 117 insertions(+), 18 deletions(-)
 
 commit ead428d7a0bf4dc84340a99f3959e5cc58123e99
  4 files changed, 117 insertions(+), 18 deletions(-)
 
 commit ead428d7a0bf4dc84340a99f3959e5cc58123e99
@@ -30342,10 +41893,10 @@ Date: Thu Jan 24 03:54:09 2008 -0500
 
     More public api
 
 
     More public api
 
- src/hb-ot-layout-open-private.h |   32 +++++++++++++++++++-------------
- src/hb-ot-layout-private.h     |    9 ++++++---
- src/hb-ot-layout.cc            |   21 ++++++++++++++-------
- src/hb-ot-layout.h             |    2 --
+ src/hb-ot-layout-open-private.h | 32 +++++++++++++++++++-------------
+ src/hb-ot-layout-private.h     |  9 ++++++---
+ src/hb-ot-layout.cc            | 21 ++++++++++++++-------
+ src/hb-ot-layout.h             |  2 --
  4 files changed, 39 insertions(+), 25 deletions(-)
 
 commit fd92a3dde32fd10df30c9eeb97641bc3c15b1e9b
  4 files changed, 39 insertions(+), 25 deletions(-)
 
 commit fd92a3dde32fd10df30c9eeb97641bc3c15b1e9b
@@ -30354,16 +41905,16 @@ Date: Thu Jan 24 03:11:09 2008 -0500
 
     Starting public interface
 
 
     Starting public interface
 
- src/Makefile                   |   11 -----
- src/Makefile.ng                |   11 +++++
- src/hb-ot-layout-gdef-private.h |   17 +++----
- src/hb-ot-layout-gsub-private.h |    3 +-
- src/hb-ot-layout-open-private.h |   92
- ++++++++++++++++++++++++++++-----------
- src/hb-ot-layout-private.h     |   51 +++++++++++++++++++++
- src/hb-ot-layout.cc            |   67 ++++++++++++++++++++++++++++
- src/hb-ot-layout.h             |   35 +++++++++++++-
- src/main.cc                    |    1 +
+ src/Makefile                   | 11 -----
+ src/Makefile.ng                | 11 +++++
+ src/hb-ot-layout-gdef-private.h | 17 ++++----
+ src/hb-ot-layout-gsub-private.h |  3 +-
+ src/hb-ot-layout-open-private.h | 92
+ +++++++++++++++++++++++++++++------------
+ src/hb-ot-layout-private.h     | 51 +++++++++++++++++++++++
+ src/hb-ot-layout.cc            | 67 ++++++++++++++++++++++++++++++
+ src/hb-ot-layout.h             | 35 ++++++++++++++--
+ src/main.cc                    |  1 +
  9 files changed, 236 insertions(+), 52 deletions(-)
 
 commit 7d6b95b000ec6cd8ca93113b2d81a049ad2f9bbe
  9 files changed, 236 insertions(+), 52 deletions(-)
 
 commit 7d6b95b000ec6cd8ca93113b2d81a049ad2f9bbe
@@ -30372,8 +41923,8 @@ Date:   Thu Jan 24 04:42:24 2008 +0000
 
     Remove unused macro
 
 
     Remove unused macro
 
- src/harfbuzz-impl.h |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/harfbuzz-impl.h | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 7586089c6fa8185cad8387869d3703c637e5cbb1
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 7586089c6fa8185cad8387869d3703c637e5cbb1
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -30381,11 +41932,11 @@ Date: Wed Jan 23 18:02:28 2008 -0500
 
     Minor
 
 
     Minor
 
- src/hb-ot-layout-gdef-private.h |   37 +++++++++++++++++++++++-----
- src/hb-ot-layout-gsub-private.h |   13 ++++++++++
- src/hb-ot-layout-open-private.h |   49
- ++++++++++++++++++++++++++++++++------
- src/hb-private.h               |    2 +
+ src/hb-ot-layout-gdef-private.h | 37 +++++++++++++++++++++++++------
+ src/hb-ot-layout-gsub-private.h | 13 +++++++++++
+ src/hb-ot-layout-open-private.h | 49
+ ++++++++++++++++++++++++++++++++++-------
+ src/hb-private.h               |  2 ++
  4 files changed, 86 insertions(+), 15 deletions(-)
 
 commit aefaafe5bc4fc6d37a412c135b1079c287be7045
  4 files changed, 86 insertions(+), 15 deletions(-)
 
 commit aefaafe5bc4fc6d37a412c135b1079c287be7045
@@ -30394,9 +41945,9 @@ Date:   Wed Jan 23 17:25:29 2008 -0500
 
     Minor renaming
 
 
     Minor renaming
 
- src/hb-ot-layout-gdef-private.h |   10 +++++-----
- src/hb-ot-layout-open-private.h |   16 +++++++---------
- src/main.cc                    |    4 ++--
+ src/hb-ot-layout-gdef-private.h | 10 +++++-----
+ src/hb-ot-layout-open-private.h | 16 +++++++---------
+ src/main.cc                    |  4 ++--
  3 files changed, 14 insertions(+), 16 deletions(-)
 
 commit a16ecbf0564a6e2576da22c12827f3c0719da549
  3 files changed, 14 insertions(+), 16 deletions(-)
 
 commit a16ecbf0564a6e2576da22c12827f3c0719da549
@@ -30405,12 +41956,12 @@ Date: Wed Jan 23 17:01:55 2008 -0500
 
     Initial gsub stub
 
 
     Initial gsub stub
 
- src/hb-ot-layout-gdef-private.h |    4 +
- src/hb-ot-layout-gsub-private.h |  453
- +++++++++++++++++++++++++++++++++++++++
- src/hb-ot-layout-open-private.h |    3 +
- src/main.cc                    |    1 +
- 4 files changed, 461 insertions(+), 0 deletions(-)
+ src/hb-ot-layout-gdef-private.h |   4 +
+ src/hb-ot-layout-gsub-private.h | 453
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-open-private.h |   3 +
+ src/main.cc                    |   1 +
+ 4 files changed, 461 insertions(+)
 
 commit 64aef3a54999496fd1de4f5aa5b019e4c03b3836
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 64aef3a54999496fd1de4f5aa5b019e4c03b3836
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -30418,13 +41969,13 @@ Date: Wed Jan 23 16:14:38 2008 -0500
 
     Add copyright notices.
 
 
     Add copyright notices.
 
- src/hb-common.h                |   26 ++++++++++++++++++++++++++
- src/hb-ot-layout-gdef-private.h |   26 ++++++++++++++++++++++++++
- src/hb-ot-layout-open-private.h |   26 ++++++++++++++++++++++++++
- src/hb-ot-layout.h             |   26 ++++++++++++++++++++++++++
- src/hb-private.h               |   26 ++++++++++++++++++++++++++
- src/main.cc                    |   26 ++++++++++++++++++++++++++
- 6 files changed, 156 insertions(+), 0 deletions(-)
+ src/hb-common.h                | 26 ++++++++++++++++++++++++++
+ src/hb-ot-layout-gdef-private.h | 26 ++++++++++++++++++++++++++
+ src/hb-ot-layout-open-private.h | 26 ++++++++++++++++++++++++++
+ src/hb-ot-layout.h             | 26 ++++++++++++++++++++++++++
+ src/hb-private.h               | 26 ++++++++++++++++++++++++++
+ src/main.cc                    | 26 ++++++++++++++++++++++++++
+ 6 files changed, 156 insertions(+)
 
 commit 12360f7c159826ae72271b34486dee59d96aa8ca
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 12360f7c159826ae72271b34486dee59d96aa8ca
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -30432,10 +41983,10 @@ Date: Wed Jan 23 15:50:38 2008 -0500
 
     Minor cleanup, add LIKELY and UNLIKELY annotations
 
 
     Minor cleanup, add LIKELY and UNLIKELY annotations
 
- src/hb-ot-layout-gdef-private.h |   63
- ++++++++++++++++++++++----------------
- src/hb-ot-layout-open-private.h |   36 +++++++---------------
- src/hb-private.h               |   15 +++++++++
+ src/hb-ot-layout-gdef-private.h | 63
+ +++++++++++++++++++++++------------------
+ src/hb-ot-layout-open-private.h | 36 ++++++++---------------
+ src/hb-private.h               | 15 ++++++++++
  3 files changed, 63 insertions(+), 51 deletions(-)
 
 commit 8dd1c8b8d6797d899d0f5b0a8015886bf6520ca2
  3 files changed, 63 insertions(+), 51 deletions(-)
 
 commit 8dd1c8b8d6797d899d0f5b0a8015886bf6520ca2
@@ -30444,20 +41995,20 @@ Date: Wed Jan 23 05:00:30 2008 -0500
 
     Clean up file names, add namespace
 
 
     Clean up file names, add namespace
 
- src/harfbuzz-common.h          |   14 -
- src/harfbuzz-gdef-private.h    |  213 -----------
- src/harfbuzz-gdef.h            |   11 -
- src/harfbuzz-open-private.h    |  804
- ---------------------------------------
- src/harfbuzz-open.h            |   17 -
- src/harfbuzz-private.h                 |   12 -
- src/hb-common.h                |   14 +
- src/hb-ot-layout-gdef-private.h |  213 +++++++++++
- src/hb-ot-layout-open-private.h |  804
- +++++++++++++++++++++++++++++++++++++++
- src/hb-ot-layout.h             |   17 +
- src/hb-private.h               |   12 +
- src/main.cc                    |    4 +-
+ src/harfbuzz-common.h          |  14 -
+ src/harfbuzz-gdef-private.h    | 213 -----------
+ src/harfbuzz-gdef.h            |  11 -
+ src/harfbuzz-open-private.h    | 804
+ ----------------------------------------
+ src/harfbuzz-open.h            |  17 -
+ src/harfbuzz-private.h                 |  12 -
+ src/hb-common.h                |  14 +
+ src/hb-ot-layout-gdef-private.h | 213 +++++++++++
+ src/hb-ot-layout-open-private.h | 804
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.h             |  17 +
+ src/hb-private.h               |  12 +
+ src/main.cc                    |   4 +-
  12 files changed, 1062 insertions(+), 1073 deletions(-)
 
 commit 1f437e6f47fb6c15761021bd2078f31778f2179c
  12 files changed, 1062 insertions(+), 1073 deletions(-)
 
 commit 1f437e6f47fb6c15761021bd2078f31778f2179c
@@ -30466,10 +42017,10 @@ Date: Wed Jan 23 04:36:40 2008 -0500
 
     Make all code NULL-free and assert-free
 
 
     Make all code NULL-free and assert-free
 
- src/harfbuzz-gdef-private.h | 125 +++++++++----------
- src/harfbuzz-open-private.h | 285
- ++++++++++++++++++++++--------------------
- src/main.cc                |    8 +-
+ src/harfbuzz-gdef-private.h | 125 ++++++++++---------
+ src/harfbuzz-open-private.h | 285
+ +++++++++++++++++++++++---------------------
+ src/main.cc                |   8 +-
  3 files changed, 214 insertions(+), 204 deletions(-)
 
 commit 600e5eb80f553ea8eb862e6784133574c74ca513
  3 files changed, 214 insertions(+), 204 deletions(-)
 
 commit 600e5eb80f553ea8eb862e6784133574c74ca513
@@ -30478,10 +42029,10 @@ Date: Wed Jan 23 02:01:37 2008 -0500
 
     Define get_for_data() factories
 
 
     Define get_for_data() factories
 
- src/harfbuzz-gdef-private.h |   3 +++
- src/harfbuzz-open-private.h |  42
+ src/harfbuzz-gdef-private.h | 3 +++
+ src/harfbuzz-open-private.h | 42
  +++++++++++++++++++++++++++++-------------
  +++++++++++++++++++++++++++++-------------
- src/main.cc                |   10 ++++------
+ src/main.cc                | 10 ++++------
  3 files changed, 36 insertions(+), 19 deletions(-)
 
 commit b9d7688fb3d45894901484b74095c4f11cab6196
  3 files changed, 36 insertions(+), 19 deletions(-)
 
 commit b9d7688fb3d45894901484b74095c4f11cab6196
@@ -30490,11 +42041,11 @@ Date: Wed Jan 23 01:38:10 2008 -0500
 
     Finish and test GDEF
 
 
     Finish and test GDEF
 
- src/harfbuzz-gdef-private.h |  72
- ++++++++++++++++++++++++++++++------------
- src/harfbuzz-open-private.h |  23 +++++++------
- src/harfbuzz-open.h        |    4 ++
- src/main.cc                |   10 ++++++
+ src/harfbuzz-gdef-private.h | 72
+ ++++++++++++++++++++++++++++++++-------------
+ src/harfbuzz-open-private.h | 23 ++++++++-------
+ src/harfbuzz-open.h        |  4 +++
+ src/main.cc                | 10 +++++++
  4 files changed, 77 insertions(+), 32 deletions(-)
 
 commit 303fe62824d4e99df554b6bfaacba05d068522fb
  4 files changed, 77 insertions(+), 32 deletions(-)
 
 commit 303fe62824d4e99df554b6bfaacba05d068522fb
@@ -30503,12 +42054,12 @@ Date: Wed Jan 23 00:20:48 2008 -0500
 
     Misc cleanup
 
 
     Misc cleanup
 
- src/Makefile               |   10 +++-
- src/harfbuzz-gdef-private.h |  65 +++++++++++++++++++++------
- src/harfbuzz-open-private.h | 102
- +++++++++++++++++++++++++++++++++++++++----
- src/harfbuzz-private.h      |   6 +++
- src/main.cc                |   12 +++---
+ src/Makefile               |  10 ++++-
+ src/harfbuzz-gdef-private.h | 65 +++++++++++++++++++++-------
+ src/harfbuzz-open-private.h | 102
+ ++++++++++++++++++++++++++++++++++++++++----
+ src/harfbuzz-private.h      |  6 +++
+ src/main.cc                |  12 +++---
  5 files changed, 163 insertions(+), 32 deletions(-)
 
 commit 17843245fde4cc8cddc7da8ef30357d3d8778187
  5 files changed, 163 insertions(+), 32 deletions(-)
 
 commit 17843245fde4cc8cddc7da8ef30357d3d8778187
@@ -30523,8 +42074,8 @@ Date:   Wed Jan 16 20:39:29 2008 +0000
            COPYING.FTL that
            are no longer there.
 
            COPYING.FTL that
            are no longer there.
 
- src/Makefile.am |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/Makefile.am | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit a2a9a023f6472ba262f89e5327318996b8258d25
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit a2a9a023f6472ba262f89e5327318996b8258d25
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30542,35 +42093,35 @@ Date: Tue Jan 15 22:46:32 2008 +0000
            which is
            LGPL-compatible.
 
            which is
            LGPL-compatible.
 
- src/COPYING                  |   39 +++--
- src/COPYING.FTL              |  174 ---------------------
- src/COPYING.GPL              |  340
- -----------------------------------------
- src/harfbuzz-buffer-private.h |   32 +++-
- src/harfbuzz-buffer.c        |   27 +++-
- src/harfbuzz-buffer.h        |   32 +++-
- src/harfbuzz-dump-main.c      |   34 +++--
- src/harfbuzz-dump.c          |   34 +++--
- src/harfbuzz-dump.h          |   35 +++--
- src/harfbuzz-gdef-private.h   |   29 +++-
- src/harfbuzz-gdef.c          |   29 +++-
- src/harfbuzz-gdef.h          |   29 +++-
- src/harfbuzz-global.h        |   29 +++-
- src/harfbuzz-gpos-private.h   |   29 +++-
- src/harfbuzz-gpos.c          |   31 +++-
- src/harfbuzz-gpos.h          |   29 +++-
- src/harfbuzz-gsub-private.h   |   29 +++-
- src/harfbuzz-gsub.c          |   31 +++-
- src/harfbuzz-gsub.h          |   29 +++-
- src/harfbuzz-impl.c          |   31 +++-
- src/harfbuzz-impl.h          |   29 +++-
- src/harfbuzz-open-private.h   |   29 +++-
- src/harfbuzz-open.c          |   29 +++-
- src/harfbuzz-open.h          |   29 +++-
- src/harfbuzz-stream-private.h |   29 +++-
- src/harfbuzz-stream.c        |   31 +++-
- src/harfbuzz.c                       |   28 +++-
- src/harfbuzz.h                       |   29 +++-
+ src/COPYING                  |  39 +++--
+ src/COPYING.FTL              | 174 ---------------------
+ src/COPYING.GPL              | 340
+ ------------------------------------------
+ src/harfbuzz-buffer-private.h |  32 ++--
+ src/harfbuzz-buffer.c        |  27 +++-
+ src/harfbuzz-buffer.h        |  32 ++--
+ src/harfbuzz-dump-main.c      |  34 +++--
+ src/harfbuzz-dump.c          |  34 +++--
+ src/harfbuzz-dump.h          |  35 +++--
+ src/harfbuzz-gdef-private.h   |  29 +++-
+ src/harfbuzz-gdef.c          |  29 +++-
+ src/harfbuzz-gdef.h          |  29 +++-
+ src/harfbuzz-global.h        |  29 +++-
+ src/harfbuzz-gpos-private.h   |  29 +++-
+ src/harfbuzz-gpos.c          |  31 +++-
+ src/harfbuzz-gpos.h          |  29 +++-
+ src/harfbuzz-gsub-private.h   |  29 +++-
+ src/harfbuzz-gsub.c          |  31 +++-
+ src/harfbuzz-gsub.h          |  29 +++-
+ src/harfbuzz-impl.c          |  31 +++-
+ src/harfbuzz-impl.h          |  29 +++-
+ src/harfbuzz-open-private.h   |  29 +++-
+ src/harfbuzz-open.c          |  29 +++-
+ src/harfbuzz-open.h          |  29 +++-
+ src/harfbuzz-stream-private.h |  29 +++-
+ src/harfbuzz-stream.c        |  31 +++-
+ src/harfbuzz.c                       |  28 +++-
+ src/harfbuzz.h                       |  29 +++-
  28 files changed, 564 insertions(+), 741 deletions(-)
 
 commit 4ccedd22eaa6e47bd8bbf255627a8b55fbb44736
  28 files changed, 564 insertions(+), 741 deletions(-)
 
 commit 4ccedd22eaa6e47bd8bbf255627a8b55fbb44736
@@ -30588,8 +42139,8 @@ Date:   Wed Dec 5 03:41:29 2007 +0000
            * pango/pango-utils.c (handle_alias_line):
            Fix C99ism.
 
            * pango/pango-utils.c (handle_alias_line):
            Fix C99ism.
 
- src/harfbuzz-stream.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/harfbuzz-stream.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit cd55cfa2b0a1fe35d5a4ad1c8feaa399d7fb7ab3
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit cd55cfa2b0a1fe35d5a4ad1c8feaa399d7fb7ab3
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -30597,8 +42148,8 @@ Date:   Fri Nov 30 04:31:29 2007 +0000
 
     Undo accidental change.
 
 
     Undo accidental change.
 
- src/harfbuzz-impl.c |   2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/harfbuzz-impl.c | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 3f05da638c8d7b13e7f860aeda1a6321e5ebd92e
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 3f05da638c8d7b13e7f860aeda1a6321e5ebd92e
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30618,8 +42169,8 @@ Date:   Fri Nov 30 04:29:58 2007 +0000
            * pango/pangofc-font.c (get_face_metrics):
            Handle case of underline_position==0 after rounding.
 
            * pango/pangofc-font.c (get_face_metrics):
            Handle case of underline_position==0 after rounding.
 
- src/harfbuzz-impl.c |   2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/harfbuzz-impl.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit e58278fedb67cbaac4bf4d6dfc33209cb22eec08
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit e58278fedb67cbaac4bf4d6dfc33209cb22eec08
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30631,8 +42182,8 @@ Date:   Sat Nov 24 01:40:13 2007 +0000
 
            * pango/opentype/harfbuzz-impl.c: Remove unused macro.
 
 
            * pango/opentype/harfbuzz-impl.c: Remove unused macro.
 
- src/harfbuzz-impl.c |  18 ------------------
- 1 files changed, 0 insertions(+), 18 deletions(-)
+ src/harfbuzz-impl.c | 18 ------------------
+ 1 file changed, 18 deletions(-)
 
 commit 3b047380aec4ccc707c4579327d54172c19820fd
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit 3b047380aec4ccc707c4579327d54172c19820fd
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -30640,9 +42191,9 @@ Date:   Sun Nov 18 22:34:08 2007 +0000
 
     Minor
 
 
     Minor
 
- src/harfbuzz-dump-main.c |    4 +-
- src/harfbuzz-stream.c   |   89
- ++++++++++++++++++++++-----------------------
+ src/harfbuzz-dump-main.c |  4 +--
+ src/harfbuzz-stream.c   | 89
+ ++++++++++++++++++++++++------------------------
  2 files changed, 46 insertions(+), 47 deletions(-)
 
 commit 10d6a25a26bdbab4ece4edf0e34ffd3d22410ebe
  2 files changed, 46 insertions(+), 47 deletions(-)
 
 commit 10d6a25a26bdbab4ece4edf0e34ffd3d22410ebe
@@ -30651,10 +42202,10 @@ Date: Wed Nov 7 10:04:11 2007 +0000
 
     Remove dead code.
 
 
     Remove dead code.
 
- src/harfbuzz-gdef.c |  88
- ---------------------------------------------------
- src/harfbuzz-gpos.h |   4 +--
- 2 files changed, 1 insertions(+), 91 deletions(-)
+ src/harfbuzz-gdef.c | 88
+ -----------------------------------------------------
+ src/harfbuzz-gpos.h | 4 +--
+ 2 files changed, 1 insertion(+), 91 deletions(-)
 
 commit 47d2c33e3d099fae79e199367de5011bc5c12273
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 47d2c33e3d099fae79e199367de5011bc5c12273
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30666,18 +42217,18 @@ Date: Wed Nov 7 09:59:18 2007 +0000
 
            * pango/opentype/*: And some more.
 
 
            * pango/opentype/*: And some more.
 
- src/harfbuzz-buffer.h        |    8 ++--
- src/harfbuzz-dump-main.c      |   22 +++++-----
- src/harfbuzz-gdef.c          |   14 +++---
- src/harfbuzz-gdef.h          |    4 +-
- src/harfbuzz-global.h        |   21 +++++-----
- src/harfbuzz-gpos.c          |   82
- ++++++++++++++++++++---------------------
- src/harfbuzz-gpos.h          |   12 +++---
- src/harfbuzz-gsub.c          |    4 +-
- src/harfbuzz-gsub.h          |    4 +-
- src/harfbuzz-stream-private.h |    4 +-
- src/harfbuzz-stream.c        |   16 ++++----
+ src/harfbuzz-buffer.h        |  8 ++---
+ src/harfbuzz-dump-main.c      | 22 ++++++------
+ src/harfbuzz-gdef.c          | 14 ++++----
+ src/harfbuzz-gdef.h          |  4 +--
+ src/harfbuzz-global.h        | 21 +++++------
+ src/harfbuzz-gpos.c          | 82
+ +++++++++++++++++++++----------------------
+ src/harfbuzz-gpos.h          | 12 +++----
+ src/harfbuzz-gsub.c          |  4 +--
+ src/harfbuzz-gsub.h          |  4 +--
+ src/harfbuzz-stream-private.h |  4 +--
+ src/harfbuzz-stream.c        | 16 ++++-----
  11 files changed, 95 insertions(+), 96 deletions(-)
 
 commit 78ef65ba08967fe1b5f97bcb27074bd635f4b898
  11 files changed, 95 insertions(+), 96 deletions(-)
 
 commit 78ef65ba08967fe1b5f97bcb27074bd635f4b898
@@ -30690,26 +42241,26 @@ Date: Wed Nov 7 08:06:01 2007 +0000
 
            * pango/opentype/*: Some more cleanup and merging.
 
 
            * pango/opentype/*: Some more cleanup and merging.
 
- src/Makefile.am              |    6 +-
- src/harfbuzz-buffer-private.h |   33 ++++++
- src/harfbuzz-buffer.c        |    4 +-
- src/harfbuzz-dump-main.c      |    3 +-
- src/harfbuzz-gdef-private.h   |    9 ++-
- src/harfbuzz-gdef.c          |   39 +++++++
- src/harfbuzz-global.h        |    2 +
- src/harfbuzz-gpos-private.h   |    1 +
- src/harfbuzz-gpos.c          |   32 +-----
- src/harfbuzz-gsub-private.h   |    1 +
- src/harfbuzz-gsub.c          |   33 +-----
- src/harfbuzz-impl.c          |  216
+ src/Makefile.am              |   6 +-
+ src/harfbuzz-buffer-private.h |  33 ++++++
+ src/harfbuzz-buffer.c        |   4 +-
+ src/harfbuzz-dump-main.c      |   3 +-
+ src/harfbuzz-gdef-private.h   |   +-
+ src/harfbuzz-gdef.c          |  39 +++++++
+ src/harfbuzz-global.h        |   2 +
+ src/harfbuzz-gpos-private.h   |   1 +
+ src/harfbuzz-gpos.c          |  32 +-----
+ src/harfbuzz-gsub-private.h   |   1 +
+ src/harfbuzz-gsub.c          |  33 +-----
+ src/harfbuzz-impl.c          | 216
  ++------------------------------------
  ++------------------------------------
- src/harfbuzz-impl.h          |  100 +-----------------
- src/harfbuzz-open-private.h   |    4 +-
- src/harfbuzz-stream-private.h |   70 ++++++++++++
- src/harfbuzz-stream.c        |  234
- +++++++++++++++++++++++++++++++++++++++++
- src/harfbuzz.c                       |    1 +
- src/harfbuzz.h                       |    3 +-
+ src/harfbuzz-impl.h          | 100 +-----------------
+ src/harfbuzz-open-private.h   |   4 +-
+ src/harfbuzz-stream-private.h |  70 +++++++++++++
+ src/harfbuzz-stream.c        | 234
+ ++++++++++++++++++++++++++++++++++++++++++
+ src/harfbuzz.c                       |   1 +
+ src/harfbuzz.h                       |   3 +-
  18 files changed, 419 insertions(+), 372 deletions(-)
 
 commit 5c9bd379950d914982bdb91d0f82b8036908db37
  18 files changed, 419 insertions(+), 372 deletions(-)
 
 commit 5c9bd379950d914982bdb91d0f82b8036908db37
@@ -30718,8 +42269,8 @@ Date:   Mon Oct 29 23:51:48 2007 +0000
 
     Fix typo.
 
 
     Fix typo.
 
- src/Makefile.am |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/Makefile.am | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit ef1f481752fa6e478f649e826c96927c98f21981
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit ef1f481752fa6e478f649e826c96927c98f21981
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30731,11 +42282,11 @@ Date: Thu Oct 25 23:37:11 2007 +0000
 
            * pango/opentype/*: Even more cleanup and more type renames.
 
 
            * pango/opentype/*: Even more cleanup and more type renames.
 
- src/harfbuzz-buffer.h |    3 +--
- src/harfbuzz-global.h |    6 ++++++
- src/harfbuzz-impl.c   |   16 ++++++++--------
- src/harfbuzz-impl.h   |   22 +++++++++++-----------
- src/harfbuzz-open.h   |    3 ---
+ src/harfbuzz-buffer.h |  3 +--
+ src/harfbuzz-global.h |  6 ++++++
+ src/harfbuzz-impl.c   | 16 ++++++++--------
+ src/harfbuzz-impl.h   | 22 +++++++++++-----------
+ src/harfbuzz-open.h   |  3 ---
  5 files changed, 26 insertions(+), 24 deletions(-)
 
 commit 282c60a0eea0db784b0a094958bec35b5f3dc399
  5 files changed, 26 insertions(+), 24 deletions(-)
 
 commit 282c60a0eea0db784b0a094958bec35b5f3dc399
@@ -30749,20 +42300,20 @@ Date: Thu Oct 25 23:22:17 2007 +0000
            * pango/opentype/*: More cleanup, remove redundant error
            types.
 
            * pango/opentype/*: More cleanup, remove redundant error
            types.
 
- src/harfbuzz-dump-main.c |    4 +-
- src/harfbuzz-dump.c     |   14 +++---
- src/harfbuzz-gdef.c     |   25 +++++-----
- src/harfbuzz-gdef.h     |    3 -
- src/harfbuzz-global.h   |   31 ++++++-----
- src/harfbuzz-gpos.c     |  124
- +++++++++++++++++++++++-----------------------
- src/harfbuzz-gpos.h     |    3 -
- src/harfbuzz-gsub.c     |   86 ++++++++++++++++----------------
- src/harfbuzz-gsub.h     |    3 -
- src/harfbuzz-impl.c     |   18 +++---
- src/harfbuzz-impl.h     |    2 +
- src/harfbuzz-open.c     |   24 +++++-----
- src/harfbuzz-open.h     |    6 +-
+ src/harfbuzz-dump-main.c |   4 +-
+ src/harfbuzz-dump.c     |  14 +++---
+ src/harfbuzz-gdef.c     |  25 +++++-----
+ src/harfbuzz-gdef.h     |   3 --
+ src/harfbuzz-global.h   |  31 ++++++------
+ src/harfbuzz-gpos.c     | 124
+ +++++++++++++++++++++++------------------------
+ src/harfbuzz-gpos.h     |   3 --
+ src/harfbuzz-gsub.c     |  86 ++++++++++++++++----------------
+ src/harfbuzz-gsub.h     |   3 --
+ src/harfbuzz-impl.c     |  18 +++----
+ src/harfbuzz-impl.h     |   2 +
+ src/harfbuzz-open.c     |  24 ++++-----
+ src/harfbuzz-open.h     |   6 +--
  13 files changed, 170 insertions(+), 173 deletions(-)
 
 commit 4280ec4df45ae86c10c3cd24ddb9c05e47223d39
  13 files changed, 170 insertions(+), 173 deletions(-)
 
 commit 4280ec4df45ae86c10c3cd24ddb9c05e47223d39
@@ -30778,25 +42329,25 @@ Date: Thu Oct 25 00:23:46 2007 +0000
            and more
            type renames and moving code around.
 
            and more
            type renames and moving code around.
 
- src/Makefile.am            |    3 +-
- src/ftglue.c               |  287
- -------------------------------------------
- src/ftglue.h               |  151 -----------------------
- src/harfbuzz-dump-main.c    |  48 +-------
- src/harfbuzz-dump.c        |   30 +++---
- src/harfbuzz-gdef.c        |   18 ++--
- src/harfbuzz-global.h      |   18 +++
- src/harfbuzz-gpos-private.h |   2 +-
- src/harfbuzz-gpos.c        |   90 +++++++-------
- src/harfbuzz-gsub-private.h |   2 +-
- src/harfbuzz-gsub.c        |   64 +++++-----
- src/harfbuzz-impl.c        |  283
- ++++++++++++++++++++++++++++++++++++++++++
- src/harfbuzz-impl.h        |  114 ++++++++++++++++-
- src/harfbuzz-open-private.h |  14 +-
- src/harfbuzz-open.c        |   32 +++---
- src/harfbuzz-open.h        |   16 ---
- src/harfbuzz.c                     |    4 +-
+ src/Makefile.am            |   3 +-
+ src/ftglue.c               | 287
+ --------------------------------------------
+ src/ftglue.h               | 151 -----------------------
+ src/harfbuzz-dump-main.c    | 48 +-------
+ src/harfbuzz-dump.c        |  30 ++---
+ src/harfbuzz-gdef.c        |  18 +--
+ src/harfbuzz-global.h      |  18 +++
+ src/harfbuzz-gpos-private.h |  2 +-
+ src/harfbuzz-gpos.c        |  90 +++++++-------
+ src/harfbuzz-gsub-private.h |  2 +-
+ src/harfbuzz-gsub.c        |  64 +++++-----
+ src/harfbuzz-impl.c        | 283
+ +++++++++++++++++++++++++++++++++++++++++++
+ src/harfbuzz-impl.h        | 114 ++++++++++++++++--
+ src/harfbuzz-open-private.h | 14 +--
+ src/harfbuzz-open.c        |  32 ++---
+ src/harfbuzz-open.h        |  16 ---
+ src/harfbuzz.c                     |   4 +-
  17 files changed, 542 insertions(+), 634 deletions(-)
 
 commit 5716ae278a82d318ddbfeba01d0785d4efbe1454
  17 files changed, 542 insertions(+), 634 deletions(-)
 
 commit 5716ae278a82d318ddbfeba01d0785d4efbe1454
@@ -30811,31 +42362,31 @@ Date: Wed Oct 24 22:44:47 2007 +0000
            * pango/opentype/*: New header file harfbuzz-global.h.  Rename
            FT_* int types to HB_* types.
 
            * pango/opentype/*: New header file harfbuzz-global.h.  Rename
            FT_* int types to HB_* types.
 
- src/Makefile.am              |    1 +
- src/ftglue.c                 |   30 ++--
- src/ftglue.h                 |   26 +-
- src/harfbuzz-buffer-private.h |   26 +-
- src/harfbuzz-buffer.c        |   40 ++--
- src/harfbuzz-buffer.h        |   42 ++--
- src/harfbuzz-dump-main.c      |   24 +-
- src/harfbuzz-dump.c          |   14 +-
- src/harfbuzz-dump.h          |    4 +-
- src/harfbuzz-gdef-private.h   |   30 ++--
- src/harfbuzz-gdef.c          |  104 ++++----
- src/harfbuzz-gdef.h          |   32 ++--
- src/harfbuzz-global.h        |   34 +++
- src/harfbuzz-gpos-private.h   |  182 +++++++-------
- src/harfbuzz-gpos.c          |  540
- ++++++++++++++++++++--------------------
- src/harfbuzz-gpos.h          |   52 ++--
- src/harfbuzz-gsub-private.h   |  142 ++++++------
- src/harfbuzz-gsub.c          |  432 ++++++++++++++++----------------
- src/harfbuzz-gsub.h          |   50 ++--
- src/harfbuzz-impl.h          |    6 +-
- src/harfbuzz-open-private.h   |   26 +-
- src/harfbuzz-open.c          |  146 ++++++------
- src/harfbuzz-open.h          |   88 ++++----
- src/harfbuzz.h                       |    1 +
+ src/Makefile.am              |   1 +
+ src/ftglue.c                 |  30 +--
+ src/ftglue.h                 |  26 +-
+ src/harfbuzz-buffer-private.h |  26 +-
+ src/harfbuzz-buffer.c        |  40 ++--
+ src/harfbuzz-buffer.h        |  42 ++--
+ src/harfbuzz-dump-main.c      |  24 +-
+ src/harfbuzz-dump.c          |  14 +-
+ src/harfbuzz-dump.h          |   4 +-
+ src/harfbuzz-gdef-private.h   |  30 +--
+ src/harfbuzz-gdef.c          | 104 ++++----
+ src/harfbuzz-gdef.h          |  32 +--
+ src/harfbuzz-global.h        |  34 +++
+ src/harfbuzz-gpos-private.h   | 182 +++++++-------
+ src/harfbuzz-gpos.c          | 540
+ +++++++++++++++++++++---------------------
+ src/harfbuzz-gpos.h          |  52 ++--
+ src/harfbuzz-gsub-private.h   | 142 +++++------
+ src/harfbuzz-gsub.c          | 432 ++++++++++++++++-----------------
+ src/harfbuzz-gsub.h          |  50 ++--
+ src/harfbuzz-impl.h          |   6 +-
+ src/harfbuzz-open-private.h   |  26 +-
+ src/harfbuzz-open.c          | 146 ++++++------
+ src/harfbuzz-open.h          |  88 +++----
+ src/harfbuzz.h                       |   1 +
  24 files changed, 1056 insertions(+), 1016 deletions(-)
 
 commit 2130d852c76cccb94350a4aea222359640ffa8a4
  24 files changed, 1056 insertions(+), 1016 deletions(-)
 
 commit 2130d852c76cccb94350a4aea222359640ffa8a4
@@ -30850,9 +42401,9 @@ Date:   Wed Oct 24 21:35:03 2007 +0000
            * pango/opentype/harfbuzz-gsub-private.h:
            Add commented-out dummy struct for Extension lookups.
 
            * pango/opentype/harfbuzz-gsub-private.h:
            Add commented-out dummy struct for Extension lookups.
 
- src/harfbuzz-gpos-private.h |  13 +++++++++++++
- src/harfbuzz-gsub-private.h |  13 +++++++++++++
- 2 files changed, 26 insertions(+), 0 deletions(-)
+ src/harfbuzz-gpos-private.h | 13 +++++++++++++
+ src/harfbuzz-gsub-private.h | 13 +++++++++++++
+ 2 files changed, 26 insertions(+)
 
 commit 13b2b963848ada169c2fe3d3669fbc1c337f7fe7
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 13b2b963848ada169c2fe3d3669fbc1c337f7fe7
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30871,9 +42422,9 @@ Date:   Sun Oct 21 18:17:02 2007 +0000
            * pango/opentype/harfbuzz-impl.h: Define dummy HB_LIKELY() and
            HB_UNLIKELY(), to be filled later.
 
            * pango/opentype/harfbuzz-impl.h: Define dummy HB_LIKELY() and
            HB_UNLIKELY(), to be filled later.
 
- src/harfbuzz-buffer.c |    6 +++++-
- src/harfbuzz-impl.h   |    3 +++
- 2 files changed, 8 insertions(+), 1 deletions(-)
+ src/harfbuzz-buffer.c | 6 +++++-
+ src/harfbuzz-impl.h   | 3 +++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
 
 commit 6b347138b597c41af24453f630336ba2fc033dc5
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 6b347138b597c41af24453f630336ba2fc033dc5
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30888,24 +42439,24 @@ Date: Thu Oct 11 08:30:50 2007 +0000
 
            * pango/opentype/harfbuzz-buffer-internal.h: New file.
 
 
            * pango/opentype/harfbuzz-buffer-internal.h: New file.
 
- src/Makefile.am              |    1 +
- src/ftglue.c                 |   18 +++---
- src/ftglue.h                 |   20 ++++---
- src/harfbuzz-buffer-private.h |   60 ++++++++++++++++++++++
- src/harfbuzz-buffer.c        |  108
+ src/Makefile.am              |   1 +
+ src/ftglue.c                 |  18 +++----
+ src/ftglue.h                 |  20 ++++----
+ src/harfbuzz-buffer-private.h |  60 +++++++++++++++++++++++
+ src/harfbuzz-buffer.c        | 108
  +++++++++++++++++++++-------------------
  +++++++++++++++++++++-------------------
- src/harfbuzz-buffer.h        |   38 +--------------
- src/harfbuzz-gdef-private.h   |   17 ++++---
- src/harfbuzz-gdef.c          |   20 ++++---
- src/harfbuzz-gpos-private.h   |   13 +++--
- src/harfbuzz-gpos.c          |   16 +++---
- src/harfbuzz-gsub-private.h   |   14 +++--
- src/harfbuzz-gsub.c          |   20 ++++---
- src/harfbuzz-impl.h          |   12 +++--
- src/harfbuzz-open-private.h   |   81 +++++++++++++++++-------------
- src/harfbuzz-open.c          |  111
- +++++++++++++++++++++++-----------------
- src/harfbuzz.c                       |    1 +
+ src/harfbuzz-buffer.h        |  38 +--------------
+ src/harfbuzz-gdef-private.h   |  17 ++++---
+ src/harfbuzz-gdef.c          |  20 ++++----
+ src/harfbuzz-gpos-private.h   |  13 +++--
+ src/harfbuzz-gpos.c          |  16 +++---
+ src/harfbuzz-gsub-private.h   |  14 +++---
+ src/harfbuzz-gsub.c          |  20 ++++----
+ src/harfbuzz-impl.h          |  12 +++--
+ src/harfbuzz-open-private.h   |  81 +++++++++++++++++-------------
+ src/harfbuzz-open.c          | 111
+ ++++++++++++++++++++++++------------------
+ src/harfbuzz.c                       |   1 +
  16 files changed, 315 insertions(+), 235 deletions(-)
 
 commit 7cdfb61deefd8f43edb5eb79d45d38dbbbef9051
  16 files changed, 315 insertions(+), 235 deletions(-)
 
 commit 7cdfb61deefd8f43edb5eb79d45d38dbbbef9051
@@ -30918,8 +42469,8 @@ Date:   Thu Oct 11 07:46:33 2007 +0000
 
            * pango/opentype/ftglue.[ch]: Remove FTGLUE_API/APIDEF cruft.
 
 
            * pango/opentype/ftglue.[ch]: Remove FTGLUE_API/APIDEF cruft.
 
- src/ftglue.c |   16 ++++++++--------
- src/ftglue.h |   24 ++++++++----------------
+ src/ftglue.c | 16 ++++++++--------
+ src/ftglue.h | 24 ++++++++----------------
  2 files changed, 16 insertions(+), 24 deletions(-)
 
 commit 61ddbafaaad31ccacde54cad7e60a84abffc0a9f
  2 files changed, 16 insertions(+), 24 deletions(-)
 
 commit 61ddbafaaad31ccacde54cad7e60a84abffc0a9f
@@ -30935,8 +42486,8 @@ Date:   Thu Oct 11 07:45:26 2007 +0000
            of individual
            source files, to let compiler go wild with optimizations!
 
            of individual
            source files, to let compiler go wild with optimizations!
 
- src/Makefile.am |    9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
+ src/Makefile.am | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
 
 commit a219b3d003d6727c79dc51282d21e9ac48c44458
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit a219b3d003d6727c79dc51282d21e9ac48c44458
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30948,8 +42499,8 @@ Date:   Thu Oct 11 07:34:08 2007 +0000
 
            * pango/opentype/harfbuzz.c: Same here.
 
 
            * pango/opentype/harfbuzz.c: Same here.
 
- src/harfbuzz.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/harfbuzz.c | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 6567e16e3b14c08659342bbcc9f2735e71f9114e
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 6567e16e3b14c08659342bbcc9f2735e71f9114e
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30964,8 +42515,8 @@ Date:   Thu Oct 11 07:33:19 2007 +0000
            in
            libharfbuzz.a.  Those are just used by the harfbuzz-dump tool.
 
            in
            libharfbuzz.a.  Those are just used by the harfbuzz-dump tool.
 
- src/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 0b032549ba7581c879a0fc4e794b0e9a4723ae85
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 0b032549ba7581c879a0fc4e794b0e9a4723ae85
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30977,8 +42528,8 @@ Date:   Thu Oct 11 07:24:47 2007 +0000
 
            * pango/opentype/harfbuzz-buffer.c: Some more cleanup.
 
 
            * pango/opentype/harfbuzz-buffer.c: Some more cleanup.
 
- src/harfbuzz-buffer.c |   11 ++---------
- 1 files changed, 2 insertions(+), 9 deletions(-)
+ src/harfbuzz-buffer.c | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
 
 commit 7a26864308bd1ca8d5f47d798411cac7239b7d38
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 7a26864308bd1ca8d5f47d798411cac7239b7d38
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -30990,9 +42541,9 @@ Date:   Thu Oct 11 07:21:31 2007 +0000
 
            * pango/opentype/harfbuzz-buffer.c: Move some code around.
 
 
            * pango/opentype/harfbuzz-buffer.c: Move some code around.
 
- src/harfbuzz-buffer.c |   91
- ++++++++++++++++++++++++++-----------------------
- 1 files changed, 48 insertions(+), 43 deletions(-)
+ src/harfbuzz-buffer.c | 91
+ +++++++++++++++++++++++++++------------------------
+ 1 file changed, 48 insertions(+), 43 deletions(-)
 
 commit 7a5405c8261573a0f29d28fb533e800d698f6129
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit 7a5405c8261573a0f29d28fb533e800d698f6129
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -31000,8 +42551,8 @@ Date:   Thu Oct 11 07:15:16 2007 +0000
 
     Minor.
 
 
     Minor.
 
- src/harfbuzz-buffer.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 986f4fd96892ebda550793941bb1daed862c4a34
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 986f4fd96892ebda550793941bb1daed862c4a34
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31018,8 +42569,8 @@ Date:   Thu Oct 11 07:12:49 2007 +0000
            buffer
            is initialization is memset(0).
 
            buffer
            is initialization is memset(0).
 
- src/harfbuzz-buffer.c |   34 +++++++++++++++++-----------------
- src/harfbuzz-buffer.h |    2 +-
+ src/harfbuzz-buffer.c | 34 +++++++++++++++++-----------------
+ src/harfbuzz-buffer.h |  2 +-
  2 files changed, 18 insertions(+), 18 deletions(-)
 
 commit 06003908ccf2473366816935dd1b144cde587be9
  2 files changed, 18 insertions(+), 18 deletions(-)
 
 commit 06003908ccf2473366816935dd1b144cde587be9
@@ -31032,10 +42583,10 @@ Date: Thu Oct 11 07:05:09 2007 +0000
 
            * pango/opentype/*: Allocate buffer->positions lazily.
 
 
            * pango/opentype/*: Allocate buffer->positions lazily.
 
- src/harfbuzz-buffer.c |   25 +++++++++++++++++++++++--
- src/harfbuzz-buffer.h |    3 +++
- src/harfbuzz-gpos.c   |   13 ++++++++-----
- src/harfbuzz-gsub.c   |    5 +++--
+ src/harfbuzz-buffer.c | 25 +++++++++++++++++++++++--
+ src/harfbuzz-buffer.h |  3 +++
+ src/harfbuzz-gpos.c   | 13 ++++++++-----
+ src/harfbuzz-gsub.c   |  5 +++--
  4 files changed, 37 insertions(+), 9 deletions(-)
 
 commit fc3d6f575826704a0ae9ee9018323f6a3c422f4b
  4 files changed, 37 insertions(+), 9 deletions(-)
 
 commit fc3d6f575826704a0ae9ee9018323f6a3c422f4b
@@ -31054,21 +42605,21 @@ Date: Thu Oct 11 06:52:07 2007 +0000
 
            * pango/pango-ot*: Update to above.
 
 
            * pango/pango-ot*: Update to above.
 
- src/ftglue.c               |   52 ++----
- src/ftglue.h               |   28 ++--
- src/harfbuzz-buffer.c      |   16 +-
- src/harfbuzz-buffer.h      |    4 +-
- src/harfbuzz-gdef.c        |  106 ++++-------
- src/harfbuzz-gdef.h        |    6 +-
- src/harfbuzz-gpos-private.h |   1 -
- src/harfbuzz-gpos.c        |  462
- +++++++++++++++++--------------------------
- src/harfbuzz-gpos.h        |    2 -
- src/harfbuzz-gsub-private.h |   1 -
- src/harfbuzz-gsub.c        |  312 +++++++++++-------------------
- src/harfbuzz-gsub.h        |    2 -
- src/harfbuzz-open-private.h |  25 +--
- src/harfbuzz-open.c        |  127 ++++++-------
+ src/ftglue.c               |  52 ++---
+ src/ftglue.h               |  28 ++-
+ src/harfbuzz-buffer.c      |  16 +-
+ src/harfbuzz-buffer.h      |   4 +-
+ src/harfbuzz-gdef.c        | 106 ++++------
+ src/harfbuzz-gdef.h        |   6 +-
+ src/harfbuzz-gpos-private.h |  1 -
+ src/harfbuzz-gpos.c        | 462
+ ++++++++++++++++++--------------------------
+ src/harfbuzz-gpos.h        |   2 -
+ src/harfbuzz-gsub-private.h |  1 -
+ src/harfbuzz-gsub.c        | 312 +++++++++++-------------------
+ src/harfbuzz-gsub.h        |   2 -
+ src/harfbuzz-open-private.h | 25 ++-
+ src/harfbuzz-open.c        | 127 ++++++------
  14 files changed, 441 insertions(+), 703 deletions(-)
 
 commit a8abb8b994c3cd89808e8f7128a0c04b23eb3ede
  14 files changed, 441 insertions(+), 703 deletions(-)
 
 commit a8abb8b994c3cd89808e8f7128a0c04b23eb3ede
@@ -31094,26 +42645,26 @@ Date: Thu Oct 11 00:07:58 2007 +0000
 
            * pango/pango-ot*: Update to FT_Err to HB_Err renaming.
 
 
            * pango/pango-ot*: Update to FT_Err to HB_Err renaming.
 
- src/ftglue.c               |   51 ++-
- src/ftglue.h               |   21 +-
- src/harfbuzz-buffer.c      |  190 +++++++--
- src/harfbuzz-buffer.h      |   26 +-
- src/harfbuzz-dump-main.c    |  14 +-
- src/harfbuzz-dump.c        |   15 +-
- src/harfbuzz-gdef-private.h |   4 +-
- src/harfbuzz-gdef.c        |  149 ++++----
- src/harfbuzz-gdef.h        |   10 +-
- src/harfbuzz-gpos-private.h |   2 +-
- src/harfbuzz-gpos.c        |  810 +++++++++++++++++---------------------
- src/harfbuzz-gpos.h        |   30 +-
- src/harfbuzz-gsub-private.h |   2 +-
- src/harfbuzz-gsub.c        |  919
- ++++++++++++++++++-------------------------
- src/harfbuzz-gsub.h        |   24 +-
- src/harfbuzz-impl.h        |   22 +-
- src/harfbuzz-open-private.h |  20 +-
- src/harfbuzz-open.c        |  238 ++++++------
- src/harfbuzz-open.h        |   13 +-
+ src/ftglue.c               |  51 ++-
+ src/ftglue.h               |  21 +-
+ src/harfbuzz-buffer.c      | 190 +++++++--
+ src/harfbuzz-buffer.h      |  26 +-
+ src/harfbuzz-dump-main.c    | 14 +-
+ src/harfbuzz-dump.c        |  15 +-
+ src/harfbuzz-gdef-private.h |  4 +-
+ src/harfbuzz-gdef.c        | 149 +++----
+ src/harfbuzz-gdef.h        |  10 +-
+ src/harfbuzz-gpos-private.h |  2 +-
+ src/harfbuzz-gpos.c        | 810 ++++++++++++++++++--------------------
+ src/harfbuzz-gpos.h        |  30 +-
+ src/harfbuzz-gsub-private.h |  2 +-
+ src/harfbuzz-gsub.c        | 919
+ +++++++++++++++++++-------------------------
+ src/harfbuzz-gsub.h        |  24 +-
+ src/harfbuzz-impl.h        |  22 +-
+ src/harfbuzz-open-private.h | 20 +-
+ src/harfbuzz-open.c        | 238 ++++++------
+ src/harfbuzz-open.h        |  13 +-
  19 files changed, 1253 insertions(+), 1307 deletions(-)
 
 commit dd810b76bc554278d3a226cf89901d16992cf56d
  19 files changed, 1253 insertions(+), 1307 deletions(-)
 
 commit dd810b76bc554278d3a226cf89901d16992cf56d
@@ -31133,8 +42684,8 @@ Date:   Wed Aug 29 08:46:50 2007 +0000
            Don't
            use zero as allocated ligature id.  Zero means no ligature id.
 
            Don't
            use zero as allocated ligature id.  Zero means no ligature id.
 
- src/harfbuzz-buffer.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit e90d19919434b90d79e67aaf199bddd991f8e5d8
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit e90d19919434b90d79e67aaf199bddd991f8e5d8
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31152,8 +42703,8 @@ Date:   Tue Aug 21 08:03:26 2007 +0000
            Change type of intermediate index variable from FT_UShort to
            FT_ULong as it was overlowing with more than 65536 glyphs.
 
            Change type of intermediate index variable from FT_UShort to
            FT_ULong as it was overlowing with more than 65536 glyphs.
 
- src/harfbuzz-gpos.c |  15 ++++++++++-----
- src/harfbuzz-gsub.c |   2 +-
+ src/harfbuzz-gpos.c | 15 ++++++++++-----
+ src/harfbuzz-gsub.c | 2 +-
  2 files changed, 11 insertions(+), 6 deletions(-)
 
 commit 13b86ee398905f96f57df001309312f6dfdfea9a
  2 files changed, 11 insertions(+), 6 deletions(-)
 
 commit 13b86ee398905f96f57df001309312f6dfdfea9a
@@ -31171,8 +42722,8 @@ Date:   Tue Aug 21 01:38:07 2007 +0000
            Patch
            sent to harfbuzz-list.
 
            Patch
            sent to harfbuzz-list.
 
- src/harfbuzz-gsub.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-gsub.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 4c2556cb4c38a56c3a5087deb54aa6262ab3aff9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 4c2556cb4c38a56c3a5087deb54aa6262ab3aff9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31180,9 +42731,9 @@ Date:   Fri Jul 6 11:29:21 2007 -0400
 
     [gdef] Initial implementation
 
 
     [gdef] Initial implementation
 
- src/harfbuzz-gdef-private.h | 144
- ++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 142 insertions(+), 2 deletions(-)
+ src/harfbuzz-gdef-private.h | 144
+ +++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 142 insertions(+), 2 deletions(-)
 
 commit 5b2e947fd2b7c5ea49b2bef1e0190d99a525058c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5b2e947fd2b7c5ea49b2bef1e0190d99a525058c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31190,9 +42741,9 @@ Date:   Fri Jul 6 02:03:26 2007 -0400
 
     [open] small fixes, including not using unions for main structs
 
 
     [open] small fixes, including not using unions for main structs
 
- src/harfbuzz-open-private.h |  54
- +++++++++++++++++++++++--------------------
- 1 files changed, 29 insertions(+), 25 deletions(-)
+ src/harfbuzz-open-private.h | 54
+ ++++++++++++++++++++++++---------------------
+ 1 file changed, 29 insertions(+), 25 deletions(-)
 
 commit 151df44346990728b5dd249db5740a9543ae33b9
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 151df44346990728b5dd249db5740a9543ae33b9
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31200,8 +42751,8 @@ Date:   Thu Jul 5 17:22:07 2007 -0400
 
     Improve stupid Makefile
 
 
     Improve stupid Makefile
 
- src/Makefile |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/Makefile | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit 6c49bebc70a0118a803a5bc979f4436a82b48240
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 6c49bebc70a0118a803a5bc979f4436a82b48240
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31215,8 +42766,8 @@ Date:   Tue May 1 02:32:12 2007 +0000
            for
            those systems that don't track dependencies automatically.
 
            for
            those systems that don't track dependencies automatically.
 
- src/Makefile.am |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/Makefile.am | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 7341a116916c8470f1211f0cb3c65b189b42ec9e
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 7341a116916c8470f1211f0cb3c65b189b42ec9e
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31233,10 +42784,10 @@ Date: Tue Apr 3 22:45:29 2007 +0000
            Copy fixes from harfbuzz stable branch.  Includes a leak fix,
            a kerning fix, and an array out-of-bound access fix.
 
            Copy fixes from harfbuzz stable branch.  Includes a leak fix,
            a kerning fix, and an array out-of-bound access fix.
 
- src/harfbuzz-gdef.c |   2 ++
- src/harfbuzz-gpos.c |   8 ++++++++
- src/harfbuzz-open.c |   2 +-
- 3 files changed, 11 insertions(+), 1 deletions(-)
+ src/harfbuzz-gdef.c | 2 ++
+ src/harfbuzz-gpos.c | 8 ++++++++
+ src/harfbuzz-open.c | 2 +-
+ 3 files changed, 11 insertions(+), 1 deletion(-)
 
 commit 999a6f05758c10a902354457ecbf6c943bfed514
 Author: Hans Breuer <hans@breuer.org>
 
 commit 999a6f05758c10a902354457ecbf6c943bfed514
 Author: Hans Breuer <hans@breuer.org>
@@ -31248,8 +42799,8 @@ Date:   Sat Jan 13 21:31:41 2007 +0000
 
        * pango/makefile.msc pango/opentype/makefile.msc : updated
 
 
        * pango/makefile.msc pango/opentype/makefile.msc : updated
 
- src/makefile.msc |   16 ++++++----------
- 1 files changed, 6 insertions(+), 10 deletions(-)
+ src/makefile.msc | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
 
 commit 3c038d40da4bfe5037cc4e9de22bad08fa408465
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit 3c038d40da4bfe5037cc4e9de22bad08fa408465
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -31257,8 +42808,8 @@ Date:   Tue Jan 9 03:32:12 2007 +0000
 
     Remove .cvsignore files (moved to svn:ignore prop)
 
 
     Remove .cvsignore files (moved to svn:ignore prop)
 
- src/.cvsignore |    7 -------
- 1 files changed, 0 insertions(+), 7 deletions(-)
+ src/.cvsignore | 7 -------
+ 1 file changed, 7 deletions(-)
 
 commit 5b3f7702a64fe0513d08a67bdb72704e46fd7cd4
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 5b3f7702a64fe0513d08a67bdb72704e46fd7cd4
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31266,11 +42817,11 @@ Date: Thu Dec 28 06:42:37 2006 -0500
 
     Add stub GDEF files
 
 
     Add stub GDEF files
 
- src/harfbuzz-gdef-private.h |   8 ++++++++
- src/harfbuzz-gdef.h        |   11 +++++++++++
- src/harfbuzz-open-private.h |   3 +--
- src/harfbuzz-private.h      |   6 ++++++
- src/main.cc                |    1 +
+ src/harfbuzz-gdef-private.h | 8 ++++++++
+ src/harfbuzz-gdef.h        | 11 +++++++++++
+ src/harfbuzz-open-private.h | 3 +--
+ src/harfbuzz-private.h      | 6 ++++++
+ src/main.cc                |  1 +
  5 files changed, 27 insertions(+), 2 deletions(-)
 
 commit b3395a7aa36ff1ba5a17f494fbf359ec317a7e69
  5 files changed, 27 insertions(+), 2 deletions(-)
 
 commit b3395a7aa36ff1ba5a17f494fbf359ec317a7e69
@@ -31279,8 +42830,8 @@ Date:   Thu Dec 28 06:31:18 2006 -0500
 
     Don't shift down the mark attachment type
 
 
     Don't shift down the mark attachment type
 
- src/harfbuzz-open-private.h |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-open-private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 193b66d52ae2cb5ced7969e15b7f56dc1978ca8a
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 193b66d52ae2cb5ced7969e15b7f56dc1978ca8a
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31288,8 +42839,8 @@ Date:   Thu Dec 28 06:12:18 2006 -0500
 
     Remove stale comment
 
 
     Remove stale comment
 
- src/harfbuzz-open-private.h |  10 ----------
- 1 files changed, 0 insertions(+), 10 deletions(-)
+ src/harfbuzz-open-private.h | 10 ----------
+ 1 file changed, 10 deletions(-)
 
 commit 12c4568c680ea2b9b98a16a8b7402ca185c90ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 12c4568c680ea2b9b98a16a8b7402ca185c90ef6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31297,14 +42848,14 @@ Date: Thu Dec 28 06:10:59 2006 -0500
 
     Break and rename, in the layout of old HarfBuzz codebase
 
 
     Break and rename, in the layout of old HarfBuzz codebase
 
- src/.gitignore                     |    1 +
- src/Makefile               |    2 +-
- src/harfbuzz-common.h      |   14 +
- src/harfbuzz-ng.cc         |  802
- -------------------------------------------
- src/harfbuzz-open-private.h | 697 +++++++++++++++++++++++++++++++++++++
- src/harfbuzz-open.h        |   13 +
- src/main.cc                |   98 ++++++
+ src/.gitignore                     |   1 +
+ src/Makefile               |   2 +-
+ src/harfbuzz-common.h      |  14 +
+ src/harfbuzz-ng.cc         | 802
+ --------------------------------------------
+ src/harfbuzz-open-private.h | 697 ++++++++++++++++++++++++++++++++++++++
+ src/harfbuzz-open.h        |  13 +
+ src/main.cc                |  98 ++++++
  7 files changed, 824 insertions(+), 803 deletions(-)
 
 commit 3158d84b0dfe5032e7c56c03f2da97b8ab549d94
  7 files changed, 824 insertions(+), 803 deletions(-)
 
 commit 3158d84b0dfe5032e7c56c03f2da97b8ab549d94
@@ -31313,8 +42864,8 @@ Date:   Wed Dec 27 20:08:07 2006 -0500
 
     Oops. s/OpenTypeFontFaceFile/OpenTypeFontFile/g
 
 
     Oops. s/OpenTypeFontFaceFile/OpenTypeFontFile/g
 
- src/harfbuzz-ng.cc |  22 +++++++++++-----------
- 1 files changed, 11 insertions(+), 11 deletions(-)
+ src/harfbuzz-ng.cc | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
 
 commit bf0f9dd61375c5afce8e6b1664d0df5f6c8b2494
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit bf0f9dd61375c5afce8e6b1664d0df5f6c8b2494
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31322,8 +42873,8 @@ Date:   Wed Dec 27 20:06:42 2006 -0500
 
     Use union for ClassDef
 
 
     Use union for ClassDef
 
- src/harfbuzz-ng.cc |  12 +++++++-----
- 1 files changed, 7 insertions(+), 5 deletions(-)
+ src/harfbuzz-ng.cc | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
 
 commit c46196d09c4ea879bf45182e8a0d649d4c750c39
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c46196d09c4ea879bf45182e8a0d649d4c750c39
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31331,8 +42882,8 @@ Date:   Wed Dec 27 20:05:16 2006 -0500
 
     Use union for Coverage
 
 
     Use union for Coverage
 
- src/harfbuzz-ng.cc |  21 +++++++++++----------
- 1 files changed, 11 insertions(+), 10 deletions(-)
+ src/harfbuzz-ng.cc | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
 
 commit 86f450243dbaa82f187cf2d36364e9a59c0e64c7
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 86f450243dbaa82f187cf2d36364e9a59c0e64c7
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31340,8 +42891,8 @@ Date:   Wed Dec 27 19:59:07 2006 -0500
 
     Add GPOS stub
 
 
     Add GPOS stub
 
- src/harfbuzz-ng.cc |   3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/harfbuzz-ng.cc | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit 133466177e104ddcd2501a88735670540252167c
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 133466177e104ddcd2501a88735670540252167c
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31349,8 +42900,8 @@ Date:   Wed Dec 27 19:58:32 2006 -0500
 
     s/OpenTypeFont/OpenTypeFontFace/g
 
 
     s/OpenTypeFont/OpenTypeFontFace/g
 
- src/harfbuzz-ng.cc |  44 +++++++++++++++++++++++---------------------
- 1 files changed, 23 insertions(+), 21 deletions(-)
+ src/harfbuzz-ng.cc | 44 +++++++++++++++++++++++---------------------
+ 1 file changed, 23 insertions(+), 21 deletions(-)
 
 commit 71d62baab0429cdf56ba4019fd2a205f08188503
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 71d62baab0429cdf56ba4019fd2a205f08188503
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31358,9 +42909,9 @@ Date:   Wed Dec 27 01:29:24 2006 -0500
 
     GSUBGPOSHeader
 
 
     GSUBGPOSHeader
 
- src/harfbuzz-ng.cc |  103
- +++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 files changed, 98 insertions(+), 5 deletions(-)
+ src/harfbuzz-ng.cc | 103
+ ++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 98 insertions(+), 5 deletions(-)
 
 commit eebabd8b2ec5296deba6b09d7755933da0a7d9dc
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eebabd8b2ec5296deba6b09d7755933da0a7d9dc
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31368,8 +42919,8 @@ Date:   Wed Dec 27 00:21:31 2006 -0500
 
     Finished OpenType Common Table Formats
 
 
     Finished OpenType Common Table Formats
 
- src/harfbuzz-ng.cc |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/harfbuzz-ng.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 2b7374519766825971f9f4ff5b1cb49b74cfcaf8
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 2b7374519766825971f9f4ff5b1cb49b74cfcaf8
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31377,9 +42928,8 @@ Date:   Tue Dec 26 20:55:37 2006 -0500
 
     Device tables.
 
 
     Device tables.
 
- src/harfbuzz-ng.cc |  49
- +++++++++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 45 insertions(+), 4 deletions(-)
+ src/harfbuzz-ng.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 45 insertions(+), 4 deletions(-)
 
 commit eb32e374f4d6de8d428d36144f6eef93514820d2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit eb32e374f4d6de8d428d36144f6eef93514820d2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31387,9 +42937,9 @@ Date:   Tue Dec 26 20:00:33 2006 -0500
 
     ClassDef
 
 
     ClassDef
 
- src/harfbuzz-ng.cc |  121
- +++++++++++++++++++++++++++++++++++++++++----------
- 1 files changed, 97 insertions(+), 24 deletions(-)
+ src/harfbuzz-ng.cc | 121
+ ++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 97 insertions(+), 24 deletions(-)
 
 commit 53502c6723dbf9cd3b6ba91b733678b3c7871715
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 53502c6723dbf9cd3b6ba91b733678b3c7871715
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31397,8 +42947,8 @@ Date:   Tue Dec 26 19:29:08 2006 -0500
 
     Rename CoverageFormat to Coverage
 
 
     Rename CoverageFormat to Coverage
 
- src/harfbuzz-ng.cc |  18 +++++++++++++-----
- 1 files changed, 13 insertions(+), 5 deletions(-)
+ src/harfbuzz-ng.cc | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
 
 commit 0d6db2abcbe98456569ccf7934ba0a8b37c7f6f3
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0d6db2abcbe98456569ccf7934ba0a8b37c7f6f3
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31406,8 +42956,8 @@ Date:   Tue Dec 26 18:53:55 2006 -0500
 
     Define more structs using DEFINE_INT_TYPE.
 
 
     Define more structs using DEFINE_INT_TYPE.
 
- src/harfbuzz-ng.cc |  39 +++++++++++++++++++--------------------
- 1 files changed, 19 insertions(+), 20 deletions(-)
+ src/harfbuzz-ng.cc | 39 +++++++++++++++++++--------------------
+ 1 file changed, 19 insertions(+), 20 deletions(-)
 
 commit 915931b74a30e8652fac5fec153d499485513f63
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 915931b74a30e8652fac5fec153d499485513f63
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31415,8 +42965,8 @@ Date:   Tue Dec 26 15:30:14 2006 -0500
 
     s/DEFINE_NOT_INSTANTIABLE/DEFINE_NON_INSTANTIABLE/
 
 
     s/DEFINE_NOT_INSTANTIABLE/DEFINE_NON_INSTANTIABLE/
 
- src/harfbuzz-ng.cc |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/harfbuzz-ng.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 0c0d55330ef4090f3e4864538e83a4344caaf3ba
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 0c0d55330ef4090f3e4864538e83a4344caaf3ba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31424,9 +42974,9 @@ Date:   Tue Dec 26 15:29:38 2006 -0500
 
     Coverage.
 
 
     Coverage.
 
- src/harfbuzz-ng.cc |  91
- +++++++++++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 79 insertions(+), 12 deletions(-)
+ src/harfbuzz-ng.cc | 91
+ +++++++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 79 insertions(+), 12 deletions(-)
 
 commit 882e52f59196535495af8ca8069df32308ad52cf
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 882e52f59196535495af8ca8069df32308ad52cf
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31434,11 +42984,11 @@ Date: Mon Dec 25 10:28:31 2006 -0500
 
     Rename to harfbuzz-ng.cc
 
 
     Rename to harfbuzz-ng.cc
 
- src/Makefile           |    2 +-
- src/harfbuzz-ng.cc     |  513
- +++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-types-private.cc |  513
- -----------------------------------------------
+ src/Makefile           |   2 +-
+ src/harfbuzz-ng.cc     | 513
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-types-private.cc | 513
+ ------------------------------------------------
  3 files changed, 514 insertions(+), 514 deletions(-)
 
 commit f8ba99f6f322800a915428ffc3b5eaf1be2e6c21
  3 files changed, 514 insertions(+), 514 deletions(-)
 
 commit f8ba99f6f322800a915428ffc3b5eaf1be2e6c21
@@ -31447,9 +42997,9 @@ Date:   Mon Dec 25 09:58:02 2006 -0500
 
     LookupFlags
 
 
     LookupFlags
 
- src/hb-types-private.cc |   52
- ++++++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 47 insertions(+), 5 deletions(-)
+ src/hb-types-private.cc | 52
+ ++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 47 insertions(+), 5 deletions(-)
 
 commit 25ad92c8a68bf72464601a644ed57b9213126a78
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 25ad92c8a68bf72464601a644ed57b9213126a78
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31457,9 +43007,9 @@ Date:   Mon Dec 25 09:35:06 2006 -0500
 
     Implement Feature
 
 
     Implement Feature
 
- src/hb-types-private.cc |   46
+ src/hb-types-private.cc | 46
  ++++++++++++++++++++++++++++++++++++++++++----
  ++++++++++++++++++++++++++++++++++++++++++----
- 1 files changed, 42 insertions(+), 4 deletions(-)
+ 1 file changed, 42 insertions(+), 4 deletions(-)
 
 commit befc022affd2386b3f46cd7d11e4262f6c8bce9f
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit befc022affd2386b3f46cd7d11e4262f6c8bce9f
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31467,9 +43017,9 @@ Date:   Mon Dec 25 09:14:52 2006 -0500
 
     LangSys
 
 
     LangSys
 
- src/hb-types-private.cc |   51
- ++++++++++++++++++++++++++++++++++++++++------
- 1 files changed, 44 insertions(+), 7 deletions(-)
+ src/hb-types-private.cc | 51
+ ++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 44 insertions(+), 7 deletions(-)
 
 commit c81efca149b08832d5d96a944fb5f303f3d0ca42
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit c81efca149b08832d5d96a944fb5f303f3d0ca42
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31477,8 +43027,8 @@ Date:   Mon Dec 25 06:22:08 2006 -0500
 
     Use CamelCaseTags.
 
 
     Use CamelCaseTags.
 
- src/hb-types-private.cc |   29 ++++++++++++++---------------
- 1 files changed, 14 insertions(+), 15 deletions(-)
+ src/hb-types-private.cc | 29 ++++++++++++++---------------
+ 1 file changed, 14 insertions(+), 15 deletions(-)
 
 commit 808dbe283c1ad66091f2cb67380888b7cf265c01
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 808dbe283c1ad66091f2cb67380888b7cf265c01
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31486,9 +43036,9 @@ Date:   Mon Dec 25 06:18:52 2006 -0500
 
     Make types not instantiable
 
 
     Make types not instantiable
 
- src/hb-types-private.cc |  104
- ++++++++++++++++++++++++++---------------------
- 1 files changed, 57 insertions(+), 47 deletions(-)
+ src/hb-types-private.cc | 104
+ ++++++++++++++++++++++++++----------------------
+ 1 file changed, 57 insertions(+), 47 deletions(-)
 
 commit b739c05ca4b7acfa45bd4b0812ecbb3747f726f0
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b739c05ca4b7acfa45bd4b0812ecbb3747f726f0
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31496,9 +43046,9 @@ Date:   Mon Dec 25 05:39:20 2006 -0500
 
     Add OpenTypeFontFile.
 
 
     Add OpenTypeFontFile.
 
- src/Makefile           |    2 +-
- src/hb-types-private.cc |  113
- ++++++++++++++++++++++++++++++++++++++++++++---
+ src/Makefile           |   2 +-
+ src/hb-types-private.cc | 113
+ +++++++++++++++++++++++++++++++++++++++++++++---
  2 files changed, 107 insertions(+), 8 deletions(-)
 
 commit 8596944b7421f982960e825019fc0263442520cb
  2 files changed, 107 insertions(+), 8 deletions(-)
 
 commit 8596944b7421f982960e825019fc0263442520cb
@@ -31507,8 +43057,8 @@ Date:   Sat Dec 23 17:49:25 2006 -0500
 
     Add Makefile
 
 
     Add Makefile
 
- src/Makefile |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ src/Makefile | 3 +++
+ 1 file changed, 3 insertions(+)
 
 commit b6e62bc5db76ae342177b2b646c37f45eccad975
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit b6e62bc5db76ae342177b2b646c37f45eccad975
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31516,9 +43066,9 @@ Date:   Fri Dec 22 02:21:55 2006 -0500
 
     After DEFINE_SCRIPT_ARRAY
 
 
     After DEFINE_SCRIPT_ARRAY
 
- src/hb-types-private.cc |  215
- ++++++++++++++++++++++++++++++----------------
- 1 files changed, 140 insertions(+), 75 deletions(-)
+ src/hb-types-private.cc | 215
+ +++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 140 insertions(+), 75 deletions(-)
 
 commit 01e4fcb032be601f272e62228881e2aabfb9d925
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 01e4fcb032be601f272e62228881e2aabfb9d925
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31526,9 +43076,9 @@ Date:   Thu Dec 21 22:31:31 2006 -0500
 
     Remove the annoying HB_ prefix.
 
 
     Remove the annoying HB_ prefix.
 
- src/hb-types-private.cc |  107
- +++++++++++++++++++++++------------------------
- 1 files changed, 52 insertions(+), 55 deletions(-)
+ src/hb-types-private.cc | 107
+ +++++++++++++++++++++++-------------------------
+ 1 file changed, 52 insertions(+), 55 deletions(-)
 
 commit 6b4ce01da121e12e1c78ad7eaedf469f35f3568d
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit 6b4ce01da121e12e1c78ad7eaedf469f35f3568d
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31538,9 +43088,9 @@ Date:   Thu Dec 21 22:31:10 2006 -0500
     endian
     correctness.
 
     endian
     correctness.
 
- src/hb-types-private.cc |  300
- ++++++++++++++++++++++++++++++++---------------
- 1 files changed, 205 insertions(+), 95 deletions(-)
+ src/hb-types-private.cc | 300
+ +++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 205 insertions(+), 95 deletions(-)
 
 commit f78e70c301311ffcfb007c7fc4125d71cbcff1e2
 Author: Behdad Esfahbod <behdad@behdad.org>
 
 commit f78e70c301311ffcfb007c7fc4125d71cbcff1e2
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31548,9 +43098,9 @@ Date:   Thu Dec 21 22:30:38 2006 -0500
 
     First version.
 
 
     First version.
 
- src/hb-types-private.cc |  116
- +++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 116 insertions(+), 0 deletions(-)
+ src/hb-types-private.cc | 116
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 116 insertions(+)
 
 commit f726b20e56e8b1106dfde0bf8d575c73e83957c4
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit f726b20e56e8b1106dfde0bf8d575c73e83957c4
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31566,8 +43116,8 @@ Date:   Tue Jul 25 01:02:27 2006 +0000
            Don't
            err on empty GPOS/GSUB tables.
 
            Don't
            err on empty GPOS/GSUB tables.
 
- src/harfbuzz-open.c |   5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ src/harfbuzz-open.c | 5 +++++
+ 1 file changed, 5 insertions(+)
 
 commit 52481a5c55d466f41654dcdc67245d0ca8cefbcf
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 52481a5c55d466f41654dcdc67245d0ca8cefbcf
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31583,8 +43133,8 @@ Date:   Thu Jun 22 18:09:04 2006 +0000
            MAINSOURCES.
            Some automake versions seem to use it or something.
 
            MAINSOURCES.
            Some automake versions seem to use it or something.
 
- src/Makefile.am |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit ffb2d5c1e7af33644d0a4058befa4b8358c9a7bf
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit ffb2d5c1e7af33644d0a4058befa4b8358c9a7bf
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31604,8 +43154,8 @@ Date:   Wed May 31 07:42:55 2006 +0000
            TrueType table
            offsets are absolute, not relative.
 
            TrueType table
            offsets are absolute, not relative.
 
- src/ftglue.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/ftglue.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit f8f7bd2451eeafb57f5c80c7b4e88a1e50b97c4f
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit f8f7bd2451eeafb57f5c80c7b4e88a1e50b97c4f
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31625,8 +43175,8 @@ Date:   Wed May 31 07:23:02 2006 +0000
            Ignore marks
            of non-matchin attachment type.
 
            Ignore marks
            of non-matchin attachment type.
 
- src/harfbuzz-gpos.c |  37 ++++++++++++++++++++++---------------
- 1 files changed, 22 insertions(+), 15 deletions(-)
+ src/harfbuzz-gpos.c | 37 ++++++++++++++++++++++---------------
+ 1 file changed, 22 insertions(+), 15 deletions(-)
 
 commit d2a613187c1257371d62153b55c89336965e0754
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit d2a613187c1257371d62153b55c89336965e0754
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31640,8 +43190,8 @@ Date:   Wed Apr 12 18:47:50 2006 +0000
            variables. (coverity
            found bug.)
 
            variables. (coverity
            found bug.)
 
- src/harfbuzz-gpos.c |   6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/harfbuzz-gpos.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 14022e826f63c48b689f9037645c9a3a3302d9b6
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 14022e826f63c48b689f9037645c9a3a3302d9b6
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31688,8 +43238,8 @@ Date:   Tue Apr 11 08:31:44 2006 +0000
            DEFINE_TYPE
            macros.
 
            DEFINE_TYPE
            macros.
 
- src/ftglue.c |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/ftglue.c | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 59aafd07806a2f0d4f399eff13aec74557f60522
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 59aafd07806a2f0d4f399eff13aec74557f60522
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31723,8 +43273,8 @@ Date:   Mon Apr 10 10:33:17 2006 +0000
            for nullity
            somewhere.
 
            for nullity
            somewhere.
 
- src/harfbuzz-gdef.c |   3 ++-
- src/harfbuzz-gpos.c |   9 ++++++---
+ src/harfbuzz-gdef.c | 3 ++-
+ src/harfbuzz-gpos.c | 9 ++++++---
  2 files changed, 8 insertions(+), 4 deletions(-)
 
 commit b31d6def96ff99e89ba42e09661992498bda460d
  2 files changed, 8 insertions(+), 4 deletions(-)
 
 commit b31d6def96ff99e89ba42e09661992498bda460d
@@ -31739,11 +43289,11 @@ Date: Thu Apr 6 18:23:49 2006 +0000
            all the
            warnings.
 
            all the
            warnings.
 
- src/harfbuzz-dump.c |  94 +++++++++++++++++++++++++++---------------
- src/harfbuzz-gpos.c |  80 ++++++++++++++++++++++-------------
- src/harfbuzz-gsub.c | 114
- ++++++++++++++++++++++++++++----------------------
- src/harfbuzz-impl.h |   4 ++
+ src/harfbuzz-dump.c | 94 ++++++++++++++++++++++++++++---------------
+ src/harfbuzz-gpos.c | 80 ++++++++++++++++++++++--------------
+ src/harfbuzz-gsub.c | 114
+ +++++++++++++++++++++++++++++-----------------------
+ src/harfbuzz-impl.h |  4 ++
  4 files changed, 179 insertions(+), 113 deletions(-)
 
 commit ca57250bc9d9f92c88a2ea516e251b9cbfdebda0
  4 files changed, 179 insertions(+), 113 deletions(-)
 
 commit ca57250bc9d9f92c88a2ea516e251b9cbfdebda0
@@ -31759,10 +43309,10 @@ Date: Mon Apr 3 20:13:17 2006 +0000
            frineds are
            defined, needed for FreeType <= 2.1.7 (pointed by Tim Janik).
 
            frineds are
            defined, needed for FreeType <= 2.1.7 (pointed by Tim Janik).
 
- src/harfbuzz-gdef.c |   3 ---
- src/harfbuzz-gpos.c |   3 ---
- src/harfbuzz-gsub.c |   3 ---
- src/harfbuzz-impl.h |  11 +++++++++++
+ src/harfbuzz-gdef.c | 3 ---
+ src/harfbuzz-gpos.c | 3 ---
+ src/harfbuzz-gsub.c | 3 ---
+ src/harfbuzz-impl.h | 11 +++++++++++
  4 files changed, 11 insertions(+), 9 deletions(-)
 
 commit f618288e00914b6606ec977d506c18e4abdd3ce4
  4 files changed, 11 insertions(+), 9 deletions(-)
 
 commit f618288e00914b6606ec977d506c18e4abdd3ce4
@@ -31771,8 +43321,8 @@ Date:   Fri Mar 31 13:19:29 2006 +0000
 
     .
 
 
     .
 
- src/.cvsignore |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ src/.cvsignore | 2 --
+ 1 file changed, 2 deletions(-)
 
 commit 5f1f943b9e6d753722ceadba7eb7ce1f14526ea5
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit 5f1f943b9e6d753722ceadba7eb7ce1f14526ea5
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -31780,8 +43330,8 @@ Date:   Fri Mar 31 13:18:23 2006 +0000
 
     .
 
 
     .
 
- src/.cvsignore |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/.cvsignore | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit bce3e0b0d4ee521767d80c5c21704337bf5ac716
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit bce3e0b0d4ee521767d80c5c21704337bf5ac716
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -31789,8 +43339,8 @@ Date:   Fri Mar 31 12:45:40 2006 +0000
 
     Define NULL.
 
 
     Define NULL.
 
- src/harfbuzz-impl.h |   6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/harfbuzz-impl.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 commit 9f8da38cd108590514b71756b752d98952a9221f
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 9f8da38cd108590514b71756b752d98952a9221f
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31839,7 +43389,7 @@ Date:   Fri Mar 31 12:28:09 2006 +0000
  src/harfbuzz-gpos.c        | 6269
  +++++++++++++++++++++++++++++++++++++++++++
  src/harfbuzz-gpos.h        |  168 ++
  src/harfbuzz-gpos.c        | 6269
  +++++++++++++++++++++++++++++++++++++++++++
  src/harfbuzz-gpos.h        |  168 ++
- src/harfbuzz-gsub-private.h | 448 +++
+ src/harfbuzz-gsub-private.h | 448 ++++
  src/harfbuzz-gsub.c        | 4581 +++++++++++++++++++++++++++++++
  src/harfbuzz-gsub.h        |  132 +
  src/harfbuzz-impl.h        |   64 +
  src/harfbuzz-gsub.c        | 4581 +++++++++++++++++++++++++++++++
  src/harfbuzz-gsub.h        |  132 +
  src/harfbuzz-impl.h        |   64 +
@@ -31863,8 +43413,8 @@ Date:   Sat Mar 25 23:52:30 2006 +0000
 
            * pango/opentype/ottest.c: Don't err on Table_Missing.
 
 
            * pango/opentype/ottest.c: Don't err on Table_Missing.
 
- src/ottest.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/ottest.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 434833b1b7b01d85a143f9ad4b04e7044dd72567
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 434833b1b7b01d85a143f9ad4b04e7044dd72567
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31880,8 +43430,8 @@ Date:   Mon Mar 13 05:06:05 2006 +0000
 
            * NEWS, README: Updated.
 
 
            * NEWS, README: Updated.
 
- src/README |   4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/README | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 8228828e1e4c8dd6f9435fb718ad4394bba95655
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 8228828e1e4c8dd6f9435fb718ad4394bba95655
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31895,11 +43445,11 @@ Date: Mon Jan 30 22:37:48 2006 +0000
            and ReverseChainContextualSubst table.  (bug #149696,
            patch from Aamir Wali)
 
            and ReverseChainContextualSubst table.  (bug #149696,
            patch from Aamir Wali)
 
- src/ftxgsub.c |  545
- +++++++++++++++++++++++++++++++++++++++++++++-----------
- src/ftxgsub.h |   47 ++++--
- src/ftxopen.c |    7 +
- src/ftxopenf.h |    5 +-
+ src/ftxgsub.c | 545
+ ++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/ftxgsub.h |  47 +++--
+ src/ftxopen.c |   7 +
+ src/ftxopenf.h |   5 +-
  4 files changed, 487 insertions(+), 117 deletions(-)
 
 commit e040f681963d51eaadcd53a456100fde1a7addb6
  4 files changed, 487 insertions(+), 117 deletions(-)
 
 commit e040f681963d51eaadcd53a456100fde1a7addb6
@@ -31916,12 +43466,12 @@ Date: Sat Jan 28 20:29:18 2006 +0000
 
            * pango/Makefile.am, pango/opentype/Makefile.am: Adjusted.
 
 
            * pango/Makefile.am, pango/opentype/Makefile.am: Adjusted.
 
- src/Makefile.am       |   30 +--
- src/pango-ot-buffer.c |  339 ------------------------
- src/pango-ot-info.c   |  681
- ------------------------------------------------
- src/pango-ot-private.h |  105 --------
- src/pango-ot-ruleset.c |  225 ----------------
+ src/Makefile.am       |  30 +--
+ src/pango-ot-buffer.c | 339 ------------------------
+ src/pango-ot-info.c   | 681
+ -------------------------------------------------
+ src/pango-ot-private.h | 105 --------
+ src/pango-ot-ruleset.c | 225 ----------------
  5 files changed, 13 insertions(+), 1367 deletions(-)
 
 commit f45689bc655eb723f11a2eb65a41303221b80397
  5 files changed, 13 insertions(+), 1367 deletions(-)
 
 commit f45689bc655eb723f11a2eb65a41303221b80397
@@ -31940,8 +43490,8 @@ Date:   Wed Jan 25 19:33:58 2006 +0000
 
            * */Makefile.am: Remove hardcoded -DG_DISABLE_DEPRECATED.
 
 
            * */Makefile.am: Remove hardcoded -DG_DISABLE_DEPRECATED.
 
- src/Makefile.am |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit 6cc6c9a57c674787f278ea5b60705384fd72b4ad
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 6cc6c9a57c674787f278ea5b60705384fd72b4ad
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31955,18 +43505,18 @@ Date: Sat Jan 14 07:00:13 2006 +0000
            first include
            in the file. (bug #158870, based on patch by Luis Menina)
 
            first include
            in the file. (bug #158870, based on patch by Luis Menina)
 
- src/disasm.c          |    2 ++
- src/ftglue.c          |    1 +
- src/ftxgdef.c         |    1 +
- src/ftxgpos.c         |    2 ++
- src/ftxgsub.c         |    2 ++
- src/ftxopen.c         |    2 ++
- src/otlbuffer.c       |    3 +++
- src/ottest.c          |    1 +
- src/pango-ot-buffer.c |    2 ++
- src/pango-ot-info.c   |    2 ++
- src/pango-ot-ruleset.c |    2 ++
- 11 files changed, 20 insertions(+), 0 deletions(-)
+ src/disasm.c          | 2 ++
+ src/ftglue.c          | 1 +
+ src/ftxgdef.c         | 1 +
+ src/ftxgpos.c         | 2 ++
+ src/ftxgsub.c         | 2 ++
+ src/ftxopen.c         | 2 ++
+ src/otlbuffer.c       | 3 +++
+ src/ottest.c          | 1 +
+ src/pango-ot-buffer.c | 2 ++
+ src/pango-ot-info.c   | 2 ++
+ src/pango-ot-ruleset.c | 2 ++
+ 11 files changed, 20 insertions(+)
 
 commit ca07fcf6ef61c09825e67ca7e2574a90e4f5a9a0
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit ca07fcf6ef61c09825e67ca7e2574a90e4f5a9a0
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -31999,8 +43549,8 @@ Date:   Thu Jan 5 16:14:49 2006 +0000
            unnecessary strdups in the type system. (bug #325832,
            Matthias Clasen)
 
            unnecessary strdups in the type system. (bug #325832,
            Matthias Clasen)
 
- src/pango-ot-info.c   |    3 ++-
- src/pango-ot-ruleset.c |    3 ++-
+ src/pango-ot-info.c   | 3 ++-
+ src/pango-ot-ruleset.c | 3 ++-
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 71524f1bc891bb4450507f769e5cc8f6f6cffa0c
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 commit 71524f1bc891bb4450507f769e5cc8f6f6cffa0c
@@ -32016,8 +43566,8 @@ Date:   Tue Dec 27 09:55:48 2005 +0000
            PangoOTBuffer
            allocation. (bug #325026, Matthias Clasen)
 
            PangoOTBuffer
            allocation. (bug #325026, Matthias Clasen)
 
- src/pango-ot-buffer.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/pango-ot-buffer.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit b5baa43d3a972ebd3ef82ede14b54c185b723a71
 Author: Behdad Esfahbod <behdad@src.gnome.org>
 
 commit b5baa43d3a972ebd3ef82ede14b54c185b723a71
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -32025,8 +43575,8 @@ Date:   Fri Nov 25 09:22:02 2005 +0000
 
     Tiny doc improvement.
 
 
     Tiny doc improvement.
 
- src/pango-ot-info.c |   2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/pango-ot-info.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 6f64314f7a031a5a5d6b7663c08b70c452961c89
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 6f64314f7a031a5a5d6b7663c08b70c452961c89
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32038,8 +43588,8 @@ Date:   Wed Nov 23 19:48:10 2005 +0000
 
            * pango/opentyp/pango-ot-buffer.c: Fix typo in docs.
 
 
            * pango/opentyp/pango-ot-buffer.c: Fix typo in docs.
 
- src/pango-ot-buffer.c |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/pango-ot-buffer.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit f2bcf72296b57c8cd7d5a08228c3aef6c8f97d2d
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit f2bcf72296b57c8cd7d5a08228c3aef6c8f97d2d
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32056,10 +43606,10 @@ Date: Wed Nov 23 17:54:55 2005 +0000
            pango/opentype/pango-ot-ruleset.c: Added "Since:" tags to all
            interfaces added after Pango 1.0. (#319116, Brian Cameron)
 
            pango/opentype/pango-ot-ruleset.c: Added "Since:" tags to all
            interfaces added after Pango 1.0. (#319116, Brian Cameron)
 
- src/pango-ot-buffer.c |   49
- ++++++++++++++++++++++++++++++++++++++++++++++++
- src/pango-ot-ruleset.c |   14 +++++++++++++
- 2 files changed, 63 insertions(+), 0 deletions(-)
+ src/pango-ot-buffer.c | 49
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/pango-ot-ruleset.c | 14 ++++++++++++++
+ 2 files changed, 63 insertions(+)
 
 commit 682db81c23d2116072d8550657c914afb7c26d2b
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 682db81c23d2116072d8550657c914afb7c26d2b
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32079,8 +43629,8 @@ Date:   Wed Nov 23 15:19:48 2005 +0000
 
            * pango/opentype/disasm.c: Err on invalid DeltaFormat.
 
 
            * pango/opentype/disasm.c: Err on invalid DeltaFormat.
 
- src/disasm.c |   28 ++++++++++++++++++----------
- 1 files changed, 18 insertions(+), 10 deletions(-)
+ src/disasm.c | 28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
 
 commit e6e15352d154e1350340f8045759e5f7b0d86dc7
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit e6e15352d154e1350340f8045759e5f7b0d86dc7
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32109,8 +43659,8 @@ Date:   Wed Nov 23 11:53:03 2005 +0000
            Remove reference in docs to pango_ot_ruleset_shape() that was
            removed long ago.
 
            Remove reference in docs to pango_ot_ruleset_shape() that was
            removed long ago.
 
- src/pango-ot-ruleset.c |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
+ src/pango-ot-ruleset.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 commit 612b6cf60928b356f4bbb59bc9d64886574322c3
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 612b6cf60928b356f4bbb59bc9d64886574322c3
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32132,8 +43682,8 @@ Date:   Thu Nov 17 06:28:11 2005 +0000
            skip offsets that are zero.  Works around bug in Doulos
            SIL Regular.
 
            skip offsets that are zero.  Works around bug in Doulos
            SIL Regular.
 
- src/ftxgpos.c |    6 ++++++
- src/ftxopen.c |    6 ++++--
+ src/ftxgpos.c | 6 ++++++
+ src/ftxopen.c | 6 ++++--
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit 1b2c314b804da97b1d5e7adab64bdd4177702579
  2 files changed, 10 insertions(+), 2 deletions(-)
 
 commit 1b2c314b804da97b1d5e7adab64bdd4177702579
@@ -32148,9 +43698,9 @@ Date:   Wed Nov 9 23:30:00 2005 +0000
            Remove debug
            line that got in accidentally.
 
            Remove debug
            line that got in accidentally.
 
- src/ftxgpos.c |    1 -
- src/ftxopen.c |    1 -
- 2 files changed, 0 insertions(+), 2 deletions(-)
+ src/ftxgpos.c | 1 -
+ src/ftxopen.c | 1 -
+ 2 files changed, 2 deletions(-)
 
 commit 9717127a5be037e26afe52332a8b07f13474557a
 Author: Behdad Esfahbod <behdad@gnome.org>
 
 commit 9717127a5be037e26afe52332a8b07f13474557a
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -32197,12 +43747,12 @@ Date: Fri Nov 4 23:55:38 2005 +0000
            which was wrong.
            (compare_lang): Fix typo comparing a and a instead of a and b.
 
            which was wrong.
            (compare_lang): Fix typo comparing a and a instead of a and b.
 
- src/ftglue.c          |    2 +-
- src/ftxgpos.c         |    4 ++++
- src/ftxopen.c         |    1 +
- src/pango-ot-buffer.c |    4 ++--
- src/pango-ot-info.c   |    5 +++--
- src/pango-ot-ruleset.c |    5 +++--
+ src/ftglue.c          | 2 +-
+ src/ftxgpos.c         | 4 ++++
+ src/ftxopen.c         | 1 +
+ src/pango-ot-buffer.c | 4 ++--
+ src/pango-ot-info.c   | 5 +++--
+ src/pango-ot-ruleset.c | 5 +++--
  6 files changed, 14 insertions(+), 7 deletions(-)
 
 commit c0505f3bb28feeba95b201e6464fb2fdac90194a
  6 files changed, 14 insertions(+), 7 deletions(-)
 
 commit c0505f3bb28feeba95b201e6464fb2fdac90194a
@@ -32223,11 +43773,11 @@ Date: Thu Nov 3 20:13:40 2005 +0000
            pango/opentype/pango-ot-ruleset.c:
            Small cleanup.
 
            pango/opentype/pango-ot-ruleset.c:
            Small cleanup.
 
- src/ftxgpos.c         |  143
- +++++++++++++++++++++++-------------------------
- src/ftxgsub.c         |  115 +++++++++++++++++++++-----------------
- src/pango-ot-buffer.c |    3 +-
- src/pango-ot-ruleset.c |   75 ++++++++-----------------
+ src/ftxgpos.c         | 143
+ ++++++++++++++++++++++++-------------------------
+ src/ftxgsub.c         | 115 +++++++++++++++++++++------------------
+ src/pango-ot-buffer.c |   3 +-
+ src/pango-ot-ruleset.c |  75 +++++++++-----------------
  4 files changed, 159 insertions(+), 177 deletions(-)
 
 commit c6b22b9119ef54ea8d0d2f08b74fdeb024289d73
  4 files changed, 159 insertions(+), 177 deletions(-)
 
 commit c6b22b9119ef54ea8d0d2f08b74fdeb024289d73
@@ -32242,9 +43792,9 @@ Date:   Mon Aug 29 10:06:40 2005 +0000
            Generate valid
            XML output.  Dump LookupFlag too.
 
            Generate valid
            XML output.  Dump LookupFlag too.
 
- src/disasm.c |   58
+ src/disasm.c | 58
  ++++++++++++++++++++++++++++++----------------------------
  ++++++++++++++++++++++++++++++----------------------------
- src/ottest.c |   23 ++++++++++++++---------
+ src/ottest.c | 23 ++++++++++++++---------
  2 files changed, 44 insertions(+), 37 deletions(-)
 
 commit 1e3747ca5d1a6f607f8e56fb94e3daaf6ad623cb
  2 files changed, 44 insertions(+), 37 deletions(-)
 
 commit 1e3747ca5d1a6f607f8e56fb94e3daaf6ad623cb
@@ -32258,8 +43808,8 @@ Date:   Mon Aug 15 04:16:04 2005 +0000
            * pango/opentype/ftglue.h: Replace perror with perror_.
            Remove FT_BEGIN_STMNT and FT_END_STMNT. (#313477)
 
            * pango/opentype/ftglue.h: Replace perror with perror_.
            Remove FT_BEGIN_STMNT and FT_END_STMNT. (#313477)
 
- src/ftglue.h |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/ftglue.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 3c60250875fa9d04ca96dea35eba23fc70690ff5
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 3c60250875fa9d04ca96dea35eba23fc70690ff5
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32275,8 +43825,8 @@ Date:   Tue Jul 26 18:33:27 2005 +0000
            with lookup index out of range. (Patch from Behdad Esfahbod,
            #171170)
 
            with lookup index out of range. (Patch from Behdad Esfahbod,
            #171170)
 
- src/ftxgpos.c |   30 ++++++++++++++++++++++++------
- src/ftxgsub.c |   30 ++++++++++++++++++++++++------
+ src/ftxgpos.c | 30 ++++++++++++++++++++++++------
+ src/ftxgsub.c | 30 ++++++++++++++++++++++++------
  2 files changed, 48 insertions(+), 12 deletions(-)
 
 commit 91a3fa2e4bcdde8ae022d1264c783f133cd7e00d
  2 files changed, 48 insertions(+), 12 deletions(-)
 
 commit 91a3fa2e4bcdde8ae022d1264c783f133cd7e00d
@@ -32290,8 +43840,8 @@ Date:   Fri Jul 22 18:03:58 2005 +0000
            * pango/opentype/ftglue.c (ftglue_realloc): Remove
            an unecessary set of block2.
 
            * pango/opentype/ftglue.c (ftglue_realloc): Remove
            an unecessary set of block2.
 
- src/ftglue.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/ftglue.c | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit ff7034787d79dcd1bec58a4e02602039313da00e
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit ff7034787d79dcd1bec58a4e02602039313da00e
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32323,18 +43873,18 @@ Date: Fri Jul 22 17:56:37 2005 +0000
            * pango/opentype/ftxopen.c (Free_FeatureList): Free
            fl->ApplyOrder. (Found by Behdad)
 
            * pango/opentype/ftxopen.c (Free_FeatureList): Free
            fl->ApplyOrder. (Found by Behdad)
 
- src/Makefile.am       |    3 +-
- src/fterrcompat.h     |   95 -------------
- src/ftglue.c          |  350
- ++++++++++++++++++++++++++++++++++++++++++++++++
- src/ftglue.h          |  156 +++++++++++++++++++++
- src/ftxgdef.c         |    9 +-
- src/ftxgpos.c         |    9 +-
- src/ftxgsub.c         |   10 +-
- src/ftxopen.c         |    8 +-
- src/otlbuffer.c       |    4 +-
- src/pango-ot-info.c   |    6 +-
- src/pango-ot-ruleset.c |    2 -
+ src/Makefile.am       |   3 +-
+ src/fterrcompat.h     |  95 --------------
+ src/ftglue.c          | 350
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/ftglue.h          | 156 ++++++++++++++++++++++
+ src/ftxgdef.c         |   9 +-
+ src/ftxgpos.c         |   9 +-
+ src/ftxgsub.c         |  10 +-
+ src/ftxopen.c         |   8 +-
+ src/otlbuffer.c       |   4 +-
+ src/pango-ot-info.c   |   6 +-
+ src/pango-ot-ruleset.c |   2 -
  11 files changed, 520 insertions(+), 132 deletions(-)
 
 commit 43dbec6f3a345ba0e4a43766610ed59622bbe4a0
  11 files changed, 520 insertions(+), 132 deletions(-)
 
 commit 43dbec6f3a345ba0e4a43766610ed59622bbe4a0
@@ -32373,11 +43923,11 @@ Date: Thu Jul 21 18:15:45 2005 +0000
            * modules/arabic/arabic-ot.c: Add Freetype license
            boilerplate.
 
            * modules/arabic/arabic-ot.c: Add Freetype license
            boilerplate.
 
- src/FT-license.txt |  179
- ++++++---------------------------------------------
- src/FTL.TXT       |  174
- ++++++++++++++++++++++++++++++++++++++++++++++++++
- src/fterrcompat.h  |  10 +++-
+ src/FT-license.txt | 179
+ +++++++----------------------------------------------
+ src/FTL.TXT       | 174
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/fterrcompat.h  |  10 ++-
  3 files changed, 204 insertions(+), 159 deletions(-)
 
 commit c55850d36d208c7aae8f6ed5c9e1e7927b988d6c
  3 files changed, 204 insertions(+), 159 deletions(-)
 
 commit c55850d36d208c7aae8f6ed5c9e1e7927b988d6c
@@ -32395,9 +43945,9 @@ Date:   Tue Jun 14 19:54:19 2005 +0000
            * pango/opentype/pango-ot-info.c (pango_ot_info_finalizer):
            make accidentally public function static.
 
            * pango/opentype/pango-ot-info.c (pango_ot_info_finalizer):
            make accidentally public function static.
 
- src/pango-ot-info.c   |    4 +++-
- src/pango-ot-ruleset.c |    2 ++
- 2 files changed, 5 insertions(+), 1 deletions(-)
+ src/pango-ot-info.c   | 4 +++-
+ src/pango-ot-ruleset.c | 2 ++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
 
 commit 44ff46a364fb7981804eb45329c4999b415711f9
 Author: Tor Lillqvist <tml@novell.com>
 
 commit 44ff46a364fb7981804eb45329c4999b415711f9
 Author: Tor Lillqvist <tml@novell.com>
@@ -32414,8 +43964,8 @@ Date:   Tue Apr 12 01:27:21 2005 +0000
        * pango/pangowin32.def: Rename get_scale_factor to
        get_metrics_factor here, too. (#300222, Ivan Wong)
 
        * pango/pangowin32.def: Rename get_scale_factor to
        get_metrics_factor here, too. (#300222, Ivan Wong)
 
- src/Makefile.am |   12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
+ src/Makefile.am | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 commit 0c349a032e5a52a9d0dcc8204f761b7cb28bfa6b
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 0c349a032e5a52a9d0dcc8204f761b7cb28bfa6b
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32436,9 +43986,9 @@ Date:   Thu Mar 3 19:38:02 2005 +0000
            (Get_New_Count, Add_Glyph_Property): Avoid reading off the
            end of the ClassRangeRecord array.
 
            (Get_New_Count, Add_Glyph_Property): Avoid reading off the
            end of the ClassRangeRecord array.
 
- src/ftxgdef.c |   60
- ++++++++++++++++++++++++++++++++++----------------------
- src/ftxopen.c |   15 ++++++++++++++
+ src/ftxgdef.c | 60
+ +++++++++++++++++++++++++++++++++++------------------------
+ src/ftxopen.c | 15 +++++++++++++++
  2 files changed, 51 insertions(+), 24 deletions(-)
 
 commit 03838daaa9d485bffcb7bc46453a9a4c32a1f32f
  2 files changed, 51 insertions(+), 24 deletions(-)
 
 commit 03838daaa9d485bffcb7bc46453a9a4c32a1f32f
@@ -32452,8 +44002,8 @@ Date:   Mon Nov 22 23:37:19 2004 +0000
            * pango/opentype/Makefile.am pango/Makefile.am
            modules/*/Makefile.am: Set G_LOG_DOMAIN.
 
            * pango/opentype/Makefile.am pango/Makefile.am
            modules/*/Makefile.am: Set G_LOG_DOMAIN.
 
- src/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 346d3b3cac253d2db41205151c185bf2fd9dda16
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 346d3b3cac253d2db41205151c185bf2fd9dda16
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32475,9 +44025,9 @@ Date:   Wed Sep 22 18:14:55 2004 +0000
            opentype/ftxgpos.c opentype/ftxgsub.c: : Fix various 0/NULL
            confusion.
 
            opentype/ftxgpos.c opentype/ftxgsub.c: : Fix various 0/NULL
            confusion.
 
- src/ftxgdef.c |    2 +-
- src/ftxgpos.c |    6 +++---
- src/ftxgsub.c |    2 +-
+ src/ftxgdef.c | 2 +-
+ src/ftxgpos.c | 6 +++---
+ src/ftxgsub.c | 2 +-
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 8b654dfb5ad6137ee9c5a48f5abe04bf7d28d8cd
  3 files changed, 5 insertions(+), 5 deletions(-)
 
 commit 8b654dfb5ad6137ee9c5a48f5abe04bf7d28d8cd
@@ -32501,8 +44051,8 @@ Date:   Tue Sep 14 13:45:41 2004 +0000
            pango/opentype/pango-ot-buffer.c: Add a bunch of missing
            Since: 1.6.
 
            pango/opentype/pango-ot-buffer.c: Add a bunch of missing
            Since: 1.6.
 
- src/pango-ot-buffer.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/pango-ot-buffer.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit d41089a5b691967fdd622f47c8397a80af104396
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit d41089a5b691967fdd622f47c8397a80af104396
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32518,12 +44068,12 @@ Date: Fri Jul 30 21:23:04 2004 +0000
            flags from FT_UShort => FT_UInt. (OTLBuffer was already
            using an FT_UInt)
 
            flags from FT_UShort => FT_UInt. (OTLBuffer was already
            using an FT_UInt)
 
- src/ftxgpos.c |    8 ++++----
- src/ftxgpos.h |    2 +-
- src/ftxgsub.c |    8 ++++----
- src/ftxgsub.h |    2 +-
- src/ftxopen.c |    2 +-
- src/ftxopen.h |    2 +-
+ src/ftxgpos.c | 8 ++++----
+ src/ftxgpos.h | 2 +-
+ src/ftxgsub.c | 8 ++++----
+ src/ftxgsub.h | 2 +-
+ src/ftxopen.c | 2 +-
+ src/ftxopen.h | 2 +-
  6 files changed, 12 insertions(+), 12 deletions(-)
 
 commit f42d5eca291dcdfb27d7fbf88391d6d381b8e9c4
  6 files changed, 12 insertions(+), 12 deletions(-)
 
 commit f42d5eca291dcdfb27d7fbf88391d6d381b8e9c4
@@ -32539,10 +44089,10 @@ Date: Tue Jul 27 17:20:01 2004 +0000
            features were added and use that when applying features.
            (Patch from Soheil Hassas Yeganeh, #122330)
 
            features were added and use that when applying features.
            (Patch from Soheil Hassas Yeganeh, #122330)
 
- src/ftxgpos.c |   41 ++++++++++++++++++++++++-----------------
- src/ftxgsub.c |   34 +++++++++++++++++++++-------------
- src/ftxopen.c |   14 +++++++++++---
- src/ftxopen.h |    2 ++
+ src/ftxgpos.c | 41 ++++++++++++++++++++++++-----------------
+ src/ftxgsub.c | 34 +++++++++++++++++++++-------------
+ src/ftxopen.c | 14 +++++++++++---
+ src/ftxopen.h |  2 ++
  4 files changed, 58 insertions(+), 33 deletions(-)
 
 commit ae2daa972d74c5ecfe1d2f0057ce12682ad30b00
  4 files changed, 58 insertions(+), 33 deletions(-)
 
 commit ae2daa972d74c5ecfe1d2f0057ce12682ad30b00
@@ -32556,9 +44106,9 @@ Date:   Tue Jul 27 13:12:19 2004 +0000
        * pango/opentype/ftxgpos.c: Remove the unused parameter
        from the IN_CURITEM() and IN_CURGLYPH macros.
 
        * pango/opentype/ftxgpos.c: Remove the unused parameter
        from the IN_CURITEM() and IN_CURGLYPH macros.
 
- src/ftxgpos.c |   68
- ++++++++++++++++++++++++++++----------------------------
- src/ftxgsub.c |    2 +-
+ src/ftxgpos.c | 68
+ +++++++++++++++++++++++++++++------------------------------
+ src/ftxgsub.c |  2 +-
  2 files changed, 35 insertions(+), 35 deletions(-)
 
 commit 7d5435ea8cb345c79029b8a12d1bddbed28b1997
  2 files changed, 35 insertions(+), 35 deletions(-)
 
 commit 7d5435ea8cb345c79029b8a12d1bddbed28b1997
@@ -32571,8 +44121,8 @@ Date:   Tue Jul 27 10:43:58 2004 +0000
        * pango/opentype/otlbuffer.c (otl_buffer_copy_output_glyph):
        Fix bug to copy glyph from in_string, not out_string.
 
        * pango/opentype/otlbuffer.c (otl_buffer_copy_output_glyph):
        Fix bug to copy glyph from in_string, not out_string.
 
- src/otlbuffer.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/otlbuffer.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 2ea2a55bdf7ef1caebcd0c5922b0f542ed8bb5bf
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 2ea2a55bdf7ef1caebcd0c5922b0f542ed8bb5bf
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32586,8 +44136,8 @@ Date:   Mon Jul 26 23:14:53 2004 +0000
            * pango/opentype/ftxgdef.c: Fix allocation and indexing
            in NewGlyphClasses array. (#130661, Masatake YAMATO)
 
            * pango/opentype/ftxgdef.c: Fix allocation and indexing
            in NewGlyphClasses array. (#130661, Masatake YAMATO)
 
- src/ftxgdef.c |   14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/ftxgdef.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 5d42695e5ed89f73fbc665792ebec82c29ae04ae
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 5d42695e5ed89f73fbc665792ebec82c29ae04ae
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32602,9 +44152,9 @@ Date:   Mon Jul 26 19:25:45 2004 +0000
            unused parameter from the IN_CURITEM() and IN_CURGLYPH
            macros.
 
            unused parameter from the IN_CURITEM() and IN_CURGLYPH
            macros.
 
- src/ftxgsub.c |   56
+ src/ftxgsub.c | 56
  ++++++++++++++++++++++++++++----------------------------
  ++++++++++++++++++++++++++++----------------------------
- 1 files changed, 28 insertions(+), 28 deletions(-)
+ 1 file changed, 28 insertions(+), 28 deletions(-)
 
 commit a00c4ea5626526980139b122977e367b8434d24a
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit a00c4ea5626526980139b122977e367b8434d24a
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32617,8 +44167,8 @@ Date:   Mon Jul 26 19:23:06 2004 +0000
            * pango/opentype/ftxgsub.c: Add missing macro to make the
            last change actually compile.
 
            * pango/opentype/ftxgsub.c: Add missing macro to make the
            last change actually compile.
 
- src/ftxgsub.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ src/ftxgsub.c | 2 ++
+ 1 file changed, 2 insertions(+)
 
 commit ed3e1f278d3ebfd224f0b57388502d4bb9fb1441
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit ed3e1f278d3ebfd224f0b57388502d4bb9fb1441
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32632,8 +44182,8 @@ Date:   Mon Jul 26 19:20:27 2004 +0000
            Match backtrack context against the output glyphs not
            the input glyphs (#145174, Aamir Wali)
 
            Match backtrack context against the output glyphs not
            the input glyphs (#145174, Aamir Wali)
 
- src/ftxgsub.c |   24 ++++++++++++------------
- 1 files changed, 12 insertions(+), 12 deletions(-)
+ src/ftxgsub.c | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
 commit 78282cda004a88b2aadb2786dd3897884e22ed0b
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 78282cda004a88b2aadb2786dd3897884e22ed0b
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32653,14 +44203,13 @@ Date: Mon Jul 26 18:59:02 2004 +0000
            to use when we are copying an unmodified glyph from input
            to output that preserves the cached properties.
 
            to use when we are copying an unmodified glyph from input
            to output that preserves the cached properties.
 
- src/ftxgdef.c  |   16 ++++++++++------
- src/ftxgpos.c  |   52
- +++++++++++++++++++++++++++-------------------------
- src/ftxgsub.c  |   54
+ src/ftxgdef.c  | 16 ++++++++++------
+ src/ftxgpos.c  | 52 +++++++++++++++++++++++++++-------------------------
+ src/ftxgsub.c  | 54
  ++++++++++++++++++++++++++++--------------------------
  ++++++++++++++++++++++++++++--------------------------
- src/ftxopenf.h  |    2 +-
- src/otlbuffer.c |   21 +++++++++++++++++++--
- src/otlbuffer.h |    6 ++++++
+ src/ftxopenf.h  |  2 +-
+ src/otlbuffer.c | 21 +++++++++++++++++++--
+ src/otlbuffer.h |  6 ++++++
  6 files changed, 91 insertions(+), 60 deletions(-)
 
 commit 81b62af42313fb60db523374cd8c6901829f5c4e
  6 files changed, 91 insertions(+), 60 deletions(-)
 
 commit 81b62af42313fb60db523374cd8c6901829f5c4e
@@ -32674,8 +44223,8 @@ Date:   Mon Jul 19 21:13:23 2004 +0000
            * pango/opentype/disasm.c: Add support for
            ChainContextSubstFormat3.
 
            * pango/opentype/disasm.c: Add support for
            ChainContextSubstFormat3.
 
- src/disasm.c |   16 +++++++++++++++-
- 1 files changed, 15 insertions(+), 1 deletions(-)
+ src/disasm.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
 
 commit d4f773ef92fdbaa7e61e6577db5e9b2846a100a4
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit d4f773ef92fdbaa7e61e6577db5e9b2846a100a4
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32690,9 +44239,9 @@ Date:   Mon Jul 19 20:37:22 2004 +0000
            Fix pervasive buffer overruns when skipping glyphs
            when matching contexts. (#118592, Kailash C. Chowksey)
 
            Fix pervasive buffer overruns when skipping glyphs
            when matching contexts. (#118592, Kailash C. Chowksey)
 
- src/ftxgpos.c |  259 +++++++++++++++++----------------------
- src/ftxgsub.c |  376
- ++++++++++++++++++++++++++-------------------------------
+ src/ftxgpos.c | 259 ++++++++++++++++++----------------------
+ src/ftxgsub.c | 376
+ ++++++++++++++++++++++++++--------------------------------
  2 files changed, 284 insertions(+), 351 deletions(-)
 
 commit 99848cfafee8e598ef533f254cdb99fbae4c9364
  2 files changed, 284 insertions(+), 351 deletions(-)
 
 commit 99848cfafee8e598ef533f254cdb99fbae4c9364
@@ -32714,8 +44263,8 @@ Date:   Wed Jun 23 20:33:35 2004 +0000
            * modules/arabic/arabic-fc.c (arabic_engine_shape): Turn
            on zero-width-marks setting.
 
            * modules/arabic/arabic-fc.c (arabic_engine_shape): Turn
            on zero-width-marks setting.
 
- src/pango-ot-buffer.c |   22 +++++++++++++++++++++-
- src/pango-ot-private.h |    5 +++--
+ src/pango-ot-buffer.c | 22 +++++++++++++++++++++-
+ src/pango-ot-private.h |  5 +++--
  2 files changed, 24 insertions(+), 3 deletions(-)
 
 commit 68d4cedb8726fa239f56d62060d8fee7e09cb8be
  2 files changed, 24 insertions(+), 3 deletions(-)
 
 commit 68d4cedb8726fa239f56d62060d8fee7e09cb8be
@@ -32730,8 +44279,8 @@ Date:   Mon Jun 21 18:04:02 2004 +0000
            strict-aliasing compatible macros from fterrcompat.h
            (#140495, reported by Stanislav Brabec)
 
            strict-aliasing compatible macros from fterrcompat.h
            (#140495, reported by Stanislav Brabec)
 
- src/otlbuffer.c |   22 ++++++++++++++--------
- 1 files changed, 14 insertions(+), 8 deletions(-)
+ src/otlbuffer.c | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
 
 commit b327765176dff81047f942ac56a1d206344e6039
 Author: Theppitak Karoonboonyanan <tkaroonb@src.gnome.org>
 
 commit b327765176dff81047f942ac56a1d206344e6039
 Author: Theppitak Karoonboonyanan <tkaroonb@src.gnome.org>
@@ -32745,8 +44294,8 @@ Date:   Fri May 28 16:41:36 2004 +0000
        and OTL
        (#142544)
 
        and OTL
        (#142544)
 
- src/pango-ot-buffer.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/pango-ot-buffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 068763b547d791e28b892bcaee810f3d60a83018
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 068763b547d791e28b892bcaee810f3d60a83018
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32759,8 +44308,8 @@ Date:   Thu May 27 21:55:50 2004 +0000
            * pango/opentype/otlbuffer.c: Revert error return changes
            from last commit.
 
            * pango/opentype/otlbuffer.c: Revert error return changes
            from last commit.
 
- src/otlbuffer.c |   16 ++++++----------
- 1 files changed, 6 insertions(+), 10 deletions(-)
+ src/otlbuffer.c | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
 
 commit ef07481025c5bbb9769b9f908d9dc78f44161bbb
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit ef07481025c5bbb9769b9f908d9dc78f44161bbb
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32774,8 +44323,8 @@ Date:   Thu May 27 21:03:42 2004 +0000
            clean up error returns that were returning uninitialized
            values. (#139239, Behdad Esfahbod)
 
            clean up error returns that were returning uninitialized
            values. (#139239, Behdad Esfahbod)
 
- src/otlbuffer.c |   21 +++++++++++++--------
- 1 files changed, 13 insertions(+), 8 deletions(-)
+ src/otlbuffer.c | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
 
 commit de568e7e6200c7a49bae1f78ac63858b8df01173
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit de568e7e6200c7a49bae1f78ac63858b8df01173
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32795,9 +44344,9 @@ Date:   Tue Mar 16 19:23:43 2004 +0000
            * README: Some updates; include details about the FreeType
            license of the OpenType code.
 
            * README: Some updates; include details about the FreeType
            license of the OpenType code.
 
- src/FT-license.txt |  77
- ++++++++++++++++++++++++++++-----------------------
- 1 files changed, 42 insertions(+), 35 deletions(-)
+ src/FT-license.txt | 77
+ +++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 42 insertions(+), 35 deletions(-)
 
 commit 8b3554b3afe7c125b1a53171b01ac87de9c486fe
 Author: Hans Breuer <hans@breuer.org>
 
 commit 8b3554b3afe7c125b1a53171b01ac87de9c486fe
 Author: Hans Breuer <hans@breuer.org>
@@ -32818,8 +44367,8 @@ Date:   Wed Mar 3 22:35:19 2004 +0000
 
        * pango/pango.def pango/pangoft2.def : more updatd externals
 
 
        * pango/pango.def pango/pangoft2.def : more updatd externals
 
- src/makefile.msc |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
+ src/makefile.msc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
 commit a7e096c5de3ec5319bf9333c9ace0732d97c52c3
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit a7e096c5de3ec5319bf9333c9ace0732d97c52c3
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32865,21 +44414,21 @@ Date: Sun Feb 29 15:44:50 2004 +0000
            from Unicode properties for Arabic presentation forms,
            let the shaping process derive the properties.
 
            from Unicode properties for Arabic presentation forms,
            let the shaping process derive the properties.
 
- src/Makefile.am       |    3 +
- src/ftxgdef.c         |    4 +-
- src/ftxgpos.c         |  573 +++++++++++++++-----------------------
- src/ftxgpos.h         |   23 +--
- src/ftxgsub.c         |  719
- +++++++++++-------------------------------------
- src/ftxgsub.h         |   40 +---
- src/ftxopen.h         |    1 +
- src/otlbuffer.c       |  213 ++++++++++++++
- src/otlbuffer.h       |   97 +++++++
- src/ottest.c          |    2 +
- src/pango-ot-buffer.c |  265 ++++++++++++++++++
- src/pango-ot-info.c   |   27 ++-
- src/pango-ot-private.h |    8 +
- src/pango-ot-ruleset.c |  148 +++--------
+ src/Makefile.am       |   3 +
+ src/ftxgdef.c         |   4 +-
+ src/ftxgpos.c         | 573 ++++++++++++++++-----------------------
+ src/ftxgpos.h         |  23 +-
+ src/ftxgsub.c         | 719
+ +++++++++++--------------------------------------
+ src/ftxgsub.h         |  40 +--
+ src/ftxopen.h         |   1 +
+ src/otlbuffer.c       | 213 +++++++++++++++
+ src/otlbuffer.h       |  97 +++++++
+ src/ottest.c          |   2 +
+ src/pango-ot-buffer.c | 265 ++++++++++++++++++
+ src/pango-ot-info.c   |  27 +-
+ src/pango-ot-private.h |   8 +
+ src/pango-ot-ruleset.c | 148 +++-------
  14 files changed, 1039 insertions(+), 1084 deletions(-)
 
 commit d670ddf99192dd4999775a9215a818ae63fa3416
  14 files changed, 1039 insertions(+), 1084 deletions(-)
 
 commit d670ddf99192dd4999775a9215a818ae63fa3416
@@ -32895,8 +44444,8 @@ Date:   Sat Feb 21 14:53:12 2004 +0000
            Sign convention for y offsets is opposite between
            PangoGlyphString and FT code. (#132591)
 
            Sign convention for y offsets is opposite between
            PangoGlyphString and FT code. (#132591)
 
- src/pango-ot-ruleset.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/pango-ot-ruleset.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit b9b3c131c2b57c12a77124a52512fb19a1255f8e
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit b9b3c131c2b57c12a77124a52512fb19a1255f8e
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32914,8 +44463,8 @@ Date:   Fri Feb 13 16:11:40 2004 +0000
            * pango/opentype/ftxgdef.c (TT_GDEF_Build_ClassDefinition):
            Set gcd->loaded, so that the contents get freed later.
 
            * pango/opentype/ftxgdef.c (TT_GDEF_Build_ClassDefinition):
            Set gcd->loaded, so that the contents get freed later.
 
- src/ftxgdef.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
+ src/ftxgdef.c | 4 ++++
+ 1 file changed, 4 insertions(+)
 
 commit 926b8f322989298e43c8bac85f23e3525470a669
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 926b8f322989298e43c8bac85f23e3525470a669
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32928,8 +44477,8 @@ Date:   Mon Jan 26 19:23:35 2004 +0000
            * pango/opentype/pango-ot-info.c (is_truetype): Suport
            CFF fonts as well. (#131202, Manjunath Sripadarao)
 
            * pango/opentype/pango-ot-info.c (is_truetype): Suport
            CFF fonts as well. (#131202, Manjunath Sripadarao)
 
- src/pango-ot-info.c |   3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
+ src/pango-ot-info.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
 
 commit 945e479a3a35769e5e7c792fdcf306892523a5f9
 Author: Hans Breuer <hans@breuer.org>
 
 commit 945e479a3a35769e5e7c792fdcf306892523a5f9
 Author: Hans Breuer <hans@breuer.org>
@@ -32961,8 +44510,8 @@ Date:   Sat Dec 13 14:31:50 2003 +0000
        * modules/basic/basic-win32.c : register the right engine, i.e.
        make it compile
 
        * modules/basic/basic-win32.c : register the right engine, i.e.
        make it compile
 
- src/makefile.msc |   21 +++++++++++++++++++++
- 1 files changed, 21 insertions(+), 0 deletions(-)
+ src/makefile.msc | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
 
 commit ba0ccd5cfcb514cdc45373158343138b7b190f9d
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit ba0ccd5cfcb514cdc45373158343138b7b190f9d
 Author: Owen Taylor <otaylor@redhat.com>
@@ -32983,15 +44532,15 @@ Date: Sat Nov 1 15:02:17 2003 +0000
            Fixes ftmodule.h problem with current Freetype CVS.
            (#125548)
 
            Fixes ftmodule.h problem with current Freetype CVS.
            (#125548)
 
- src/ftxgdef.c         |   14 +++++++-------
- src/ftxgpos.c         |   17 ++++++++---------
- src/ftxgsub.c         |   13 ++++++-------
- src/ftxopen.c         |   10 +++++-----
- src/ftxopen.h         |    3 ++-
- src/ottest.c          |    1 -
- src/pango-ot-info.c   |    4 ++--
- src/pango-ot-private.h |    2 --
- src/pango-ot-ruleset.c |    4 ++--
+ src/ftxgdef.c         | 14 +++++++-------
+ src/ftxgpos.c         | 17 ++++++++---------
+ src/ftxgsub.c         | 13 ++++++-------
+ src/ftxopen.c         | 10 +++++-----
+ src/ftxopen.h         |  3 ++-
+ src/ottest.c          |  1 -
+ src/pango-ot-info.c   |  4 ++--
+ src/pango-ot-private.h |  2 --
+ src/pango-ot-ruleset.c |  4 ++--
  9 files changed, 32 insertions(+), 36 deletions(-)
 
 commit 558171a7a3666999c679719ad0bfbdf7c6a52289
  9 files changed, 32 insertions(+), 36 deletions(-)
 
 commit 558171a7a3666999c679719ad0bfbdf7c6a52289
@@ -33005,8 +44554,8 @@ Date:   Mon Sep 15 22:04:55 2003 +0000
            * pango/opentype/fterrcompat.h: Fix gcc-3.3 versions of
            macros to have the right return value.
 
            * pango/opentype/fterrcompat.h: Fix gcc-3.3 versions of
            macros to have the right return value.
 
- src/fterrcompat.h |   44 ++++++++++++++++++++++++++------------------
- 1 files changed, 26 insertions(+), 18 deletions(-)
+ src/fterrcompat.h | 44 ++++++++++++++++++++++++++------------------
+ 1 file changed, 26 insertions(+), 18 deletions(-)
 
 commit c99259bf7e08ccdc4130d4983e8d186021ea8e1a
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit c99259bf7e08ccdc4130d4983e8d186021ea8e1a
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33022,8 +44571,8 @@ Date:   Mon Aug 25 14:30:12 2003 +0000
            Fix problems where the coverage wasn't being checked
            for the first input glyph. (#118639, Kailash C. Chowksey)
 
            Fix problems where the coverage wasn't being checked
            for the first input glyph. (#118639, Kailash C. Chowksey)
 
- src/ftxgpos.c |    7 +++----
- src/ftxgsub.c |    7 +++----
+ src/ftxgpos.c | 7 +++----
+ src/ftxgsub.c | 7 +++----
  2 files changed, 6 insertions(+), 8 deletions(-)
 
 commit bcf81bcc80c6235dfbc7eeaa34ed21ea329c7a3d
  2 files changed, 6 insertions(+), 8 deletions(-)
 
 commit bcf81bcc80c6235dfbc7eeaa34ed21ea329c7a3d
@@ -33052,8 +44601,8 @@ Date:   Fri Aug 22 22:52:08 2003 +0000
            * pango/pango-context.c/pango-engine.c: Fix name confusion
            for pango_get_fallback_shaper().
 
            * pango/pango-context.c/pango-engine.c: Fix name confusion
            for pango_get_fallback_shaper().
 
- src/fterrcompat.h |   36 ++++++++++++++++++++++++++++++++++--
- 1 files changed, 34 insertions(+), 2 deletions(-)
+ src/fterrcompat.h | 36 ++++++++++++++++++++++++++++++++++--
+ 1 file changed, 34 insertions(+), 2 deletions(-)
 
 commit 46d379596d7292a3b2e51f35fc8044b366d413a3
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 46d379596d7292a3b2e51f35fc8044b366d413a3
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33069,8 +44618,8 @@ Date:   Tue Jul 29 14:21:54 2003 +0000
            "ignore marks of attachment type different than
            specified. (#118456, Kailash C. Chowksey)
 
            "ignore marks of attachment type different than
            specified. (#118456, Kailash C. Chowksey)
 
- src/ftxgdef.c |   37 ++++++++++++++++++++++++++++---------
- 1 files changed, 28 insertions(+), 9 deletions(-)
+ src/ftxgdef.c | 37 ++++++++++++++++++++++++++++---------
+ 1 file changed, 28 insertions(+), 9 deletions(-)
 
 commit 8247acad79c1a4154e9337aed453eb3e4d23063d
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 8247acad79c1a4154e9337aed453eb3e4d23063d
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33087,8 +44636,8 @@ Date:   Mon Jul 28 22:28:37 2003 +0000
            it doesn't work for all scripts. (#118472,
            Kailash C. Chowksey)
 
            it doesn't work for all scripts. (#118472,
            Kailash C. Chowksey)
 
- src/ftxgsub.c |   31 +++----------------------------
- 1 files changed, 3 insertions(+), 28 deletions(-)
+ src/ftxgsub.c | 31 +++----------------------------
+ 1 file changed, 3 insertions(+), 28 deletions(-)
 
 commit 825e6d7e86cac310161648601b09291fa05d5ba5
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 825e6d7e86cac310161648601b09291fa05d5ba5
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33105,8 +44654,8 @@ Date:   Sun Jul 27 02:40:31 2003 +0000
            * pango/opentype/ftxgpos.c (Lookup_ChainContextPos{1,2,3}):
            Same fix here.
 
            * pango/opentype/ftxgpos.c (Lookup_ChainContextPos{1,2,3}):
            Same fix here.
 
- src/ftxgpos.c |    6 +++---
- src/ftxgsub.c |    6 +++---
+ src/ftxgpos.c | 6 +++---
+ src/ftxgsub.c | 6 +++---
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 03a0fe09c711b81c7eb4065fd4700b8cfd2c977a
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 03a0fe09c711b81c7eb4065fd4700b8cfd2c977a
@@ -33122,9 +44671,9 @@ Date:   Sun Jul 27 02:19:52 2003 +0000
            contain TTO_Err_Not_Covered if *no* lookups
            matched. Fix memory leaks on error in Apply_String().
 
            contain TTO_Err_Not_Covered if *no* lookups
            matched. Fix memory leaks on error in Apply_String().
 
- src/ftxgsub.c |  120
- +++++++++++++++++++++++++++++++++++---------------------
- 1 files changed, 75 insertions(+), 45 deletions(-)
+ src/ftxgsub.c | 120
+ ++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 75 insertions(+), 45 deletions(-)
 
 commit e10ea2afd9a5868d4ec1ff3a2b99bcd64ce45816
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit e10ea2afd9a5868d4ec1ff3a2b99bcd64ce45816
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33139,8 +44688,8 @@ Date:   Sun Jul 27 01:10:15 2003 +0000
            Fix confusion between boolean and FT_Error return.
            (GSUB equivalent of fix for #108358)
 
            Fix confusion between boolean and FT_Error return.
            (GSUB equivalent of fix for #108358)
 
- src/ftxgsub.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/ftxgsub.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit a7305ab2624cbc08160dc11587ba3dc4e17781c2
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit a7305ab2624cbc08160dc11587ba3dc4e17781c2
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33158,8 +44707,8 @@ Date:   Sat Jul 26 15:02:13 2003 +0000
            Fix some more error return memory leaks that weren't
            fixed in the Qt changes.
 
            Fix some more error return memory leaks that weren't
            fixed in the Qt changes.
 
- src/ftxgpos.c |    8 ++++----
- src/ftxgsub.c |   12 ++++++------
+ src/ftxgpos.c |  8 ++++----
+ src/ftxgsub.c | 12 ++++++------
  2 files changed, 10 insertions(+), 10 deletions(-)
 
 commit f40b7c15e0bc4b71e706602c4e062f72d8f0fcdd
  2 files changed, 10 insertions(+), 10 deletions(-)
 
 commit f40b7c15e0bc4b71e706602c4e062f72d8f0fcdd
@@ -33175,8 +44724,8 @@ Date:   Sat Jul 26 14:50:23 2003 +0000
            Fix various memory leaks from error returns that should
            have been jumps to cleanup blocks. (From Qt, Lars Knoll)
 
            Fix various memory leaks from error returns that should
            have been jumps to cleanup blocks. (From Qt, Lars Knoll)
 
- src/ftxgpos.c |    8 ++++----
- src/ftxgsub.c |    4 ++--
+ src/ftxgpos.c | 8 ++++----
+ src/ftxgsub.c | 4 ++--
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 256d21970733483833b9cf31d5e0fa7ae853e944
  2 files changed, 6 insertions(+), 6 deletions(-)
 
 commit 256d21970733483833b9cf31d5e0fa7ae853e944
@@ -33191,8 +44740,8 @@ Date:   Sat Jul 26 14:35:29 2003 +0000
            TTO_Err_Not_Covered wasn't considered a successful return
            from Get_Class. (From Qt, Lars Knoll)
 
            TTO_Err_Not_Covered wasn't considered a successful return
            from Get_Class. (From Qt, Lars Knoll)
 
- src/ftxgpos.c |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ src/ftxgpos.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 commit 374960681e2e36d0e4032623d8cb92a7910baf71
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 374960681e2e36d0e4032623d8cb92a7910baf71
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33208,8 +44757,8 @@ Date:   Sat Jul 26 13:50:23 2003 +0000
            subsequent ligatures between those glyphs.
            (From FreeType, Werner Lemberg, 2001-08-22, 2001-08-23)
 
            subsequent ligatures between those glyphs.
            (From FreeType, Werner Lemberg, 2001-08-22, 2001-08-23)
 
- src/ftxgsub.c |   31 ++++++++++++++++++++++++++++---
- 1 files changed, 28 insertions(+), 3 deletions(-)
+ src/ftxgsub.c | 31 ++++++++++++++++++++++++++++---
+ 1 file changed, 28 insertions(+), 3 deletions(-)
 
 commit b682482df77608d67eca8a050db5b36f44953c13
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit b682482df77608d67eca8a050db5b36f44953c13
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33224,8 +44773,8 @@ Date:   Sat Jul 26 13:20:52 2003 +0000
            in from the last commits (Christophe Fergeau,
            118363)
 
            in from the last commits (Christophe Fergeau,
            118363)
 
- src/ftxgpos.c |    6 +++---
- src/ftxopen.c |    2 +-
+ src/ftxgpos.c | 6 +++---
+ src/ftxopen.c | 2 +-
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 06c12109de061c357f46dcec82c4bee7160afede
  2 files changed, 4 insertions(+), 4 deletions(-)
 
 commit 06c12109de061c357f46dcec82c4bee7160afede
@@ -33242,8 +44791,8 @@ Date:   Sat Jul 26 03:45:44 2003 +0000
            item closest to the input first (From FreeType,
            Werner Lemberg, 2002-09-26)
 
            item closest to the input first (From FreeType,
            Werner Lemberg, 2002-09-26)
 
- src/ftxgpos.c |   26 ++++++++++++++++++--------
- src/ftxgsub.c |   24 +++++++++++++++++-------
+ src/ftxgpos.c | 26 ++++++++++++++++++--------
+ src/ftxgsub.c | 24 +++++++++++++++++-------
  2 files changed, 35 insertions(+), 15 deletions(-)
 
 commit 15a69e4a12739e7392f2a38d6f7bfdd96c0dc3ba
  2 files changed, 35 insertions(+), 15 deletions(-)
 
 commit 15a69e4a12739e7392f2a38d6f7bfdd96c0dc3ba
@@ -33267,8 +44816,8 @@ Date:   Sat Jul 26 03:14:23 2003 +0000
            RIGHT_TO_FLAG flag is set, shift cursive chain up so
            last glyph is on the baseline.
 
            RIGHT_TO_FLAG flag is set, shift cursive chain up so
            last glyph is on the baseline.
 
- src/ftxgpos.c |   25 ++++++++++++++++++++++++-
- src/ftxopen.h |    8 ++++++--
+ src/ftxgpos.c | 25 ++++++++++++++++++++++++-
+ src/ftxopen.h |  8 ++++++--
  2 files changed, 30 insertions(+), 3 deletions(-)
 
 commit 6f74f18b77402f3adf5bfbae26e8f44de6543b4e
  2 files changed, 30 insertions(+), 3 deletions(-)
 
 commit 6f74f18b77402f3adf5bfbae26e8f44de6543b4e
@@ -33285,9 +44834,9 @@ Date:   Sat Jul 26 03:03:40 2003 +0000
            via a double indirection. (From FreeType, Werner Lemberg,
            2001-08-08)
 
            via a double indirection. (From FreeType, Werner Lemberg,
            2001-08-08)
 
- src/ftxgpos.h |   17 +++++++++--------
- src/ftxgsub.h |    1 +
- src/ftxopen.c |   19 +++++++++++++++++++
+ src/ftxgpos.h | 17 +++++++++--------
+ src/ftxgsub.h |  1 +
+ src/ftxopen.c | 19 +++++++++++++++++++
  3 files changed, 29 insertions(+), 8 deletions(-)
 
 commit 375781c4546b5cfc453b99551ddf715bb162ffb9
  3 files changed, 29 insertions(+), 8 deletions(-)
 
 commit 375781c4546b5cfc453b99551ddf715bb162ffb9
@@ -33305,8 +44854,8 @@ Date:   Sat Jul 26 02:44:19 2003 +0000
            use class index 0. (From FreeType, Werner Lemberg,
            2001-08-06)
 
            use class index 0. (From FreeType, Werner Lemberg,
            2001-08-06)
 
- src/ftxgsub.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/ftxgsub.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 378e1889cd294cb77313ba7fdab3e52959bf2c40
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 378e1889cd294cb77313ba7fdab3e52959bf2c40
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33326,9 +44875,9 @@ Date:   Sat Jul 26 02:10:42 2003 +0000
            GSUB Context/Chain GPOS MarkBase lookups, improve
            output in various ways.
 
            GSUB Context/Chain GPOS MarkBase lookups, improve
            output in various ways.
 
- src/disasm.c |  242
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
- src/ottest.c |   12 ++-
+ src/disasm.c | 242
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ src/ottest.c |  12 +--
  2 files changed, 241 insertions(+), 13 deletions(-)
 
 commit 07bad0e77c42b5f2535e3b018bf9074d2f4ecc7c
  2 files changed, 241 insertions(+), 13 deletions(-)
 
 commit 07bad0e77c42b5f2535e3b018bf9074d2f4ecc7c
@@ -33343,8 +44892,8 @@ Date:   Thu Jul 24 21:05:29 2003 +0000
            Fix uses of g_assert() around statements with side effects.
            (#115498, patch from David Cuthbert)
 
            Fix uses of g_assert() around statements with side effects.
            (#115498, patch from David Cuthbert)
 
- src/pango-ot-ruleset.c |   14 +++++++++-----
- 1 files changed, 9 insertions(+), 5 deletions(-)
+ src/pango-ot-ruleset.c | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
 
 commit f91deef2c9473da5c3cb5e120f2d4fbf0d638166
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit f91deef2c9473da5c3cb5e120f2d4fbf0d638166
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33360,8 +44909,8 @@ Date:   Wed Apr 16 21:48:29 2003 +0000
            try to set a unicode charmap, if that doesn't succeed,
            return. (Hopefully fixes #106550)
 
            try to set a unicode charmap, if that doesn't succeed,
            return. (Hopefully fixes #106550)
 
- src/pango-ot-info.c |  26 ++++++++++++++++++++++++--
- 1 files changed, 24 insertions(+), 2 deletions(-)
+ src/pango-ot-info.c | 26 ++++++++++++++++++++++++--
+ 1 file changed, 24 insertions(+), 2 deletions(-)
 
 commit 587b3940f3ce71e8e1c9950086923d4eb78d62db
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 587b3940f3ce71e8e1c9950086923d4eb78d62db
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33377,8 +44926,8 @@ Date:   Wed Apr 16 03:58:17 2003 +0000
            Fixes problem with Arial Unicode. Much help from
            Noah Levitt in tracing this down.
 
            Fixes problem with Arial Unicode. Much help from
            Noah Levitt in tracing this down.
 
- src/ftxgpos.c |    7 ++++---
- src/ftxgsub.c |    7 ++++---
+ src/ftxgpos.c | 7 ++++---
+ src/ftxgsub.c | 7 ++++---
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 0d7567f8eaa1f8d0ec9cb89218ce3a1475d258ac
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 commit 0d7567f8eaa1f8d0ec9cb89218ce3a1475d258ac
@@ -33392,8 +44941,8 @@ Date:   Tue Apr 15 23:01:19 2003 +0000
            * pango/opentype/ftxgpos.c: Fix mispelled constant
            from last commit.
 
            * pango/opentype/ftxgpos.c: Fix mispelled constant
            from last commit.
 
- src/ftxgpos.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ src/ftxgpos.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 commit 73cd600798a9a7225b2ac8241ea371d48cf7baf3
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 73cd600798a9a7225b2ac8241ea371d48cf7baf3
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33410,8 +44959,8 @@ Date:   Tue Apr 15 22:15:41 2003 +0000
            * pango/opentype/ftxopen.c (Get_Class1): index is
            allowed to be NULL. (#108358, Noah Levitt)
 
            * pango/opentype/ftxopen.c (Get_Class1): index is
            allowed to be NULL. (#108358, Noah Levitt)
 
- src/ftxgpos.c |    5 +++--
- src/ftxopen.c |    3 ++-
+ src/ftxgpos.c | 5 +++--
+ src/ftxopen.c | 3 ++-
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 462bd0be608c3d14e5b4c01099b02b3948a52369
  2 files changed, 5 insertions(+), 3 deletions(-)
 
 commit 462bd0be608c3d14e5b4c01099b02b3948a52369
@@ -33426,8 +44975,8 @@ Date:   Tue Apr 15 21:05:53 2003 +0000
            Fix infinite loop in the case where the charmap contains
            a character > 65535. (#106550, Morten Welinder.)
 
            Fix infinite loop in the case where the charmap contains
            a character > 65535. (#106550, Morten Welinder.)
 
- src/pango-ot-info.c |  14 +++++++-------
- 1 files changed, 7 insertions(+), 7 deletions(-)
+ src/pango-ot-info.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 commit 312e1c1cf9f2c1e2137b9aaa5181a541447923cb
 Author: James Henstridge <james@daa.com.au>
 
 commit 312e1c1cf9f2c1e2137b9aaa5181a541447923cb
 Author: James Henstridge <james@daa.com.au>
@@ -33471,8 +45020,8 @@ Date:   Tue Mar 11 12:31:16 2003 +0000
 
        * tests/Makefile.am: remove temporary files on clean.
 
 
        * tests/Makefile.am: remove temporary files on clean.
 
- src/Makefile.am |   11 +++++------
- 1 files changed, 5 insertions(+), 6 deletions(-)
+ src/Makefile.am | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
 
 commit 1aad15fd0c007c9075f2f7f4c4cacf576d726eea
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 1aad15fd0c007c9075f2f7f4c4cacf576d726eea
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33506,8 +45055,8 @@ Date:   Mon Feb 17 22:04:29 2003 +0000
            functions; we didn't need separate clear-the-font-cache
            and clear-the-pattern-cache functions.
 
            functions; we didn't need separate clear-the-font-cache
            and clear-the-pattern-cache functions.
 
- src/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 5febce1ffc956ea44526d50be7cf14c69c66cb34
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 5febce1ffc956ea44526d50be7cf14c69c66cb34
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33523,8 +45072,8 @@ Date:   Wed Feb 12 22:12:55 2003 +0000
            this catches it more cleanly, and removes some unneeded
            checks. #105302, problem reported by Will Partain.)
 
            this catches it more cleanly, and removes some unneeded
            checks. #105302, problem reported by Will Partain.)
 
- src/fterrcompat.h |   4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ src/fterrcompat.h | 4 ----
+ 1 file changed, 4 deletions(-)
 
 commit 54e85cc0cf3700d2c4af5396d79bd0e40df8f0da
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 54e85cc0cf3700d2c4af5396d79bd0e40df8f0da
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33543,10 +45092,10 @@ Date: Sat Jan 11 00:16:26 2003 +0000
            in the charmap. (Needed to make things work with various
            old Arabic fonts, such as the KACST fonts)
 
            in the charmap. (Needed to make things work with various
            old Arabic fonts, such as the KACST fonts)
 
- src/ftxgdef.c      |   46 +++++++++++++++-------
- src/ftxgdef.h      |    4 ++
- src/pango-ot-info.c | 108
- +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/ftxgdef.c      |  46 +++++++++++++++-------
+ src/ftxgdef.h      |   4 ++
+ src/pango-ot-info.c | 108
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
  3 files changed, 144 insertions(+), 14 deletions(-)
 
 commit db6bb4b034d4d8d546fc9bdc4ad28b16bb7f1bb7
  3 files changed, 144 insertions(+), 14 deletions(-)
 
 commit db6bb4b034d4d8d546fc9bdc4ad28b16bb7f1bb7
@@ -33563,8 +45112,8 @@ Date:   Thu Nov 28 23:53:18 2002 +0000
        (pango_ft2_font_map_set_default_substitute):
        Fix doc typos.
 
        (pango_ft2_font_map_set_default_substitute):
        Fix doc typos.
 
- src/pango-ot-info.c |   4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ src/pango-ot-info.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 commit 226d9b67db852eb29ad37ec8121b79f3ea6f0b73
 Author: Sebastian Wilhelmi <wilhelmi@ira.uka.de>
 
 commit 226d9b67db852eb29ad37ec8121b79f3ea6f0b73
 Author: Sebastian Wilhelmi <wilhelmi@ira.uka.de>
@@ -33587,8 +45136,8 @@ Date:   Tue Nov 26 13:37:10 2002 +0000
        docs/Makefile.am). Also some cosmetic line wrapping and
        reindentation.
 
        docs/Makefile.am). Also some cosmetic line wrapping and
        reindentation.
 
- src/Makefile.am |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ src/Makefile.am | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 commit 80634a30b9abdf575320bc6fdacdba4e1ea3903d
 Author: Manish Singh <yosh@gimp.org>
 
 commit 80634a30b9abdf575320bc6fdacdba4e1ea3903d
 Author: Manish Singh <yosh@gimp.org>
@@ -33605,8 +45154,8 @@ Date:   Mon Oct 14 22:50:48 2002 +0000
            pango/testfonts.c pango/opentype/pango-ot-ruleset.c:
            Get rid of unnecessary casts for g_object_{ref,unref}
 
            pango/testfonts.c pango/opentype/pango-ot-ruleset.c:
            Get rid of unnecessary casts for g_object_{ref,unref}
 
- src/pango-ot-ruleset.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ src/pango-ot-ruleset.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 commit 741993e0b15b4df86d76fa8df5055bd764c42c71
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 741993e0b15b4df86d76fa8df5055bd764c42c71
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33619,8 +45168,8 @@ Date:   Sun Sep 29 19:06:58 2002 +0000
            * pango/opentype/ftxgpos.c: ligatures can be also used in
            MarkBasePos lookups. (2001-03-17  Werner Lemberg)
 
            * pango/opentype/ftxgpos.c: ligatures can be also used in
            MarkBasePos lookups. (2001-03-17  Werner Lemberg)
 
- src/ftxgpos.c |   13 ++++++++++---
- 1 files changed, 10 insertions(+), 3 deletions(-)
+ src/ftxgpos.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
 
 commit a35dc445e86ab433fe9f3937c95f2c1f18f58110
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit a35dc445e86ab433fe9f3937c95f2c1f18f58110
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33638,9 +45187,9 @@ Date:   Sun Sep 29 19:05:01 2002 +0000
            pango/opentype/ftxg\sub.c:
            More fixes for special marks.
 
            pango/opentype/ftxg\sub.c:
            More fixes for special marks.
 
- src/ftxgdef.c |   13 ++++++++-----
- src/ftxgpos.c |    6 +++---
- src/ftxgsub.c |    4 ++--
+ src/ftxgdef.c | 13 ++++++++-----
+ src/ftxgpos.c |  6 +++---
+ src/ftxgsub.c |  4 ++--
  3 files changed, 13 insertions(+), 10 deletions(-)
 
 commit 5c53f14f371b349da65dfa3a848b17ab89ce3ba8
  3 files changed, 13 insertions(+), 10 deletions(-)
 
 commit 5c53f14f371b349da65dfa3a848b17ab89ce3ba8
@@ -33657,10 +45206,9 @@ Date:  Mon Sep 23 21:45:31 2002 +0000
 
        * pango/opentype/Makefile.am (EXTRA_DIST): Remove from here, too.
 
 
        * pango/opentype/Makefile.am (EXTRA_DIST): Remove from here, too.
 
- src/Makefile.am  |    3 +--
- src/pango-ot.def |   50
- --------------------------------------------------
- 2 files changed, 1 insertions(+), 52 deletions(-)
+ src/Makefile.am  |  3 +--
+ src/pango-ot.def | 50 --------------------------------------------------
+ 2 files changed, 1 insertion(+), 52 deletions(-)
 
 commit 35e4593ccd9ea5ed78f1e6f32f04b3a13cee0145
 Author: Tor Lillqvist <tml@iki.fi>
 
 commit 35e4593ccd9ea5ed78f1e6f32f04b3a13cee0145
 Author: Tor Lillqvist <tml@iki.fi>
@@ -33682,9 +45230,9 @@ Date:   Mon Sep 23 21:19:30 2002 +0000
        * configure.in (AC_OUTPUT): Don't try to output above removed
        files.
 
        * configure.in (AC_OUTPUT): Don't try to output above removed
        files.
 
- src/Makefile.am       |    3 +--
- src/makefile.mingw.in |   43 -------------------------------------------
- 2 files changed, 1 insertions(+), 45 deletions(-)
+ src/Makefile.am       |  3 +--
+ src/makefile.mingw.in | 43 -------------------------------------------
+ 2 files changed, 1 insertion(+), 45 deletions(-)
 
 commit fb279cb0bf676bb1d225e6a296282523d839074d
 Author: Eric Mader <emader@src.gnome.org>
 
 commit fb279cb0bf676bb1d225e6a296282523d839074d
 Author: Eric Mader <emader@src.gnome.org>
@@ -33692,8 +45240,8 @@ Date:   Mon Sep 9 18:11:55 2002 +0000
 
     Correctly handle back, new_advance.
 
 
     Correctly handle back, new_advance.
 
- src/pango-ot-ruleset.c |   25 ++++++++++++++++---------
- 1 files changed, 16 insertions(+), 9 deletions(-)
+ src/pango-ot-ruleset.c | 25 ++++++++++++++++---------
+ 1 file changed, 16 insertions(+), 9 deletions(-)
 
 commit c880e814a50100577811a8a51bc06b4275c55a7e
 Author: Eric Mader <emader@src.gnome.org>
 
 commit c880e814a50100577811a8a51bc06b4275c55a7e
 Author: Eric Mader <emader@src.gnome.org>
@@ -33701,8 +45249,8 @@ Date:   Fri Sep 6 22:45:23 2002 +0000
 
     Don't fail when reading an empty script.
 
 
     Don't fail when reading an empty script.
 
- src/ftxopen.c |   36 +++++++++++++++++++++++++-----------
- src/ftxopen.h |    1 +
+ src/ftxopen.c | 36 +++++++++++++++++++++++++-----------
+ src/ftxopen.h |  1 +
  2 files changed, 26 insertions(+), 11 deletions(-)
 
 commit 441e7d0292bf1a06396daac80fcbad23976a824d
  2 files changed, 26 insertions(+), 11 deletions(-)
 
 commit 441e7d0292bf1a06396daac80fcbad23976a824d
@@ -33722,9 +45270,9 @@ Date:   Wed Aug 7 17:01:52 2002 +0000
            NULL device tables which we represent with
            d->DeltaValue == NULL.
 
            NULL device tables which we represent with
            d->DeltaValue == NULL.
 
- src/ftxgsub.c |   13 -------------
- src/ftxopen.c |    2 +-
- 2 files changed, 1 insertions(+), 14 deletions(-)
+ src/ftxgsub.c | 13 -------------
+ src/ftxopen.c |  2 +-
+ 2 files changed, 1 insertion(+), 14 deletions(-)
 
 commit 48a16fa8090b67b046b2bb686ff4f6f038a2b8e8
 Author: Owen Taylor <otaylor@src.gnome.org>
 
 commit 48a16fa8090b67b046b2bb686ff4f6f038a2b8e8
 Author: Owen Taylor <otaylor@src.gnome.org>
@@ -33763,8 +45311,8 @@ Date:   Tue Jun 4 00:20:51 2002 +0000
            * pango/pangoxft-font.c (pango_xft_real_render): Coalesce
            calls to Xft rendering functions.
 
            * pango/pangoxft-font.c (pango_xft_real_render): Coalesce
            calls to Xft rendering functions.
 
- src/pango-ot-info.c |  29 +++++++++++++++++++++++------
- 1 files changed, 23 insertions(+), 6 deletions(-)
+ src/pango-ot-info.c | 29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
 
 commit 9df9af0b3615dc6a52d784233a3410a9080d9369
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 9df9af0b3615dc6a52d784233a3410a9080d9369
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33778,8 +45326,8 @@ Date:   Fri May 10 18:44:47 2002 +0000
            outside of a loaded frame and some memory leaks
            on failure.
 
            outside of a loaded frame and some memory leaks
            on failure.
 
- src/ftxgdef.c |   12 ++++++++++--
- 1 files changed, 10 insertions(+), 2 deletions(-)
+ src/ftxgdef.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
 
 commit a63dbbbeeb91ebf4ded2fc788f5810a3bd1e14fe
 Author: Eric Mader <mader@jtcsv.com>
 
 commit a63dbbbeeb91ebf4ded2fc788f5810a3bd1e14fe
 Author: Eric Mader <mader@jtcsv.com>
@@ -33799,9 +45347,9 @@ Date:   Tue May 7 20:39:14 2002 +0000
 
        * pango/opentype/pango-ot-ruleset.c: enable GPOS processing
 
 
        * pango/opentype/pango-ot-ruleset.c: enable GPOS processing
 
- src/ftxgdef.c         |   10 ++++++++--
- src/ftxgpos.c         |   33 ++++++++++++++-------------------
- src/pango-ot-ruleset.c |   35 ++++++++++++++++++++++++++++++++++-
+ src/ftxgdef.c         | 10 ++++++++--
+ src/ftxgpos.c         | 33 ++++++++++++++-------------------
+ src/pango-ot-ruleset.c | 35 ++++++++++++++++++++++++++++++++++-
  3 files changed, 56 insertions(+), 22 deletions(-)
 
 commit cf00f8217c9dfcf50febbb06fad245d489a0abe6
  3 files changed, 56 insertions(+), 22 deletions(-)
 
 commit cf00f8217c9dfcf50febbb06fad245d489a0abe6
@@ -33815,8 +45363,8 @@ Date:   Tue Apr 23 20:20:29 2002 +0000
            * pango/opentype/fterrcompat.h: Add compatibility
            defines for changes in FreeType 2.1.0.
 
            * pango/opentype/fterrcompat.h: Add compatibility
            defines for changes in FreeType 2.1.0.
 
- src/fterrcompat.h |   39 +++++++++++++++++++++++++++++++++++++--
- 1 files changed, 37 insertions(+), 2 deletions(-)
+ src/fterrcompat.h | 39 +++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 37 insertions(+), 2 deletions(-)
 
 commit 6b1b04e3736fdca774052ac3cfbe9f027548c29d
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 6b1b04e3736fdca774052ac3cfbe9f027548c29d
 Author: Owen Taylor <otaylor@redhat.com>
@@ -33838,12 +45386,12 @@ Date: Fri Mar 15 06:46:05 2002 +0000
        an array element, all array elements were freed, not
        just the ones that had been succesfully loaded.
 
        an array element, all array elements were freed, not
        just the ones that had been succesfully loaded.
 
- src/ftxgdef.c |   24 +++---
- src/ftxgpos.c |  259
- +++++++++++++++++++++++++++++++++++---------------------
- src/ftxgsub.c |  159 ++++++++++++++++++++---------------
- src/ftxopen.c |   53 ++++++++---
- src/ftxopenf.h |    2 +
+ src/ftxgdef.c |  24 +++---
+ src/ftxgpos.c | 259
+ ++++++++++++++++++++++++++++++++++++---------------------
+ src/ftxgsub.c | 159 ++++++++++++++++++++---------------
+ src/ftxopen.c |  53 ++++++++----
+ src/ftxopenf.h |   2 +
  5 files changed, 306 insertions(+), 191 deletions(-)
 
 commit 6050933f336f43453e35246525cfec362bd23acb
  5 files changed, 306 insertions(+), 191 deletions(-)
 
 commit 6050933f336f43453e35246525cfec362bd23acb
@@ -33859,9 +45407,9 @@ Date:   Fri Mar 15 04:22:14 2002 +0000
            * pango/opentype/disasm.c: Start adding some GPOS
            dumping.
 
            * pango/opentype/disasm.c: Start adding some GPOS
            dumping.
 
- src/disasm.c  |  146
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/ftxopen.c |   20 +++-----
+ src/disasm.c  | 146
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/ftxopen.c |  20 ++++----
  2 files changed, 154 insertions(+), 12 deletions(-)
 
 commit 973bd60a2526666f68138255b8536d1eaee3c2c2
  2 files changed, 154 insertions(+), 12 deletions(-)
 
 commit 973bd60a2526666f68138255b8536d1eaee3c2c2
@@ -33873,8 +45421,8 @@ Date:   Thu Dec 13 17:44:46 2001 +0000
 
     Resuming aborted commit
 
 
     Resuming aborted commit
 
- src/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 6926ca94255e5d52d99d0d64d126165fc725432d
 Author: Matthias Clasen <matthiasc@src.gnome.org>
 
 commit 6926ca94255e5d52d99d0d64d126165fc725432d
 Author: Matthias Clasen <matthiasc@src.gnome.org>
@@ -33892,10 +45440,10 @@ Date: Tue Oct 30 22:09:20 2001 +0000
            * pango/opentype/pango-ot-info.c,
            pango/opentype/pango-ot-ruleset.c: Documentation updates.
 
            * pango/opentype/pango-ot-info.c,
            pango/opentype/pango-ot-ruleset.c: Documentation updates.
 
- src/pango-ot-info.c   |   76
- ++++++++++++++++++++++++++++++++++++++++++++++++
- src/pango-ot-ruleset.c |   27 +++++++++++++++++
- 2 files changed, 103 insertions(+), 0 deletions(-)
+ src/pango-ot-info.c   | 76
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/pango-ot-ruleset.c | 27 ++++++++++++++++++
+ 2 files changed, 103 insertions(+)
 
 commit 87a475c09f6b9b391bca37de47a303a62a397b83
 Author: Havoc Pennington <hp@redhat.com>
 
 commit 87a475c09f6b9b391bca37de47a303a62a397b83
 Author: Havoc Pennington <hp@redhat.com>
@@ -33913,13 +45461,13 @@ Date: Wed Sep 19 21:20:36 2001 +0000
        * configure.in: check for the tterrors.h header in FreeType 2.0.3,
        and define HAVE_FREETYPE_2_0_3 if we have it
 
        * configure.in: check for the tterrors.h header in FreeType 2.0.3,
        and define HAVE_FREETYPE_2_0_3 if we have it
 
- src/Makefile.am     |   1 +
- src/fterrcompat.h   |  16 ++++++++++++++++
- src/ftxgdef.c      |    3 ++-
- src/ftxgpos.c      |    3 ++-
- src/ftxgsub.c      |    3 ++-
- src/ftxopen.c      |    3 ++-
- src/pango-ot-info.c |   2 +-
+ src/Makefile.am     | 1 +
+ src/fterrcompat.h   | 16 ++++++++++++++++
+ src/ftxgdef.c      |  3 ++-
+ src/ftxgpos.c      |  3 ++-
+ src/ftxgsub.c      |  3 ++-
+ src/ftxopen.c      |  3 ++-
+ src/pango-ot-info.c | 2 +-
  7 files changed, 26 insertions(+), 5 deletions(-)
 
 commit 9c37226efe2489b4cf9618ec98f581c998aaf9e4
  7 files changed, 26 insertions(+), 5 deletions(-)
 
 commit 9c37226efe2489b4cf9618ec98f581c998aaf9e4
@@ -33988,8 +45536,8 @@ Date:   Tue Sep 18 20:05:20 2001 +0000
 
        * docs/pango-sections.txt: Updated.
 
 
        * docs/pango-sections.txt: Updated.
 
- src/Makefile.am |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
 
 commit 7dd0838863f65a8ff2e27d12679c9a289a76aec1
 Author: Darin Adler <darin@src.gnome.org>
 
 commit 7dd0838863f65a8ff2e27d12679c9a289a76aec1
 Author: Darin Adler <darin@src.gnome.org>
@@ -34038,9 +45586,9 @@ Date:   Thu Jul 12 16:34:40 2001 +0000
        PangoLanguage*. The code was still compiling, but would not have
        worked.
 
        PangoLanguage*. The code was still compiling, but would not have
        worked.
 
- src/ftxgpos.c         |    2 ++
- src/ftxopen.c         |    1 -
- src/pango-ot-ruleset.c |    1 -
+ src/ftxgpos.c         | 2 ++
+ src/ftxopen.c         | 1 -
+ src/pango-ot-ruleset.c | 1 -
  3 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 68f8a64307441bd3b3d45971ac4dc93f63dedfe8
  3 files changed, 2 insertions(+), 2 deletions(-)
 
 commit 68f8a64307441bd3b3d45971ac4dc93f63dedfe8
@@ -34069,9 +45617,9 @@ Date:   Fri May 18 16:04:40 2001 +0000
        Return positions of grapheme boundaries, not character
        boundaries.
 
        Return positions of grapheme boundaries, not character
        boundaries.
 
- src/Makefile.am |    2 ++
- src/disasm.c   |    5 +++++
- 2 files changed, 7 insertions(+), 0 deletions(-)
+ src/Makefile.am | 2 ++
+ src/disasm.c   | 5 +++++
+ 2 files changed, 7 insertions(+)
 
 commit 89eb36ebc6591025c063cb98f0e1b3badde73e9e
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 89eb36ebc6591025c063cb98f0e1b3badde73e9e
 Author: Owen Taylor <otaylor@redhat.com>
@@ -34085,8 +45633,8 @@ Date:   Tue Apr 24 15:47:22 2001 +0000
        excess call to DONE_Stream left over from conversion
        from FT1. (reported by Michael Jansson)
 
        excess call to DONE_Stream left over from conversion
        from FT1. (reported by Michael Jansson)
 
- src/ftxgdef.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
+ src/ftxgdef.c | 1 -
+ 1 file changed, 1 deletion(-)
 
 commit c61a730aaebec751831f8423894de5f4b539d0ec
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit c61a730aaebec751831f8423894de5f4b539d0ec
 Author: Owen Taylor <otaylor@redhat.com>
@@ -34104,8 +45652,8 @@ Date:   Tue Apr 3 19:07:36 2001 +0000
 
        * configure.in (PANGO_MINOR_VERSION): Up to 0.14
 
 
        * configure.in (PANGO_MINOR_VERSION): Up to 0.14
 
- src/Makefile.am |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
+ src/Makefile.am | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
 
 commit 405b878923ed219617c6f643a9aec06175223d16
 Author: Tor Lillqvist <tml@iki.fi>
 
 commit 405b878923ed219617c6f643a9aec06175223d16
 Author: Tor Lillqvist <tml@iki.fi>
@@ -34131,11 +45679,11 @@ Date: Thu Dec 21 19:55:23 2000 +0000
        * configure.in (included_modules): Generate
        pango/opentype/makefile.mingw.
 
        * configure.in (included_modules): Generate
        pango/opentype/makefile.mingw.
 
- src/Makefile.am       |    4 ++-
- src/makefile.mingw.in |   43 ++++++++++++++++++++++++++++++++++++++++++
- src/pango-ot.def      |   50
- +++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 96 insertions(+), 1 deletions(-)
+ src/Makefile.am       |  4 +++-
+ src/makefile.mingw.in | 43 +++++++++++++++++++++++++++++++++++++++++++
+ src/pango-ot.def      | 50
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 96 insertions(+), 1 deletion(-)
 
 commit 80a15829135065e16ce5b129c715d10d14b829ba
 Author: Owen Taylor <otaylor@redhat.com>
 
 commit 80a15829135065e16ce5b129c715d10d14b829ba
 Author: Owen Taylor <otaylor@redhat.com>
@@ -34185,8 +45733,8 @@ Date:   Wed Dec 20 04:41:36 2000 +0000
  src/ftxopen.c         | 1467 ++++++++++++
  src/ftxopen.h         |  308 +++
  src/ftxopenf.h                |  161 ++
  src/ftxopen.c         | 1467 ++++++++++++
  src/ftxopen.h         |  308 +++
  src/ftxopenf.h                |  161 ++
- src/ottest.c          |  265 ++
+ src/ottest.c          |  265 +++
  src/pango-ot-info.c   |  438 ++++
  src/pango-ot-private.h |   98 +
  src/pango-ot-ruleset.c |  232 ++
  src/pango-ot-info.c   |  438 ++++
  src/pango-ot-private.h |   98 +
  src/pango-ot-ruleset.c |  232 ++
- 19 files changed, 17151 insertions(+), 0 deletions(-)
+ 19 files changed, 17151 insertions(+)
diff --git a/INSTALL b/INSTALL
index a1e89e1..007e939 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
 Installation Instructions
 *************************
 
 Installation Instructions
 *************************
 
-Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
 Inc.
 
    Copying and distribution of this file, with or without modification,
 Inc.
 
    Copying and distribution of this file, with or without modification,
@@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is
 overridden in the site shell script).
 
 Unfortunately, this technique does not work for `CONFIG_SHELL' due to
 overridden in the site shell script).
 
 Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
 
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
 
 `configure' Invocation
 ======================
@@ -367,4 +368,3 @@ operates.
 
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
 
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
-
index d718126..fa87114 100644 (file)
@@ -4,10 +4,7 @@ NULL =
 
 ACLOCAL_AMFLAGS = -I m4
 
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = src util test
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = harfbuzz.pc
+SUBDIRS = src util test docs
 
 EXTRA_DIST = \
        autogen.sh \
 
 EXTRA_DIST = \
        autogen.sh \
@@ -16,30 +13,23 @@ EXTRA_DIST = \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
+       $(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \
+       $(GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL) \
+       $(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
        $(srcdir)/INSTALL \
        $(srcdir)/INSTALL \
-       $(srcdir)/aclocal.m4 \
-       $(srcdir)/autoscan.log \
-       $(srcdir)/compile \
-       $(srcdir)/config.guess \
-       $(srcdir)/config.sub \
-       $(srcdir)/configure.scan \
-       $(srcdir)/depcomp \
-       $(srcdir)/install-sh \
-       $(srcdir)/ltmain.sh \
-       $(srcdir)/missing \
-       $(srcdir)/mkinstalldirs \
        $(srcdir)/ChangeLog \
        $(srcdir)/ChangeLog \
-       `find "$(srcdir)" -type f -name Makefile.in -print`
+       $(NULL)
 
 
 #
 # ChangeLog generation
 #
 CHANGELOG_RANGE =
 
 
 #
 # ChangeLog generation
 #
 CHANGELOG_RANGE =
-ChangeLog:
+ChangeLog: $(srcdir)/ChangeLog
+$(srcdir)/ChangeLog:
        $(AM_V_GEN) if test -d "$(top_srcdir)/.git"; then \
        $(AM_V_GEN) if test -d "$(top_srcdir)/.git"; then \
-         (GIT_DIR=$(top_srcdir)/.git $(top_srcdir)/missing --run \
-          git log $(CHANGELOG_RANGE) --stat) | fmt --split-only > $@.tmp \
+         (GIT_DIR=$(top_srcdir)/.git \
+          $(GIT) log $(CHANGELOG_RANGE) --stat) | fmt --split-only > $@.tmp \
          && mv -f $@.tmp "$(srcdir)/ChangeLog" \
          || ($(RM) $@.tmp; \
              echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
          && mv -f $@.tmp "$(srcdir)/ChangeLog" \
          || ($(RM) $@.tmp; \
              echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
@@ -49,16 +39,25 @@ ChangeLog:
          (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
          echo A git checkout and git-log is required to generate this file >> "$(srcdir)/$@"); \
        fi
          (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
          echo A git checkout and git-log is required to generate this file >> "$(srcdir)/$@"); \
        fi
-.PHONY: $(srcdir)/ChangeLog
+.PHONY: ChangeLog $(srcdir)/ChangeLog
 
 
 #
 # Release engineering
 #
 
 
 
 #
 # Release engineering
 #
 
+DISTCHECK_CONFIGURE_FLAGS = \
+       --enable-gtk-doc \
+       --disable-doc-cross-references \
+       --with-gobject \
+       --enable-introspection \
+       $(NULL)
+
 # TODO: Copy infrastructure from cairo
 
 # TODO: Copy infrastructure from cairo
 
+# TAR_OPTIONS is not set as env var for 'make dist'.  How to fix that?
 TAR_OPTIONS = --owner=0 --group=0
 TAR_OPTIONS = --owner=0 --group=0
+
 dist-hook: dist-clear-sticky-bits
 # Clean up any sticky bits we may inherit from parent dir
 dist-clear-sticky-bits:
 dist-hook: dist-clear-sticky-bits
 # Clean up any sticky bits we may inherit from parent dir
 dist-clear-sticky-bits:
index 7c65d6e..61de622 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 # Process this file with automake to produce Makefile.in
 @SET_MAKE@
 
 # Process this file with automake to produce Makefile.in
-
 VPATH = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -37,76 +80,81 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
-       $(srcdir)/harfbuzz.pc.in $(top_srcdir)/configure AUTHORS \
-       COPYING ChangeLog INSTALL NEWS THANKS TODO compile \
-       config.guess config.sub depcomp install-sh ltmain.sh missing
+DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog THANKS \
+       $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/configure $(am__configure_deps) \
+       $(srcdir)/config.h.in COPYING TODO ar-lib compile config.guess \
+       config.sub depcomp install-sh missing ltmain.sh
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = harfbuzz.pc
+CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 SOURCES =
 DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-DATA = $(pkgconfig_DATA)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-       distdir dist dist-all distcheck
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+       $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
@@ -117,6 +165,7 @@ am__remove_distdir = \
       && rm -rf "$(distdir)" \
       || { sleep 5 && rm -rf "$(distdir)"; }; \
   else :; fi
       && rm -rf "$(distdir)" \
       || { sleep 5 && rm -rf "$(distdir)"; }; \
   else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -144,6 +193,7 @@ am__relativize = \
   reldir="$$dir2"
 GZIP_ENV = --best
 DIST_ARCHIVES = $(distdir).tar.bz2
   reldir="$$dir2"
 GZIP_ENV = --best
 DIST_ARCHIVES = $(distdir).tar.bz2
+DIST_TARGETS = dist-bzip2
 distuninstallcheck_listfiles = find . -type f -print
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distuninstallcheck_listfiles = find . -type f -print
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@@ -185,6 +235,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -193,22 +244,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -238,6 +301,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -302,9 +366,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
 ACLOCAL_AMFLAGS = -I m4
 top_srcdir = @top_srcdir@
 NULL = 
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = src util test
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = harfbuzz.pc
+SUBDIRS = src util test docs
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
@@ -312,20 +374,12 @@ EXTRA_DIST = \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
+       $(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \
+       $(GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL) \
+       $(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
        $(srcdir)/INSTALL \
        $(srcdir)/INSTALL \
-       $(srcdir)/aclocal.m4 \
-       $(srcdir)/autoscan.log \
-       $(srcdir)/compile \
-       $(srcdir)/config.guess \
-       $(srcdir)/config.sub \
-       $(srcdir)/configure.scan \
-       $(srcdir)/depcomp \
-       $(srcdir)/install-sh \
-       $(srcdir)/ltmain.sh \
-       $(srcdir)/missing \
-       $(srcdir)/mkinstalldirs \
        $(srcdir)/ChangeLog \
        $(srcdir)/ChangeLog \
-       `find "$(srcdir)" -type f -name Makefile.in -print`
+       $(NULL)
 
 
 #
 
 
 #
@@ -336,8 +390,17 @@ CHANGELOG_RANGE =
 #
 # Release engineering
 #
 #
 # Release engineering
 #
+DISTCHECK_CONFIGURE_FLAGS = \
+       --enable-gtk-doc \
+       --disable-doc-cross-references \
+       --with-gobject \
+       --enable-introspection \
+       $(NULL)
+
 
 # TODO: Copy infrastructure from cairo
 
 # TODO: Copy infrastructure from cairo
+
+# TAR_OPTIONS is not set as env var for 'make dist'.  How to fix that?
 TAR_OPTIONS = --owner=0 --group=0
 tar_file = $(PACKAGE_TARNAME)-$(VERSION).tar.bz2
 sha256_file = $(tar_file).sha256
 TAR_OPTIONS = --owner=0 --group=0
 tar_file = $(PACKAGE_TARNAME)-$(VERSION).tar.bz2
 sha256_file = $(tar_file).sha256
@@ -382,8 +445,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-       @if test ! -f $@; then rm -f stamp-h1; else :; fi
-       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+       @test -f $@ || rm -f stamp-h1
+       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
@@ -395,8 +458,6 @@ $(srcdir)/config.h.in:  $(am__configure_deps)
 
 distclean-hdr:
        -rm -f config.h stamp-h1
 
 distclean-hdr:
        -rm -f config.h stamp-h1
-harfbuzz.pc: $(top_builddir)/config.status $(srcdir)/harfbuzz.pc.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
 
 mostlyclean-libtool:
        -rm -f *.lo
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -406,42 +467,27 @@ clean-libtool:
 
 distclean-libtool:
        -rm -f libtool config.lt
 
 distclean-libtool:
        -rm -f libtool config.lt
-install-pkgconfigDATA: $(pkgconfig_DATA)
-       @$(NORMAL_INSTALL)
-       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
-       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-       for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         echo "$$d$$p"; \
-       done | $(am__base_list) | \
-       while read files; do \
-         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
-         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
-       done
-
-uninstall-pkgconfigDATA:
-       @$(NORMAL_UNINSTALL)
-       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -456,57 +502,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -522,12 +523,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -539,15 +535,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -556,9 +548,31 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+       test ! -s cscope.files \
+         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+       -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
        @case `sed 15q $(srcdir)/NEWS` in \
 
 distdir: $(DISTFILES)
        @case `sed 15q $(srcdir)/NEWS` in \
@@ -600,13 +614,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -638,39 +649,41 @@ distdir: $(DISTFILES)
        || chmod -R a+r "$(distdir)"
 dist-gzip: distdir
        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
        || chmod -R a+r "$(distdir)"
 dist-gzip: distdir
        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 dist-bzip2: distdir
        tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
 dist-bzip2: distdir
        tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-lzip: distdir
        tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
 
 dist-lzip: distdir
        tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-       $(am__remove_distdir)
-
-dist-lzma: distdir
-       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-xz: distdir
        tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
 
 dist-xz: distdir
        tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-tarZ: distdir
 
 dist-tarZ: distdir
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-shar: distdir
 
 dist-shar: distdir
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-zip: distdir
        -rm -f $(distdir).zip
        zip -rq $(distdir).zip $(distdir)
 
 dist-zip: distdir
        -rm -f $(distdir).zip
        zip -rq $(distdir).zip $(distdir)
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 
-dist dist-all: distdir
-       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-       $(am__remove_distdir)
+dist dist-all:
+       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+       $(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -681,8 +694,6 @@ distcheck: dist
          GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
        *.tar.bz2*) \
          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
          GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
        *.tar.bz2*) \
          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-       *.tar.lzma*) \
-         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
        *.tar.lz*) \
          lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
        *.tar.xz*) \
        *.tar.lz*) \
          lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
        *.tar.xz*) \
@@ -694,9 +705,9 @@ distcheck: dist
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
-       chmod -R a-w $(distdir); chmod a+w $(distdir)
-       mkdir $(distdir)/_build
-       mkdir $(distdir)/_inst
+       chmod -R a-w $(distdir)
+       chmod u+w $(distdir)
+       mkdir $(distdir)/_build $(distdir)/_inst
        chmod a-w $(distdir)
        test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
        chmod a-w $(distdir)
        test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
@@ -728,7 +739,7 @@ distcheck: dist
          && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
          && cd "$$am__cwd" \
          || exit 1
          && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
          && cd "$$am__cwd" \
          || exit 1
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
        @(echo "$(distdir) archives ready for distribution: "; \
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
        @(echo "$(distdir) archives ready for distribution: "; \
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
@@ -760,12 +771,9 @@ distcleancheck: distclean
               exit 1; } >&2
 check-am: all-am
 check: check-recursive
               exit 1; } >&2
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(DATA) config.h
+all-am: Makefile config.h
 installdirs: installdirs-recursive
 installdirs-am:
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
-         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-       done
 install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
@@ -819,7 +827,7 @@ info: info-recursive
 
 info-am:
 
 
 info-am:
 
-install-data-am: install-pkgconfigDATA
+install-data-am:
 
 install-dvi: install-dvi-recursive
 
 
 install-dvi: install-dvi-recursive
 
@@ -865,32 +873,32 @@ ps: ps-recursive
 
 ps-am:
 
 
 ps-am:
 
-uninstall-am: uninstall-pkgconfigDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
-       ctags-recursive install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am am--refresh check check-am clean clean-generic \
-       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-       dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \
-       dist-xz dist-zip distcheck distclean distclean-generic \
-       distclean-hdr distclean-libtool distclean-tags distcleancheck \
-       distdir distuninstallcheck dvi dvi-am html html-am info \
-       info-am install install-am install-data install-data-am \
-       install-dvi install-dvi-am install-exec install-exec-am \
-       install-html install-html-am install-info install-info-am \
-       install-man install-pdf install-pdf-am install-pkgconfigDATA \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs installdirs-am maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am uninstall-pkgconfigDATA
-
-ChangeLog:
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+       am--refresh check check-am clean clean-cscope clean-generic \
+       clean-libtool cscope cscopelist-am ctags ctags-am dist \
+       dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+       dist-tarZ dist-xz dist-zip distcheck distclean \
+       distclean-generic distclean-hdr distclean-libtool \
+       distclean-tags distcleancheck distdir distuninstallcheck dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+ChangeLog: $(srcdir)/ChangeLog
+$(srcdir)/ChangeLog:
        $(AM_V_GEN) if test -d "$(top_srcdir)/.git"; then \
        $(AM_V_GEN) if test -d "$(top_srcdir)/.git"; then \
-         (GIT_DIR=$(top_srcdir)/.git $(top_srcdir)/missing --run \
-          git log $(CHANGELOG_RANGE) --stat) | fmt --split-only > $@.tmp \
+         (GIT_DIR=$(top_srcdir)/.git \
+          $(GIT) log $(CHANGELOG_RANGE) --stat) | fmt --split-only > $@.tmp \
          && mv -f $@.tmp "$(srcdir)/ChangeLog" \
          || ($(RM) $@.tmp; \
              echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
          && mv -f $@.tmp "$(srcdir)/ChangeLog" \
          || ($(RM) $@.tmp; \
              echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
@@ -900,7 +908,8 @@ ChangeLog:
          (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
          echo A git checkout and git-log is required to generate this file >> "$(srcdir)/$@"); \
        fi
          (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
          echo A git checkout and git-log is required to generate this file >> "$(srcdir)/$@"); \
        fi
-.PHONY: $(srcdir)/ChangeLog
+.PHONY: ChangeLog $(srcdir)/ChangeLog
+
 dist-hook: dist-clear-sticky-bits
 # Clean up any sticky bits we may inherit from parent dir
 dist-clear-sticky-bits:
 dist-hook: dist-clear-sticky-bits
 # Clean up any sticky bits we may inherit from parent dir
 dist-clear-sticky-bits:
diff --git a/NEWS b/NEWS
index 7542e8e..adc8f69 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,428 @@
+Overview of changes leading to 0.9.35
+Saturday, August 13, 2014
+=====================================
+
+- Fix major shape-plan caching bug when more than one shaper were
+  provided to hb_shape_full() (as exercised by XeTeX).
+  http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
+- Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
+- Major hb-coretext fixes.  That backend is complete now, including
+  respecing buffer direction and language, down to vertical writing.
+- Build fixes for Windows CE.  Should build fine now.
+- Misc fixes:
+  Use atexit() only if it's safe to call from shared library
+  https://bugs.freedesktop.org/show_bug.cgi?id=82246
+  Mandaic had errors in its Unicode Joining_Type
+  https://bugs.freedesktop.org/show_bug.cgi?id=82306
+- API changes:
+
+  * hb_buffer_clear_contents() does not reset buffer flags now.
+
+    After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
+    need to set flags for different pieces of text.  The flags now
+    are something the client sets up once, depending on how it
+    actually uses the buffer.  As such, don't clear it in
+    clear_contents().
+
+    I don't expect any changes to be needed to any existing client.
+
+
+Overview of changes leading to 0.9.34
+Saturday, August 2, 2014
+=====================================
+
+- hb_feature_from_string() now accepts CSS font-feature-settings format.
+- As a result, hb-shape / hb-view --features also accept CSS-style strings.
+  Eg, "'liga' off" is accepted now.
+- Add old-spec Myanmar shaper:
+  https://bugs.freedesktop.org/show_bug.cgi?id=81775
+- Don't apply 'calt' in Hangul shaper.
+- Fix mark advance zeroing for Hebrew shaper:
+  https://bugs.freedesktop.org/show_bug.cgi?id=76767
+- Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
+  and requires help from get_glyph().  Used by Firefox.
+  https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
+- Disable 'liga' in vertical text.
+- Build fixes.
+- API changes:
+
+  * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
+
+    Previously, we expected users to provide BOT/EOT flags when the
+    text *segment* was at paragraph boundaries.  This meant that for
+    clients that provide full paragraph to HarfBuzz (eg. Pango), they
+    had code like this:
+
+      hb_buffer_set_flags (hb_buffer,
+                           (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
+                           (item_offset + item_length == paragraph_length ?
+                            HB_BUFFER_FLAG_EOT : 0));
+
+      hb_buffer_add_utf8 (hb_buffer,
+                          paragraph_text, paragraph_length,
+                          item_offset, item_length);
+
+    After this change such clients can simply say:
+
+      hb_buffer_set_flags (hb_buffer,
+                           HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
+
+      hb_buffer_add_utf8 (hb_buffer,
+                          paragraph_text, paragraph_length,
+                          item_offset, item_length);
+
+    Ie, HarfBuzz itself checks whether the segment is at the beginning/end
+    of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
+    continue not setting any flags whatsoever.
+
+    Another way to put it is: if there's pre-context text in the buffer,
+    HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
+    EOT flag.
+
+
+Overview of changes leading to 0.9.33
+Tuesday, July 22, 2014
+=====================================
+
+- Turn off ARabic 'cswh' feature that was accidentally turned on.
+- Add HB_TAG_MAX_SIGNED.
+- Make hb_face_make_immutable() really make face immutable!
+- Windows build fixes.
+
+
+Overview of changes leading to 0.9.32
+Thursday, July 17, 2014
+=====================================
+
+- Apply Arabic shaping features in spec order exactly.
+- Another fix for Mongolian free variation selectors.
+- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
+  together.
+- Minor adjustment to U+FFFD logic.
+- Fix hb-coretext build.
+
+
+Overview of changes leading to 0.9.31
+Wednesday, July 16, 2014
+=====================================
+
+- Only accept valid UTF-8/16/32; we missed many cases before.
+- Better shaping of invalid UTF-8/16/32.  Falls back to
+  U+FFFD REPLACEMENT CHARACTER now.
+- With all changes in this release, the buffer will contain fully
+  valid Unicode after hb_buffer_add_utf8/16/32 no matter how
+  broken the input is.  This can be overriden though.  See below.
+- Fix Mongolian Variation Selectors for fonts without GDEF.
+- Fix minor invalid buffer access.
+- Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
+  now uses these instead of private tags.
+- Build fixes.
+- New API:
+  * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
+    used to do, ie. no validity check on the input at all.  add_utf32
+    now replaces invalid Unicode codepoints with the replacement
+    character (see below).
+  * hb_buffer_set_replacement_codepoint()
+  * hb_buffer_get_replacement_codepoint()
+    Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
+    we detected broken input, we replaced that with (hb_codepoint_t)-1.
+    This has changed to use U+FFFD now, but can be changed using these
+    new API.
+
+
+Overview of changes leading to 0.9.30
+Wednesday, July 9, 2014
+=====================================
+
+- Update to Unicode 7.0.0:
+  * New scripts Manichaean and Psalter Pahlavi are shaped using
+    Arabic shaper.
+  * All the other new scripts to through the generic shaper for
+    now.
+- Minor Indic improvements.
+- Fix graphite2 backend cluster mapping [crasher!]
+- API changes:
+  * New HB_SCRIPT_* values for Unicode 7.0 scripts.
+  * New function hb_ot_layout_language_get_required_feature().
+- Build fixes.
+
+
+Overview of changes leading to 0.9.29
+Thursday, May 29, 2014
+=====================================
+
+- Implement cmap in hb-ot-font.h.  No variation-selectors yet.
+- Myanmar: Allow MedialYa+Asat.
+- Various Indic fixes:
+  * Support most characters in Extended Devanagary and Vedic
+    Unicode blocks.
+  * Allow digits and a some punctuation as consonant placeholders.
+- Build fixes.
+
+
+Overview of changes leading to 0.9.28
+Monday, April 28, 2014
+=====================================
+
+- Unbreak old-spec Indic shaping. (bug 76705)
+- Fix shaping of U+17DD and U+0FC6.
+- Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
+  for shipping libraries.  It's an option for further experimentation
+  right now.  When we are sure how to do it properly, we will add
+  public run-time API for the functionality.
+- Build fixes.
+
+
+Overview of changes leading to 0.9.27
+Tuesday, March 18, 2014
+=====================================
+
+- Don't use "register" storage class specifier
+- Wrap definition of free_langs() with HAVE_ATEXIT
+- Add coretext_aat shaper and hb_coretext_face_create() constructor
+- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
+- Add Myanmar test case from OpenType Myanmar spec
+- Only do fallback Hebrew composition if no GPOS 'mark' available
+- Allow bootstrapping without gtk-doc
+- Use AM_MISSING_PROG for ragel and git
+- Typo in ucdn's Makefile.am
+- Improve MemoryBarrier() implementation
+
+
+Overview of changes leading to 0.9.26
+Thursday, January 30, 2014
+=====================================
+
+- Misc fixes.
+- Fix application of 'rtlm' feature.
+- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
+- New header: hb-ot-shape.h
+- Uniscribe: fix scratch-buffer accounting.
+- Reorder Tai Tham SAKOT to after tone-marks.
+- Add Hangul shaper.
+- New files:
+  hb-ot-shape-complex-hangul.cc
+  hb-ot-shape-complex-hebrew.cc
+  hb-ot-shape-complex-tibetan.cc
+- Disable 'cswh' feature in Arabic shaper.
+- Coretext: better handle surrogate pairs.
+- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
+
+
+Overview of changes leading to 0.9.25
+Wednesday, December 4, 2013
+=====================================
+
+- Myanmar shaper improvements.
+- Avoid font fallback in CoreText backend.
+- Additional OpenType language tag mappiongs.
+- More aggressive shape-plan caching.
+- Build with / require automake 1.13.
+- Build with libtool 2.4.2.418 alpha to support ppc64le.
+
+
+Overview of changes leading to 0.9.24
+Tuesday, November 13, 2013
+=====================================
+
+- Misc compiler warning fixes with clang.
+- No functional changes.
+
+
+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
+=====================================
+
+- Fix use-after-end-of-scope in hb_language_from_string().
+- Fix hiding of default_ignorables if font doesn't have space glyph.
+- Protect against out-of-range lookup indices.
+
+- API Changes:
+
+  * Added hb_ot_layout_table_get_lookup_count()
+
+
+Overview of changes leading to 0.9.21
+Monday, September 16, 2013
+=====================================
+
+- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
+- Remove (long disabled) hb-old and hb-icu-le test shapers.
+- Misc gtk-doc and gobject-introspection annotations.
+- Misc fixes.
+- API changes:
+
+  * Add HB_SET_VALUE_INVALID
+
+Overview of changes leading to 0.9.20
+Thursday, August 29, 2013
+=====================================
+
+General:
+- Misc substitute_closure() fixes.
+- Build fixes.
+
+Documentation:
+- gtk-doc boilerplate integrated.  Docs are built now, but
+  contain no contents.  By next release hopefully we have
+  some content in.  Enable using --enable-gtk-doc.
+
+GObject and Introspection:
+- Added harfbuzz-gobject library (hb-gobject.h) that has type
+  bindings for all HarfBuzz objects and enums.  Enable using
+  --with-gobject.
+- Added gobject-introspection boilerplate.  Nothing useful
+  right now.  Work in progress.  Gets enabled automatically if
+  --with-gobject is used.  Override with --disable-introspection.
+
+OpenType shaper:
+- Apply 'mark' in Myanmar shaper.
+- Don't apply 'dlig' by default.
+
+Uniscribe shaper:
+- Support user features.
+- Fix loading of fonts that are also installed on the system.
+- Fix shaping of Arabic Presentation Forms.
+- Fix build with wide chars.
+
+CoreText shaper:
+- Support user features.
+
+Source changes:
+- hb_face_t code moved to hb-face.h / hb-face.cc.
+- Added hb-deprecated.h.
+
+API changes:
+- Added HB_DISABLE_DEPRECATED.
+- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
+  HB_SCRIPT_CANADIAN_SYLLABICS.
+- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
+  HB_BUFFER_FLAG_DEFAULT.
+- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
+  HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
+
+
+Overview of changes leading to 0.9.19
+Tuesday, July 16, 2013
+=====================================
+
+- Build fixes.
+- Better handling of multiple variation selectors in a row.
+- Pass on variation selector to GSUB if not consumed by cmap.
+- Fix undefined memory access.
+- Add Javanese config to Indic shaper.
+- Misc bug fixes.
+
+Overview of changes leading to 0.9.18
+Tuesday, May 28, 2013
+=====================================
+
+New build system:
+
+- All unneeded code is all disabled by default,
+
+- Uniscribe and CoreText shapers can be enabled with their --with options,
+
+- icu_le and old shapers cannot be enabled for now,
+
+- glib, freetype, and cairo will be detected automatically.
+  They can be force on/off'ed with their --with options,
+
+- icu and graphite2 are default off, can be enabled with their --with
+  options,
+
+Moreover, ICU support is now build into a separate library:
+libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
+Distros can enable ICU now without every application on earth
+getting linked to via libharfbuzz.so.
+
+For distros I recommend that they make sure they are building --with-glib
+--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
+And package harfbuzz and harfbuzz-icu separately.
+
+
+Overview of changes leading to 0.9.17
+Monday, May 20, 2013
+=====================================
+
+- Build fixes.
+- Fix bug in hb_set_get_min().
+- Fix regression with Arabic mark positioning / width-zeroing.
+
+Overview of changes leading to 0.9.16
+Friday, April 19, 2013
+=====================================
+
+- Major speedup in OpenType lookup processing.  With the Amiri
+  Arabic font, this release is over 3x faster than previous
+  release.  All scripts / languages should see this speedup.
+
+- New --num-iterations option for hb-shape / hb-view; useful for
+  profiling.
+
+Overview of changes leading to 0.9.15
+Friday, April 05, 2013
+=====================================
+
+- Build fixes.
+- Fix crasher in graphite2 shaper.
+- Fix Arabic mark width zeroing regression.
+- Don't compose Hangul jamo into Unicode syllables.
+
+
+Overview of changes leading to 0.9.14
+Thursday, March 21, 2013
+=====================================
+
+- Build fixes.
+- Fix time-consuming sanitize with malicious fonts.
+- Implement hb_buffer_deserialize_glyphs() for both json and text.
+- Do not ignore Hangul filler characters.
+- Indic fixes:
+  * Fix Malayalam pre-base reordering interaction with post-forms.
+  * Further adjust ZWJ handling.  Should fix known regressions from
+    0.9.13.
+
+
+Overview of changes leading to 0.9.13
+Thursday, February 25, 2013
+=====================================
+
+- Build fixes.
+- Ngapi HarfBuzz Hackfest in London (February 2013):
+  * Fixed all known Indic bugs,
+  * New Win8-style Myanmar shaper,
+  * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
+  * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
+    matching GSUB/GPOS lookups,
+  * Fix 'Phags-Pa U+A872 shaping,
+  * Fix partial disabling of default-on features,
+  * Allow disabling of TrueType kerning.
+- Fix possible crasher with broken fonts with overlapping tables.
+- Removed generated files from git again.  So, one needs ragel to
+  bootstrap from the git tree.
+
+API changes:
+- hb_shape() and related APIs now abort if buffer direction is
+  HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
+  hb_buffer_guess_segment_properties() on the buffer before
+  shaping.  The heuristics in that function are fragile.  If the
+  user really wants the old behvaior, they can call that function
+  right before calling hb_shape() to get the old behavior.
+- hb_blob_create_sub_blob() always creates sub-blob with
+  HB_MEMORY_MODE_READONLY.  See comments for the reason.
+
+
 Overview of changes leading to 0.9.12
 Thursday, January 18, 2013
 =====================================
 Overview of changes leading to 0.9.12
 Thursday, January 18, 2013
 =====================================
diff --git a/TODO b/TODO
index c93b33e..e1aa39c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,10 +5,6 @@ General fixes:
 
 - Return "safe-to-break" bit from shaping.
 
 
 - Return "safe-to-break" bit from shaping.
 
-- Disable 'vert' if 'vrt2' is available (eg. Motoya fonts with arrow chars).
-
-- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS).
-
 - Implement 'rand' feature.
 
 - mask propagation? (when ligation, "or" the masks).
 - Implement 'rand' feature.
 
 - mask propagation? (when ligation, "or" the masks).
@@ -20,26 +16,22 @@ General fixes:
 
 - Misc features:
   * init/medi/fina/isol for non-cursive scripts
 
 - Misc features:
   * init/medi/fina/isol for non-cursive scripts
-  * vkna,hkna etc for kana, etc
-  * smpl,trad for ZHS / ZHT
 
 
 API issues to fix before 1.0:
 ============================
 
 
 
 API issues to fix before 1.0:
 ============================
 
-- API to accept a list of languages.
-
-- Add default font_funcs / Unicode funcs API and to utils.
+- API to accept a list of languages?
 
 - Add init_func to font_funcs.  Adjust ft.
 
 
 - Add init_func to font_funcs.  Adjust ft.
 
-- Add pkg-config files for glue codes (harfbuzz-glib, etc)
+- hb-ft load_flags issues.
 
 
-- Figure out how many .so objects, how to link, etc
+- Add pkg-config files for glue codes (harfbuzz-glib, etc)
 
 - 'const' for getter APIs? (use mutable internally)
 
 
 - 'const' for getter APIs? (use mutable internally)
 
-- blob_from_file?
+- Remove hb_ot_shape_glyphs_closure()?
 
 
 API additions
 
 
 API additions
@@ -47,19 +39,17 @@ API additions
 
 - Language to/from script.
 
 
 - Language to/from script.
 
-- Buffer (de)serialize API ala hb-shape?
+- blob_from_file?
 
 - Add hb-cairo glue
 
 - Add sanitize API (and a cached version, that saves result on blob user-data)
 
 
 - Add hb-cairo glue
 
 - Add sanitize API (and a cached version, that saves result on blob user-data)
 
-- Add glib GBoxedType stuff and introspection
-
 - BCP 47 language handling / API (language_matches?)
 
 - BCP 47 language handling / API (language_matches?)
 
-- Add hb_font_create_linear()?
+- Add hb_font_create_unscaled()?
 
 
-- Add query API for aalt-like features?
+- Add query / enumeration API for aalt-like features?
 
 - SFNT api? get_num_faces? get_table_tags? (there's something in stash)
 
 
 - SFNT api? get_num_faces? get_table_tags? (there's something in stash)
 
@@ -71,7 +61,7 @@ API additions
 hb-view / hb-shape enhancements:
 ===============================
 
 hb-view / hb-shape enhancements:
 ===============================
 
-- Add --width, --height, --auto-size, --align, etc?
+- Add --width, --height, --auto-size, --ink-box, --align, etc?
 
 
 Tests to write:
 
 
 Tests to write:
index 777baa0..0a02487 100644 (file)
@@ -1,8 +1,7 @@
-# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
+# generated automatically by aclocal 1.14 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+dnl -*- mode: autoconf -*-
+dnl Copyright 2009 Johan Dahlin
+dnl
+dnl This file is free software; the author(s) gives unlimited
+dnl permission to copy and/or distribute it, with or without
+dnl modifications, as long as this notice is preserved.
+dnl
+
+# serial 1
+
+m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
+[
+    AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+    AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+    AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
+
+    dnl enable/disable introspection
+    m4_if([$2], [require],
+    [dnl
+        enable_introspection=yes
+    ],[dnl
+        AC_ARG_ENABLE(introspection,
+                  AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
+                                 [Enable introspection for this build]),, 
+                                 [enable_introspection=auto])
+    ])dnl
+
+    AC_MSG_CHECKING([for gobject-introspection])
+
+    dnl presence/version checking
+    AS_CASE([$enable_introspection],
+    [no], [dnl
+        found_introspection="no (disabled, use --enable-introspection to enable)"
+    ],dnl
+    [yes],[dnl
+        PKG_CHECK_EXISTS([gobject-introspection-1.0],,
+                         AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1],
+                         found_introspection=yes,
+                         AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
+    ],dnl
+    [auto],[dnl
+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
+       dnl Canonicalize enable_introspection
+       enable_introspection=$found_introspection
+    ],dnl
+    [dnl       
+        AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
+    ])dnl
+
+    AC_MSG_RESULT([$found_introspection])
+
+    INTROSPECTION_SCANNER=
+    INTROSPECTION_COMPILER=
+    INTROSPECTION_GENERATE=
+    INTROSPECTION_GIRDIR=
+    INTROSPECTION_TYPELIBDIR=
+    if test "x$found_introspection" = "xyes"; then
+       INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+       INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+       INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+       INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+       INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+    fi
+    AC_SUBST(INTROSPECTION_SCANNER)
+    AC_SUBST(INTROSPECTION_COMPILER)
+    AC_SUBST(INTROSPECTION_GENERATE)
+    AC_SUBST(INTROSPECTION_GIRDIR)
+    AC_SUBST(INTROSPECTION_TYPELIBDIR)
+    AC_SUBST(INTROSPECTION_CFLAGS)
+    AC_SUBST(INTROSPECTION_LIBS)
+    AC_SUBST(INTROSPECTION_MAKEFILE)
+
+    AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
+])
+
 
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
-# Foundation, Inc.
+dnl Usage:
+dnl   GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
+
+AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
+[
+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
+])
+
+dnl Usage:
+dnl   GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
+
+
+AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
+[
+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
+])
+
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.14'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.3], [],
+m4_if([$1], [1.14], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -54,24 +148,82 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.3])dnl
+[AM_AUTOMAKE_VERSION([1.14])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed.  If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+  [AC_LANG_PUSH([C])
+   am_cv_ar_interface=ar
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([am_ar_try])
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+        AC_TRY_EVAL([am_ar_try])
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     ])
+   AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # But if we don't then we get into trouble of one sort or another.
+  # A longer-term fix would be to have automake use am__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  m4_default([$1],
+             [AC_MSG_ERROR([could not determine $AR interface])])
+  ;;
+esac
+AC_SUBST([AR])dnl
+])
+
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -90,7 +242,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -116,22 +268,19 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -150,16 +299,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
-# 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 12
 
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -169,7 +316,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -182,12 +329,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -195,8 +343,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -236,16 +384,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -254,8 +402,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
@@ -263,7 +411,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -311,7 +459,7 @@ AM_CONDITIONAL([am__fastdep$1], [
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -321,9 +469,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
@@ -338,20 +490,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 5
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -364,7 +514,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -376,21 +526,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
@@ -408,7 +556,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -418,18 +566,21 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
-
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
@@ -442,7 +593,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
+[AC_PREREQ([2.65])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -471,31 +622,40 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -506,34 +666,78 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
                             [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
                             [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-                 [_AM_DEPENDENCIES(CC)],
-                 [define([AC_PROG_CC],
-                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+                 [_AM_DEPENDENCIES([CC])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                 [_AM_DEPENDENCIES(CXX)],
-                 [define([AC_PROG_CXX],
-                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                 [_AM_DEPENDENCIES(OBJC)],
-                 [define([AC_PROG_OBJC],
-                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
 ])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
 
 
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
 
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
 
-
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
 # that is generated.  The stamp files are numbered to have different names.
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
 # that is generated.  The stamp files are numbered to have different names.
@@ -555,15 +759,12 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
-# Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -577,16 +778,14 @@ if test x"${install_sh}" != xset; then
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
 
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -602,14 +801,12 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -627,7 +824,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -652,52 +849,14 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
 rm -f confinc confmf
 ])
 
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
-
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
@@ -705,11 +864,10 @@ AC_DEFUN([AM_MISSING_PROG],
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
 # AM_MISSING_HAS_RUN
 # ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
@@ -722,54 +880,22 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
-# Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 1
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
@@ -779,7 +905,7 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 # --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
 # --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
 # ------------------------
 
 # _AM_SET_OPTIONS(OPTIONS)
 # ------------------------
@@ -793,24 +919,82 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
 
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -821,32 +1005,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+       && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
    test "$[2]" = conftest.file
    )
 then
@@ -856,31 +1048,50 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
 
-# Copyright (C) 2009, 2011  Free Software Foundation, Inc.
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
 # Enable less verbose build rules; with the default set to DEFAULT
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
 # Enable less verbose build rules; with the default set to DEFAULT
-# (`yes' being less verbose, `no' or empty being verbose).
+# ("yes" being less verbose, "no" or empty being verbose).
 AC_DEFUN([AM_SILENT_RULES],
 AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules],
-[  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')])
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
 esac
 dnl
 esac
 dnl
-dnl A few `make' implementations (e.g., NonStop OS and NextStep)
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
 dnl do not support nested variable expansions.
 dnl See automake bug#9928 and bug#10237.
 am_make=${MAKE-make}
 dnl do not support nested variable expansions.
 dnl See automake bug#9928 and bug#10237.
 am_make=${MAKE-make}
@@ -898,7 +1109,7 @@ else
   am_cv_make_support_nested_variables=no
 fi])
 if test $am_cv_make_support_nested_variables = yes; then
   am_cv_make_support_nested_variables=no
 fi])
 if test $am_cv_make_support_nested_variables = yes; then
-  dnl Using `$V' instead of `$(V)' breaks IRIX make.
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
   AM_V='$(V)'
   AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
 else
   AM_V='$(V)'
   AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
 else
@@ -915,44 +1126,40 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
@@ -966,18 +1173,16 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -987,81 +1192,120 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
+#
 AC_DEFUN([_AM_PROG_TAR],
 [# Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AC_SUBST([AMTAR], ['$${TAR-tar}'])
 AC_DEFUN([_AM_PROG_TAR],
 [# Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AC_SUBST([AMTAR], ['$${TAR-tar}'])
-m4_if([$1], [v7],
-     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+
+# We'll loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
 
 
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
 
 
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
   rm -rf conftest.dir
   rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
 
 
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([m4/ax_pthread.m4])
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([m4/ax_pthread.m4])
+m4_include([m4/gtk-doc.m4])
 m4_include([m4/libtool.m4])
 m4_include([m4/ltoptions.m4])
 m4_include([m4/ltsugar.m4])
 m4_include([m4/libtool.m4])
 m4_include([m4/ltoptions.m4])
 m4_include([m4/ltsugar.m4])
diff --git a/ar-lib b/ar-lib
new file mode 100755 (executable)
index 0000000..fe2301e
--- /dev/null
+++ b/ar-lib
@@ -0,0 +1,270 @@
+#! /bin/sh
+# Wrapper for Microsoft lib.exe
+
+me=ar-lib
+scriptversion=2012-03-01.08; # UTC
+
+# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# Written by Peter Rosin <peda@lysator.liu.se>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+
+# func_error message
+func_error ()
+{
+  echo "$me: $1" 1>&2
+  exit 1
+}
+
+file_conv=
+
+# func_file_conv build_file
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv in
+       mingw)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_at_file at_file operation archive
+# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE
+# for each of them.
+# When interpreting the content of the @FILE, do NOT use func_file_conv,
+# since the user would need to supply preconverted file names to
+# binutils ar, at least for MinGW.
+func_at_file ()
+{
+  operation=$2
+  archive=$3
+  at_file_contents=`cat "$1"`
+  eval set x "$at_file_contents"
+  shift
+
+  for member
+  do
+    $AR -NOLOGO $operation:"$member" "$archive" || exit $?
+  done
+}
+
+case $1 in
+  '')
+     func_error "no command.  Try '$0 --help' for more information."
+     ;;
+  -h | --h*)
+    cat <<EOF
+Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]
+
+Members may be specified in a file named with @FILE.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "$me, version $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test $# -lt 3; then
+  func_error "you must specify a program, an action and an archive"
+fi
+
+AR=$1
+shift
+while :
+do
+  if test $# -lt 2; then
+    func_error "you must specify a program, an action and an archive"
+  fi
+  case $1 in
+    -lib | -LIB \
+    | -ltcg | -LTCG \
+    | -machine* | -MACHINE* \
+    | -subsystem* | -SUBSYSTEM* \
+    | -verbose | -VERBOSE \
+    | -wx* | -WX* )
+      AR="$AR $1"
+      shift
+      ;;
+    *)
+      action=$1
+      shift
+      break
+      ;;
+  esac
+done
+orig_archive=$1
+shift
+func_file_conv "$orig_archive"
+archive=$file
+
+# strip leading dash in $action
+action=${action#-}
+
+delete=
+extract=
+list=
+quick=
+replace=
+index=
+create=
+
+while test -n "$action"
+do
+  case $action in
+    d*) delete=yes  ;;
+    x*) extract=yes ;;
+    t*) list=yes    ;;
+    q*) quick=yes   ;;
+    r*) replace=yes ;;
+    s*) index=yes   ;;
+    S*)             ;; # the index is always updated implicitly
+    c*) create=yes  ;;
+    u*)             ;; # TODO: don't ignore the update modifier
+    v*)             ;; # TODO: don't ignore the verbose modifier
+    *)
+      func_error "unknown action specified"
+      ;;
+  esac
+  action=${action#?}
+done
+
+case $delete$extract$list$quick$replace,$index in
+  yes,* | ,yes)
+    ;;
+  yesyes*)
+    func_error "more than one action specified"
+    ;;
+  *)
+    func_error "no action specified"
+    ;;
+esac
+
+if test -n "$delete"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  for member
+  do
+    case $1 in
+      @*)
+        func_at_file "${1#@}" -REMOVE "$archive"
+        ;;
+      *)
+        func_file_conv "$1"
+        $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?
+        ;;
+    esac
+  done
+
+elif test -n "$extract"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  if test $# -gt 0; then
+    for member
+    do
+      case $1 in
+        @*)
+          func_at_file "${1#@}" -EXTRACT "$archive"
+          ;;
+        *)
+          func_file_conv "$1"
+          $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?
+          ;;
+      esac
+    done
+  else
+    $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
+    do
+      $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+    done
+  fi
+
+elif test -n "$quick$replace"; then
+  if test ! -f "$orig_archive"; then
+    if test -z "$create"; then
+      echo "$me: creating $orig_archive"
+    fi
+    orig_archive=
+  else
+    orig_archive=$archive
+  fi
+
+  for member
+  do
+    case $1 in
+    @*)
+      func_file_conv "${1#@}"
+      set x "$@" "@$file"
+      ;;
+    *)
+      func_file_conv "$1"
+      set x "$@" "$file"
+      ;;
+    esac
+    shift
+    shift
+  done
+
+  if test -n "$orig_archive"; then
+    $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?
+  else
+    $AR -NOLOGO -OUT:"$archive" "$@" || exit $?
+  fi
+
+elif test -n "$list"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  $AR -NOLOGO -LIST "$archive" || exit $?
+fi
index 47640c3..a267f29 100755 (executable)
@@ -7,12 +7,26 @@ test -n "$srcdir" || srcdir=.
 olddir=`pwd`
 cd $srcdir
 
 olddir=`pwd`
 cd $srcdir
 
+echo -n "checking for ragel... "
+which ragel || {
+       echo "You need to install ragel... See http://www.complang.org/ragel/"
+       exit 1
+}
+
 echo -n "checking for pkg-config... "
 which pkg-config || {
        echo "*** No pkg-config found, please install it ***"
        exit 1
 }
 
 echo -n "checking for pkg-config... "
 which pkg-config || {
        echo "*** No pkg-config found, please install it ***"
        exit 1
 }
 
+echo -n "checking for gtkdocize... "
+if which gtkdocize ; then
+       gtkdocize --copy || exit 1
+else
+       echo "*** No gtkdocize found, skipping documentation ***"
+       echo "EXTRA_DIST = " > gtk-doc.make
+fi
+
 echo -n "checking for autoreconf... "
 which autoreconf || {
        echo "*** No autoreconf found, please install it ***"
 echo -n "checking for autoreconf... "
 which autoreconf || {
        echo "*** No autoreconf found, please install it ***"
diff --git a/compile b/compile
index b1f4749..531136b 100755 (executable)
--- a/compile
+++ b/compile
@@ -1,10 +1,9 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-01-04.17; # UTC
+scriptversion=2012-10-14.11; # UTC
 
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -79,6 +78,53 @@ func_file_conv ()
   esac
 }
 
   esac
 }
 
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
 # func_cl_wrapper cl arg...
 # Adjust compile command to suit cl
 func_cl_wrapper ()
 # func_cl_wrapper cl arg...
 # Adjust compile command to suit cl
 func_cl_wrapper ()
@@ -109,43 +155,34 @@ func_cl_wrapper ()
              ;;
          esac
          ;;
              ;;
          esac
          ;;
+       -I)
+         eat=1
+         func_file_conv "$2" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
        -I*)
          func_file_conv "${1#-I}" mingw
          set x "$@" -I"$file"
          shift
          ;;
        -I*)
          func_file_conv "${1#-I}" mingw
          set x "$@" -I"$file"
          shift
          ;;
+       -l)
+         eat=1
+         func_cl_dashl "$2"
+         set x "$@" "$lib"
+         shift
+         ;;
        -l*)
        -l*)
-         lib=${1#-l}
-         found=no
-         save_IFS=$IFS
-         IFS=';'
-         for dir in $lib_path $LIB
-         do
-           IFS=$save_IFS
-           if $shared && test -f "$dir/$lib.dll.lib"; then
-             found=yes
-             set x "$@" "$dir/$lib.dll.lib"
-             break
-           fi
-           if test -f "$dir/$lib.lib"; then
-             found=yes
-             set x "$@" "$dir/$lib.lib"
-             break
-           fi
-         done
-         IFS=$save_IFS
-
-         test "$found" != yes && set x "$@" "$lib.lib"
+         func_cl_dashl "${1#-l}"
+         set x "$@" "$lib"
          shift
          ;;
          shift
          ;;
+       -L)
+         eat=1
+         func_cl_dashL "$2"
+         ;;
        -L*)
        -L*)
-         func_file_conv "${1#-L}"
-         if test -z "$lib_path"; then
-           lib_path=$file
-         else
-           lib_path="$lib_path;$file"
-         fi
-         linker_opts="$linker_opts -LIBPATH:$file"
+         func_cl_dashL "${1#-L}"
          ;;
        -static)
          shared=false
          ;;
        -static)
          shared=false
index d622a44..b79252d 100755 (executable)
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
 
-timestamp='2012-02-10'
+timestamp='2013-06-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -22,19 +20,17 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner.
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -54,9 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       LIBC=gnu
+
+       eval $set_cc_for_build
+       cat <<-EOF > $dummy.c
+       #include <features.h>
+       #if defined(__UCLIBC__)
+       LIBC=uclibc
+       #elif defined(__dietlibc__)
+       LIBC=dietlibc
+       #else
+       LIBC=gnu
+       #endif
+       EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       ;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -200,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
        echo "${machine}-${os}${release}"
        exit ;;
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
        echo "${machine}-${os}${release}"
        exit ;;
+    *:Bitrig:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+       exit ;;
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -302,7 +321,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
        echo arm-unknown-riscos
        exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
        echo arm-unknown-riscos
        exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -801,6 +820,9 @@ EOF
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
        exit ;;
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
        exit ;;
+    *:MINGW64*:*)
+       echo ${UNAME_MACHINE}-pc-mingw64
+       exit ;;
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
@@ -852,21 +874,21 @@ EOF
        exit ;;
     *:GNU:*:*)
        # the GNU system
        exit ;;
     *:GNU:*:*)
        # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
     aarch64:Linux:*:*)
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
     aarch64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
        exit ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     alpha:Linux:*:*)
        case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
        exit ;;
     alpha:Linux:*:*)
        case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -879,59 +901,54 @@ EOF
          EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
          EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     arm*:Linux:*:*)
        eval $set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
        exit ;;
     arm*:Linux:*:*)
        eval $set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo ${UNAME_MACHINE}-unknown-linux-gnu
+           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
-               echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
            else
            else
-               echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
            fi
        fi
        exit ;;
     avr32*:Linux:*:*)
            fi
        fi
        exit ;;
     avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     cris:Linux:*:*)
        exit ;;
     cris:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
     crisv32:Linux:*:*)
        exit ;;
     crisv32:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
     frv:Linux:*:*)
        exit ;;
     frv:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     hexagon:Linux:*:*)
        exit ;;
     hexagon:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     i*86:Linux:*:*)
        exit ;;
     i*86:Linux:*:*)
-       LIBC=gnu
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
        exit ;;
     ia64:Linux:*:*)
        exit ;;
     ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     m32r*:Linux:*:*)
        exit ;;
     m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     m68*:Linux:*:*)
        exit ;;
     m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
        eval $set_cc_for_build
        exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
        eval $set_cc_for_build
@@ -950,54 +967,63 @@ EOF
        #endif
 EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
        #endif
 EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
        ;;
        ;;
+    or1k:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     or32:Linux:*:*)
     or32:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     padre:Linux:*:*)
        exit ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-gnu
+       echo sparc-unknown-linux-${LIBC}
        exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
        exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
+       echo hppa64-unknown-linux-${LIBC}
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
+         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+         *)    echo hppa-unknown-linux-${LIBC} ;;
        esac
        exit ;;
     ppc64:Linux:*:*)
        esac
        exit ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
+       echo powerpc64-unknown-linux-${LIBC}
        exit ;;
     ppc:Linux:*:*)
        exit ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
+       echo powerpc-unknown-linux-${LIBC}
+       exit ;;
+    ppc64le:Linux:*:*)
+       echo powerpc64le-unknown-linux-${LIBC}
+       exit ;;
+    ppcle:Linux:*:*)
+       echo powerpcle-unknown-linux-${LIBC}
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
+       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
        exit ;;
     sh64*:Linux:*:*)
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     sh*:Linux:*:*)
        exit ;;
     sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
        exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     tile*:Linux:*:*)
        exit ;;
     tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     vax:Linux:*:*)
        exit ;;
     vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-gnu
+       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
        exit ;;
     x86_64:Linux:*:*)
        exit ;;
     x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     xtensa*:Linux:*:*)
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
        exit ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1201,6 +1227,9 @@ EOF
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
        echo i586-pc-haiku
        exit ;;
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
        echo i586-pc-haiku
        exit ;;
+    x86_64:Haiku:*:*)
+       echo x86_64-unknown-haiku
+       exit ;;
     SX-4:SUPER-UX:*:*)
        echo sx4-nec-superux${UNAME_RELEASE}
        exit ;;
     SX-4:SUPER-UX:*:*)
        echo sx4-nec-superux${UNAME_RELEASE}
        exit ;;
@@ -1227,19 +1256,21 @@ EOF
        exit ;;
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
        exit ;;
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       case $UNAME_PROCESSOR in
-           i386)
-               eval $set_cc_for_build
-               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                     grep IS_64BIT_ARCH >/dev/null
-                 then
-                     UNAME_PROCESSOR="x86_64"
-                 fi
-               fi ;;
-           unknown) UNAME_PROCESSOR=powerpc ;;
-       esac
+       eval $set_cc_for_build
+       if test "$UNAME_PROCESSOR" = unknown ; then
+           UNAME_PROCESSOR=powerpc
+       fi
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               case $UNAME_PROCESSOR in
+                   i386) UNAME_PROCESSOR=x86_64 ;;
+                   powerpc) UNAME_PROCESSOR=powerpc64 ;;
+               esac
+           fi
+       fi
        echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1256,7 +1287,7 @@ EOF
     NEO-?:NONSTOP_KERNEL:*:*)
        echo neo-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NEO-?:NONSTOP_KERNEL:*:*)
        echo neo-tandem-nsk${UNAME_RELEASE}
        exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NSE-*:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1330,9 +1361,6 @@ EOF
        exit ;;
 esac
 
        exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
index 4b5c99a..491e7f4 100644 (file)
@@ -1,5 +1,8 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* The normal alignment of `struct{char;}', in bytes. */
+#undef ALIGNOF_STRUCT_CHAR__
+
 /* Define to 1 if you have the `atexit' function. */
 #undef HAVE_ATEXIT
 
 /* Define to 1 if you have the `atexit' function. */
 #undef HAVE_ATEXIT
 
@@ -15,6 +18,9 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Have simple TrueType Layout backend */
+#undef HAVE_FALLBACK
+
 /* Have FreeType 2 library */
 #undef HAVE_FREETYPE
 
 /* Have FreeType 2 library */
 #undef HAVE_FREETYPE
 
 /* Have gobject2 library */
 #undef HAVE_GOBJECT
 
 /* Have gobject2 library */
 #undef HAVE_GOBJECT
 
-/* Have Graphite library */
+/* Have Graphite2 library */
 #undef HAVE_GRAPHITE2
 
 #undef HAVE_GRAPHITE2
 
-/* Have gthread2 library */
-#undef HAVE_GTHREAD
-
-/* Have Old HarfBuzz backend */
-#undef HAVE_HB_OLD
-
 /* Have ICU library */
 #undef HAVE_ICU
 
 /* Have ICU library */
 #undef HAVE_ICU
 
-/* Have ICU Layout Engine library */
-#undef HAVE_ICU_LE
-
 /* Have Intel __sync_* atomic primitives */
 #undef HAVE_INTEL_ATOMIC_PRIMITIVES
 
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
 /* Have Intel __sync_* atomic primitives */
 #undef HAVE_INTEL_ATOMIC_PRIMITIVES
 
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if you have the <io.h> header file. */
-#undef HAVE_IO_H
-
 /* Define to 1 if you have the `isatty' function. */
 #undef HAVE_ISATTY
 
 /* Define to 1 if you have the `isatty' function. */
 #undef HAVE_ISATTY
 
 /* Have UCDN Unicode functions */
 #undef HAVE_UCDN
 
 /* Have UCDN Unicode functions */
 #undef HAVE_UCDN
 
-/* Have Uniscribe backend */
+/* Have Uniscribe library */
 #undef HAVE_UNISCRIBE
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
 #undef HAVE_UNISCRIBE
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if you have the `_setmode' function. */
-#undef HAVE__SETMODE
+/* Define to 1 if you have the <usp10.h> header file. */
+#undef HAVE_USP10_H
 
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#undef LT_OBJDIR
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
 
 
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
 
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
index c894da4..8b612ab 100755 (executable)
@@ -1,24 +1,18 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
 
-timestamp='2012-02-10'
+timestamp='2013-04-24'
 
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, see <http://www.gnu.org/licenses/>.
@@ -26,11 +20,12 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
 
 
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -73,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,7 +116,7 @@ esac
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
   knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
@@ -156,7 +149,7 @@ case $os in
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze)
+       -apple | -axis | -knuth | -cray | -microblaze*)
                os=
                basic_machine=$1
                ;;
                os=
                basic_machine=$1
                ;;
@@ -225,6 +218,12 @@ case $os in
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -lynx*178)
+               os=-lynxos178
+               ;;
+       -lynx*5)
+               os=-lynxos5
+               ;;
        -lynx*)
                os=-lynxos
                ;;
        -lynx*)
                os=-lynxos
                ;;
@@ -253,8 +252,10 @@ case $basic_machine in
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-        | be32 | be64 \
+       | arc | arceb \
+       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+       | avr | avr32 \
+       | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
@@ -267,7 +268,7 @@ case $basic_machine in
        | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
        | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep | metag \
+       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
        | mips | mipsbe | mipseb | mipsel | mipsle \
        | mips16 \
        | mips64 | mips64el \
        | mips | mipsbe | mipseb | mipsel | mipsle \
        | mips16 \
        | mips64 | mips64el \
@@ -285,16 +286,17 @@ case $basic_machine in
        | mipsisa64r2 | mipsisa64r2el \
        | mipsisa64sb1 | mipsisa64sb1el \
        | mipsisa64sr71k | mipsisa64sr71kel \
        | mipsisa64r2 | mipsisa64r2el \
        | mipsisa64sb1 | mipsisa64sb1el \
        | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipsr5900 | mipsr5900el \
        | mipstx39 | mipstx39el \
        | mn10200 | mn10300 \
        | moxie \
        | mt \
        | msp430 \
        | nds32 | nds32le | nds32be \
        | mipstx39 | mipstx39el \
        | mn10200 | mn10300 \
        | moxie \
        | mt \
        | msp430 \
        | nds32 | nds32le | nds32be \
-       | nios | nios2 \
+       | nios | nios2 | nios2eb | nios2el \
        | ns16k | ns32k \
        | open8 \
        | ns16k | ns32k \
        | open8 \
-       | or32 \
+       | or1k | or32 \
        | pdp10 | pdp11 | pj | pjl \
        | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
        | pdp10 | pdp11 | pj | pjl \
        | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
@@ -364,7 +366,7 @@ case $basic_machine in
        | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
        | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
        | be32-* | be64-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
        | be32-* | be64-* \
@@ -383,7 +385,8 @@ case $basic_machine in
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | microblaze-* | microblazeel-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
@@ -401,12 +404,13 @@ case $basic_machine in
        | mipsisa64r2-* | mipsisa64r2el-* \
        | mipsisa64sb1-* | mipsisa64sb1el-* \
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
        | mipsisa64r2-* | mipsisa64r2el-* \
        | mipsisa64sb1-* | mipsisa64sb1el-* \
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipsr5900-* | mipsr5900el-* \
        | mipstx39-* | mipstx39el-* \
        | mmix-* \
        | mt-* \
        | msp430-* \
        | nds32-* | nds32le-* | nds32be-* \
        | mipstx39-* | mipstx39el-* \
        | mmix-* \
        | mt-* \
        | msp430-* \
        | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* \
+       | nios-* | nios2-* | nios2eb-* | nios2el-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
        | open8-* \
        | orion-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
        | open8-* \
        | orion-* \
@@ -782,9 +786,13 @@ case $basic_machine in
                basic_machine=ns32k-utek
                os=-sysv
                ;;
                basic_machine=ns32k-utek
                os=-sysv
                ;;
-       microblaze)
+       microblaze*)
                basic_machine=microblaze-xilinx
                ;;
                basic_machine=microblaze-xilinx
                ;;
+       mingw64)
+               basic_machine=x86_64-pc
+               os=-mingw64
+               ;;
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
@@ -1013,7 +1021,11 @@ case $basic_machine in
                basic_machine=i586-unknown
                os=-pw32
                ;;
                basic_machine=i586-unknown
                os=-pw32
                ;;
-       rdos)
+       rdos | rdos64)
+               basic_machine=x86_64-pc
+               os=-rdos
+               ;;
+       rdos32)
                basic_machine=i386-pc
                os=-rdos
                ;;
                basic_machine=i386-pc
                os=-rdos
                ;;
@@ -1340,21 +1352,21 @@ case $os in
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* \
+             | -sym* | -kopensolaris* | -plan9* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
              | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
              | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-uclibc* \
+             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1486,9 +1498,6 @@ case $os in
        -aros*)
                os=-aros
                ;;
        -aros*)
                os=-aros
                ;;
-       -kaos*)
-               os=-kaos
-               ;;
        -zvmoe)
                os=-zvmoe
                ;;
        -zvmoe)
                os=-zvmoe
                ;;
@@ -1537,6 +1546,9 @@ case $basic_machine in
        c4x-* | tic4x-*)
                os=-coff
                ;;
        c4x-* | tic4x-*)
                os=-coff
                ;;
+       hexagon-*)
+               os=-elf
+               ;;
        tic54x-*)
                os=-coff
                ;;
        tic54x-*)
                os=-coff
                ;;
@@ -1577,6 +1589,9 @@ case $basic_machine in
        mips*-*)
                os=-elf
                ;;
        mips*-*)
                os=-elf
                ;;
+       or1k-*)
+               os=-elf
+               ;;
        or32-*)
                os=-coff
                ;;
        or32-*)
                os=-coff
                ;;
index 248b0eb..84e04c7 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,13 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.12.
+# Generated by GNU Autoconf 2.69 for HarfBuzz 0.9.35.
 #
 # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>.
 #
 #
 #
 # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -136,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -222,21 +246,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
 fi
 
     if test x$as_have_required = xno; then :
@@ -340,6 +368,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -461,6 +497,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -495,16 +535,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -516,28 +556,8 @@ else
   as_mkdir_p=false
 fi
 
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -571,12 +591,12 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HarfBuzz'
 PACKAGE_TARNAME='harfbuzz'
 # Identity of this package.
 PACKAGE_NAME='HarfBuzz'
 PACKAGE_TARNAME='harfbuzz'
-PACKAGE_VERSION='0.9.12'
-PACKAGE_STRING='HarfBuzz 0.9.12'
+PACKAGE_VERSION='0.9.35'
+PACKAGE_STRING='HarfBuzz 0.9.35'
 PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz'
 PACKAGE_URL='http://harfbuzz.org/'
 
 PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz'
 PACKAGE_URL='http://harfbuzz.org/'
 
-ac_unique_file="harfbuzz.pc.in"
+ac_unique_file="src/harfbuzz.pc.in"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -633,12 +653,9 @@ HAVE_GRAPHITE2_FALSE
 HAVE_GRAPHITE2_TRUE
 GRAPHITE2_LIBS
 GRAPHITE2_CFLAGS
 HAVE_GRAPHITE2_TRUE
 GRAPHITE2_LIBS
 GRAPHITE2_CFLAGS
-HAVE_ICU_LE_FALSE
-HAVE_ICU_LE_TRUE
-ICU_LE_LIBS
-ICU_LE_CFLAGS
 HAVE_ICU_FALSE
 HAVE_ICU_TRUE
 HAVE_ICU_FALSE
 HAVE_ICU_TRUE
+ICU_CONFIG
 ICU_LIBS
 ICU_CFLAGS
 HAVE_CAIRO_FT_FALSE
 ICU_LIBS
 ICU_CFLAGS
 HAVE_CAIRO_FT_FALSE
@@ -649,23 +666,29 @@ HAVE_CAIRO_FALSE
 HAVE_CAIRO_TRUE
 CAIRO_LIBS
 CAIRO_CFLAGS
 HAVE_CAIRO_TRUE
 CAIRO_LIBS
 CAIRO_CFLAGS
+HAVE_UCDN_FALSE
+HAVE_UCDN_TRUE
+HAVE_INTROSPECTION_FALSE
+HAVE_INTROSPECTION_TRUE
+INTROSPECTION_MAKEFILE
+INTROSPECTION_LIBS
+INTROSPECTION_CFLAGS
+INTROSPECTION_TYPELIBDIR
+INTROSPECTION_GIRDIR
+INTROSPECTION_GENERATE
+INTROSPECTION_COMPILER
+INTROSPECTION_SCANNER
 HAVE_GOBJECT_FALSE
 HAVE_GOBJECT_TRUE
 GLIB_MKENUMS
 GOBJECT_LIBS
 GOBJECT_CFLAGS
 HAVE_GOBJECT_FALSE
 HAVE_GOBJECT_TRUE
 GLIB_MKENUMS
 GOBJECT_LIBS
 GOBJECT_CFLAGS
-HAVE_GTHREAD_FALSE
-HAVE_GTHREAD_TRUE
-GTHREAD_LIBS
-GTHREAD_CFLAGS
 HAVE_GLIB_FALSE
 HAVE_GLIB_TRUE
 GLIB_LIBS
 GLIB_CFLAGS
 HAVE_GLIB_FALSE
 HAVE_GLIB_TRUE
 GLIB_LIBS
 GLIB_CFLAGS
-HAVE_UCDN_FALSE
-HAVE_UCDN_TRUE
-HAVE_HB_OLD_FALSE
-HAVE_HB_OLD_TRUE
+HAVE_FALLBACK_FALSE
+HAVE_FALLBACK_TRUE
 HAVE_OT_FALSE
 HAVE_OT_TRUE
 HAVE_PTHREAD_FALSE
 HAVE_OT_FALSE
 HAVE_OT_TRUE
 HAVE_PTHREAD_FALSE
@@ -678,11 +701,32 @@ OS_WIN32_FALSE
 OS_WIN32_TRUE
 HAVE_GCC_FALSE
 HAVE_GCC_TRUE
 OS_WIN32_TRUE
 HAVE_GCC_FALSE
 HAVE_GCC_TRUE
+GTK_DOC_USE_REBASE_FALSE
+GTK_DOC_USE_REBASE_TRUE
+GTK_DOC_USE_LIBTOOL_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+GTK_DOC_BUILD_PDF_FALSE
+GTK_DOC_BUILD_PDF_TRUE
+GTK_DOC_BUILD_HTML_FALSE
+GTK_DOC_BUILD_HTML_TRUE
+ENABLE_GTK_DOC_FALSE
+ENABLE_GTK_DOC_TRUE
+HAVE_GTK_DOC_FALSE
+HAVE_GTK_DOC_TRUE
+GTKDOC_DEPS_LIBS
+GTKDOC_DEPS_CFLAGS
+HTML_DIR
+GTKDOC_MKPDF
+GTKDOC_REBASE
+GTKDOC_CHECK_PATH
+GTKDOC_CHECK
 HB_LIBTOOL_VERSION_INFO
 HB_VERSION
 HB_VERSION_MICRO
 HB_VERSION_MINOR
 HB_VERSION_MAJOR
 HB_LIBTOOL_VERSION_INFO
 HB_VERSION
 HB_VERSION_MICRO
 HB_VERSION_MINOR
 HB_VERSION_MAJOR
+GIT
+RAGEL
 PKG_CONFIG
 CXXCPP
 am__fastdepCXX_FALSE
 PKG_CONFIG
 CXXCPP
 am__fastdepCXX_FALSE
@@ -699,8 +743,6 @@ NMEDIT
 DSYMUTIL
 MANIFEST_TOOL
 RANLIB
 DSYMUTIL
 MANIFEST_TOOL
 RANLIB
-ac_ct_AR
-AR
 DLLTOOL
 OBJDUMP
 LN_S
 DLLTOOL
 OBJDUMP
 LN_S
@@ -712,6 +754,15 @@ FGREP
 EGREP
 GREP
 SED
 EGREP
 GREP
 SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
@@ -729,15 +780,10 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
 LDFLAGS
 CFLAGS
 CC
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-LIBTOOL
+ac_ct_AR
+AR
+AUTOMAKE_OLDER_THAN_1_13_FALSE
+AUTOMAKE_OLDER_THAN_1_13_TRUE
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
 AM_DEFAULT_V
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
 AM_DEFAULT_V
@@ -807,14 +853,27 @@ ac_subst_files=''
 ac_user_opts='
 enable_option_checking
 enable_silent_rules
 ac_user_opts='
 enable_option_checking
 enable_silent_rules
+enable_dependency_tracking
 enable_static
 enable_shared
 with_pic
 enable_fast_install
 enable_static
 enable_shared
 with_pic
 enable_fast_install
-enable_dependency_tracking
 with_gnu_ld
 with_sysroot
 enable_libtool_lock
 with_gnu_ld
 with_sysroot
 enable_libtool_lock
+with_html_dir
+enable_gtk_doc
+enable_gtk_doc_html
+enable_gtk_doc_pdf
+with_glib
+with_gobject
+enable_introspection
+with_cairo
+with_icu
+with_graphite2
+with_freetype
+with_uniscribe
+with_coretext
 '
       ac_precious_vars='build_alias
 host_alias
 '
       ac_precious_vars='build_alias
 host_alias
@@ -830,10 +889,10 @@ CXXFLAGS
 CCC
 CXXCPP
 PKG_CONFIG
 CCC
 CXXCPP
 PKG_CONFIG
+GTKDOC_DEPS_CFLAGS
+GTKDOC_DEPS_LIBS
 GLIB_CFLAGS
 GLIB_LIBS
 GLIB_CFLAGS
 GLIB_LIBS
-GTHREAD_CFLAGS
-GTHREAD_LIBS
 GOBJECT_CFLAGS
 GOBJECT_LIBS
 CAIRO_CFLAGS
 GOBJECT_CFLAGS
 GOBJECT_LIBS
 CAIRO_CFLAGS
@@ -842,8 +901,6 @@ CAIRO_FT_CFLAGS
 CAIRO_FT_LIBS
 ICU_CFLAGS
 ICU_LIBS
 CAIRO_FT_LIBS
 ICU_CFLAGS
 ICU_LIBS
-ICU_LE_CFLAGS
-ICU_LE_LIBS
 GRAPHITE2_CFLAGS
 GRAPHITE2_LIBS
 FREETYPE_CFLAGS
 GRAPHITE2_CFLAGS
 GRAPHITE2_LIBS
 FREETYPE_CFLAGS
@@ -1303,8 +1360,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1390,7 +1445,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
   # 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 0.9.12 to adapt to many kinds of systems.
+\`configure' configures HarfBuzz 0.9.35 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1460,7 +1515,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HarfBuzz 0.9.12:";;
+     short | recursive ) echo "Configuration of HarfBuzz 0.9.35:";;
    esac
   cat <<\_ACEOF
 
    esac
   cat <<\_ACEOF
 
@@ -1468,15 +1523,22 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-static[=PKGS]  build static libraries [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --enable-static[=PKGS]  build static libraries [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
+  --enable-gtk-doc-html   build documentation in html format [[default=yes]]
+  --enable-gtk-doc-pdf    build documentation in pdf format [[default=no]]
+  --enable-introspection=[no/auto/yes]
+                          Enable introspection for this build
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1484,8 +1546,25 @@ Optional Packages:
   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-sysroot=DIR Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).
+  --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
+  --with-html-dir=PATH    path to installed docs
+  --with-glib=[yes/no/auto]
+                          Use glib [default=auto]
+  --with-gobject=[yes/no/auto]
+                          Use gobject [default=auto]
+  --with-cairo=[yes/no/auto]
+                          Use cairo [default=auto]
+  --with-icu=[yes/no/auto]
+                          Use ICU [default=auto]
+  --with-graphite2=[yes/no/auto]
+                          Use the graphite2 library [default=no]
+  --with-freetype=[yes/no/auto]
+                          Use the FreeType library [default=auto]
+  --with-uniscribe=[yes/no/auto]
+                          Use the Uniscribe library [default=no]
+  --with-coretext=[yes/no/auto]
+                          Use CoreText [default=no]
 
 Some influential environment variables:
   CC          C compiler command
 
 Some influential environment variables:
   CC          C compiler command
@@ -1500,12 +1579,12 @@ Some influential environment variables:
   CXXFLAGS    C++ compiler flags
   CXXCPP      C++ preprocessor
   PKG_CONFIG  path to pkg-config utility
   CXXFLAGS    C++ compiler flags
   CXXCPP      C++ preprocessor
   PKG_CONFIG  path to pkg-config utility
+  GTKDOC_DEPS_CFLAGS
+              C compiler flags for GTKDOC_DEPS, overriding pkg-config
+  GTKDOC_DEPS_LIBS
+              linker flags for GTKDOC_DEPS, overriding pkg-config
   GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
   GLIB_LIBS   linker flags for GLIB, overriding pkg-config
   GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
   GLIB_LIBS   linker flags for GLIB, overriding pkg-config
-  GTHREAD_CFLAGS
-              C compiler flags for GTHREAD, overriding pkg-config
-  GTHREAD_LIBS
-              linker flags for GTHREAD, overriding pkg-config
   GOBJECT_CFLAGS
               C compiler flags for GOBJECT, overriding pkg-config
   GOBJECT_LIBS
   GOBJECT_CFLAGS
               C compiler flags for GOBJECT, overriding pkg-config
   GOBJECT_LIBS
@@ -1519,9 +1598,6 @@ Some influential environment variables:
               linker flags for CAIRO_FT, overriding pkg-config
   ICU_CFLAGS  C compiler flags for ICU, overriding pkg-config
   ICU_LIBS    linker flags for ICU, overriding pkg-config
               linker flags for CAIRO_FT, overriding pkg-config
   ICU_CFLAGS  C compiler flags for ICU, overriding pkg-config
   ICU_LIBS    linker flags for ICU, overriding pkg-config
-  ICU_LE_CFLAGS
-              C compiler flags for ICU_LE, overriding pkg-config
-  ICU_LE_LIBS linker flags for ICU_LE, overriding pkg-config
   GRAPHITE2_CFLAGS
               C compiler flags for GRAPHITE2, overriding pkg-config
   GRAPHITE2_LIBS
   GRAPHITE2_CFLAGS
               C compiler flags for GRAPHITE2, overriding pkg-config
   GRAPHITE2_LIBS
@@ -1598,10 +1674,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HarfBuzz configure 0.9.12
-generated by GNU Autoconf 2.68
+HarfBuzz configure 0.9.35
+generated by GNU Autoconf 2.69
 
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1677,7 +1753,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
        }; then :
   ac_retval=0
 else
@@ -1975,7 +2051,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
        }; then :
   ac_retval=0
 else
@@ -2085,6 +2161,189 @@ fi
 
 } # ac_fn_c_check_header_mongrel
 
 
 } # ac_fn_c_check_header_mongrel
 
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -2142,8 +2401,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HarfBuzz $as_me 0.9.12, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by HarfBuzz $as_me 0.9.35, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
 
   $ $0 $@
 
@@ -2496,7 +2755,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 ac_config_headers="$ac_config_headers config.h"
 
 
 ac_config_headers="$ac_config_headers config.h"
 
 
-am__api_version='1.11'
+am__api_version='1.14'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2564,7 +2823,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -2622,9 +2881,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2635,32 +2891,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
 esac
 
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
    test "$2" = conftest.file
    )
 then
@@ -2672,6 +2936,16 @@ Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -2694,12 +2968,12 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh}" != xset; then
 fi
 
 if test x"${install_sh}" != xset; then
@@ -2711,10 +2985,10 @@ if test x"${install_sh}" != xset; then
   esac
 fi
 
   esac
 fi
 
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -2733,7 +3007,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2773,7 +3047,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2824,7 +3098,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
           case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
             'mkdir (GNU coreutils) '* | \
             'mkdir (coreutils) '* | \
           case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
             'mkdir (GNU coreutils) '* | \
             'mkdir (coreutils) '* | \
@@ -2853,12 +3127,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -2877,7 +3145,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2941,6 +3209,45 @@ else
 fi
 rmdir .tst 2>/dev/null
 
 fi
 rmdir .tst 2>/dev/null
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
@@ -2963,7 +3270,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='harfbuzz'
 
 # Define the identity of the package.
  PACKAGE='harfbuzz'
- VERSION='0.9.12'
+ VERSION='0.9.35'
 
 
 # Some tools Automake needs.
 
 
 # Some tools Automake needs.
@@ -2982,27 +3289,172 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
 
-am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5
+$as_echo_n "checking how to create a pax tar archive... " >&6; }
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_pax-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        { echo "$as_me:$LINENO: $_am_tar --version" >&5
+   ($_am_tar --version) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && break
+      done
+      am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x pax -w "$$tardir"'
+      am__tar_='pax -L -x pax -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H pax -L'
+      am__tar_='find "$tardir" -print | cpio -o -H pax -L'
+      am__untar='cpio -i -H pax -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
+
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_pax}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+   (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+   ($am__untar <conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+      { echo "$as_me:$LINENO: cat conftest.dir/file" >&5
+   (cat conftest.dir/file) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
+  rm -rf conftest.dir
+
+  if ${am_cv_prog_tar_pax+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  am_cv_prog_tar_pax=$_am_tool
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5
+$as_echo "$am_cv_prog_tar_pax" >&6; }
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
 
 
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
 
 
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
 
 
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+ if test $am__api_version = 1.11 -o $am__api_version = 1.12; then
+  AUTOMAKE_OLDER_THAN_1_13_TRUE=
+  AUTOMAKE_OLDER_THAN_1_13_FALSE='#'
+else
+  AUTOMAKE_OLDER_THAN_1_13_TRUE='#'
+  AUTOMAKE_OLDER_THAN_1_13_FALSE=
+fi
 
 # Check whether --enable-silent-rules was given.
 if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
 fi
 
 
 # Check whether --enable-silent-rules was given.
 if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
 fi
 
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=0;;
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
 esac
 am_make=${MAKE-make}
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
 esac
 am_make=${MAKE-make}
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
@@ -3035,175 +3487,9 @@ AM_BACKSLASH='\'
 
 
 # Initialize libtool
 
 
 # Initialize libtool
+DEPDIR="${am__leading_dot}deps"
 
 
-case `pwd` in
-  *\ * | *\    *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.4.2'
-macro_revision='1.3337'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-# Backslashify metacharacters that are still active within
-# double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
-   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='printf %s\n'
-else
-  # Use this function as a fallback that always works.
-  func_fallback_echo ()
-  {
-    eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-  }
-  ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO ""
-}
-
-case "$ECHO" in
-  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
-  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
-  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
+ac_config_commands="$ac_config_commands depfiles"
 
 
 am_make=${MAKE-make}
 
 
 am_make=${MAKE-make}
@@ -3220,7 +3506,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -3286,7 +3572,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3326,7 +3612,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3379,7 +3665,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3420,7 +3706,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3478,7 +3764,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3522,7 +3808,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3968,8 +4254,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4054,6 +4339,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -4065,8 +4409,8 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -4101,16 +4445,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -4119,8 +4463,8 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
@@ -4128,7 +4472,7 @@ else
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -4182,59 +4526,397 @@ else
 fi
 
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar lib "link -lib"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   $as_echo_n "(cached) " >&6
 else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
   done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
+IFS=$as_save_IFS
 
 
-      $ac_path_SED_found && break 3
-    done
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar lib "link -lib"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   am_cv_ar_interface=ar
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # But if we don't then we get into trouble of one sort or another.
+  # A longer-term fix would be to have automake use am__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+  ;;
+esac
+
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2.418'
+macro_revision='2.4.2.418'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
   done
   done
 IFS=$as_save_IFS
   done
   done
 IFS=$as_save_IFS
@@ -4280,7 +4962,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4346,7 +5028,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4413,7 +5095,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -4483,19 +5165,19 @@ test -z "$GREP" && GREP=grep
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -4509,7 +5191,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -4520,7 +5202,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     with_gnu_ld=unknown
     ;;
   esac
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
@@ -4531,32 +5213,32 @@ if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
+       test no != "$with_gnu_ld" && break
        ;;
       *)
        ;;
       *)
-       test "$with_gnu_ld" != yes && break
+       test yes != "$with_gnu_ld" && break
        ;;
       esac
     fi
   done
        ;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi
 fi
 
 fi
 fi
 
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -4599,33 +5281,33 @@ if ${lt_cv_path_NM+:} false; then :
 else
   if test -n "$NM"; then
   # Let the user override the test.
 else
   if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 else
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  lt_nm_to_check=${ac_tool_prefix}nm
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       test -z "$ac_dir" && ac_dir=.
       test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
        */dev/null* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
        */dev/null* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
-         break
+         break 2
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
-           break
+           break 2
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -4636,15 +5318,15 @@ else
        esac
       fi
     done
        esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   done
   : ${lt_cv_path_NM=no}
 fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
 $as_echo "$lt_cv_path_NM" >&6; }
   done
   : ${lt_cv_path_NM=no}
 fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
 $as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
@@ -4669,7 +5351,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4713,7 +5395,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4750,9 +5432,9 @@ esac
   fi
 fi
 
   fi
 fi
 
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
       ;;
     *)
       DUMPBIN=:
@@ -4760,8 +5442,8 @@ fi
     esac
   fi
 
     esac
   fi
 
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
   fi
 fi
 test -z "$NM" && NM=nm
@@ -4812,7 +5494,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
   $as_echo_n "(cached) " >&6
 else
     i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
 
   case $build_os in
   msdosdjgpp*)
@@ -4852,7 +5534,7 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -4902,22 +5584,23 @@ else
     ;;
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     ;;
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
+      for i in 1 2 3 4 5 6 7 8; do
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
+             test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -4935,7 +5618,7 @@ else
 
 fi
 
 
 fi
 
-if test -n $lt_cv_sys_max_cmd_len ; then
+if test -n "$lt_cv_sys_max_cmd_len"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
 $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
 $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
 else
@@ -4953,30 +5636,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
@@ -5099,13 +5758,13 @@ esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -5137,7 +5796,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5177,7 +5836,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5233,13 +5892,13 @@ lt_cv_deplibs_check_method='unknown'
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
+# 'unknown' -- same as none, but documents that we really don't know.
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
 
 case $host_os in
 aix[4-9]*)
 
 case $host_os in
 aix[4-9]*)
@@ -5266,8 +5925,7 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  if ( file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
@@ -5303,10 +5961,6 @@ freebsd* | dragonfly*)
   fi
   ;;
 
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5345,11 +5999,11 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be glibc/ELF.
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
   else
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
   else
@@ -5367,8 +6021,8 @@ newos6*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
@@ -5483,7 +6137,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5523,7 +6177,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5578,8 +6232,8 @@ else
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -5591,7 +6245,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 
   ;;
 esac
 
@@ -5607,7 +6261,6 @@ test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
 
 
 
 
 
 
-
 if test -n "$ac_tool_prefix"; then
   for ac_prog in ar
   do
 if test -n "$ac_tool_prefix"; then
   for ac_prog in ar
   do
@@ -5627,7 +6280,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5671,7 +6324,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5746,7 +6399,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
@@ -5754,7 +6407,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
           lt_cv_ar_at_file=@
         fi
       fi
@@ -5767,7 +6420,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
 $as_echo "$lt_cv_ar_at_file" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
 $as_echo "$lt_cv_ar_at_file" >&6; }
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -5796,7 +6449,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5836,7 +6489,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5895,7 +6548,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5935,7 +6588,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5984,7 +6637,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -6074,7 +6727,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[ABCDGISTW]'
   ;;
 hpux*)
   symcode='[ABCDGISTW]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[ABCDEGRST]'
   fi
   ;;
     symcode='[ABCDEGRST]'
   fi
   ;;
@@ -6107,14 +6760,44 @@ case `$NM -V 2>&1` in
   symcode='[ABCDGIRSTW]' ;;
 esac
 
   symcode='[ABCDGIRSTW]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -6132,21 +6815,24 @@ for ac_symprfx in "" "_"; do
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
 "     ' prfx=^$ac_symprfx"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
@@ -6194,11 +6880,11 @@ _LT_EOF
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
@@ -6224,7 +6910,7 @@ lt__PROGRAM__LTX_preloaded_symbols[] =
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -6244,13 +6930,13 @@ _LT_EOF
          mv conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
          mv conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
-         LIBS="conftstm.$ac_objext"
+         LIBS=conftstm.$ac_objext
          CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
          CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
@@ -6271,7 +6957,7 @@ _LT_EOF
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -6324,6 +7010,16 @@ fi
 
 
 
 
 
 
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
 $as_echo_n "checking for sysroot... " >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
 $as_echo_n "checking for sysroot... " >&6; }
 
@@ -6336,9 +7032,9 @@ fi
 
 
 lt_sysroot=
 
 
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -6348,8 +7044,8 @@ case ${with_sysroot} in #(
  no|'')
    ;; #(
  *)
  no|'')
    ;; #(
  *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
-$as_echo "${with_sysroot}" >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
@@ -6366,13 +7062,14 @@ if test "${enable_libtool_lock+set}" = set; then :
   enableval=$enable_libtool_lock;
 fi
 
   enableval=$enable_libtool_lock;
 fi
 
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -6381,24 +7078,25 @@ ia64-*-hpux*)
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
-       HPUX_IA64_MODE="32"
+       HPUX_IA64_MODE=32
        ;;
       *ELF-64*)
        ;;
       *ELF-64*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
@@ -6427,9 +7125,50 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -6443,9 +7182,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
-           LD="${LD-ld} -m elf_i386"
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
            ;;
            ;;
-         ppc64-*linux*|powerpc64-*linux*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -6464,7 +7213,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         ppc*-*linux*|powerpc*-*linux*)
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -6482,7 +7234,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
@@ -6522,13 +7274,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
 $as_echo "$lt_cv_cc_needs_belf" >&6; }
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
 $as_echo "$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -6540,7 +7293,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -6549,7 +7302,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
         fi
         ;;
       *)
@@ -6565,7 +7318,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
   ;;
 esac
 
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
@@ -6584,7 +7337,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6624,7 +7377,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6676,7 +7429,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
 $as_echo "$lt_cv_path_mainfest_tool" >&6; }
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
 $as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 
   MANIFEST_TOOL=:
 fi
 
@@ -6704,7 +7457,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6744,7 +7497,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6796,7 +7549,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6836,7 +7589,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6888,7 +7641,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6928,7 +7681,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6980,7 +7733,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7020,7 +7773,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7072,7 +7825,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7112,7 +7865,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7179,7 +7932,7 @@ if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
+      if test -z "$LT_MULTI_MODULE"; then
        # By default we will add the -single_module flag. You can override
        # by either setting the environment variable LT_MULTI_MODULE
        # non-empty at configure time, or by adding -multi_module to the
        # By default we will add the -single_module flag. You can override
        # by either setting the environment variable LT_MULTI_MODULE
        # non-empty at configure time, or by adding -multi_module to the
@@ -7197,7 +7950,7 @@ else
          cat conftest.err >&5
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
          cat conftest.err >&5
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
-       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&5
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&5
@@ -7236,7 +7989,7 @@ else
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-       LDFLAGS="$save_LDFLAGS"
+       LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
@@ -7265,7 +8018,7 @@ _LT_EOF
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&5
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&5
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&5
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&5
@@ -7278,32 +8031,32 @@ fi
 $as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
 $as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
        10.0,*86*-darwin8*|10.0,*-darwin[91]*)
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
        10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[012]*)
        10.[012]*)
-         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
        10.*)
        10.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
       _lt_dar_single_mod='$single_module'
     fi
       _lt_dar_single_mod='$single_module'
     fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
     else
     else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -7605,14 +8358,14 @@ if test "${enable_static+set}" = set; then :
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
       ;;
     esac
 else
@@ -7643,14 +8396,14 @@ if test "${enable_shared+set}" = set; then :
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
       ;;
     esac
 else
@@ -7675,14 +8428,14 @@ if test "${with_pic+set}" = set; then :
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
       for lt_pkg in $withval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
       ;;
     esac
 else
@@ -7690,8 +8443,6 @@ else
 fi
 
 
 fi
 
 
-test -z "$pic_mode" && pic_mode=default
-
 
 
 
 
 
 
@@ -7707,14 +8458,14 @@ if test "${enable_fast_install+set}" = set; then :
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
       ;;
     esac
 else
@@ -7732,7 +8483,7 @@ fi
 
 
 # This can be used to rebuild libtool when needed
 
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -7781,7 +8532,7 @@ test -z "$LN_S" && LN_S="ln -s"
 
 
 
 
 
 
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
    setopt NO_GLOB_SUBST
 fi
 
@@ -7820,7 +8571,7 @@ aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -7831,14 +8582,14 @@ esac
 ofile=libtool
 can_build_shared=yes
 
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 
 # which needs '.lib').
 libext=a
 
-with_gnu_ld="$lt_cv_prog_gnu_ld"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -7870,22 +8621,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
@@ -7908,13 +8659,13 @@ _LT_EOF
       break
     fi
   done
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
@@ -7936,22 +8687,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
@@ -7974,13 +8725,13 @@ _LT_EOF
       break
     fi
   done
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
@@ -8001,7 +8752,7 @@ esac
 
 # Use C for the default configuration in the libtool script
 
 
 # Use C for the default configuration in the libtool script
 
-lt_save_CC="$CC"
+lt_save_CC=$CC
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -8063,7 +8814,7 @@ if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
 
 
 lt_prog_compiler_no_builtin_flag=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
   case $cc_basename in
   nvcc*)
     lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
@@ -8079,7 +8830,7 @@ else
   lt_cv_prog_compiler_rtti_exceptions=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
   lt_cv_prog_compiler_rtti_exceptions=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -8109,7 +8860,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
     :
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
     :
@@ -8127,17 +8878,18 @@ lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
 
 lt_prog_compiler_static=
 
 
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; then
     lt_prog_compiler_wl='-Wl,'
     lt_prog_compiler_static='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
     lt_prog_compiler_wl='-Wl,'
     lt_prog_compiler_static='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       fi
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       fi
+      lt_prog_compiler_pic='-fPIC'
       ;;
 
     amigaos*)
       ;;
 
     amigaos*)
@@ -8148,8 +8900,8 @@ lt_prog_compiler_static=
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
             lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -8235,7 +8987,7 @@ lt_prog_compiler_static=
     case $host_os in
     aix*)
       lt_prog_compiler_wl='-Wl,'
     case $host_os in
     aix*)
       lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       else
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       else
@@ -8243,6 +8995,20 @@ lt_prog_compiler_static=
       fi
       ;;
 
       fi
       ;;
 
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
@@ -8262,7 +9028,7 @@ lt_prog_compiler_static=
        ;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
        ;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      lt_prog_compiler_static='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -8271,9 +9037,9 @@ lt_prog_compiler_static=
       lt_prog_compiler_static='-non_shared'
       ;;
 
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # old Intel for x86_64, which still supported -KPIC.
       ecc*)
        lt_prog_compiler_wl='-Wl,'
        lt_prog_compiler_pic='-KPIC'
       ecc*)
        lt_prog_compiler_wl='-Wl,'
        lt_prog_compiler_pic='-KPIC'
@@ -8298,6 +9064,12 @@ lt_prog_compiler_static=
        lt_prog_compiler_pic='-PIC'
        lt_prog_compiler_static='-Bstatic'
        ;;
        lt_prog_compiler_pic='-PIC'
        lt_prog_compiler_static='-Bstatic'
        ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -8395,7 +9167,7 @@ lt_prog_compiler_static=
       ;;
 
     sysv4*MP*)
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/necthen
        lt_prog_compiler_pic='-Kconform_pic'
        lt_prog_compiler_static='-Bstatic'
       fi
        lt_prog_compiler_pic='-Kconform_pic'
        lt_prog_compiler_static='-Bstatic'
       fi
@@ -8424,7 +9196,7 @@ lt_prog_compiler_static=
   fi
 
 case $host_os in
   fi
 
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     lt_prog_compiler_pic=
     ;;
   *djgpp*)
     lt_prog_compiler_pic=
     ;;
@@ -8456,7 +9228,7 @@ else
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -8486,7 +9258,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
 
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
     case $lt_prog_compiler_pic in
      "" | " "*) ;;
      *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
     case $lt_prog_compiler_pic in
      "" | " "*) ;;
      *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
@@ -8518,7 +9290,7 @@ if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -8537,13 +9309,13 @@ else
      fi
    fi
    $RM -r conftest*
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
 $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
 
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
 $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
 
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+if test yes = "$lt_cv_prog_compiler_static_works"; then
     :
 else
     lt_prog_compiler_static=
     :
 else
     lt_prog_compiler_static=
@@ -8663,8 +9435,8 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
 
 
 
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
@@ -8676,9 +9448,9 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
     need_locks=warn
   fi
 else
@@ -8721,9 +9493,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   # included in the symbol list
   include_expsyms=
   # exclude_expsyms can be an extended regexp of symbols to exclude
   # included in the symbol list
   include_expsyms=
   # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
   exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
   exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
@@ -8738,7 +9510,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
       with_gnu_ld=no
     fi
     ;;
@@ -8746,12 +9518,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    link_all_deplibs=no
-    ;;
   esac
 
   ld_shlibs=yes
   esac
 
   ld_shlibs=yes
@@ -8759,7 +9528,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
@@ -8781,24 +9550,24 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     esac
   fi
 
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    wlarc='$wl'
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
     else
       whole_archive_flag_spec=
     fi
     supports_anon_versioning=no
     else
       whole_archive_flag_spec=
     fi
     supports_anon_versioning=no
-    case `$LD -v 2>&1` in
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -8811,7 +9580,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     case $host_os in
     aix[3-9]*)
       # On AIX/PPC, the GNU linker is very broken
     case $host_os in
     aix[3-9]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
@@ -8830,7 +9599,7 @@ _LT_EOF
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
             archive_expsym_cmds=''
         ;;
       m68k)
@@ -8846,7 +9615,7 @@ _LT_EOF
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       else
        ld_shlibs=no
       fi
       else
        ld_shlibs=no
       fi
@@ -8856,7 +9625,7 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
-      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
@@ -8864,61 +9633,61 @@ _LT_EOF
       exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
       exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
       else
        ld_shlibs=no
       fi
       ;;
 
     haiku*)
       else
        ld_shlibs=no
       fi
       ;;
 
     haiku*)
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       link_all_deplibs=yes
       ;;
 
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
       link_all_deplibs=yes
       ;;
 
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
+      if test linux-dietlibc = "$host_os"; then
        case $cc_basename in
          diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
        esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
        case $cc_basename in
          diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
        esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-        && test "$tmp_diet" = no
+        && test no = "$tmp_diet"
       then
        tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
       then
        tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # Portland Group f77 and f90 compilers
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # Portland Group f77 and f90 compilers
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
@@ -8929,42 +9698,44 @@ _LT_EOF
        lf95*)                          # Lahey Fortran 8.1
          whole_archive_flag_spec=
          tmp_sharedflag='--shared' ;;
        lf95*)                          # Lahey Fortran 8.1
          whole_archive_flag_spec=
          tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
        xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
        xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          compiler_needs_object=yes
          ;;
        esac
        case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
          compiler_needs_object=yes
          ;;
        esac
        case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
-         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          compiler_needs_object=yes
          tmp_sharedflag='-G' ;;
        *Sun\ F*)                       # Sun Fortran 8.3
          tmp_sharedflag='-G' ;;
        esac
          compiler_needs_object=yes
          tmp_sharedflag='-G' ;;
        *Sun\ F*)                       # Sun Fortran 8.3
          tmp_sharedflag='-G' ;;
        esac
-       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 
 
-        if test "x$supports_anon_versioning" = xyes; then
+        if test yes = "$supports_anon_versioning"; then
           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-           echo "local: *; };" >> $output_objdir/$libname.ver~
-           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
 
        case $cc_basename in
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
         fi
 
        case $cc_basename in
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-         hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+         hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
          archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
+         if test yes = "$supports_anon_versioning"; then
            archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
            archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-             echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
          ;;
        esac
          fi
          ;;
        esac
@@ -8973,13 +9744,13 @@ _LT_EOF
       fi
       ;;
 
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
       fi
       ;;
 
@@ -8997,8 +9768,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
        ld_shlibs=no
       fi
       else
        ld_shlibs=no
       fi
@@ -9010,7 +9781,7 @@ _LT_EOF
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
@@ -9025,9 +9796,9 @@ _LT_EOF
          # DT_RUNPATH tag from executables and libraries.  But doing so
          # requires that you compile everything twice, which is a pain.
          if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
          # DT_RUNPATH tag from executables and libraries.  But doing so
          # requires that you compile everything twice, which is a pain.
          if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+           hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
          else
            ld_shlibs=no
          fi
          else
            ld_shlibs=no
          fi
@@ -9044,15 +9815,15 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
        ld_shlibs=no
       fi
       ;;
     esac
 
       else
        ld_shlibs=no
       fi
       ;;
     esac
 
-    if test "$ld_shlibs" = no; then
+    if test no = "$ld_shlibs"; then
       runpath_var=
       hardcode_libdir_flag_spec=
       export_dynamic_flag_spec=
       runpath_var=
       hardcode_libdir_flag_spec=
       export_dynamic_flag_spec=
@@ -9068,7 +9839,7 @@ _LT_EOF
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       hardcode_minus_L=yes
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       hardcode_minus_L=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
@@ -9076,12 +9847,12 @@ _LT_EOF
       ;;
 
     aix[4-9]*)
       ;;
 
     aix[4-9]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
-       no_entry_flag=""
+       no_entry_flag=
       else
        # If we're using GNU nm, then we don't want the "-C" option.
        # -C means demangle to AIX nm, but means don't demangle with GNU nm
       else
        # If we're using GNU nm, then we don't want the "-C" option.
        # -C means demangle to AIX nm, but means don't demangle with GNU nm
@@ -9099,7 +9870,7 @@ _LT_EOF
        # need to do runtime linking.
        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
          for ld_flag in $LDFLAGS; do
        # need to do runtime linking.
        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
          for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
            aix_use_runtimelinking=yes
            break
          fi
            aix_use_runtimelinking=yes
            break
          fi
@@ -9122,13 +9893,13 @@ _LT_EOF
       hardcode_direct_absolute=yes
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
       hardcode_direct_absolute=yes
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
+      file_list_spec='$wl-f,'
 
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; then
        case $host_os in aix4.[012]|aix4.[012].*)
        # We only want to do this on AIX 4.2 and lower, the check
        # below for broken collect2 doesn't work under 4.3+
        case $host_os in aix4.[012]|aix4.[012].*)
        # We only want to do this on AIX 4.2 and lower, the check
        # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -9147,36 +9918,35 @@ _LT_EOF
          ;;
        esac
        shared_flag='-shared'
          ;;
        esac
        shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
        fi
        fi
-       link_all_deplibs=no
       else
        # not using gcc
       else
        # not using gcc
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; then
        # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
        # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
        else
        # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
        # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
        else
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          fi
        fi
       fi
 
          fi
        fi
       fi
 
-      export_dynamic_flag_spec='${wl}-bexpall'
+      export_dynamic_flag_spec='$wl-bexpall'
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       always_export_symbols=yes
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       always_export_symbols=yes
-      if test "$aix_use_runtimelinking" = yes; then
+      if test yes = "$aix_use_runtimelinking"; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
        allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
        allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        if test "${lt_cv_aix_libpath+set}" = set; then
+        if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -9211,7 +9981,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
   fi
 
 fi
@@ -9219,17 +9989,17 @@ fi
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
       else
       else
-       if test "$host_cpu" = ia64; then
-         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+       if test ia64 = "$host_cpu"; then
+         hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
          allow_undefined_flag="-z nodefs"
          allow_undefined_flag="-z nodefs"
-         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        if test "${lt_cv_aix_libpath+set}" = set; then
+        if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -9264,7 +10034,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
   fi
 
 fi
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
-         no_undefined_flag=' ${wl}-bernotok'
-         allow_undefined_flag=' ${wl}-berok'
-         if test "$with_gnu_ld" = yes; then
+         no_undefined_flag=' $wl-bernotok'
+         allow_undefined_flag=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
            # We only use this code for GNU lds that support --whole-archive.
            # We only use this code for GNU lds that support --whole-archive.
-           whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
          else
            # Exported symbols can be pulled into shared objects from archives
            whole_archive_flag_spec='$convenience'
          fi
          archive_cmds_need_lc=yes
          # This is similar to how AIX traditionally builds its shared libraries.
          else
            # Exported symbols can be pulled into shared objects from archives
            whole_archive_flag_spec='$convenience'
          fi
          archive_cmds_need_lc=yes
          # This is similar to how AIX traditionally builds its shared libraries.
-         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
        fi
       fi
       ;;
        fi
       fi
       ;;
@@ -9295,7 +10065,7 @@ fi
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
             archive_expsym_cmds=''
         ;;
       m68k)
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        # FIXME: Setting linknames here is a bad hack.
-       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-         else
-           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-         fi~
-         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-         linknames='
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
        enable_shared_with_static_runtimes=yes
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
        enable_shared_with_static_runtimes=yes
        # Don't use ranlib
        old_postinstall_cmds='chmod 644 $oldlib'
        postlink_cmds='lt_outputfile="@OUTPUT@"~
        # Don't use ranlib
        old_postinstall_cmds='chmod 644 $oldlib'
        postlink_cmds='lt_outputfile="@OUTPUT@"~
-         lt_tool_outputfile="@TOOL_OUTPUT@"~
-         case $lt_outputfile in
-           *.exe|*.EXE) ;;
-           *)
-             lt_outputfile="$lt_outputfile.exe"
-             lt_tool_outputfile="$lt_tool_outputfile.exe"
-             ;;
-         esac~
-         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-           $RM "$lt_outputfile.manifest";
-         fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
        ;;
       *)
        # Assume MSVC wrapper
        ;;
       *)
        # Assume MSVC wrapper
@@ -9363,7 +10134,7 @@ fi
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
        # FIXME: Setting linknames here is a bad hack.
        archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
   else
     whole_archive_flag_spec=''
   fi
   link_all_deplibs=yes
 
   else
     whole_archive_flag_spec=''
   fi
   link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
+  allow_undefined_flag=$_lt_dar_allow_undefined
   case $cc_basename in
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
     output_verbose_link_cmd=func_echo_all
-    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
 
   else
   ld_shlibs=no
 
   else
   ld_shlibs=no
       ;;
 
     hpux9*)
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       else
       else
-       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       fi
       fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_direct=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       hardcode_minus_L=yes
       hardcode_libdir_separator=:
       hardcode_direct=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       hardcode_minus_L=yes
-      export_dynamic_flag_spec='${wl}-E'
+      export_dynamic_flag_spec='$wl-E'
       ;;
 
     hpux10*)
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
        archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       else
        archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
        hardcode_libdir_separator=:
        hardcode_direct=yes
        hardcode_direct_absolute=yes
        hardcode_libdir_separator=:
        hardcode_direct=yes
        hardcode_direct_absolute=yes
-       export_dynamic_flag_spec='${wl}-E'
+       export_dynamic_flag_spec='$wl-E'
        # hardcode_minus_L: Not really in the search PATH,
        # but as the default location of the library.
        hardcode_minus_L=yes
        # hardcode_minus_L: Not really in the search PATH,
        # but as the default location of the library.
        hardcode_minus_L=yes
       ;;
 
     hpux11*)
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
        case $host_cpu in
        hppa*64*)
        case $host_cpu in
        hppa*64*)
-         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
          ;;
        ia64*)
-         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
          ;;
        *)
-         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        esac
       else
        case $host_cpu in
        hppa*64*)
          ;;
        esac
       else
        case $host_cpu in
        hppa*64*)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
          ;;
        ia64*)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
 
          ;;
        *)
 
@@ -9505,7 +10276,7 @@ if ${lt_cv_prog_compiler__b+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler__b=no
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler__b=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -b"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
    LDFLAGS="$LDFLAGS -b"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -9524,14 +10295,14 @@ else
      fi
    fi
    $RM -r conftest*
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
 $as_echo "$lt_cv_prog_compiler__b" >&6; }
 
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
 $as_echo "$lt_cv_prog_compiler__b" >&6; }
 
-if test x"$lt_cv_prog_compiler__b" = xyes; then
-    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 else
     archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
 fi
 else
     archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
 fi
@@ -9539,8 +10310,8 @@ fi
          ;;
        esac
       fi
          ;;
        esac
       fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
        hardcode_libdir_separator=:
 
        case $host_cpu in
        hardcode_libdir_separator=:
 
        case $host_cpu in
@@ -9551,7 +10322,7 @@ fi
        *)
          hardcode_direct=yes
          hardcode_direct_absolute=yes
        *)
          hardcode_direct=yes
          hardcode_direct_absolute=yes
-         export_dynamic_flag_spec='${wl}-E'
+         export_dynamic_flag_spec='$wl-E'
 
          # hardcode_minus_L: Not really in the search PATH,
          # but as the default location of the library.
 
          # hardcode_minus_L: Not really in the search PATH,
          # but as the default location of the library.
@@ -9562,8 +10333,8 @@ fi
       ;;
 
     irix5* | irix6* | nonstopux*)
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
        # Try to use the -exported_symbol ld option, if it does not
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
        # Try to use the -exported_symbol ld option, if it does not
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
@@ -9573,8 +10344,8 @@ $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >
 if ${lt_cv_irix_exported_symbol+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 if ${lt_cv_irix_exported_symbol+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  save_LDFLAGS="$LDFLAGS"
-          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+  save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int foo (void) { return 0; }
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int foo (void) { return 0; }
@@ -9586,25 +10357,25 @@ else
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-           LDFLAGS="$save_LDFLAGS"
+           LDFLAGS=$save_LDFLAGS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
 $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
 $as_echo "$lt_cv_irix_exported_symbol" >&6; }
-       if test "$lt_cv_irix_exported_symbol" = yes; then
-          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
       else
        fi
       else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       fi
       archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       inherit_rpath=yes
       link_all_deplibs=yes
       ;;
 
       hardcode_libdir_separator=:
       inherit_rpath=yes
       link_all_deplibs=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -9618,7 +10389,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     newsos6)
       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
     newsos6)
       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_shlibpath_var=no
       ;;
       hardcode_libdir_separator=:
       hardcode_shlibpath_var=no
       ;;
@@ -9626,27 +10397,19 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     *nto* | *qnx*)
       ;;
 
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       if test -f /usr/libexec/ld.so; then
        hardcode_direct=yes
        hardcode_shlibpath_var=no
        hardcode_direct_absolute=yes
       if test -f /usr/libexec/ld.so; then
        hardcode_direct=yes
        hardcode_shlibpath_var=no
        hardcode_direct_absolute=yes
-       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
          archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
          archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-         export_dynamic_flag_spec='${wl}-E'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+         export_dynamic_flag_spec='$wl-E'
        else
        else
-         case $host_os in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            hardcode_libdir_flag_spec='-R$libdir'
-            ;;
-          *)
-            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-            ;;
-         esac
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
        fi
       else
        ld_shlibs=no
        fi
       else
        ld_shlibs=no
@@ -9662,28 +10425,28 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     osf3*)
       ;;
 
     osf3*)
-      if test "$GCC" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
       else
        allow_undefined_flag=' -expect_unresolved \*'
       else
        allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       fi
       archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       ;;
 
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
       hardcode_libdir_separator=:
       ;;
 
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       else
        allow_undefined_flag=' -expect_unresolved \*'
       else
        allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
 
        # Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
 
        # Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
@@ -9694,24 +10457,24 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 
     solaris*)
       no_undefined_flag=' -z defs'
 
     solaris*)
       no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
        archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
        archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
          wlarc=''
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
          wlarc=''
-         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
          archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
          archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
          ;;
        *)
          ;;
        *)
-         wlarc='${wl}'
-         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         wlarc='$wl'
+         archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
          archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
          archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
          ;;
        esac
       fi
          ;;
        esac
       fi
@@ -9721,11 +10484,11 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       solaris2.[0-5] | solaris2.[0-5].*) ;;
       *)
        # The compiler driver will combine and reorder linker options,
       solaris2.[0-5] | solaris2.[0-5].*) ;;
       *)
        # The compiler driver will combine and reorder linker options,
-       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
        # but is careful enough not to reorder.
        # Supported since Solaris 2.6 (maybe 2.5.1?)
        # but is careful enough not to reorder.
        # Supported since Solaris 2.6 (maybe 2.5.1?)
-       if test "$GCC" = yes; then
-         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       if test yes = "$GCC"; then
+         whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
        else
          whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
        fi
        else
          whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
        fi
@@ -9735,10 +10498,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     sunos4*)
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
-       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
       else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
       else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -9787,43 +10550,43 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
+      no_undefined_flag='$wl-z,text'
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
       runpath_var='LD_RUN_PATH'
 
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
       else
-       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
+      # Note: We CANNOT use -z defs as we might desire, because we do not
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
-      no_undefined_flag='${wl}-z,text'
-      allow_undefined_flag='${wl}-z,nodefs'
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
+      export_dynamic_flag_spec='$wl-Bexport'
       runpath_var='LD_RUN_PATH'
 
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
       else
-       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
       fi
       ;;
 
@@ -9838,10 +10601,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
     esac
 
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       export_dynamic_flag_spec='$wl-Blargedynsym'
        ;;
       esac
     fi
        ;;
       esac
     fi
@@ -9849,7 +10612,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
+test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
 
 
 with_gnu_ld=$with_gnu_ld
 
@@ -9875,7 +10638,7 @@ x|xyes)
   # Assume -lc should be added
   archive_cmds_need_lc=yes
 
   # Assume -lc should be added
   archive_cmds_need_lc=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $archive_cmds in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
     case $archive_cmds in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -10090,14 +10853,14 @@ esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $host_os in
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -10113,28 +10876,35 @@ if test "$GCC" = yes; then
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # and add multilib dir if necessary...
   lt_tmp_lt_search_path_spec=
   lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   for lt_sys_path in $lt_search_path_spec; do
   for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
       test -d "$lt_sys_path" && \
        lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
       test -d "$lt_sys_path" && \
        lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
         } else {
           lt_count--;
         }
@@ -10148,7 +10918,7 @@ BEGIN {RS=" "; FS="/|\n";} {
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -10157,7 +10927,7 @@ fi
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -10177,11 +10947,11 @@ need_version=unknown
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
   ;;
 
 aix[4-9]*)
@@ -10189,40 +10959,40 @@ aix[4-9]*)
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    if test yes = "$aix_use_runtimelinking"; then
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
     fi
     shlibpath_var=LIBPATH
   fi
     fi
     shlibpath_var=LIBPATH
   fi
@@ -10233,18 +11003,18 @@ amigaos*)
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -10252,8 +11022,8 @@ beos*)
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -10265,7 +11035,7 @@ bsdi[45]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
   need_version=no
   need_lib_prefix=no
 
@@ -10274,8 +11044,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -10291,17 +11061,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
 
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -10310,8 +11080,8 @@ cygwin* | mingw* | pw32* | cegcc*)
   *,cl*)
     # Native MSVC
     libname_spec='$name'
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
 
     case $build_os in
     mingw*)
@@ -10338,7 +11108,7 @@ cygwin* | mingw* | pw32* | cegcc*)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -10351,8 +11121,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -10365,7 +11135,7 @@ cygwin* | mingw* | pw32* | cegcc*)
 
   *)
     # Assume MSVC wrapper
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -10378,8 +11148,8 @@ darwin* | rhapsody*)
   version_type=darwin
   need_lib_prefix=no
   need_version=no
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -10392,8 +11162,8 @@ dgux*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -10411,12 +11181,12 @@ freebsd* | dragonfly*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
       need_version=yes
       ;;
   esac
@@ -10441,26 +11211,15 @@ freebsd* | dragonfly*)
   esac
   ;;
 
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -10478,9 +11237,9 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
@@ -10493,8 +11252,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -10503,8 +11262,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -10517,8 +11276,8 @@ interix[3-9]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -10529,7 +11288,7 @@ irix5* | irix6* | nonstopux*)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
+       if test yes = "$lt_cv_prog_gnu_ld"; then
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
@@ -10537,8 +11296,8 @@ irix5* | irix6* | nonstopux*)
   esac
   need_lib_prefix=no
   need_version=no
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -10557,8 +11316,8 @@ irix5* | irix6* | nonstopux*)
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
   hardcode_into_libs=yes
   ;;
 
@@ -10567,13 +11326,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -10664,7 +11431,7 @@ netbsd*)
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -10673,45 +11440,34 @@ newsos6)
   version_type=qnx
   need_lib_prefix=no
   need_version=no
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
   else
   else
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   fi
   fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_lib_prefix=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  library_names_spec='$libname$shared_ext $libname.a'
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
@@ -10720,11 +11476,11 @@ osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
   ;;
 
 rdos*)
@@ -10735,8 +11491,8 @@ solaris*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -10746,11 +11502,11 @@ solaris*)
 
 sunos4*)
   version_type=sunos
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
     need_lib_prefix=no
   fi
   need_version=yes
@@ -10758,8 +11514,8 @@ sunos4*)
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -10780,10 +11536,10 @@ sysv4 | sysv4.3*)
   ;;
 
 sysv4*MP*)
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/necthen
     version_type=linux # correct to gnu/linux during the next big refactor
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
@@ -10792,12 +11548,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -10815,7 +11571,7 @@ tpf*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -10823,8 +11579,8 @@ tpf*)
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -10834,18 +11590,18 @@ uts4*)
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
 
 fi
 
 
@@ -10944,15 +11700,15 @@ $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
    test -n "$runpath_var" ||
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
    test -n "$runpath_var" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
+   test yes = "$hardcode_automatic"; then
 
   # We can hardcode non-existent directories.
 
   # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
+  if test no != "$hardcode_direct" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
     # Linking always hardcodes the temporary library directory.
     hardcode_action=relink
   else
     # Linking always hardcodes the temporary library directory.
     hardcode_action=relink
   else
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
 $as_echo "$hardcode_action" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
 $as_echo "$hardcode_action" >&6; }
 
-if test "$hardcode_action" = relink ||
-   test "$inherit_rpath" = yes; then
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
   # Fast installation is not supported
   enable_fast_install=no
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -10982,7 +11738,7 @@ fi
 
 
 
 
 
 
-  if test "x$enable_dlopen" != xyes; then
+  if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -10992,23 +11748,23 @@ else
 
   case $host_os in
   beos*)
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen=load_add_on
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
 if ${ac_cv_lib_dl_dlopen+:} false; then :
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
 if ${ac_cv_lib_dl_dlopen+:} false; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
 else
 
 else
 
-    lt_cv_dlopen="dyld"
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
 
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
 
 
     ;;
 
 
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
 if test "x$ac_cv_func_shl_load" = xyes; then :
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
 if test "x$ac_cv_func_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load"
+  lt_cv_dlopen=shl_load
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
 if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
 if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
 if test "x$ac_cv_func_dlopen" = xyes; then :
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
 if test "x$ac_cv_func_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen"
+  lt_cv_dlopen=dlopen
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
@@ -11142,7 +11906,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
@@ -11181,7 +11945,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
 if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
 if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
@@ -11220,7 +11984,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
 if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
 if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
 
 fi
 
 
     ;;
   esac
 
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
@@ -11263,7 +12027,7 @@ $as_echo_n "checking whether a program can dlopen itself... " >&6; }
 if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_cv_dlopen_self=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -11312,7 +12076,7 @@ else
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -11342,7 +12106,7 @@ _LT_EOF
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
 
-    if test "x$lt_cv_dlopen_self" = xyes; then
+    if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
 if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
 if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self_static=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_cv_dlopen_self_static=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -11418,7 +12182,7 @@ else
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -11448,7 +12212,7 @@ _LT_EOF
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -11469,9 +12233,9 @@ fi
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
     ;;
   esac
 
@@ -11515,7 +12279,7 @@ else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -11543,7 +12307,7 @@ fi
 
 
 
 
 
 
-  # Report which library types will actually be built
+  # Report what library types will actually be built
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
 $as_echo_n "checking if libtool supports shared libraries... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
 $as_echo_n "checking if libtool supports shared libraries... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
@@ -11551,13 +12315,13 @@ $as_echo "$can_build_shared" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
 $as_echo_n "checking whether to build shared libraries... " >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
 $as_echo_n "checking whether to build shared libraries... " >&6; }
-  test "$can_build_shared" = "no" && enable_shared=no
+  test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
-    test "$enable_shared" = yes && enable_static=no
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -11565,8 +12329,8 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     ;;
 
   aix[4-9]*)
     ;;
 
   aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
+      test yes = "$enable_shared" && enable_static=no
     fi
     ;;
   esac
     fi
     ;;
   esac
@@ -11576,7 +12340,7 @@ $as_echo "$enable_shared" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
 $as_echo_n "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
 $as_echo_n "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
+  test yes = "$enable_shared" || enable_static=yes
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
@@ -11590,7 +12354,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-CC="$lt_save_CC"
+CC=$lt_save_CC
 
 
 
 
 
 
@@ -11638,7 +12402,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11678,7 +12442,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11731,7 +12495,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11772,7 +12536,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -11830,7 +12594,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11874,7 +12638,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12070,8 +12834,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -12156,6 +12919,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -12167,8 +12989,8 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -12203,16 +13025,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -12221,8 +13043,8 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
@@ -12230,7 +13052,7 @@ else
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -12284,131 +13106,6 @@ else
 fi
 
 
 fi
 
 
-if test "x$CC" != xcc; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
-                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-   test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-        test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-      then
-       # cc works too.
-       :
-      else
-       # cc exists but doesn't like -o.
-       eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -12438,7 +13135,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12482,7 +13179,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12678,8 +13375,8 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -12714,16 +13411,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -12732,8 +13429,8 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
@@ -12741,7 +13438,7 @@ else
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
 
 func_stripname_cnf ()
 {
 
 func_stripname_cnf ()
 {
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  case $2 in
+  .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;;
   esac
 } # func_stripname_cnf
 
   esac
 } # func_stripname_cnf
 
-      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12986,7 +13683,7 @@ objext_CXX=$objext
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
+if test yes != "$_lt_caught_CXX_error"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
@@ -13061,32 +13758,32 @@ cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
     else
       lt_prog_compiler_no_builtin_flag_CXX=
     fi
 
       lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
     else
       lt_prog_compiler_no_builtin_flag_CXX=
     fi
 
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       # Set up default GNU C++ configuration
 
 
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
       # Set up default GNU C++ configuration
 
 
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -13100,7 +13797,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -13111,7 +13808,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     with_gnu_ld=unknown
     ;;
   esac
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
@@ -13122,32 +13819,32 @@ if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
+       test no != "$with_gnu_ld" && break
        ;;
       *)
        ;;
       *)
-       test "$with_gnu_ld" != yes && break
+       test yes != "$with_gnu_ld" && break
        ;;
       esac
     fi
   done
        ;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi
 fi
 
 fi
 fi
 
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -13183,22 +13880,22 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 
 
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
+        wlarc='$wl'
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
          $GREP 'no-whole-archive' > /dev/null; then
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
          $GREP 'no-whole-archive' > /dev/null; then
-          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
         else
           whole_archive_flag_spec_CXX=
         fi
         else
           whole_archive_flag_spec_CXX=
         fi
@@ -13235,12 +13932,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
         ld_shlibs_CXX=no
         ;;
       aix[4-9]*)
         ld_shlibs_CXX=no
         ;;
       aix[4-9]*)
-        if test "$host_cpu" = ia64; then
+        if test ia64 = "$host_cpu"; then
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
         else
           aix_use_runtimelinking=no
 
@@ -13274,13 +13971,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
         hardcode_direct_absolute_CXX=yes
         hardcode_libdir_separator_CXX=':'
         link_all_deplibs_CXX=yes
         hardcode_direct_absolute_CXX=yes
         hardcode_libdir_separator_CXX=':'
         link_all_deplibs_CXX=yes
-        file_list_spec_CXX='${wl}-f,'
+        file_list_spec_CXX='$wl-f,'
 
 
-        if test "$GXX" = yes; then
+        if test yes = "$GXX"; then
           case $host_os in aix4.[012]|aix4.[012].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
           case $host_os in aix4.[012]|aix4.[012].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
             strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
          if test -f "$collect2name" &&
             strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -13298,36 +13995,36 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
          fi
           esac
           shared_flag='-shared'
          fi
           esac
           shared_flag='-shared'
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag="$shared_flag "'${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
          fi
         else
           # not using gcc
          fi
         else
           # not using gcc
-          if test "$host_cpu" = ia64; then
+          if test ia64 = "$host_cpu"; then
          # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
          # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
           else
          # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
          # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
           else
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
            else
            else
-             shared_flag='${wl}-bM:SRE'
+             shared_flag='$wl-bM:SRE'
            fi
           fi
         fi
 
            fi
           fi
         fi
 
-        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
        # export.
         always_export_symbols_CXX=yes
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
        # export.
         always_export_symbols_CXX=yes
-        if test "$aix_use_runtimelinking" = yes; then
+        if test yes = "$aix_use_runtimelinking"; then
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          if test "${lt_cv_aix_libpath+set}" = set; then
+          if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
@@ -13362,7 +14059,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 fi
   fi
 
 fi
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
-          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
 
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
         else
         else
-          if test "$host_cpu" = ia64; then
-           hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+          if test ia64 = "$host_cpu"; then
+           hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
            allow_undefined_flag_CXX="-z nodefs"
            allow_undefined_flag_CXX="-z nodefs"
-           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
-           if test "${lt_cv_aix_libpath+set}" = set; then
+           if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
@@ -13416,7 +14113,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 fi
   fi
 
 fi
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
-           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+           hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
-           no_undefined_flag_CXX=' ${wl}-bernotok'
-           allow_undefined_flag_CXX=' ${wl}-berok'
-           if test "$with_gnu_ld" = yes; then
+           no_undefined_flag_CXX=' $wl-bernotok'
+           allow_undefined_flag_CXX=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
              # We only use this code for GNU lds that support --whole-archive.
              # We only use this code for GNU lds that support --whole-archive.
-             whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+             whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
            else
              # Exported symbols can be pulled into shared objects from archives
              whole_archive_flag_spec_CXX='$convenience'
            else
              # Exported symbols can be pulled into shared objects from archives
              whole_archive_flag_spec_CXX='$convenience'
@@ -13439,7 +14136,7 @@ fi
            archive_cmds_need_lc_CXX=yes
            # This is similar to how AIX traditionally builds its shared
            # libraries.
            archive_cmds_need_lc_CXX=yes
            # This is similar to how AIX traditionally builds its shared
            # libraries.
-           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
           fi
         fi
         ;;
           fi
         fi
         ;;
@@ -13449,7 +14146,7 @@ fi
          allow_undefined_flag_CXX=unsupported
          # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
          # support --undefined.  This deserves some investigation.  FIXME
          allow_undefined_flag_CXX=unsupported
          # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
          # support --undefined.  This deserves some investigation.  FIXME
-         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
        else
          ld_shlibs_CXX=no
        fi
        else
          ld_shlibs_CXX=no
        fi
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.
-         shrext_cmds=".dll"
+         shrext_cmds=.dll
          # FIXME: Setting linknames here is a bad hack.
          # FIXME: Setting linknames here is a bad hack.
-         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-         archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-           else
-             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-           fi~
-           $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-           linknames='
+         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[     ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
          # The linker will not automatically build a static lib if we build a DLL.
          # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
          enable_shared_with_static_runtimes_CXX=yes
          # Don't use ranlib
          old_postinstall_cmds_CXX='chmod 644 $oldlib'
          postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
          # The linker will not automatically build a static lib if we build a DLL.
          # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
          enable_shared_with_static_runtimes_CXX=yes
          # Don't use ranlib
          old_postinstall_cmds_CXX='chmod 644 $oldlib'
          postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
-           lt_tool_outputfile="@TOOL_OUTPUT@"~
-           case $lt_outputfile in
-             *.exe|*.EXE) ;;
-             *)
-               lt_outputfile="$lt_outputfile.exe"
-               lt_tool_outputfile="$lt_tool_outputfile.exe"
-               ;;
-           esac~
-           func_to_tool_file "$lt_outputfile"~
-           if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-             $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-             $RM "$lt_outputfile.manifest";
-           fi'
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
          ;;
        *)
          # g++
          # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
          # as there is no search path for DLLs.
          hardcode_libdir_flag_spec_CXX='-L$libdir'
          ;;
        *)
          # g++
          # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
          # as there is no search path for DLLs.
          hardcode_libdir_flag_spec_CXX='-L$libdir'
-         export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+         export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
          allow_undefined_flag_CXX=unsupported
          always_export_symbols_CXX=no
          enable_shared_with_static_runtimes_CXX=yes
 
          if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
          allow_undefined_flag_CXX=unsupported
          always_export_symbols_CXX=no
          enable_shared_with_static_runtimes_CXX=yes
 
          if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-           # If the export-symbols file already is a .def file (1st line
-           # is EXPORTS), use it as is; otherwise, prepend...
-           archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-             cp $export_symbols $output_objdir/$soname.def;
-           else
-             echo EXPORTS > $output_objdir/$soname.def;
-             cat $export_symbols >> $output_objdir/$soname.def;
-           fi~
-           $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
          else
            ld_shlibs_CXX=no
          fi
          else
            ld_shlibs_CXX=no
          fi
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
   else
     whole_archive_flag_spec_CXX=''
   fi
   link_all_deplibs_CXX=yes
 
   else
     whole_archive_flag_spec_CXX=''
   fi
   link_all_deplibs_CXX=yes
-  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
   case $cc_basename in
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
     output_verbose_link_cmd=func_echo_all
-    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
 
   else
     fi
 
   else
         ld_shlibs_CXX=yes
         ;;
 
         ld_shlibs_CXX=yes
         ;;
 
-      gnu*)
-        ;;
-
       haiku*)
       haiku*)
-        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
         link_all_deplibs_CXX=yes
         ;;
 
       hpux9*)
         link_all_deplibs_CXX=yes
         ;;
 
       hpux9*)
-        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
         hardcode_libdir_separator_CXX=:
         hardcode_libdir_separator_CXX=:
-        export_dynamic_flag_spec_CXX='${wl}-E'
+        export_dynamic_flag_spec_CXX='$wl-E'
         hardcode_direct_CXX=yes
         hardcode_minus_L_CXX=yes # Not in the search PATH,
                                             # but as the default
         hardcode_direct_CXX=yes
         hardcode_minus_L_CXX=yes # Not in the search PATH,
                                             # but as the default
@@ -13627,7 +14322,7 @@ fi
             ld_shlibs_CXX=no
             ;;
           aCC*)
             ld_shlibs_CXX=no
             ;;
           aCC*)
-            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             ;;
           *)
-            if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
         ;;
 
       hpux10*|hpux11*)
         ;;
 
       hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        if test no = "$with_gnu_ld"; then
+         hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
          hardcode_libdir_separator_CXX=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
          hardcode_libdir_separator_CXX=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
-             export_dynamic_flag_spec_CXX='${wl}-E'
+             export_dynamic_flag_spec_CXX='$wl-E'
               ;;
           esac
         fi
               ;;
           esac
         fi
           aCC*)
            case $host_cpu in
              hppa*64*)
           aCC*)
            case $host_cpu in
              hppa*64*)
-               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
              ia64*)
                ;;
              ia64*)
-               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
              *)
                ;;
              *)
-               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
            esac
            # Commands to make compiler produce verbose output that lists
                ;;
            esac
            # Commands to make compiler produce verbose output that lists
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
           *)
            ;;
           *)
-           if test "$GXX" = yes; then
-             if test $with_gnu_ld = no; then
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
                case $host_cpu in
                  hppa*64*)
                case $host_cpu in
                  hppa*64*)
-                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  ia64*)
                    ;;
                  ia64*)
-                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  *)
                    ;;
                  *)
-                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                esac
              fi
                    ;;
                esac
              fi
       interix[3-9]*)
        hardcode_direct_CXX=no
        hardcode_shlibpath_var_CXX=no
       interix[3-9]*)
        hardcode_direct_CXX=no
        hardcode_shlibpath_var_CXX=no
-       hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-       export_dynamic_flag_spec_CXX='${wl}-E'
+       hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='$wl-E'
        # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
        # Instead, shared libraries are loaded at an image base (0x10000000 by
        # default) and relocated if they conflict, which is a slow very memory
        # consuming and fragmenting process.  To avoid this, we pick a random,
        # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
        # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
        # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
        # Instead, shared libraries are loaded at an image base (0x10000000 by
        # default) and relocated if they conflict, which is a slow very memory
        # consuming and fragmenting process.  To avoid this, we pick a random,
        # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
        # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
        ;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
            # SGI C++
        ;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
            # SGI C++
-           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 
            # Archives containing C++ object files must be created using
            # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
 
            # Archives containing C++ object files must be created using
            # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
            old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
            ;;
           *)
            old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
            ;;
           *)
-           if test "$GXX" = yes; then
-             if test "$with_gnu_ld" = no; then
-               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
              else
              else
-               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
              fi
            fi
            link_all_deplibs_CXX=yes
            ;;
         esac
              fi
            fi
            link_all_deplibs_CXX=yes
            ;;
         esac
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
         hardcode_libdir_separator_CXX=:
         inherit_rpath_CXX=yes
         ;;
 
         hardcode_libdir_separator_CXX=:
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
         case $cc_basename in
           KCC*)
            # Kuck and Associates, Inc. (KAI) C++ Compiler
         case $cc_basename in
           KCC*)
            # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13776,8 +14471,8 @@ fi
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
-           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
            # Commands to make compiler produce verbose output that lists
            # what "hidden" libraries, object files and flags are used when
            # linking a shared library.
            # Commands to make compiler produce verbose output that lists
            # what "hidden" libraries, object files and flags are used when
            # linking a shared library.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 
-           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
 
            # Archives containing C++ object files must be created using
            # "CC -Bstatic", where "CC" is the KAI C++ compiler.
 
            # Archives containing C++ object files must be created using
            # "CC -Bstatic", where "CC" is the KAI C++ compiler.
            # earlier do not add the objects themselves.
            case `$CC -V 2>&1` in
              *"Version 7."*)
            # earlier do not add the objects themselves.
            case `$CC -V 2>&1` in
              *"Version 7."*)
-               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
                ;;
              *)  # Version 8.0 or newer
                tmp_idyn=
                case $host_cpu in
                  ia64*) tmp_idyn=' -i_dynamic';;
                esac
                ;;
              *)  # Version 8.0 or newer
                tmp_idyn=
                case $host_cpu in
                  ia64*) tmp_idyn=' -i_dynamic';;
                esac
-               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
                ;;
            esac
            archive_cmds_need_lc_CXX=no
                ;;
            esac
            archive_cmds_need_lc_CXX=no
-           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-           whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
            ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
            case `$CC -V` in
            *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
              prelink_cmds_CXX='tpldir=Template.dir~
            ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
            case `$CC -V` in
            *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
              prelink_cmds_CXX='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
              old_archive_cmds_CXX='tpldir=Template.dir~
              old_archive_cmds_CXX='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
-               $RANLIB $oldlib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
              archive_cmds_CXX='tpldir=Template.dir~
              archive_cmds_CXX='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
              archive_expsym_cmds_CXX='tpldir=Template.dir~
              archive_expsym_cmds_CXX='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
              ;;
            *) # Version 6 and above use weak symbols
              ;;
            *) # Version 6 and above use weak symbols
-             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
              ;;
            esac
 
              ;;
            esac
 
-           hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+           hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
             ;;
          cxx*)
            # Compaq C++
             ;;
          cxx*)
            # Compaq C++
-           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
 
            runpath_var=LD_RUN_PATH
            hardcode_libdir_flag_spec_CXX='-rpath $libdir'
 
            runpath_var=LD_RUN_PATH
            hardcode_libdir_flag_spec_CXX='-rpath $libdir'
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
            ;;
          xl* | mpixl* | bgxl*)
            # IBM XL 8.0 on PPC, with GNU ld
            ;;
          xl* | mpixl* | bgxl*)
            # IBM XL 8.0 on PPC, with GNU ld
-           hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           if test "x$supports_anon_versioning" = xyes; then
+           hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
              archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
              archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
-               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-               echo "local: *; };" >> $output_objdir/$libname.ver~
-               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
            fi
            ;;
          *)
            fi
            ;;
          *)
            *Sun\ C*)
              # Sun C++ 5.9
              no_undefined_flag_CXX=' -zdefs'
            *Sun\ C*)
              # Sun C++ 5.9
              no_undefined_flag_CXX=' -zdefs'
-             archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
              hardcode_libdir_flag_spec_CXX='-R$libdir'
              hardcode_libdir_flag_spec_CXX='-R$libdir'
-             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+             whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
              compiler_needs_object_CXX=yes
 
              # Not sure whether something based on
              compiler_needs_object_CXX=yes
 
              # Not sure whether something based on
         ld_shlibs_CXX=yes
        ;;
 
         ld_shlibs_CXX=yes
        ;;
 
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-       ld_shlibs_CXX=no
-       ;;
-
-      openbsd*)
+      openbsd* | bitrig*)
        if test -f /usr/libexec/ld.so; then
          hardcode_direct_CXX=yes
          hardcode_shlibpath_var_CXX=no
          hardcode_direct_absolute_CXX=yes
          archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
        if test -f /usr/libexec/ld.so; then
          hardcode_direct_CXX=yes
          hardcode_shlibpath_var_CXX=no
          hardcode_direct_absolute_CXX=yes
          archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-         hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-           export_dynamic_flag_spec_CXX='${wl}-E'
-           whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='$wl-E'
+           whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
          fi
          output_verbose_link_cmd=func_echo_all
        else
          fi
          output_verbose_link_cmd=func_echo_all
        else
@@ -13980,9 +14670,9 @@ fi
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
-           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
 
 
-           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
            hardcode_libdir_separator_CXX=:
 
            # Archives containing C++ object files must be created using
            hardcode_libdir_separator_CXX=:
 
            # Archives containing C++ object files must be created using
           cxx*)
            case $host in
              osf3*)
           cxx*)
            case $host in
              osf3*)
-               allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-               hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+               allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
                ;;
              *)
                allow_undefined_flag_CXX=' -expect_unresolved \*'
                ;;
              *)
                allow_undefined_flag_CXX=' -expect_unresolved \*'
-               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
                archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
                archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-                 echo "-hidden">> $lib.exp~
-                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-                 $RM $lib.exp'
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
                hardcode_libdir_flag_spec_CXX='-rpath $libdir'
                ;;
            esac
                hardcode_libdir_flag_spec_CXX='-rpath $libdir'
                ;;
            esac
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
          *)
            ;;
          *)
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
              case $host in
                osf3*)
              case $host in
                osf3*)
-                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
                  ;;
                *)
                  ;;
                *)
-                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
                  ;;
              esac
 
                  ;;
              esac
 
-             hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+             hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
              hardcode_libdir_separator_CXX=:
 
              # Commands to make compiler produce verbose output that lists
              hardcode_libdir_separator_CXX=:
 
              # Commands to make compiler produce verbose output that lists
@@ -14085,9 +14775,9 @@ fi
            # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
            no_undefined_flag_CXX=' -zdefs'
            # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
            no_undefined_flag_CXX=' -zdefs'
-           archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
            archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
            archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
            hardcode_libdir_flag_spec_CXX='-R$libdir'
            hardcode_shlibpath_var_CXX=no
 
            hardcode_libdir_flag_spec_CXX='-R$libdir'
            hardcode_shlibpath_var_CXX=no
@@ -14095,7 +14785,7 @@ fi
              solaris2.[0-5] | solaris2.[0-5].*) ;;
              *)
                # The compiler driver will combine and reorder linker options,
              solaris2.[0-5] | solaris2.[0-5].*) ;;
              *)
                # The compiler driver will combine and reorder linker options,
-               # but understands `-z linker_flag'.
+               # but understands '-z linker_flag'.
                # Supported since Solaris 2.6 (maybe 2.5.1?)
                whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
                ;;
                # Supported since Solaris 2.6 (maybe 2.5.1?)
                whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
                ;;
            ;;
           gcx*)
            # Green Hills C++ Compiler
            ;;
           gcx*)
            # Green Hills C++ Compiler
-           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 
            # The C++ compiler must be used to create the archive.
            old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
            ;;
           *)
            # GNU C++ compiler with Solaris linker
 
            # The C++ compiler must be used to create the archive.
            old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
            ;;
           *)
            # GNU C++ compiler with Solaris linker
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             no_undefined_flag_CXX=' $wl-z ${wl}defs'
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
                archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
                archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
                output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
                output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
                # platform.
                # platform.
-               archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
                archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
                archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
-             hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+             hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
              case $host_os in
                solaris2.[0-5] | solaris2.[0-5].*) ;;
                *)
              case $host_os in
                solaris2.[0-5] | solaris2.[0-5].*) ;;
                *)
-                 whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
                  ;;
              esac
            fi
                  ;;
              esac
            fi
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_CXX='${wl}-z,text'
+      no_undefined_flag_CXX='$wl-z,text'
       archive_cmds_need_lc_CXX=no
       hardcode_shlibpath_var_CXX=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
       archive_cmds_need_lc_CXX=no
       hardcode_shlibpath_var_CXX=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
-         archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
          ;;
        *)
-         archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
          ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
-       # Note: We can NOT use -z defs as we might desire, because we do not
+       # Note: We CANNOT use -z defs as we might desire, because we do not
        # link with -lc, and that would cause any symbols used from libc to
        # always be unresolved, which means just about no library would
        # ever link correctly.  If we're not using GNU ld we use -z text
        # though, which does catch some bad symbols but isn't as heavy-handed
        # as -z defs.
        # link with -lc, and that would cause any symbols used from libc to
        # always be unresolved, which means just about no library would
        # ever link correctly.  If we're not using GNU ld we use -z text
        # though, which does catch some bad symbols but isn't as heavy-handed
        # as -z defs.
-       no_undefined_flag_CXX='${wl}-z,text'
-       allow_undefined_flag_CXX='${wl}-z,nodefs'
+       no_undefined_flag_CXX='$wl-z,text'
+       allow_undefined_flag_CXX='$wl-z,nodefs'
        archive_cmds_need_lc_CXX=no
        hardcode_shlibpath_var_CXX=no
        archive_cmds_need_lc_CXX=no
        hardcode_shlibpath_var_CXX=no
-       hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+       hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
        hardcode_libdir_separator_CXX=':'
        link_all_deplibs_CXX=yes
        hardcode_libdir_separator_CXX=':'
        link_all_deplibs_CXX=yes
-       export_dynamic_flag_spec_CXX='${wl}-Bexport'
+       export_dynamic_flag_spec_CXX='$wl-Bexport'
        runpath_var='LD_RUN_PATH'
 
        case $cc_basename in
           CC*)
        runpath_var='LD_RUN_PATH'
 
        case $cc_basename in
           CC*)
-           archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
            old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
            old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
-             '"$old_archive_cmds_CXX"
+              '"$old_archive_cmds_CXX"
            reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
            reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
-             '"$reload_cmds_CXX"
+              '"$reload_cmds_CXX"
            ;;
          *)
            ;;
          *)
-           archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
            ;;
        esac
       ;;
            ;;
        esac
       ;;
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
-    test "$ld_shlibs_CXX" = no && can_build_shared=no
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
 
 
-    GCC_CXX="$GXX"
-    LD_CXX="$LD"
+    GCC_CXX=$GXX
+    LD_CXX=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -14280,13 +14970,13 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
+    case $prev$p in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
         prev=$p
         continue
        fi
         prev=$p
         continue
        fi
@@ -14302,16 +14992,16 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
-       if test "$pre_test_object_deps_done" = no; then
-        case ${prev} in
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
         -L | -R)
           # Internal compiler library paths should come after those
           # provided the user.  The postdeps already come after the
           # user supplied libs so there is no need to process them.
           if test -z "$compiler_lib_search_path_CXX"; then
         -L | -R)
           # Internal compiler library paths should come after those
           # provided the user.  The postdeps already come after the
           # user supplied libs so there is no need to process them.
           if test -z "$compiler_lib_search_path_CXX"; then
-            compiler_lib_search_path_CXX="${prev}${p}"
+            compiler_lib_search_path_CXX=$prev$p
           else
           else
-            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
           fi
           ;;
         # The "-l" case would never come before the object being
           fi
           ;;
         # The "-l" case would never come before the object being
@@ -14319,9 +15009,9 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
         esac
        else
         if test -z "$postdeps_CXX"; then
         esac
        else
         if test -z "$postdeps_CXX"; then
-          postdeps_CXX="${prev}${p}"
+          postdeps_CXX=$prev$p
         else
         else
-          postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+          postdeps_CXX="${postdeps_CXX} $prev$p"
         fi
        fi
        prev=
         fi
        fi
        prev=
@@ -14336,15 +15026,15 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
         continue
        fi
 
         continue
        fi
 
-       if test "$pre_test_object_deps_done" = no; then
+       if test no = "$pre_test_object_deps_done"; then
         if test -z "$predep_objects_CXX"; then
         if test -z "$predep_objects_CXX"; then
-          predep_objects_CXX="$p"
+          predep_objects_CXX=$p
         else
           predep_objects_CXX="$predep_objects_CXX $p"
         fi
        else
         if test -z "$postdep_objects_CXX"; then
         else
           predep_objects_CXX="$predep_objects_CXX $p"
         fi
        else
         if test -z "$postdep_objects_CXX"; then
-          postdep_objects_CXX="$p"
+          postdep_objects_CXX=$p
         else
           postdep_objects_CXX="$postdep_objects_CXX $p"
         fi
         else
           postdep_objects_CXX="$postdep_objects_CXX $p"
         fi
@@ -14390,7 +15080,7 @@ linux*)
       ;;
     esac
 
       ;;
     esac
 
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
@@ -14413,7 +15103,7 @@ solaris*)
     # Adding this requires a known-good setup of shared libraries for
     # Sun compiler versions before 5.6, else PIC objects from an old
     # archive will be linked into the output, leading to subtle bugs.
     # Adding this requires a known-good setup of shared libraries for
     # Sun compiler versions before 5.6, else PIC objects from an old
     # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
@@ -14427,7 +15117,7 @@ case " $postdeps_CXX " in
 esac
  compiler_lib_search_dirs_CXX=
 if test -n "${compiler_lib_search_path_CXX}"; then
 esac
  compiler_lib_search_dirs_CXX=
 if test -n "${compiler_lib_search_path_CXX}"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
 fi
 
 
 fi
 
 
@@ -14466,17 +15156,18 @@ lt_prog_compiler_static_CXX=
 
 
   # C++ specific cases for pic, static, wl, etc.
 
 
   # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
+  if test yes = "$GXX"; then
     lt_prog_compiler_wl_CXX='-Wl,'
     lt_prog_compiler_static_CXX='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
     lt_prog_compiler_wl_CXX='-Wl,'
     lt_prog_compiler_static_CXX='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static_CXX='-Bstatic'
       fi
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static_CXX='-Bstatic'
       fi
+      lt_prog_compiler_pic_CXX='-fPIC'
       ;;
 
     amigaos*)
       ;;
 
     amigaos*)
@@ -14487,8 +15178,8 @@ lt_prog_compiler_static_CXX=
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
             lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -14552,7 +15243,7 @@ lt_prog_compiler_static_CXX=
     case $host_os in
       aix[4-9]*)
        # All AIX code is PIC.
     case $host_os in
       aix[4-9]*)
        # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; then
          # AIX 5 now supports IA64 processor
          lt_prog_compiler_static_CXX='-Bstatic'
        else
          # AIX 5 now supports IA64 processor
          lt_prog_compiler_static_CXX='-Bstatic'
        else
@@ -14592,14 +15283,14 @@ lt_prog_compiler_static_CXX=
        case $cc_basename in
          CC*)
            lt_prog_compiler_wl_CXX='-Wl,'
        case $cc_basename in
          CC*)
            lt_prog_compiler_wl_CXX='-Wl,'
-           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-           if test "$host_cpu" != ia64; then
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
              lt_prog_compiler_pic_CXX='+Z'
            fi
            ;;
          aCC*)
            lt_prog_compiler_wl_CXX='-Wl,'
              lt_prog_compiler_pic_CXX='+Z'
            fi
            ;;
          aCC*)
            lt_prog_compiler_wl_CXX='-Wl,'
-           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
            case $host_cpu in
            hppa*64*|ia64*)
              # +Z the default
            case $host_cpu in
            hppa*64*|ia64*)
              # +Z the default
@@ -14628,7 +15319,7 @@ lt_prog_compiler_static_CXX=
            ;;
        esac
        ;;
            ;;
        esac
        ;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
        case $cc_basename in
          KCC*)
            # KAI C++ Compiler
        case $cc_basename in
          KCC*)
            # KAI C++ Compiler
@@ -14636,7 +15327,7 @@ lt_prog_compiler_static_CXX=
            lt_prog_compiler_pic_CXX='-fPIC'
            ;;
          ecpc* )
            lt_prog_compiler_pic_CXX='-fPIC'
            ;;
          ecpc* )
-           # old Intel C++ for x86_64 which still supported -KPIC.
+           # old Intel C++ for x86_64, which still supported -KPIC.
            lt_prog_compiler_wl_CXX='-Wl,'
            lt_prog_compiler_pic_CXX='-KPIC'
            lt_prog_compiler_static_CXX='-static'
            lt_prog_compiler_wl_CXX='-Wl,'
            lt_prog_compiler_pic_CXX='-KPIC'
            lt_prog_compiler_static_CXX='-static'
@@ -14692,7 +15383,7 @@ lt_prog_compiler_static_CXX=
            ;;
        esac
        ;;
            ;;
        esac
        ;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -14781,7 +15472,7 @@ lt_prog_compiler_static_CXX=
   fi
 
 case $host_os in
   fi
 
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     lt_prog_compiler_pic_CXX=
     ;;
   *djgpp*)
     lt_prog_compiler_pic_CXX=
     ;;
@@ -14813,7 +15504,7 @@ else
   lt_cv_prog_compiler_pic_works_CXX=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
   lt_cv_prog_compiler_pic_works_CXX=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -14843,7 +15534,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
 
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
     case $lt_prog_compiler_pic_CXX in
      "" | " "*) ;;
      *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
     case $lt_prog_compiler_pic_CXX in
      "" | " "*) ;;
      *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
@@ -14869,7 +15560,7 @@ if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -14888,13 +15579,13 @@ else
      fi
    fi
    $RM -r conftest*
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
 
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
 
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
     :
 else
     lt_prog_compiler_static_CXX=
     :
 else
     lt_prog_compiler_static_CXX=
@@ -15008,8 +15699,8 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
 
 
 
 
 
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
@@ -15021,9 +15712,9 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
     need_locks=warn
   fi
 else
@@ -15050,7 +15741,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     ;;
   pw32*)
     fi
     ;;
   pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
+    export_symbols_cmds_CXX=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -15063,9 +15754,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
       ;;
     esac
     ;;
       ;;
     esac
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    link_all_deplibs_CXX=no
-    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
@@ -15073,7 +15761,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
+test no = "$ld_shlibs_CXX" && can_build_shared=no
 
 with_gnu_ld_CXX=$with_gnu_ld
 
 
 with_gnu_ld_CXX=$with_gnu_ld
 
@@ -15090,7 +15778,7 @@ x|xyes)
   # Assume -lc should be added
   archive_cmds_need_lc_CXX=yes
 
   # Assume -lc should be added
   archive_cmds_need_lc_CXX=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $archive_cmds_CXX in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
     case $archive_cmds_CXX in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -15218,7 +15906,7 @@ $as_echo_n "checking dynamic linker characteristics... " >&6; }
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -15238,11 +15926,11 @@ need_version=unknown
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
   ;;
 
 aix[4-9]*)
@@ -15250,40 +15938,40 @@ aix[4-9]*)
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    if test yes = "$aix_use_runtimelinking"; then
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
     fi
     shlibpath_var=LIBPATH
   fi
     fi
     shlibpath_var=LIBPATH
   fi
@@ -15294,18 +15982,18 @@ amigaos*)
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -15313,8 +16001,8 @@ beos*)
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -15326,7 +16014,7 @@ bsdi[45]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
   need_version=no
   need_lib_prefix=no
 
@@ -15335,8 +16023,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -15352,16 +16040,16 @@ cygwin* | mingw* | pw32* | cegcc*)
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
 
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -15370,8 +16058,8 @@ cygwin* | mingw* | pw32* | cegcc*)
   *,cl*)
     # Native MSVC
     libname_spec='$name'
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
 
     case $build_os in
     mingw*)
@@ -15398,7 +16086,7 @@ cygwin* | mingw* | pw32* | cegcc*)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -15411,8 +16099,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -15425,7 +16113,7 @@ cygwin* | mingw* | pw32* | cegcc*)
 
   *)
     # Assume MSVC wrapper
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -15438,8 +16126,8 @@ darwin* | rhapsody*)
   version_type=darwin
   need_lib_prefix=no
   need_version=no
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -15451,8 +16139,8 @@ dgux*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -15470,12 +16158,12 @@ freebsd* | dragonfly*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
       need_version=yes
       ;;
   esac
@@ -15500,26 +16188,15 @@ freebsd* | dragonfly*)
   esac
   ;;
 
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -15537,9 +16214,9 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
@@ -15552,8 +16229,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -15562,8 +16239,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -15576,8 +16253,8 @@ interix[3-9]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -15588,7 +16265,7 @@ irix5* | irix6* | nonstopux*)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
+       if test yes = "$lt_cv_prog_gnu_ld"; then
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
@@ -15596,8 +16273,8 @@ irix5* | irix6* | nonstopux*)
   esac
   need_lib_prefix=no
   need_version=no
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -15616,8 +16293,8 @@ irix5* | irix6* | nonstopux*)
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
   hardcode_into_libs=yes
   ;;
 
@@ -15626,13 +16303,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -15723,7 +16408,7 @@ netbsd*)
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -15732,45 +16417,34 @@ newsos6)
   version_type=qnx
   need_lib_prefix=no
   need_version=no
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
   else
   else
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   fi
   fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_lib_prefix=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  library_names_spec='$libname$shared_ext $libname.a'
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
@@ -15779,11 +16453,11 @@ osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
   ;;
 
 rdos*)
@@ -15794,8 +16468,8 @@ solaris*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -15805,11 +16479,11 @@ solaris*)
 
 sunos4*)
   version_type=sunos
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
     need_lib_prefix=no
   fi
   need_version=yes
@@ -15817,8 +16491,8 @@ sunos4*)
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -15839,10 +16513,10 @@ sysv4 | sysv4.3*)
   ;;
 
 sysv4*MP*)
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/necthen
     version_type=linux # correct to gnu/linux during the next big refactor
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
@@ -15851,12 +16525,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -15874,7 +16548,7 @@ tpf*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -15882,8 +16556,8 @@ tpf*)
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -15893,18 +16567,18 @@ uts4*)
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
 
 fi
 
 
@@ -15949,15 +16623,15 @@ $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action_CXX=
 if test -n "$hardcode_libdir_flag_spec_CXX" ||
    test -n "$runpath_var_CXX" ||
 hardcode_action_CXX=
 if test -n "$hardcode_libdir_flag_spec_CXX" ||
    test -n "$runpath_var_CXX" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+   test yes = "$hardcode_automatic_CXX"; then
 
   # We can hardcode non-existent directories.
 
   # We can hardcode non-existent directories.
-  if test "$hardcode_direct_CXX" != no &&
+  if test no != "$hardcode_direct_CXX" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
     # Linking always hardcodes the temporary library directory.
     hardcode_action_CXX=relink
   else
     # Linking always hardcodes the temporary library directory.
     hardcode_action_CXX=relink
   else
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
 $as_echo "$hardcode_action_CXX" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
 $as_echo "$hardcode_action_CXX" >&6; }
 
-if test "$hardcode_action_CXX" = relink ||
-   test "$inherit_rpath_CXX" = yes; then
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
   # Fast installation is not supported
   enable_fast_install=no
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -16000,7 +16674,7 @@ fi
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -16017,12 +16691,263 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.20
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+RAGEL=${RAGEL-"${am_missing_run}ragel"}
+
+
+GIT=${GIT-"${am_missing_run}git"}
+
+
+# Version
+
+
+
+
+HB_VERSION_MAJOR=0
+HB_VERSION_MINOR=9
+HB_VERSION_MICRO=35
+HB_VERSION=0.9.35
+
+
+
+
+
+# Libtool version
+
+
+
+
+HB_LIBTOOL_VERSION_INFO=935:0:935
+
+
+# Documentation
+have_gtk_doc=false
+
+
+
+
+  gtk_doc_requires="gtk-doc >= 1.15"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5
+$as_echo_n "checking for gtk-doc... " >&6; }
+  if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  have_gtk_doc=yes
+else
+  have_gtk_doc=no
+fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5
+$as_echo "$have_gtk_doc" >&6; }
+
+  if test "$have_gtk_doc" = "no"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+  You will not be able to create source packages with 'make dist'
+  because $gtk_doc_requires is not found." >&5
+$as_echo "$as_me: WARNING:
+  You will not be able to create source packages with 'make dist'
+  because $gtk_doc_requires is not found." >&2;}
+  fi
+
+            # Extract the first word of "gtkdoc-check", so it can be a program name with args.
+set dummy gtkdoc-check; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GTKDOC_CHECK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GTKDOC_CHECK"; then
+  ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  # Extract the first word of "gtkdoc-check", so it can be a program name with args.
+set dummy gtkdoc-check; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GTKDOC_CHECK_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_CHECK_PATH in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GTKDOC_CHECK_PATH="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH
+if test -n "$GTKDOC_CHECK_PATH"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5
+$as_echo "$GTKDOC_CHECK_PATH" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  for ac_prog in gtkdoc-rebase
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GTKDOC_REBASE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   $as_echo_n "(cached) " >&6
 else
-  case $PKG_CONFIG in
+  case $GTKDOC_REBASE in
   [\\/]* | ?:[\\/]*)
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -16031,8 +16956,8 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -16043,29 +16968,30 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
   ;;
 esac
 fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
+GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE
+if test -n "$GTKDOC_REBASE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5
+$as_echo "$GTKDOC_REBASE" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
-  ac_pt_PKG_CONFIG=$PKG_CONFIG
-  # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
+  test -n "$GTKDOC_REBASE" && break
+done
+test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true"
+
+  # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args.
+set dummy gtkdoc-mkpdf; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+if ${ac_cv_path_GTKDOC_MKPDF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   $as_echo_n "(cached) " >&6
 else
-  case $ac_pt_PKG_CONFIG in
+  case $GTKDOC_MKPDF in
   [\\/]* | ?:[\\/]*)
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -16074,8 +17000,8 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -16086,71 +17012,202 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
   ;;
 esac
 fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF
+if test -n "$GTKDOC_MKPDF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5
+$as_echo "$GTKDOC_MKPDF" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_pt_PKG_CONFIG" = x; then
-    PKG_CONFIG=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    PKG_CONFIG=$ac_pt_PKG_CONFIG
-  fi
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then :
+  withval=$with_html_dir;
 else
 else
-  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+  with_html_dir='${datadir}/gtk-doc/html'
 fi
 
 fi
 
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then :
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
 fi
 fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
+  if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
+    as_fn_error $? "
+  You must have $gtk_doc_requires installed to build documentation for
+  $PACKAGE_NAME. Please install gtk-doc or disable building the
+  documentation by adding '--disable-gtk-doc' to '$0'." "$LINENO" 5
+  fi
+
+    if test "x$PACKAGE_NAME" != "xglib"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5
+$as_echo_n "checking for GTKDOC_DEPS... " >&6; }
+
 if test -n "$PKG_CONFIG"; then
 if test -n "$PKG_CONFIG"; then
-       _pkg_min_version=0.20
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
-       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               PKG_CONFIG=""
-       fi
+    if test -n "$GTKDOC_DEPS_CFLAGS"; then
+        pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GTKDOC_DEPS_LIBS"; then
+        pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
 
 
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
 fi
 fi
+        if test $_pkg_short_errors_supported = yes; then
+               GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0"`
+        else
+               GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$GTKDOC_DEPS_PKG_ERRORS" >&5
 
 
-# Version
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                :
+elif test $pkg_failed = untried; then
+       :
+else
+       GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS
+       GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  fi
 
 
+    # Check whether --enable-gtk-doc-html was given.
+if test "${enable_gtk_doc_html+set}" = set; then :
+  enableval=$enable_gtk_doc_html;
+else
+  enable_gtk_doc_html=yes
+fi
 
 
+    # Check whether --enable-gtk-doc-pdf was given.
+if test "${enable_gtk_doc_pdf+set}" = set; then :
+  enableval=$enable_gtk_doc_pdf;
+else
+  enable_gtk_doc_pdf=no
+fi
 
 
 
 
-HB_VERSION_MAJOR=0
-HB_VERSION_MINOR=9
-HB_VERSION_MICRO=12
-HB_VERSION=0.9.12
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
 
 
+  if test -z "$AM_DEFAULT_VERBOSITY"; then
+    AM_DEFAULT_VERBOSITY=1
+  fi
 
 
 
 
+   if test x$have_gtk_doc = xyes; then
+  HAVE_GTK_DOC_TRUE=
+  HAVE_GTK_DOC_FALSE='#'
+else
+  HAVE_GTK_DOC_TRUE='#'
+  HAVE_GTK_DOC_FALSE=
+fi
 
 
+   if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
 
 
-# Libtool version
+   if test x$enable_gtk_doc_html = xyes; then
+  GTK_DOC_BUILD_HTML_TRUE=
+  GTK_DOC_BUILD_HTML_FALSE='#'
+else
+  GTK_DOC_BUILD_HTML_TRUE='#'
+  GTK_DOC_BUILD_HTML_FALSE=
+fi
 
 
+   if test x$enable_gtk_doc_pdf = xyes; then
+  GTK_DOC_BUILD_PDF_TRUE=
+  GTK_DOC_BUILD_PDF_FALSE='#'
+else
+  GTK_DOC_BUILD_PDF_TRUE='#'
+  GTK_DOC_BUILD_PDF_FALSE=
+fi
 
 
+   if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
 
 
+   if test -n "$GTKDOC_REBASE"; then
+  GTK_DOC_USE_REBASE_TRUE=
+  GTK_DOC_USE_REBASE_FALSE='#'
+else
+  GTK_DOC_USE_REBASE_TRUE='#'
+  GTK_DOC_USE_REBASE_FALSE=
+fi
 
 
-HB_LIBTOOL_VERSION_INFO=912:0:912
 
 
+       if test "x$enable_gtk_doc" = xyes; then
+               have_gtk_doc=true
+       fi
 
 
 # Functions and headers
 
 
 # Functions and headers
-for ac_func in atexit mprotect sysconf getpagesize mmap _setmode isatty
+for ac_func in atexit mprotect sysconf getpagesize mmap isatty
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -16162,7 +17219,7 @@ _ACEOF
 fi
 done
 
 fi
 done
 
-for ac_header in unistd.h sys/mman.h io.h
+for ac_header in unistd.h sys/mman.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -16178,6 +17235,41 @@ done
 
 # Compiler flags
 
 
 # Compiler flags
 
+# The cast to long int works around a bug in the HP C Compiler,
+# see AC_CHECK_SIZEOF for more information.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of struct{char;}" >&5
+$as_echo_n "checking alignment of struct{char;}... " >&6; }
+if ${ac_cv_alignof_struct_char__+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_struct_char__"        "$ac_includes_default
+#ifndef offsetof
+# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0)
+#endif
+typedef struct { char x; struct{char;} y; } ac__type_alignof_;"; then :
+
+else
+  if test "$ac_cv_type_struct_char__" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute alignment of struct{char;}
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_alignof_struct_char__=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_struct_char__" >&5
+$as_echo "$ac_cv_alignof_struct_char__" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define ALIGNOF_STRUCT_CHAR__ $ac_cv_alignof_struct_char__
+_ACEOF
+
+
 if test "x$GCC" = "xyes"; then
 
        # Make symbols link locally
 if test "x$GCC" = "xyes"; then
 
        # Make symbols link locally
@@ -16200,8 +17292,10 @@ if test "x$GCC" = "xyes"; then
 
        case "$host" in
                arm-*-*)
 
        case "$host" in
                arm-*-*)
-                       # Request byte alignment on arm
-                       CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+                       if test "x$ac_cv_alignof_struct_char__" != x1; then
+                               # Request byte alignment
+                               CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+                       fi
                ;;
        esac
 fi
                ;;
        esac
 fi
@@ -16376,7 +17470,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ax_pthread_config="yes"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_ax_pthread_config="yes"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -16579,7 +17673,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_PTHREAD_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     ac_cv_prog_PTHREAD_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -16661,39 +17755,32 @@ else
 fi
 
 
 fi
 
 
+have_fallback=true
+if $have_fallback; then
 
 
-have_hb_old=true
-if $have_hb_old; then
-
-$as_echo "#define HAVE_HB_OLD 1" >>confdefs.h
+$as_echo "#define HAVE_FALLBACK 1" >>confdefs.h
 
 fi
 
 fi
- if $have_hb_old; then
-  HAVE_HB_OLD_TRUE=
-  HAVE_HB_OLD_FALSE='#'
+ if $have_fallback; then
+  HAVE_FALLBACK_TRUE=
+  HAVE_FALLBACK_FALSE='#'
 else
 else
-  HAVE_HB_OLD_TRUE='#'
-  HAVE_HB_OLD_FALSE=
+  HAVE_FALLBACK_TRUE='#'
+  HAVE_FALLBACK_FALSE=
 fi
 
 
 
 fi
 
 
 
-have_ucdn=true
-if $have_ucdn; then
-
-$as_echo "#define HAVE_UCDN 1" >>confdefs.h
 
 
-fi
- if $have_ucdn; then
-  HAVE_UCDN_TRUE=
-  HAVE_UCDN_FALSE='#'
+# Check whether --with-glib was given.
+if test "${with_glib+set}" = set; then :
+  withval=$with_glib;
 else
 else
-  HAVE_UCDN_TRUE='#'
-  HAVE_UCDN_FALSE=
+  with_glib=auto
 fi
 
 fi
 
-
-
+have_glib=false
+if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
@@ -16755,9 +17842,9 @@ fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_glib=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_glib=false
+       :
 else
        GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
        GLIB_LIBS=$pkg_cv_GLIB_LIBS
 else
        GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
        GLIB_LIBS=$pkg_cv_GLIB_LIBS
@@ -16765,6 +17852,10 @@ else
 $as_echo "yes" >&6; }
        have_glib=true
 fi
 $as_echo "yes" >&6; }
        have_glib=true
 fi
+fi
+if test "x$with_glib" = "xyes" -a "x$have_glib" != "xtrue"; then
+       as_fn_error $? "glib support requested but glib-2.0 not found" "$LINENO" 5
+fi
 if $have_glib; then
 
 $as_echo "#define HAVE_GLIB 1" >>confdefs.h
 if $have_glib; then
 
 $as_echo "#define HAVE_GLIB 1" >>confdefs.h
 
 
 
 
 
 
+
+# Check whether --with-gobject was given.
+if test "${with_gobject+set}" = set; then :
+  withval=$with_gobject;
+else
+  with_gobject=no
+fi
+
+have_gobject=false
+if test "x$with_gobject" = "xyes" -o "x$with_gobject" = "xauto"; then
+
 pkg_failed=no
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTHREAD" >&5
-$as_echo_n "checking for GTHREAD... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5
+$as_echo_n "checking for GOBJECT... " >&6; }
 
 if test -n "$PKG_CONFIG"; then
 
 if test -n "$PKG_CONFIG"; then
-    if test -n "$GTHREAD_CFLAGS"; then
-        pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS"
+    if test -n "$GOBJECT_CFLAGS"; then
+        pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GTHREAD_CFLAGS=`$PKG_CONFIG --cflags "gthread-2.0" 2>/dev/null`
+  pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 glib-2.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
 else
   pkg_failed=yes
 fi
@@ -16803,16 +17905,16 @@ else
        pkg_failed=untried
 fi
 if test -n "$PKG_CONFIG"; then
        pkg_failed=untried
 fi
 if test -n "$PKG_CONFIG"; then
-    if test -n "$GTHREAD_LIBS"; then
-        pkg_cv_GTHREAD_LIBS="$GTHREAD_LIBS"
+    if test -n "$GOBJECT_LIBS"; then
+        pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GTHREAD_LIBS=`$PKG_CONFIG --libs "gthread-2.0" 2>/dev/null`
+  pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0 glib-2.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
 else
   pkg_failed=yes
 fi
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GTHREAD_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gthread-2.0"`
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gobject-2.0 glib-2.0"`
         else
         else
-               GTHREAD_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gthread-2.0"`
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gobject-2.0 glib-2.0"`
         fi
        # Put the nasty error message in config.log where it belongs
         fi
        # Put the nasty error message in config.log where it belongs
-       echo "$GTHREAD_PKG_ERRORS" >&5
+       echo "$GOBJECT_PKG_ERRORS" >&5
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_gthread=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_gthread=false
+       :
 else
 else
-       GTHREAD_CFLAGS=$pkg_cv_GTHREAD_CFLAGS
-       GTHREAD_LIBS=$pkg_cv_GTHREAD_LIBS
+       GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS
+       GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-       have_gthread=true
+       have_gobject=true
+fi
 fi
 fi
-if $have_gthread; then
+if test "x$with_gobject" = "xyes" -a "x$have_gobject" != "xtrue"; then
+       as_fn_error $? "gobject support requested but gobject-2.0 / glib-2.0 not found" "$LINENO" 5
+fi
+if $have_gobject; then
 
 
-$as_echo "#define HAVE_GTHREAD 1" >>confdefs.h
+$as_echo "#define HAVE_GOBJECT 1" >>confdefs.h
+
+       GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
 
 fi
 
 fi
- if $have_gthread; then
-  HAVE_GTHREAD_TRUE=
-  HAVE_GTHREAD_FALSE='#'
+ if $have_gobject; then
+  HAVE_GOBJECT_TRUE=
+  HAVE_GOBJECT_FALSE='#'
 else
 else
-  HAVE_GTHREAD_TRUE='#'
-  HAVE_GTHREAD_FALSE=
+  HAVE_GOBJECT_TRUE='#'
+  HAVE_GOBJECT_FALSE=
 fi
 
 
 
 fi
 
 
 
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5
-$as_echo_n "checking for GOBJECT... " >&6; }
 
 
-if test -n "$PKG_CONFIG"; then
-    if test -n "$GOBJECT_CFLAGS"; then
-        pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0 >= 2.16\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0 >= 2.16") 2>&5
+# Gobject-Introspection
+have_introspection=false
+
+       if $have_gobject; then
+
+
+
+                # Check whether --enable-introspection was given.
+if test "${enable_introspection+set}" = set; then :
+  enableval=$enable_introspection;
+else
+  enable_introspection=auto
+fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5
+$as_echo_n "checking for gobject-introspection... " >&6; }
+
+        case $enable_introspection in #(
+  no) :
+            found_introspection="no (disabled, use --enable-introspection to enable)"
+     ;; #(
+      yes) :
+            if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 glib-2.0 >= 2.16" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
+  :
 else
 else
-       pkg_failed=untried
+  as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5
 fi
 fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$GOBJECT_LIBS"; then
-        pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS"
-    else
         if test -n "$PKG_CONFIG" && \
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0 >= 2.16\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0 >= 2.16") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.34.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0 glib-2.0 >= 2.16" 2>/dev/null`
+  found_introspection=yes
 else
 else
-  pkg_failed=yes
+  as_fn_error $? "You need to have gobject-introspection >= 1.34.0 installed to build HarfBuzz" "$LINENO" 5
 fi
 fi
-    fi
+     ;; #(
+      auto) :
+            if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.34.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  found_introspection=yes
 else
 else
-       pkg_failed=untried
+  found_introspection=no
 fi
 fi
+               enable_introspection=$found_introspection
+     ;; #(
+  *) :
+                as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5
+     ;;
+esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5
+$as_echo "$found_introspection" >&6; }
+
+    INTROSPECTION_SCANNER=
+    INTROSPECTION_COMPILER=
+    INTROSPECTION_GENERATE=
+    INTROSPECTION_GIRDIR=
+    INTROSPECTION_TYPELIBDIR=
+    if test "x$found_introspection" = "xyes"; then
+       INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+       INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+       INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+       INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+       INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+    fi
 
 
 
 
 
 
-if test $pkg_failed = yes; then
 
 
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
+
+
+
+
+
+     if test "x$found_introspection" = "xyes"; then
+  HAVE_INTROSPECTION_TRUE=
+  HAVE_INTROSPECTION_FALSE='#'
 else
 else
-        _pkg_short_errors_supported=no
+  HAVE_INTROSPECTION_TRUE='#'
+  HAVE_INTROSPECTION_FALSE=
 fi
 fi
-        if test $_pkg_short_errors_supported = yes; then
-               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gobject-2.0 glib-2.0 >= 2.16"`
-        else
-               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gobject-2.0 glib-2.0 >= 2.16"`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$GOBJECT_PKG_ERRORS" >&5
 
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                have_gobject=false
-elif test $pkg_failed = untried; then
-       have_gobject=false
-else
-       GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS
-       GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       have_gobject=true
+
+
+               if test "x$found_introspection" = xyes; then
+                       have_introspection=true
+               fi
+       else
+                if false; then
+  HAVE_INTROSPECTION_TRUE=
+  HAVE_INTROSPECTION_FALSE='#'
+else
+  HAVE_INTROSPECTION_TRUE='#'
+  HAVE_INTROSPECTION_FALSE=
 fi
 fi
-if $have_gobject; then
 
 
-$as_echo "#define HAVE_GOBJECT 1" >>confdefs.h
+       fi
 
 
-       GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
 
 
+
+have_ucdn=true
+if $have_glib; then
+       have_ucdn=false
 fi
 fi
- if $have_gobject; then
-  HAVE_GOBJECT_TRUE=
-  HAVE_GOBJECT_FALSE='#'
+if $have_ucdn; then
+
+$as_echo "#define HAVE_UCDN 1" >>confdefs.h
+
+fi
+ if $have_ucdn; then
+  HAVE_UCDN_TRUE=
+  HAVE_UCDN_FALSE='#'
 else
 else
-  HAVE_GOBJECT_TRUE='#'
-  HAVE_GOBJECT_FALSE=
+  HAVE_UCDN_TRUE='#'
+  HAVE_UCDN_FALSE=
 fi
 
 
 
 
 fi
 
 
 
 
+# Check whether --with-cairo was given.
+if test "${with_cairo+set}" = set; then :
+  withval=$with_cairo;
+else
+  with_cairo=auto
+fi
+
+have_cairo=false
+if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
 $as_echo_n "checking for CAIRO... " >&6; }
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
 $as_echo_n "checking for CAIRO... " >&6; }
@@ -17013,9 +18178,9 @@ fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_cairo=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_cairo=false
+       :
 else
        CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS
        CAIRO_LIBS=$pkg_cv_CAIRO_LIBS
 else
        CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS
        CAIRO_LIBS=$pkg_cv_CAIRO_LIBS
@@ -17023,6 +18188,10 @@ else
 $as_echo "yes" >&6; }
        have_cairo=true
 fi
 $as_echo "yes" >&6; }
        have_cairo=true
 fi
+fi
+if test "x$with_cairo" = "xyes" -a "x$have_cairo" != "xtrue"; then
+       as_fn_error $? "cairo support requested but not found" "$LINENO" 5
+fi
 if $have_cairo; then
 
 $as_echo "#define HAVE_CAIRO 1" >>confdefs.h
 if $have_cairo; then
 
 $as_echo "#define HAVE_CAIRO 1" >>confdefs.h
@@ -17037,6 +18206,8 @@ else
 fi
 
 
 fi
 
 
+have_cairo_ft=false
+if $have_cairo; then
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO_FT" >&5
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO_FT" >&5
@@ -17098,9 +18269,9 @@ fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_cairo_ft=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_cairo_ft=false
+       :
 else
        CAIRO_FT_CFLAGS=$pkg_cv_CAIRO_FT_CFLAGS
        CAIRO_FT_LIBS=$pkg_cv_CAIRO_FT_LIBS
 else
        CAIRO_FT_CFLAGS=$pkg_cv_CAIRO_FT_CFLAGS
        CAIRO_FT_LIBS=$pkg_cv_CAIRO_FT_LIBS
@@ -17108,6 +18279,7 @@ else
 $as_echo "yes" >&6; }
        have_cairo_ft=true
 fi
 $as_echo "yes" >&6; }
        have_cairo_ft=true
 fi
+fi
 if $have_cairo_ft; then
 
 $as_echo "#define HAVE_CAIRO_FT 1" >>confdefs.h
 if $have_cairo_ft; then
 
 $as_echo "#define HAVE_CAIRO_FT 1" >>confdefs.h
 
 
 
 
 
 
+# Check whether --with-icu was given.
+if test "${with_icu+set}" = set; then :
+  withval=$with_icu;
+else
+  with_icu=auto
+fi
+
+have_icu=false
+if test "x$with_icu" = "xyes" -o "x$with_icu" = "xauto"; then
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU" >&5
 $as_echo_n "checking for ICU... " >&6; }
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU" >&5
 $as_echo_n "checking for ICU... " >&6; }
@@ -17184,9 +18366,9 @@ fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_icu=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_icu=false
+       :
 else
        ICU_CFLAGS=$pkg_cv_ICU_CFLAGS
        ICU_LIBS=$pkg_cv_ICU_LIBS
 else
        ICU_CFLAGS=$pkg_cv_ICU_CFLAGS
        ICU_LIBS=$pkg_cv_ICU_LIBS
 $as_echo "yes" >&6; }
        have_icu=true
 fi
 $as_echo "yes" >&6; }
        have_icu=true
 fi
-if $have_icu; then
-       CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
 
 
-$as_echo "#define HAVE_ICU 1" >>confdefs.h
+               if test "$have_icu" != "true"; then
+               if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}icu-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}icu-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ICU_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ICU_CONFIG"; then
+  ac_cv_prog_ICU_CONFIG="$ICU_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ICU_CONFIG="${ac_tool_prefix}icu-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
 
 fi
- if $have_icu; then
-  HAVE_ICU_TRUE=
-  HAVE_ICU_FALSE='#'
+fi
+ICU_CONFIG=$ac_cv_prog_ICU_CONFIG
+if test -n "$ICU_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICU_CONFIG" >&5
+$as_echo "$ICU_CONFIG" >&6; }
 else
 else
-  HAVE_ICU_TRUE='#'
-  HAVE_ICU_FALSE=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 fi
 
 
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU_LE" >&5
-$as_echo_n "checking for ICU_LE... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
-    if test -n "$ICU_LE_CFLAGS"; then
-        pkg_cv_ICU_LE_CFLAGS="$ICU_LE_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-le icu-uc\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "icu-le icu-uc") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_ICU_LE_CFLAGS=`$PKG_CONFIG --cflags "icu-le icu-uc" 2>/dev/null`
-else
-  pkg_failed=yes
 fi
 fi
-    fi
+if test -z "$ac_cv_prog_ICU_CONFIG"; then
+  ac_ct_ICU_CONFIG=$ICU_CONFIG
+  # Extract the first word of "icu-config", so it can be a program name with args.
+set dummy icu-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_ICU_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
 else
-       pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$ICU_LE_LIBS"; then
-        pkg_cv_ICU_LE_LIBS="$ICU_LE_LIBS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-le icu-uc\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "icu-le icu-uc") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_ICU_LE_LIBS=`$PKG_CONFIG --libs "icu-le icu-uc" 2>/dev/null`
+  if test -n "$ac_ct_ICU_CONFIG"; then
+  ac_cv_prog_ac_ct_ICU_CONFIG="$ac_ct_ICU_CONFIG" # Let the user override the test.
 else
 else
-  pkg_failed=yes
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_ICU_CONFIG="icu-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
 fi
 fi
-    fi
+fi
+ac_ct_ICU_CONFIG=$ac_cv_prog_ac_ct_ICU_CONFIG
+if test -n "$ac_ct_ICU_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_ICU_CONFIG" >&5
+$as_echo "$ac_ct_ICU_CONFIG" >&6; }
 else
 else
-       pkg_failed=untried
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 fi
 
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
+  if test "x$ac_ct_ICU_CONFIG" = x; then
+    ICU_CONFIG="no"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    ICU_CONFIG=$ac_ct_ICU_CONFIG
+  fi
 else
 else
-        _pkg_short_errors_supported=no
+  ICU_CONFIG="$ac_cv_prog_ICU_CONFIG"
 fi
 fi
-        if test $_pkg_short_errors_supported = yes; then
-               ICU_LE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "icu-le icu-uc"`
-        else
-               ICU_LE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "icu-le icu-uc"`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$ICU_LE_PKG_ERRORS" >&5
 
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                have_icu_le=false
-elif test $pkg_failed = untried; then
-       have_icu_le=false
-else
-       ICU_LE_CFLAGS=$pkg_cv_ICU_LE_CFLAGS
-       ICU_LE_LIBS=$pkg_cv_ICU_LE_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU by using icu-config fallback" >&5
+$as_echo_n "checking for ICU by using icu-config fallback... " >&6; }
+               if test "$ICU_CONFIG" != "no" && "$ICU_CONFIG" --version >/dev/null; then
+                       have_icu=true
+                       # We don't use --cflags as this gives us a lot of things that we don't
+                       # necessarily want, like debugging and optimization flags
+                       # See man (1) icu-config for more info.
+                       ICU_CFLAGS=`$ICU_CONFIG --cppflags`
+                       ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
+
+
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 $as_echo "yes" >&6; }
-       have_icu_le=true
+               else
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               fi
+       fi
 fi
 fi
-if $have_icu_le; then
+if test "x$with_icu" = "xyes" -a "x$have_icu" != "xtrue"; then
+       as_fn_error $? "icu support requested but icu-uc not found" "$LINENO" 5
+fi
+if $have_icu; then
+       CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
 
 
-$as_echo "#define HAVE_ICU_LE 1" >>confdefs.h
+$as_echo "#define HAVE_ICU 1" >>confdefs.h
 
 fi
 
 fi
- if $have_icu_le; then
-  HAVE_ICU_LE_TRUE=
-  HAVE_ICU_LE_FALSE='#'
+ if $have_icu; then
+  HAVE_ICU_TRUE=
+  HAVE_ICU_FALSE='#'
 else
 else
-  HAVE_ICU_LE_TRUE='#'
-  HAVE_ICU_LE_FALSE=
+  HAVE_ICU_TRUE='#'
+  HAVE_ICU_FALSE=
 fi
 
 
 
 
 fi
 
 
 
 
+# Check whether --with-graphite2 was given.
+if test "${with_graphite2+set}" = set; then :
+  withval=$with_graphite2;
+else
+  with_graphite2=no
+fi
+
+have_graphite2=false
+if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GRAPHITE2" >&5
 $as_echo_n "checking for GRAPHITE2... " >&6; }
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GRAPHITE2" >&5
 $as_echo_n "checking for GRAPHITE2... " >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_graphite=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_graphite=false
+       :
 else
        GRAPHITE2_CFLAGS=$pkg_cv_GRAPHITE2_CFLAGS
        GRAPHITE2_LIBS=$pkg_cv_GRAPHITE2_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
        GRAPHITE2_CFLAGS=$pkg_cv_GRAPHITE2_CFLAGS
        GRAPHITE2_LIBS=$pkg_cv_GRAPHITE2_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-       have_graphite=true
+       have_graphite2=true
+fi
+fi
+if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
+       as_fn_error $? "graphite2 support requested but libgraphite2 not found" "$LINENO" 5
 fi
 fi
-if $have_graphite; then
+if $have_graphite2; then
 
 $as_echo "#define HAVE_GRAPHITE2 1" >>confdefs.h
 
 fi
 
 $as_echo "#define HAVE_GRAPHITE2 1" >>confdefs.h
 
 fi
- if $have_graphite; then
+ if $have_graphite2; then
   HAVE_GRAPHITE2_TRUE=
   HAVE_GRAPHITE2_FALSE='#'
 else
   HAVE_GRAPHITE2_TRUE=
   HAVE_GRAPHITE2_FALSE='#'
 else
 
 
 
 
 
 
+# Check whether --with-freetype was given.
+if test "${with_freetype+set}" = set; then :
+  withval=$with_freetype;
+else
+  with_freetype=auto
+fi
+
+have_freetype=false
+if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5
 $as_echo_n "checking for FREETYPE... " >&6; }
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5
 $as_echo_n "checking for FREETYPE... " >&6; }
@@ -17443,9 +18679,9 @@ fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-                have_freetype=false
+                :
 elif test $pkg_failed = untried; then
 elif test $pkg_failed = untried; then
-       have_freetype=false
+       :
 else
        FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS
        FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS
 else
        FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS
        FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS
@@ -17453,6 +18689,10 @@ else
 $as_echo "yes" >&6; }
        have_freetype=true
 fi
 $as_echo "yes" >&6; }
        have_freetype=true
 fi
+fi
+if test "x$with_freetype" = "xyes" -a "x$have_freetype" != "xtrue"; then
+       as_fn_error $? "FreeType support requested but libfreetype2 not found" "$LINENO" 5
+fi
 if $have_freetype; then
 
 $as_echo "#define HAVE_FREETYPE 1" >>confdefs.h
 if $have_freetype; then
 
 $as_echo "#define HAVE_FREETYPE 1" >>confdefs.h
 
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ScriptShapeOpenType in usp10" >&5
-$as_echo_n "checking for ScriptShapeOpenType in usp10... " >&6; }
-saved_LIBS=$LIBS
-LIBS="$LIBS -lusp10 -lgdi32"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
 
-        #define _WIN32_WINNT 0x0600
-        #include <windows.h>
-        #include <usp10.h>
+# Check whether --with-uniscribe was given.
+if test "${with_uniscribe+set}" = set; then :
+  withval=$with_uniscribe;
+else
+  with_uniscribe=no
+fi
 
 
-int
-main ()
-{
-ScriptShapeOpenType
-  ;
-  return 0;
-}
+have_uniscribe=false
+if test "x$with_uniscribe" = "xyes" -o "x$with_uniscribe" = "xauto"; then
+       for ac_header in usp10.h windows.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_uniscribe=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  have_uniscribe=false;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ have_uniscribe=true
+fi
+
+done
+
+fi
+if test "x$with_uniscribe" = "xyes" -a "x$have_uniscribe" != "xtrue"; then
+       as_fn_error $? "uniscribe support requested but not found" "$LINENO" 5
 fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$saved_LIBS
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
-       UNISCRIBE_LIBS="-lusp10 -lgdi32"
+       UNISCRIBE_LIBS="-lusp10 -lgdi32 -lrpcrt4"
 
 
 
 
 
 
 
 
 
 
 
 
-ac_fn_c_check_type "$LINENO" "CTFontRef" "ac_cv_type_CTFontRef" "#include <ApplicationServices/ApplicationServices.h>
+
+# Check whether --with-coretext was given.
+if test "${with_coretext+set}" = set; then :
+  withval=$with_coretext;
+else
+  with_coretext=no
+fi
+
+have_coretext=false
+if test "x$with_coretext" = "xyes" -o "x$with_coretext" = "xauto"; then
+       ac_fn_c_check_type "$LINENO" "CTFontRef" "ac_cv_type_CTFontRef" "#include <ApplicationServices/ApplicationServices.h>
+"
+if test "x$ac_cv_type_CTFontRef" = xyes; then :
+  have_coretext=true
+fi
+
+
+       if $have_coretext; then
+               CORETEXT_CFLAGS=
+               CORETEXT_LIBS="-framework ApplicationServices"
+
+
+       else
+               # On iOS CoreText and CoreGraphics are stand-alone frameworks
+               if test "x$have_coretext" != "xtrue"; then
+                       ac_fn_c_check_type "$LINENO" "CTFontRef" "ac_cv_type_CTFontRef" "#include <CoreText/CoreText.h>
 "
 if test "x$ac_cv_type_CTFontRef" = xyes; then :
   have_coretext=true
 "
 if test "x$ac_cv_type_CTFontRef" = xyes; then :
   have_coretext=true
-else
-  have_coretext=false
 fi
 
 fi
 
-if $have_coretext; then
-       CORETEXT_CFLAGS=
-       CORETEXT_LIBS="-framework ApplicationServices"
+               fi
+
+               if $have_coretext; then
+                       CORETEXT_CFLAGS=
+                       CORETEXT_LIBS="-framework CoreText -framework CoreGraphics"
 
 
 
 
+               fi
+       fi
+fi
+if test "x$with_coretext" = "xyes" -a "x$have_coretext" != "xtrue"; then
+       as_fn_error $? "CoreText support requested but libcoretext not found" "$LINENO" 5
+fi
+if $have_coretext; then
 
 $as_echo "#define HAVE_CORETEXT 1" >>confdefs.h
 
 
 $as_echo "#define HAVE_CORETEXT 1" >>confdefs.h
 
@@ -17715,7 +18985,7 @@ fi
 fi
 
 
 fi
 
 
-ac_config_files="$ac_config_files Makefile harfbuzz.pc src/Makefile src/hb-version.h src/hb-icu-le/Makefile src/hb-old/Makefile src/hb-ucdn/Makefile util/Makefile test/Makefile test/api/Makefile test/shaping/Makefile"
+ac_config_files="$ac_config_files Makefile src/Makefile src/hb-version.h src/hb-ucdn/Makefile util/Makefile test/Makefile test/api/Makefile test/shaping/Makefile docs/Makefile docs/reference/Makefile docs/reference/version.xml"
 
 
 cat >confcache <<\_ACEOF
 
 
 cat >confcache <<\_ACEOF
@@ -17827,6 +19097,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -17835,6 +19113,10 @@ else
   am__EXEEXT_FALSE=
 fi
 
   am__EXEEXT_FALSE=
 fi
 
+if test -z "${AUTOMAKE_OLDER_THAN_1_13_TRUE}" && test -z "${AUTOMAKE_OLDER_THAN_1_13_FALSE}"; then
+  as_fn_error $? "conditional \"AUTOMAKE_OLDER_THAN_1_13\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -17851,6 +19133,30 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
   as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_GCC_TRUE}" && test -z "${HAVE_GCC_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 if test -z "${HAVE_GCC_TRUE}" && test -z "${HAVE_GCC_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -17867,26 +19173,30 @@ if test -z "${HAVE_OT_TRUE}" && test -z "${HAVE_OT_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_OT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
   as_fn_error $? "conditional \"HAVE_OT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_HB_OLD_TRUE}" && test -z "${HAVE_HB_OLD_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_HB_OLD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_UCDN_TRUE}" && test -z "${HAVE_UCDN_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_UCDN\" was never defined.
+if test -z "${HAVE_FALLBACK_TRUE}" && test -z "${HAVE_FALLBACK_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_FALLBACK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GLIB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GLIB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_GTHREAD_TRUE}" && test -z "${HAVE_GTHREAD_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_GTHREAD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${HAVE_GOBJECT_TRUE}" && test -z "${HAVE_GOBJECT_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GOBJECT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_GOBJECT_TRUE}" && test -z "${HAVE_GOBJECT_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GOBJECT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_UCDN_TRUE}" && test -z "${HAVE_UCDN_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_UCDN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CAIRO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CAIRO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -17899,10 +19209,6 @@ if test -z "${HAVE_ICU_TRUE}" && test -z "${HAVE_ICU_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ICU\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
   as_fn_error $? "conditional \"HAVE_ICU\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_ICU_LE_TRUE}" && test -z "${HAVE_ICU_LE_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_ICU_LE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${HAVE_GRAPHITE2_TRUE}" && test -z "${HAVE_GRAPHITE2_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GRAPHITE2\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 if test -z "${HAVE_GRAPHITE2_TRUE}" && test -z "${HAVE_GRAPHITE2_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_GRAPHITE2\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -18217,16 +19523,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -18286,28 +19592,16 @@ else
   as_mkdir_p=false
 fi
 
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -18328,8 +19622,8 @@ 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="
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HarfBuzz $as_me 0.9.12, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by HarfBuzz $as_me 0.9.35, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -18395,11 +19689,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HarfBuzz config.status 0.9.12
-configured by $0, generated by GNU Autoconf 2.68,
+HarfBuzz config.status 0.9.35
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -18490,7 +19784,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -18579,8 +19873,10 @@ compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
 GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
 GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
 nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
 lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
 objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
 nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
 lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
 objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
@@ -18752,8 +20048,10 @@ CFLAGS \
 compiler \
 lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 compiler \
 lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
 nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
 lt_prog_compiler_pic \
 nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
 lt_prog_compiler_pic \
@@ -18820,7 +20118,7 @@ postdeps_CXX \
 compiler_lib_search_path_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
 compiler_lib_search_path_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -18861,7 +20159,7 @@ prelink_cmds_CXX \
 postlink_cmds_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
 postlink_cmds_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -18870,19 +20168,16 @@ postlink_cmds_CXX; do
 done
 
 ac_aux_dir='$ac_aux_dir'
 done
 
 ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
 
 
-# See if we are running on zsh, and set the options which allow our
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
 
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
    setopt NO_GLOB_SUBST
 fi
 
 
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'
 
     RM='$RM'
     ofile='$ofile'
 
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "harfbuzz.pc") CONFIG_FILES="$CONFIG_FILES harfbuzz.pc" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "src/hb-version.h") CONFIG_FILES="$CONFIG_FILES src/hb-version.h" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "src/hb-version.h") CONFIG_FILES="$CONFIG_FILES src/hb-version.h" ;;
-    "src/hb-icu-le/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-icu-le/Makefile" ;;
-    "src/hb-old/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-old/Makefile" ;;
     "src/hb-ucdn/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-ucdn/Makefile" ;;
     "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
     "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
     "test/api/Makefile") CONFIG_FILES="$CONFIG_FILES test/api/Makefile" ;;
     "test/shaping/Makefile") CONFIG_FILES="$CONFIG_FILES test/shaping/Makefile" ;;
     "src/hb-ucdn/Makefile") CONFIG_FILES="$CONFIG_FILES src/hb-ucdn/Makefile" ;;
     "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
     "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
     "test/api/Makefile") CONFIG_FILES="$CONFIG_FILES test/api/Makefile" ;;
     "test/shaping/Makefile") CONFIG_FILES="$CONFIG_FILES test/shaping/Makefile" ;;
+    "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+    "docs/reference/Makefile") CONFIG_FILES="$CONFIG_FILES docs/reference/Makefile" ;;
+    "docs/reference/version.xml") CONFIG_FILES="$CONFIG_FILES docs/reference/version.xml" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
@@ -19509,7 +20804,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
   case $ac_file$ac_mode in
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
 
   case $ac_file$ac_mode in
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -19522,7 +20817,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -19556,21 +20851,19 @@ $as_echo X"$mf" |
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
@@ -19605,13 +20898,13 @@ $as_echo X"$file" |
  ;;
     "libtool":C)
 
  ;;
     "libtool":C)
 
-    # See if we are running on zsh, and set the options which allow our
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
@@ -19619,7 +20912,7 @@ $as_echo X"$file" |
 #! $SHELL
 
 # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
 #! $SHELL
 
 # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Generated automatically by $as_me ($PACKAGE) $VERSION
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
@@ -19653,7 +20946,7 @@ $as_echo X"$file" |
 
 
 # The names of the tagged configurations supported by this script.
 
 
 # The names of the tagged configurations supported by this script.
-available_tags="CXX "
+available_tags='CXX '
 
 # ### BEGIN LIBTOOL CONFIG
 
 
 # ### BEGIN LIBTOOL CONFIG
 
@@ -19790,16 +21083,22 @@ global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
 # Transform the output of nm in a proper C declaration.
 global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 
 # Transform the output of nm in a proper C declaration.
 global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
 # Transform the output of nm in a C name address pair.
 global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
 # Transform the output of nm in a C name address pair.
 global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
 # Specify filename containing input files for \$NM.
 nm_file_list_spec=$lt_nm_file_list_spec
 
 # Specify filename containing input files for \$NM.
 nm_file_list_spec=$lt_nm_file_list_spec
 
-# The root where to search for dependent libraries,and in which our libraries should be installed.
+# The root where to search for dependent libraries,and where our libraries should be installed.
 lt_sysroot=$lt_sysroot
 
 # The name of the directory that contains temporary libtool files.
 lt_sysroot=$lt_sysroot
 
 # The name of the directory that contains temporary libtool files.
@@ -19986,13 +21285,13 @@ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct
 
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary and the resulting library dependency is
 # DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute
 
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute
 
@@ -20064,7 +21363,7 @@ _LT_EOF
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -20073,7 +21372,7 @@ _LT_EOF
   esac
 
 
   esac
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 
   # We use sed instead of cat because bash on DJGPP gets confused if
 
 
   # We use sed instead of cat because bash on DJGPP gets confused if
@@ -20083,165 +21382,6 @@ ltmain="$ac_aux_dir/ltmain.sh"
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  if test x"$xsi_shell" = xyes; then
-  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-func_dirname ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_basename ()$/,/^} # func_basename /c\
-func_basename ()\
-{\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-func_dirname_and_basename ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-func_stripname ()\
-{\
-\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-\    # positional parameters, so assign one to ordinary parameter first.\
-\    func_stripname_result=${3}\
-\    func_stripname_result=${func_stripname_result#"${1}"}\
-\    func_stripname_result=${func_stripname_result%"${2}"}\
-} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-func_split_long_opt ()\
-{\
-\    func_split_long_opt_name=${1%%=*}\
-\    func_split_long_opt_arg=${1#*=}\
-} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-func_split_short_opt ()\
-{\
-\    func_split_short_opt_arg=${1#??}\
-\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-func_lo2o ()\
-{\
-\    case ${1} in\
-\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-\      *)    func_lo2o_result=${1} ;;\
-\    esac\
-} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_xform ()$/,/^} # func_xform /c\
-func_xform ()\
-{\
-    func_xform_result=${1%.*}.lo\
-} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_arith ()$/,/^} # func_arith /c\
-func_arith ()\
-{\
-    func_arith_result=$(( $* ))\
-} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_len ()$/,/^} # func_len /c\
-func_len ()\
-{\
-    func_len_result=${#1}\
-} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  sed -e '/^func_append ()$/,/^} # func_append /c\
-func_append ()\
-{\
-    eval "${1}+=\\${2}"\
-} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-func_append_quoted ()\
-{\
-\    func_quote_for_eval "${2}"\
-\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-fi
-
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -20328,13 +21468,13 @@ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct_CXX
 
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct_CXX
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary and the resulting library dependency is
 # DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute_CXX
 
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute_CXX
 
@@ -20455,13 +21595,16 @@ Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
-       Graphite2:              ${have_graphite}
+       Graphite2:              ${have_graphite2}
 
 
-Test / platform shapers (not normally needed):
+Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        CoreText:               ${have_coretext}
-       ICU Layout Engine:      ${have_icu_le}
-       Old HarfBuzz:           ${have_hb_old}
        Uniscribe:              ${have_uniscribe}
        Uniscribe:              ${have_uniscribe}
+
+Other features:
+       Documentation:          ${have_gtk_doc}
+       GObject bindings:       ${have_gobject}
+       Introspection:          ${have_introspection}
 " >&5
 $as_echo "$as_me:
 
 " >&5
 $as_echo "$as_me:
 
@@ -20479,11 +21622,14 @@ Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
-       Graphite2:              ${have_graphite}
+       Graphite2:              ${have_graphite2}
 
 
-Test / platform shapers (not normally needed):
+Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        CoreText:               ${have_coretext}
-       ICU Layout Engine:      ${have_icu_le}
-       Old HarfBuzz:           ${have_hb_old}
        Uniscribe:              ${have_uniscribe}
        Uniscribe:              ${have_uniscribe}
+
+Other features:
+       Documentation:          ${have_gtk_doc}
+       GObject bindings:       ${have_gobject}
+       Introspection:          ${have_introspection}
 " >&6;}
 " >&6;}
index 202bef9..b9e82d9 100644 (file)
@@ -1,18 +1,20 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [0.9.12],
+        [0.9.35],
         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
         [harfbuzz],
         [http://harfbuzz.org/])
 
 AC_CONFIG_MACRO_DIR([m4])
         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
         [harfbuzz],
         [http://harfbuzz.org/])
 
 AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_SRCDIR([harfbuzz.pc.in])
+AC_CONFIG_SRCDIR([src/harfbuzz.pc.in])
 AC_CONFIG_HEADERS([config.h])
 
 AC_CONFIG_HEADERS([config.h])
 
-AM_INIT_AUTOMAKE([1.11.1 gnits dist-bzip2 no-dist-gzip -Wall no-define])
+AM_INIT_AUTOMAKE([1.11.1 gnits tar-pax dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
+AM_CONDITIONAL(AUTOMAKE_OLDER_THAN_1_13, test $am__api_version = 1.11 -o $am__api_version = 1.12)
 AM_SILENT_RULES([yes])
 
 # Initialize libtool
 AM_SILENT_RULES([yes])
 
 # Initialize libtool
+m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 LT_PREREQ([2.2])
 LT_INIT([disable-static])
 
 LT_PREREQ([2.2])
 LT_INIT([disable-static])
 
@@ -21,6 +23,8 @@ AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_CXX
 PKG_PROG_PKG_CONFIG([0.20])
 AM_PROG_CC_C_O
 AC_PROG_CXX
 PKG_PROG_PKG_CONFIG([0.20])
+AM_MISSING_PROG([RAGEL], [ragel])
+AM_MISSING_PROG([GIT], [git])
 
 # Version
 m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
 
 # Version
 m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
@@ -51,15 +55,24 @@ m4_define([hb_libtool_current],
 HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
 AC_SUBST(HB_LIBTOOL_VERSION_INFO)
 
 HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
 AC_SUBST(HB_LIBTOOL_VERSION_INFO)
 
-dnl GOBJECT_INTROSPECTION_CHECK([0.9.0])
-dnl GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
+# Documentation
+have_gtk_doc=false
+m4_ifdef([GTK_DOC_CHECK], [
+GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
+       if test "x$enable_gtk_doc" = xyes; then
+               have_gtk_doc=true
+       fi
+], [
+       AM_CONDITIONAL([ENABLE_GTK_DOC], false)
+])
 
 # Functions and headers
 
 # Functions and headers
-AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap _setmode isatty)
-AC_CHECK_HEADERS(unistd.h sys/mman.h io.h)
+AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty)
+AC_CHECK_HEADERS(unistd.h sys/mman.h)
 
 # Compiler flags
 AC_CANONICAL_HOST
 
 # Compiler flags
 AC_CANONICAL_HOST
+AC_CHECK_ALIGNOF([struct{char;}])
 if test "x$GCC" = "xyes"; then
 
        # Make symbols link locally
 if test "x$GCC" = "xyes"; then
 
        # Make symbols link locally
@@ -82,8 +95,10 @@ if test "x$GCC" = "xyes"; then
 
        case "$host" in
                arm-*-*)
 
        case "$host" in
                arm-*-*)
-                       # Request byte alignment on arm
-                       CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+                       if test "x$ac_cv_alignof_struct_char__" != x1; then
+                               # Request byte alignment
+                               CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+                       fi
                ;;
        esac
 fi
                ;;
        esac
 fi
@@ -117,37 +132,43 @@ if $have_ot; then
 fi
 AM_CONDITIONAL(HAVE_OT, $have_ot)
 
 fi
 AM_CONDITIONAL(HAVE_OT, $have_ot)
 
-dnl ===========================================================================
-
-have_hb_old=true
-if $have_hb_old; then
-       AC_DEFINE(HAVE_HB_OLD, 1, [Have Old HarfBuzz backend])
+have_fallback=true
+if $have_fallback; then
+       AC_DEFINE(HAVE_FALLBACK, 1, [Have simple TrueType Layout backend])
 fi
 fi
-AM_CONDITIONAL(HAVE_HB_OLD, $have_hb_old)
+AM_CONDITIONAL(HAVE_FALLBACK, $have_fallback)
 
 dnl ===========================================================================
 
 
 dnl ===========================================================================
 
-have_ucdn=true
-if $have_ucdn; then
-       AC_DEFINE(HAVE_UCDN, 1, [Have UCDN Unicode functions])
+AC_ARG_WITH(glib,
+       [AS_HELP_STRING([--with-glib=@<:@yes/no/auto@:>@],
+                       [Use glib @<:@default=auto@:>@])],,
+       [with_glib=auto])
+have_glib=false
+if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
+       PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, have_glib=true, :)
+fi
+if test "x$with_glib" = "xyes" -a "x$have_glib" != "xtrue"; then
+       AC_MSG_ERROR([glib support requested but glib-2.0 not found])
 fi
 fi
-AM_CONDITIONAL(HAVE_UCDN, $have_ucdn)
-
-dnl ===========================================================================
-
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, have_glib=true, have_glib=false)
 if $have_glib; then
        AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library])
 fi
 AM_CONDITIONAL(HAVE_GLIB, $have_glib)
 
 if $have_glib; then
        AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library])
 fi
 AM_CONDITIONAL(HAVE_GLIB, $have_glib)
 
-PKG_CHECK_MODULES(GTHREAD, gthread-2.0, have_gthread=true, have_gthread=false)
-if $have_gthread; then
-       AC_DEFINE(HAVE_GTHREAD, 1, [Have gthread2 library])
-fi
-AM_CONDITIONAL(HAVE_GTHREAD, $have_gthread)
+dnl ===========================================================================
 
 
-PKG_CHECK_MODULES(GOBJECT, gobject-2.0 glib-2.0 >= 2.16, have_gobject=true, have_gobject=false)
+AC_ARG_WITH(gobject,
+       [AS_HELP_STRING([--with-gobject=@<:@yes/no/auto@:>@],
+                       [Use gobject @<:@default=auto@:>@])],,
+       [with_gobject=no])
+have_gobject=false
+if test "x$with_gobject" = "xyes" -o "x$with_gobject" = "xauto"; then
+       PKG_CHECK_MODULES(GOBJECT, gobject-2.0 glib-2.0, have_gobject=true, :)
+fi
+if test "x$with_gobject" = "xyes" -a "x$have_gobject" != "xtrue"; then
+       AC_MSG_ERROR([gobject support requested but gobject-2.0 / glib-2.0 not found])
+fi
 if $have_gobject; then
        AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library])
        GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
 if $have_gobject; then
        AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library])
        GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
@@ -155,15 +176,58 @@ if $have_gobject; then
 fi
 AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject)
 
 fi
 AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject)
 
+dnl ===========================================================================
+
+
+dnl ===========================================================================
+# Gobject-Introspection
+have_introspection=false
+m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
+       if $have_gobject; then
+               GOBJECT_INTROSPECTION_CHECK([1.34.0])
+               if test "x$found_introspection" = xyes; then
+                       have_introspection=true
+               fi
+       else
+               AM_CONDITIONAL([HAVE_INTROSPECTION], false)
+       fi
+], [
+       AM_CONDITIONAL([HAVE_INTROSPECTION], false)
+])
+
+dnl ===========================================================================
+
+have_ucdn=true
+if $have_glib; then
+       have_ucdn=false
+fi
+if $have_ucdn; then
+       AC_DEFINE(HAVE_UCDN, 1, [Have UCDN Unicode functions])
+fi
+AM_CONDITIONAL(HAVE_UCDN, $have_ucdn)
+
 dnl ==========================================================================
 
 dnl ==========================================================================
 
-PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, have_cairo=false)
+AC_ARG_WITH(cairo,
+       [AS_HELP_STRING([--with-cairo=@<:@yes/no/auto@:>@],
+                       [Use cairo @<:@default=auto@:>@])],,
+       [with_cairo=auto])
+have_cairo=false
+if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
+       PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, :)
+fi
+if test "x$with_cairo" = "xyes" -a "x$have_cairo" != "xtrue"; then
+       AC_MSG_ERROR([cairo support requested but not found])
+fi
 if $have_cairo; then
        AC_DEFINE(HAVE_CAIRO, 1, [Have cairo graphics library])
 fi
 AM_CONDITIONAL(HAVE_CAIRO, $have_cairo)
 
 if $have_cairo; then
        AC_DEFINE(HAVE_CAIRO, 1, [Have cairo graphics library])
 fi
 AM_CONDITIONAL(HAVE_CAIRO, $have_cairo)
 
-PKG_CHECK_MODULES(CAIRO_FT, cairo-ft, have_cairo_ft=true, have_cairo_ft=false)
+have_cairo_ft=false
+if $have_cairo; then
+       PKG_CHECK_MODULES(CAIRO_FT, cairo-ft, have_cairo_ft=true, :)
+fi
 if $have_cairo_ft; then
        AC_DEFINE(HAVE_CAIRO_FT, 1, [Have cairo-ft support in cairo graphics library])
 fi
 if $have_cairo_ft; then
        AC_DEFINE(HAVE_CAIRO_FT, 1, [Have cairo-ft support in cairo graphics library])
 fi
@@ -171,7 +235,36 @@ AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft)
 
 dnl ==========================================================================
 
 
 dnl ==========================================================================
 
-PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, have_icu=false)
+AC_ARG_WITH(icu,
+       [AS_HELP_STRING([--with-icu=@<:@yes/no/auto@:>@],
+                       [Use ICU @<:@default=auto@:>@])],,
+       [with_icu=auto])
+have_icu=false
+if test "x$with_icu" = "xyes" -o "x$with_icu" = "xauto"; then
+       PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, :)
+
+       dnl Fallback to icu-config if ICU pkg-config files could not be found
+       if test "$have_icu" != "true"; then
+               AC_CHECK_TOOL(ICU_CONFIG, icu-config, no)
+               AC_MSG_CHECKING([for ICU by using icu-config fallback])
+               if test "$ICU_CONFIG" != "no" && "$ICU_CONFIG" --version >/dev/null; then
+                       have_icu=true
+                       # We don't use --cflags as this gives us a lot of things that we don't
+                       # necessarily want, like debugging and optimization flags
+                       # See man (1) icu-config for more info.
+                       ICU_CFLAGS=`$ICU_CONFIG --cppflags`
+                       ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
+                       AC_SUBST(ICU_CFLAGS)
+                       AC_SUBST(ICU_LIBS)
+                       AC_MSG_RESULT([yes])
+               else
+                       AC_MSG_RESULT([no])
+               fi
+       fi
+fi
+if test "x$with_icu" = "xyes" -a "x$have_icu" != "xtrue"; then
+       AC_MSG_ERROR([icu support requested but icu-uc not found])
+fi
 if $have_icu; then
        CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
        AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
 if $have_icu; then
        CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
        AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
@@ -180,23 +273,35 @@ AM_CONDITIONAL(HAVE_ICU, $have_icu)
 
 dnl ==========================================================================
 
 
 dnl ==========================================================================
 
-PKG_CHECK_MODULES(ICU_LE, icu-le icu-uc, have_icu_le=true, have_icu_le=false)
-if $have_icu_le; then
-       AC_DEFINE(HAVE_ICU_LE, 1, [Have ICU Layout Engine library])
+AC_ARG_WITH(graphite2,
+       [AS_HELP_STRING([--with-graphite2=@<:@yes/no/auto@:>@],
+                       [Use the graphite2 library @<:@default=no@:>@])],,
+       [with_graphite2=no])
+have_graphite2=false
+if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
+       PKG_CHECK_MODULES(GRAPHITE2, graphite2, have_graphite2=true, :)
 fi
 fi
-AM_CONDITIONAL(HAVE_ICU_LE, $have_icu_le)
-
-dnl ==========================================================================
-
-PKG_CHECK_MODULES(GRAPHITE2, graphite2, have_graphite=true, have_graphite=false)
-if $have_graphite; then
-    AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite library])
+if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
+       AC_MSG_ERROR([graphite2 support requested but libgraphite2 not found])
+fi
+if $have_graphite2; then
+    AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite2 library])
 fi
 fi
-AM_CONDITIONAL(HAVE_GRAPHITE2, $have_graphite)
+AM_CONDITIONAL(HAVE_GRAPHITE2, $have_graphite2)
 
 dnl ==========================================================================
 
 
 dnl ==========================================================================
 
-PKG_CHECK_MODULES(FREETYPE, freetype2 >= 2.3.8, have_freetype=true, have_freetype=false)
+AC_ARG_WITH(freetype,
+       [AS_HELP_STRING([--with-freetype=@<:@yes/no/auto@:>@],
+                       [Use the FreeType library @<:@default=auto@:>@])],,
+       [with_freetype=auto])
+have_freetype=false
+if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
+       PKG_CHECK_MODULES(FREETYPE, freetype2 >= 2.3.8, have_freetype=true, :)
+fi
+if test "x$with_freetype" = "xyes" -a "x$have_freetype" != "xtrue"; then
+       AC_MSG_ERROR([FreeType support requested but libfreetype2 not found])
+fi
 if $have_freetype; then
        AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
        _save_libs="$LIBS"
 if $have_freetype; then
        AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
        _save_libs="$LIBS"
@@ -211,36 +316,59 @@ AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
 
 dnl ===========================================================================
 
 
 dnl ===========================================================================
 
-AC_MSG_CHECKING([for ScriptShapeOpenType in usp10])
-saved_LIBS=$LIBS
-LIBS="$LIBS -lusp10 -lgdi32"
-AC_LINK_IFELSE([AC_LANG_PROGRAM(
-       [[
-        #define _WIN32_WINNT 0x0600
-        #include <windows.h>
-        #include <usp10.h>
-        ]],
-       ScriptShapeOpenType)],
-       [have_uniscribe=true; AC_MSG_RESULT(yes)],
-       [have_uniscribe=false;AC_MSG_RESULT(no)])
-LIBS=$saved_LIBS
+AC_ARG_WITH(uniscribe,
+       [AS_HELP_STRING([--with-uniscribe=@<:@yes/no/auto@:>@],
+                       [Use the Uniscribe library @<:@default=no@:>@])],,
+       [with_uniscribe=no])
+have_uniscribe=false
+if test "x$with_uniscribe" = "xyes" -o "x$with_uniscribe" = "xauto"; then
+       AC_CHECK_HEADERS(usp10.h windows.h, have_uniscribe=true)
+fi
+if test "x$with_uniscribe" = "xyes" -a "x$have_uniscribe" != "xtrue"; then
+       AC_MSG_ERROR([uniscribe support requested but not found])
+fi
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
 if $have_uniscribe; then
        UNISCRIBE_CFLAGS=
-       UNISCRIBE_LIBS="-lusp10 -lgdi32"
+       UNISCRIBE_LIBS="-lusp10 -lgdi32 -lrpcrt4"
        AC_SUBST(UNISCRIBE_CFLAGS)
        AC_SUBST(UNISCRIBE_LIBS)
        AC_SUBST(UNISCRIBE_CFLAGS)
        AC_SUBST(UNISCRIBE_LIBS)
-       AC_DEFINE(HAVE_UNISCRIBE, 1, [Have Uniscribe backend])
+       AC_DEFINE(HAVE_UNISCRIBE, 1, [Have Uniscribe library])
 fi
 AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
 
 dnl ===========================================================================
 
 fi
 AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
 
 dnl ===========================================================================
 
-AC_CHECK_TYPE(CTFontRef, have_coretext=true, have_coretext=false, [#include <ApplicationServices/ApplicationServices.h>])
+AC_ARG_WITH(coretext,
+       [AS_HELP_STRING([--with-coretext=@<:@yes/no/auto@:>@],
+                       [Use CoreText @<:@default=no@:>@])],,
+       [with_coretext=no])
+have_coretext=false
+if test "x$with_coretext" = "xyes" -o "x$with_coretext" = "xauto"; then
+       AC_CHECK_TYPE(CTFontRef, have_coretext=true,, [#include <ApplicationServices/ApplicationServices.h>])
+
+       if $have_coretext; then
+               CORETEXT_CFLAGS=
+               CORETEXT_LIBS="-framework ApplicationServices"
+               AC_SUBST(CORETEXT_CFLAGS)
+               AC_SUBST(CORETEXT_LIBS)
+       else
+               # On iOS CoreText and CoreGraphics are stand-alone frameworks
+               if test "x$have_coretext" != "xtrue"; then
+                       AC_CHECK_TYPE(CTFontRef, have_coretext=true,, [#include <CoreText/CoreText.h>])
+               fi
+
+               if $have_coretext; then
+                       CORETEXT_CFLAGS=
+                       CORETEXT_LIBS="-framework CoreText -framework CoreGraphics"
+                       AC_SUBST(CORETEXT_CFLAGS)
+                       AC_SUBST(CORETEXT_LIBS)
+               fi
+       fi
+fi
+if test "x$with_coretext" = "xyes" -a "x$have_coretext" != "xtrue"; then
+       AC_MSG_ERROR([CoreText support requested but libcoretext not found])
+fi
 if $have_coretext; then
 if $have_coretext; then
-       CORETEXT_CFLAGS=
-       CORETEXT_LIBS="-framework ApplicationServices"
-       AC_SUBST(CORETEXT_CFLAGS)
-       AC_SUBST(CORETEXT_LIBS)
        AC_DEFINE(HAVE_CORETEXT, 1, [Have Core Text backend])
 fi
 AM_CONDITIONAL(HAVE_CORETEXT, $have_coretext)
        AC_DEFINE(HAVE_CORETEXT, 1, [Have Core Text backend])
 fi
 AM_CONDITIONAL(HAVE_CORETEXT, $have_coretext)
@@ -288,16 +416,16 @@ dnl ===========================================================================
 
 AC_CONFIG_FILES([
 Makefile
 
 AC_CONFIG_FILES([
 Makefile
-harfbuzz.pc
 src/Makefile
 src/hb-version.h
 src/Makefile
 src/hb-version.h
-src/hb-icu-le/Makefile
-src/hb-old/Makefile
 src/hb-ucdn/Makefile
 util/Makefile
 test/Makefile
 test/api/Makefile
 test/shaping/Makefile
 src/hb-ucdn/Makefile
 util/Makefile
 test/Makefile
 test/api/Makefile
 test/shaping/Makefile
+docs/Makefile
+docs/reference/Makefile
+docs/reference/version.xml
 ])
 
 AC_OUTPUT
 ])
 
 AC_OUTPUT
@@ -318,11 +446,14 @@ Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
        Cairo:                  ${have_cairo}
 
 Additional shapers (the more the better):
-       Graphite2:              ${have_graphite}
+       Graphite2:              ${have_graphite2}
 
 
-Test / platform shapers (not normally needed):
+Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        CoreText:               ${have_coretext}
-       ICU Layout Engine:      ${have_icu_le}
-       Old HarfBuzz:           ${have_hb_old}
        Uniscribe:              ${have_uniscribe}
        Uniscribe:              ${have_uniscribe}
+
+Other features:
+       Documentation:          ${have_gtk_doc}
+       GObject bindings:       ${have_gobject}
+       Introspection:          ${have_introspection}
 ])
 ])
diff --git a/depcomp b/depcomp
index bd0ac08..4ebd5b3 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2011-12-04.11; # UTC
+scriptversion=2013-05-30.07; # UTC
 
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
-# 2011 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -28,9 +27,9 @@ scriptversion=2011-12-04.11; # UTC
 
 case $1 in
   '')
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -40,8 +39,8 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
   tmpdepfile  Temporary file to use when outputting dependencies.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
   tmpdepfile  Temporary file to use when outputting dependencies.
@@ -57,6 +56,66 @@ EOF
     ;;
 esac
 
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='  '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -69,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
 
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -80,26 +142,32 @@ if test "$depmode" = hp; then
 fi
 
 if test "$depmode" = dashXmstdout; then
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
 fi
 
 cygpath_u="cygpath -u -f -"
 if test "$depmode" = msvcmsys; then
 fi
 
 cygpath_u="cygpath -u -f -"
 if test "$depmode" = msvcmsys; then
-   # This is just like msvisualcpp but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvisualcpp
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
 fi
 
 if test "$depmode" = msvc7msys; then
 fi
 
 if test "$depmode" = msvc7msys; then
-   # This is just like msvc7 but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvc7
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
 fi
 
 case "$depmode" in
@@ -122,8 +190,7 @@ gcc3)
   done
   "$@"
   stat=$?
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -131,13 +198,17 @@ gcc3)
   ;;
 
 gcc)
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -145,33 +216,31 @@ gcc)
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
 ## well.  hp depmode also adds that space, but also prefixes the VPATH
 ## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
 ## that the space means something, we add a space to the output as
 ## well.  hp depmode also adds that space, but also prefixes the VPATH
 ## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-      | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
   rm -f "$tmpdepfile"
   ;;
 
@@ -189,8 +258,7 @@ sgi)
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -198,43 +266,41 @@ sgi)
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
     echo >> "$depfile"
-
     # The second pass generates a dummy entry for each header file.
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> "$depfile"
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
 
   fi
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.u
     tmpdepfile2=$base.u
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.u
     tmpdepfile2=$base.u
@@ -247,9 +313,7 @@ aix)
     "$@" -M
   fi
   stat=$?
     "$@" -M
   fi
   stat=$?
-
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
@@ -258,44 +322,100 @@ aix)
   do
     test -f "$tmpdepfile" && break
   done
   do
     test -f "$tmpdepfile" && break
   done
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
   fi
   fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
 
 
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -307,8 +427,8 @@ icc)
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
   rm -f "$tmpdepfile"
   ;;
 
@@ -319,9 +439,8 @@ hp2)
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -332,8 +451,7 @@ hp2)
     "$@" +Maked
   fi
   stat=$?
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -343,77 +461,61 @@ hp2)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
     sed -ne '2,${
-              s/^ *//
-              s/ \\*$//
-              s/$/:/
-              p
-            }' "$tmpdepfile" >> "$depfile"
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
   else
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
 
 msvc7)
   if test "$libtool" = yes; then
 
 msvc7)
   if test "$libtool" = yes; then
@@ -424,8 +526,7 @@ msvc7)
   "$@" $showIncludes > "$tmpdepfile"
   stat=$?
   grep -v '^Note: including file: ' "$tmpdepfile"
   "$@" $showIncludes > "$tmpdepfile"
   stat=$?
   grep -v '^Note: including file: ' "$tmpdepfile"
-  if test "$stat" = 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -443,14 +544,15 @@ msvc7)
   p
 }' | $cygpath_u | sort -u | sed -n '
 s/ /\\ /g
   p
 }' | $cygpath_u | sort -u | sed -n '
 s/ /\\ /g
-s/\(.*\)/      \1 \\/p
+s/\(.*\)/'"$tab"'\1 \\/p
 s/.\(.*\) \\/\1:/
 H
 $ {
 s/.\(.*\) \\/\1:/
 H
 $ {
-  s/.*/        /
+  s/.*/'"$tab"'/
   G
   p
 }' >> "$depfile"
   G
   p
 }' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
   rm -f "$tmpdepfile"
   ;;
 
   rm -f "$tmpdepfile"
   ;;
 
@@ -478,7 +580,7 @@ dashmstdout)
     shift
   fi
 
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
   IFS=" "
   for arg
   do
@@ -498,18 +600,18 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
   rm -f "$tmpdepfile"
   ;;
 
@@ -562,11 +664,12 @@ makedepend)
   # makedepend may prepend the VPATH from the source file name to the object.
   # No need to regex-escape $object, excess matching of '.' is harmless.
   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
   # makedepend may prepend the VPATH from the source file name to the object.
   # No need to regex-escape $object, excess matching of '.' is harmless.
   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -583,7 +686,7 @@ cpp)
     shift
   fi
 
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
   IFS=" "
   for arg
   do
@@ -602,10 +705,10 @@ cpp)
     esac
   done
 
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -637,23 +740,23 @@ msvisualcpp)
       shift
       ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
       shift
       ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-       set fnord "$@"
-       shift
-       shift
-       ;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
     *)
-       set fnord "$@" "$arg"
-       shift
-       shift
-       ;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
   "$@" -E 2>/dev/null |
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
     esac
   done
   "$@" -E 2>/dev/null |
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
-  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644 (file)
index 0000000..f3ddc22
--- /dev/null
@@ -0,0 +1 @@
+SUBDIRS = reference
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644 (file)
index 0000000..615c464
--- /dev/null
@@ -0,0 +1,655 @@
+# Makefile.in generated by automake 1.14 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
+CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
+CORETEXT_LIBS = @CORETEXT_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
+GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
+HB_VERSION = @HB_VERSION@
+HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
+HB_VERSION_MICRO = @HB_VERSION_MICRO@
+HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
+ICU_CFLAGS = @ICU_CFLAGS@
+ICU_CONFIG = @ICU_CONFIG@
+ICU_LIBS = @ICU_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
+UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = reference
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits docs/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
new file mode 100644 (file)
index 0000000..f7a4ad6
--- /dev/null
@@ -0,0 +1,111 @@
+# Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=harfbuzz
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+#DOC_MODULE_VERSION=$(HB_VERSION_MAJOR)
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
+
+# Directories containing the source code.
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk
+DOC_SOURCE_DIR=$(top_srcdir)/src $(top_builddir)/src
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--rebuild-types --deprecated-guards="HB_DISABLE_DEPRECATED"
+
+# Header files or dirs to ignore when scanning. Use base file/dir names
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
+IGNORE_HFILES=`cd $(top_srcdir)/src; find . -path './hb-*/*.h' | sed 's@^.*/@@'`
+if HAVE_GOBJECT
+else
+IGNORE_HFILES+=hb-gobject.h hb-gobject-enums.h hb-gobject-structs.h
+endif
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
+MKDB_OPTIONS=--source-suffixes=h,cc --xml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/src/hb.h $(top_srcdir)/src/hb-*.h
+CFILE_GLOB=$(top_srcdir)/src/hb-*.cc
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+EXTRA_HFILES=$(top_builddir)/src/hb-version.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files= version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS=
+GTKDOC_LIBS=$(top_builddir)/src/libharfbuzz.la
+if HAVE_GOBJECT
+GTKDOC_LIBS+=$(top_builddir)/src/libharfbuzz-gobject.la
+endif
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += version.xml.in
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want 'make check' to test you doc status
+# and run some sanity checks
+if ENABLE_GTK_DOC
+TESTS_ENVIRONMENT = cd $(srcdir) && \
+  DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
+  SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
+#TESTS = $(GTKDOC_CHECK)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/docs/reference/Makefile.in b/docs/reference/Makefile.in
new file mode 100644 (file)
index 0000000..d090c74
--- /dev/null
@@ -0,0 +1,852 @@
+# Makefile.in generated by automake 1.14 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Process this file with automake to produce Makefile.in
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GOBJECT_FALSE@am__append_1 = hb-gobject.h hb-gobject-enums.h hb-gobject-structs.h
+@HAVE_GOBJECT_TRUE@am__append_2 = $(top_builddir)/src/libharfbuzz-gobject.la
+DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
+       $(srcdir)/Makefile.am $(srcdir)/version.xml.in
+subdir = docs/reference
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = version.xml
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
+CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
+CORETEXT_LIBS = @CORETEXT_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
+GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
+HB_VERSION = @HB_VERSION@
+HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
+HB_VERSION_MICRO = @HB_VERSION_MICRO@
+HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
+ICU_CFLAGS = @ICU_CFLAGS@
+ICU_CONFIG = @ICU_CONFIG@
+ICU_LIBS = @ICU_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
+UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = harfbuzz
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+#DOC_MODULE_VERSION=$(HB_VERSION_MAJOR)
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
+
+# Directories containing the source code.
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk
+DOC_SOURCE_DIR = $(top_srcdir)/src $(top_builddir)/src
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS = 
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS = --rebuild-types --deprecated-guards="HB_DISABLE_DEPRECATED"
+
+# Header files or dirs to ignore when scanning. Use base file/dir names
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
+IGNORE_HFILES = `cd $(top_srcdir)/src; find . -path './hb-*/*.h' | sed \
+       's@^.*/@@'` $(am__append_1)
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
+MKDB_OPTIONS = --source-suffixes=h,cc --xml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS = 
+
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS = 
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = 
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = $(top_srcdir)/src/hb.h $(top_srcdir)/src/hb-*.h
+CFILE_GLOB = $(top_srcdir)/src/hb-*.cc
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+EXTRA_HFILES = $(top_builddir)/src/hb-version.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES = 
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files = 
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS = 
+GTKDOC_LIBS = $(top_builddir)/src/libharfbuzz.la $(am__append_2)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = 
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+       $(content_files)                \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in
+DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
+       html-build.stamp pdf-build.stamp \
+       sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+REPORT_FILES = \
+       $(DOC_MODULE)-undocumented.txt \
+       $(DOC_MODULE)-undeclared.txt \
+       $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test
+@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = 
+@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = 
+@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-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";
+
+#### 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";
+
+#### 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";
+
+#### 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";
+
+#### 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";
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want 'make check' to test you doc status
+# and run some sanity checks
+@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) && \
+@ENABLE_GTK_DOC_TRUE@  DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
+@ENABLE_GTK_DOC_TRUE@  SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits docs/reference/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits docs/reference/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+$(top_srcdir)/gtk-doc.make:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+check-am: all-am
+check: check-am
+@ENABLE_GTK_DOC_FALSE@all-local:
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+       clean-libtool clean-local cscopelist-am ctags-am dist-hook \
+       distclean distclean-generic distclean-libtool distclean-local \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-data-local \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       maintainer-clean-local mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+       uninstall-am uninstall-local
+
+
+gtkdoc-check.test: Makefile
+       $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
+               echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
+               chmod +x $@
+
+all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+.PHONY: all-gtk-doc
+
+@ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+setup-build.stamp:
+       -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+           files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+           if test "x$$files" != "x" ; then \
+               for file in $$files ; do \
+                   destdir=`dirname $(abs_builddir)/$$file`; \
+                   test -d "$$destdir" || mkdir -p "$$destdir"; \
+                   test -f $(abs_srcdir)/$$file && \
+                       cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+               done; \
+           fi; \
+       fi
+       $(AM_V_at)touch setup-build.stamp
+
+scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+       $(GTK_DOC_V_SCAN)_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 \
+           scanobj_options=""; \
+           gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+           if test "$(?)" = "0"; then \
+               if test "x$(V)" = "x1"; then \
+                   scanobj_options="--verbose"; \
+               fi; \
+           fi; \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+           gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+       else \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       $(AM_V_at)touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+       @true
+
+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='' ; \
+       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
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       $(GTK_DOC_V_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 \
+           mkhtml_options="$$mkhtml_options --verbose"; \
+         fi; \
+       fi; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+       fi; \
+       cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       -@test "x$(HTML_IMAGES)" = "x" || \
+       for file in $(HTML_IMAGES) ; do \
+         if test -f $(abs_srcdir)/$$file ; then \
+           cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+         fi; \
+         if test -f $(abs_builddir)/$$file ; then \
+           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
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       $(GTK_DOC_V_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 \
+           mkpdf_options="$$mkpdf_options --verbose"; \
+         fi; \
+       fi; \
+       if test "x$(HTML_IMAGES)" != "x"; then \
+         for img in $(HTML_IMAGES); do \
+           part=`dirname $$img`; \
+           echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+           if test $$? != 0; then \
+             mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+           fi; \
+         done; \
+       fi; \
+       gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+       $(AM_V_at)touch pdf-build.stamp
+
+##############
+
+clean-local:
+       @rm -f *~ *.bak
+       @rm -rf .libs
+       @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
+         rm -f $(DOC_MODULE).types; \
+       fi
+
+distclean-local:
+       @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+           $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+       @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+           rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+       fi
+
+maintainer-clean-local:
+       @rm -rf xml html
+
+install-data-local:
+       @installfiles=`echo $(builddir)/html/*`; \
+       if test "$$installfiles" = '$(builddir)/html/*'; \
+       then echo 1>&2 'Nothing to install' ; \
+       else \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+         else \
+           installdir="$(DESTDIR)$(TARGET_DIR)"; \
+         fi; \
+         $(mkinstalldirs) $${installdir} ; \
+         for i in $$installfiles; do \
+           echo ' $(INSTALL_DATA) '$$i ; \
+           $(INSTALL_DATA) $$i $${installdir}; \
+         done; \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+         fi; \
+         $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+       fi
+
+uninstall-local:
+       @if test -n "$(DOC_MODULE_VERSION)"; then \
+         installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+       else \
+         installdir="$(DESTDIR)$(TARGET_DIR)"; \
+       fi; \
+       rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
+@HAVE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@HAVE_GTK_DOC_FALSE@   @echo "*** gtk-doc is needed to run 'make dist'.         ***"
+@HAVE_GTK_DOC_FALSE@   @echo "*** gtk-doc was not found when 'configure' ran.   ***"
+@HAVE_GTK_DOC_FALSE@   @echo "*** please install gtk-doc and rerun 'configure'. ***"
+@HAVE_GTK_DOC_FALSE@   @false
+
+dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+       @mkdir $(distdir)/html
+       @cp ./html/* $(distdir)/html
+       @-cp ./$(DOC_MODULE).pdf $(distdir)/
+       @-cp ./$(DOC_MODULE).types $(distdir)/
+       @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+       @cd $(distdir) && rm -f $(DISTCLEANFILES)
+       @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+#TESTS = $(GTKDOC_CHECK)
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/reference/harfbuzz-docs.xml b/docs/reference/harfbuzz-docs.xml
new file mode 100644 (file)
index 0000000..2731fab
--- /dev/null
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+  <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
+  <!ENTITY version SYSTEM "version.xml">
+]>
+<book id="index">
+  <bookinfo>
+    <title>HarfBuzz Reference Manual</title>
+    <releaseinfo>
+      for HarfBuzz &version;.
+      <!--The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://[SERVER]/libharfbuzz/index.html">http://[SERVER]/libharfbuzz/</ulink>.-->
+    </releaseinfo>
+  </bookinfo>
+
+  <chapter>
+    <title>[Insert title here]</title>
+    <xi:include href="xml/hb.xml"/>
+    <xi:include href="xml/hb-common.xml"/>
+    <xi:include href="xml/hb-unicode.xml"/>
+    <xi:include href="xml/hb-buffer.xml"/>
+    <xi:include href="xml/hb-blob.xml"/>
+    <xi:include href="xml/hb-face.xml"/>
+    <xi:include href="xml/hb-font.xml"/>
+    <xi:include href="xml/hb-shape.xml"/>
+
+    <xi:include href="xml/hb-version.xml"/>
+    <xi:include href="xml/hb-deprecated.xml"/>
+
+    <xi:include href="xml/hb-set.xml"/>
+
+    <xi:include href="xml/hb-ot.xml"/>
+    <xi:include href="xml/hb-ot-layout.xml"/>
+    <xi:include href="xml/hb-ot-tag.xml"/>
+
+    <xi:include href="xml/hb-shape-plan.xml"/>
+
+    <xi:include href="xml/hb-glib.xml"/>
+    <xi:include href="xml/hb-icu.xml"/>
+
+    <xi:include href="xml/hb-ft.xml"/>
+
+    <xi:include href="xml/hb-graphite2.xml"/>
+    <xi:include href="xml/hb-uniscribe.xml"/>
+    <xi:include href="xml/hb-coretext.xml"/>
+
+    <xi:include href="xml/hb-gobject.xml"/>
+
+  </chapter>
+  <chapter id="object-tree">
+    <title>Object Hierarchy</title>
+     <xi:include href="xml/tree_index.sgml"/>
+  </chapter>
+  <index id="api-index-full">
+    <title>API Index</title>
+    <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+  </index>
+  <index id="deprecated-api-index" role="deprecated">
+    <title>Index of deprecated API</title>
+    <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+  </index>
+
+  <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
diff --git a/docs/reference/harfbuzz-overrides.txt b/docs/reference/harfbuzz-overrides.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/reference/harfbuzz-sections.txt b/docs/reference/harfbuzz-sections.txt
new file mode 100644 (file)
index 0000000..b112047
--- /dev/null
@@ -0,0 +1,501 @@
+<SECTION>
+<FILE>hb</FILE>
+<SUBSECTION Private>
+HB_H_IN
+</SECTION>
+
+<SECTION>
+<FILE>hb-blob</FILE>
+hb_blob_create
+hb_blob_create_sub_blob
+hb_blob_destroy
+hb_blob_get_data
+hb_blob_get_data_writable
+hb_blob_get_empty
+hb_blob_get_length
+hb_blob_get_user_data
+hb_blob_is_immutable
+hb_blob_make_immutable
+hb_blob_reference
+hb_blob_set_user_data
+hb_blob_t
+hb_memory_mode_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-buffer</FILE>
+HB_SEGMENT_PROPERTIES_DEFAULT
+hb_buffer_add
+hb_buffer_add_utf16
+hb_buffer_add_utf32
+hb_buffer_add_utf8
+hb_buffer_add_codepoints
+hb_buffer_allocation_successful
+hb_buffer_clear_contents
+hb_buffer_content_type_t
+hb_buffer_create
+hb_buffer_deserialize_glyphs
+hb_buffer_destroy
+hb_buffer_flags_t
+hb_buffer_get_content_type
+hb_buffer_get_direction
+hb_buffer_get_empty
+hb_buffer_get_flags
+hb_buffer_get_glyph_infos
+hb_buffer_get_glyph_positions
+hb_buffer_get_language
+hb_buffer_get_length
+hb_buffer_get_replacement_codepoint
+hb_buffer_get_script
+hb_buffer_get_segment_properties
+hb_buffer_get_unicode_funcs
+hb_buffer_get_user_data
+hb_buffer_guess_segment_properties
+hb_buffer_normalize_glyphs
+hb_buffer_pre_allocate
+hb_buffer_reference
+hb_buffer_reset
+hb_buffer_reverse
+hb_buffer_reverse_clusters
+hb_buffer_serialize_flags_t
+hb_buffer_serialize_format_from_string
+hb_buffer_serialize_format_t
+hb_buffer_serialize_format_to_string
+hb_buffer_serialize_glyphs
+hb_buffer_serialize_list_formats
+hb_buffer_set_content_type
+hb_buffer_set_direction
+hb_buffer_set_flags
+hb_buffer_set_language
+hb_buffer_set_length
+hb_buffer_set_replacement_codepoint
+hb_buffer_set_script
+hb_buffer_set_segment_properties
+hb_buffer_set_unicode_funcs
+hb_buffer_set_user_data
+hb_buffer_t
+hb_glyph_info_t
+hb_glyph_position_t
+hb_segment_properties_equal
+hb_segment_properties_hash
+hb_segment_properties_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-common</FILE>
+HB_DIRECTION_REVERSE
+HB_LANGUAGE_INVALID
+HB_TAG
+HB_TAG_NONE
+HB_TAG_MAX
+HB_UNTAG
+hb_bool_t
+hb_codepoint_t
+hb_destroy_func_t
+hb_direction_from_string
+hb_direction_t
+hb_direction_to_string
+hb_language_from_string
+hb_language_get_default
+hb_language_t
+hb_language_to_string
+hb_mask_t
+hb_position_t
+hb_script_from_iso15924_tag
+hb_script_from_string
+hb_script_get_horizontal_direction
+hb_script_t
+hb_script_to_iso15924_tag
+hb_tag_from_string
+hb_tag_t
+hb_tag_to_string
+hb_user_data_key_t
+hb_var_int_t
+HB_DIRECTION_IS_BACKWARD
+HB_DIRECTION_IS_FORWARD
+HB_DIRECTION_IS_HORIZONTAL
+HB_DIRECTION_IS_VALID
+HB_DIRECTION_IS_VERTICAL
+<SUBSECTION Private>
+HB_BEGIN_DECLS
+HB_END_DECLS
+int16_t
+int32_t
+int64_t
+int8_t
+uint16_t
+uint32_t
+uint64_t
+uint8_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-deprecated</FILE>
+HB_BUFFER_FLAGS_DEFAULT
+HB_BUFFER_SERIALIZE_FLAGS_DEFAULT
+HB_SCRIPT_CANADIAN_ABORIGINAL
+</SECTION>
+
+<SECTION>
+<FILE>hb-coretext</FILE>
+HB_CORETEXT_TAG_MORT
+HB_CORETEXT_TAG_MORX
+hb_coretext_face_create
+hb_coretext_face_get_cg_font
+hb_coretext_font_get_ct_font
+</SECTION>
+
+<SECTION>
+<FILE>hb-face</FILE>
+hb_face_create
+hb_face_create_for_tables
+hb_face_destroy
+hb_face_get_empty
+hb_face_get_glyph_count
+hb_face_get_index
+hb_face_get_upem
+hb_face_get_user_data
+hb_face_is_immutable
+hb_face_make_immutable
+hb_face_reference
+hb_face_reference_blob
+hb_face_reference_table
+hb_face_set_glyph_count
+hb_face_set_index
+hb_face_set_upem
+hb_face_set_user_data
+hb_face_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-font</FILE>
+hb_font_add_glyph_origin_for_direction
+hb_font_create
+hb_font_create_sub_font
+hb_font_destroy
+hb_font_funcs_create
+hb_font_funcs_destroy
+hb_font_funcs_get_empty
+hb_font_funcs_get_user_data
+hb_font_funcs_is_immutable
+hb_font_funcs_make_immutable
+hb_font_funcs_reference
+hb_font_funcs_set_glyph_contour_point_func
+hb_font_funcs_set_glyph_extents_func
+hb_font_funcs_set_glyph_from_name_func
+hb_font_funcs_set_glyph_func
+hb_font_funcs_set_glyph_h_advance_func
+hb_font_funcs_set_glyph_h_kerning_func
+hb_font_funcs_set_glyph_h_origin_func
+hb_font_funcs_set_glyph_name_func
+hb_font_funcs_set_glyph_v_advance_func
+hb_font_funcs_set_glyph_v_kerning_func
+hb_font_funcs_set_glyph_v_origin_func
+hb_font_funcs_set_user_data
+hb_font_funcs_t
+hb_font_get_empty
+hb_font_get_face
+hb_font_get_glyph
+hb_font_get_glyph_advance_for_direction
+hb_font_get_glyph_advance_func_t
+hb_font_get_glyph_contour_point
+hb_font_get_glyph_contour_point_for_origin
+hb_font_get_glyph_contour_point_func_t
+hb_font_get_glyph_extents
+hb_font_get_glyph_extents_for_origin
+hb_font_get_glyph_extents_func_t
+hb_font_get_glyph_from_name
+hb_font_get_glyph_from_name_func_t
+hb_font_get_glyph_func_t
+hb_font_get_glyph_h_advance
+hb_font_get_glyph_h_advance_func_t
+hb_font_get_glyph_h_kerning
+hb_font_get_glyph_h_kerning_func_t
+hb_font_get_glyph_h_origin
+hb_font_get_glyph_h_origin_func_t
+hb_font_get_glyph_kerning_for_direction
+hb_font_get_glyph_kerning_func_t
+hb_font_get_glyph_name
+hb_font_get_glyph_name_func_t
+hb_font_get_glyph_origin_for_direction
+hb_font_get_glyph_origin_func_t
+hb_font_get_glyph_v_advance
+hb_font_get_glyph_v_advance_func_t
+hb_font_get_glyph_v_kerning
+hb_font_get_glyph_v_kerning_func_t
+hb_font_get_glyph_v_origin
+hb_font_get_glyph_v_origin_func_t
+hb_font_get_parent
+hb_font_get_ppem
+hb_font_get_scale
+hb_font_get_user_data
+hb_font_glyph_from_string
+hb_font_glyph_to_string
+hb_font_is_immutable
+hb_font_make_immutable
+hb_font_reference
+hb_font_set_funcs
+hb_font_set_funcs_data
+hb_font_set_ppem
+hb_font_set_scale
+hb_font_set_user_data
+hb_font_subtract_glyph_origin_for_direction
+hb_font_t
+hb_reference_table_func_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-ft</FILE>
+hb_ft_face_create
+hb_ft_face_create_cached
+hb_ft_font_create
+hb_ft_font_get_face
+hb_ft_font_set_funcs
+</SECTION>
+
+<SECTION>
+<FILE>hb-glib</FILE>
+hb_glib_get_unicode_funcs
+hb_glib_script_from_script
+hb_glib_script_to_script
+</SECTION>
+
+<SECTION>
+<FILE>hb-gobject</FILE>
+HB_GOBJECT_TYPE_BLOB
+HB_GOBJECT_TYPE_BUFFER
+HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE
+HB_GOBJECT_TYPE_BUFFER_FLAGS
+HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS
+HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT
+HB_GOBJECT_TYPE_DIRECTION
+HB_GOBJECT_TYPE_FACE
+HB_GOBJECT_TYPE_FONT
+HB_GOBJECT_TYPE_FONT_FUNCS
+HB_GOBJECT_TYPE_MEMORY_MODE
+HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS
+HB_GOBJECT_TYPE_SCRIPT
+HB_GOBJECT_TYPE_SHAPE_PLAN
+HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS
+HB_GOBJECT_TYPE_UNICODE_FUNCS
+HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY
+hb_gobject_blob_get_type
+hb_gobject_buffer_content_type_get_type
+hb_gobject_buffer_flags_get_type
+hb_gobject_buffer_get_type
+hb_gobject_buffer_serialize_flags_get_type
+hb_gobject_buffer_serialize_format_get_type
+hb_gobject_direction_get_type
+hb_gobject_face_get_type
+hb_gobject_font_funcs_get_type
+hb_gobject_font_get_type
+hb_gobject_memory_mode_get_type
+hb_gobject_ot_layout_glyph_class_get_type
+hb_gobject_script_get_type
+hb_gobject_shape_plan_get_type
+hb_gobject_unicode_combining_class_get_type
+hb_gobject_unicode_funcs_get_type
+hb_gobject_unicode_general_category_get_type
+<SUBSECTION Private>
+HB_GOBJECT_H_IN
+</SECTION>
+
+<SECTION>
+<FILE>hb-gobject</FILE>
+
+</SECTION>
+
+<SECTION>
+<FILE>hb-graphite2</FILE>
+HB_GRAPHITE2_TAG_SILF
+hb_graphite2_face_get_gr_face
+hb_graphite2_font_get_gr_font
+</SECTION>
+
+<SECTION>
+<FILE>hb-icu</FILE>
+hb_icu_get_unicode_funcs
+hb_icu_script_from_script
+hb_icu_script_to_script
+</SECTION>
+
+<SECTION>
+<FILE>hb-ot</FILE>
+<SUBSECTION Private>
+HB_OT_H_IN
+</SECTION>
+
+<SECTION>
+<FILE>hb-ot-font</FILE>
+hb_ot_font_set_funcs
+</SECTION>
+
+<SECTION>
+<FILE>hb-ot-shape</FILE>
+hb_ot_shape_glyphs_closure
+</SECTION>
+
+<SECTION>
+<FILE>hb-ot-layout</FILE>
+HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX
+HB_OT_LAYOUT_NO_FEATURE_INDEX
+HB_OT_LAYOUT_NO_SCRIPT_INDEX
+HB_OT_TAG_GDEF
+HB_OT_TAG_GPOS
+HB_OT_TAG_GSUB
+hb_ot_layout_collect_lookups
+hb_ot_layout_feature_get_lookups
+hb_ot_layout_get_attach_points
+hb_ot_layout_get_glyph_class
+hb_ot_layout_get_glyphs_in_class
+hb_ot_layout_get_ligature_carets
+hb_ot_layout_get_size_params
+hb_ot_layout_glyph_class_t
+hb_ot_layout_glyph_sequence_func_t
+hb_ot_layout_has_glyph_classes
+hb_ot_layout_has_positioning
+hb_ot_layout_has_substitution
+hb_ot_layout_language_find_feature
+hb_ot_layout_language_get_feature_indexes
+hb_ot_layout_language_get_feature_tags
+hb_ot_layout_language_get_required_feature
+hb_ot_layout_lookup_collect_glyphs
+hb_ot_layout_lookup_substitute_closure
+hb_ot_layout_lookup_would_substitute
+hb_ot_layout_script_find_language
+hb_ot_layout_script_get_language_tags
+hb_ot_layout_table_choose_script
+hb_ot_layout_table_find_script
+hb_ot_layout_table_get_feature_tags
+hb_ot_layout_table_get_script_tags
+hb_ot_layout_table_get_lookup_count
+hb_ot_shape_plan_collect_lookups
+<SUBSECTION Private>
+Xhb_ot_layout_lookup_enumerate_sequences
+Xhb_ot_layout_lookup_position
+Xhb_ot_layout_lookup_substitute
+</SECTION>
+
+<SECTION>
+<FILE>hb-ot-tag</FILE>
+HB_OT_TAG_DEFAULT_LANGUAGE
+HB_OT_TAG_DEFAULT_SCRIPT
+hb_ot_tag_from_language
+hb_ot_tag_to_language
+hb_ot_tag_to_script
+hb_ot_tags_from_script
+</SECTION>
+
+<SECTION>
+<FILE>hb-set</FILE>
+HB_SET_VALUE_INVALID
+hb_set_add
+hb_set_add_range
+hb_set_allocation_successful
+hb_set_clear
+hb_set_create
+hb_set_del
+hb_set_del_range
+hb_set_destroy
+hb_set_get_empty
+hb_set_get_max
+hb_set_get_min
+hb_set_get_population
+hb_set_get_user_data
+hb_set_has
+hb_set_intersect
+hb_set_invert
+hb_set_is_empty
+hb_set_is_equal
+hb_set_next
+hb_set_next_range
+hb_set_reference
+hb_set_set
+hb_set_set_user_data
+hb_set_subtract
+hb_set_symmetric_difference
+hb_set_t
+hb_set_union
+</SECTION>
+
+<SECTION>
+<FILE>hb-shape</FILE>
+hb_feature_from_string
+hb_feature_t
+hb_feature_to_string
+hb_shape
+hb_shape_full
+hb_shape_list_shapers
+</SECTION>
+
+<SECTION>
+<FILE>hb-shape-plan</FILE>
+hb_shape_plan_create
+hb_shape_plan_create_cached
+hb_shape_plan_destroy
+hb_shape_plan_execute
+hb_shape_plan_get_empty
+hb_shape_plan_get_shaper
+hb_shape_plan_get_user_data
+hb_shape_plan_reference
+hb_shape_plan_set_user_data
+hb_shape_plan_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-unicode</FILE>
+HB_UNICODE_MAX_DECOMPOSITION_LEN
+hb_unicode_combining_class
+hb_unicode_combining_class_func_t
+hb_unicode_combining_class_t
+hb_unicode_compose
+hb_unicode_compose_func_t
+hb_unicode_decompose
+hb_unicode_decompose_compatibility
+hb_unicode_decompose_func_t
+hb_unicode_eastasian_width
+hb_unicode_funcs_create
+hb_unicode_funcs_destroy
+hb_unicode_funcs_get_default
+hb_unicode_funcs_get_empty
+hb_unicode_funcs_get_parent
+hb_unicode_funcs_get_user_data
+hb_unicode_funcs_is_immutable
+hb_unicode_funcs_make_immutable
+hb_unicode_funcs_reference
+hb_unicode_funcs_set_combining_class_func
+hb_unicode_funcs_set_compose_func
+hb_unicode_funcs_set_decompose_compatibility_func
+hb_unicode_funcs_set_decompose_func
+hb_unicode_funcs_set_eastasian_width_func
+hb_unicode_funcs_set_general_category_func
+hb_unicode_funcs_set_mirroring_func
+hb_unicode_funcs_set_script_func
+hb_unicode_funcs_set_user_data
+hb_unicode_funcs_t
+hb_unicode_general_category
+hb_unicode_general_category_func_t
+hb_unicode_general_category_t
+hb_unicode_mirroring
+hb_unicode_mirroring_func_t
+hb_unicode_script
+hb_unicode_script_func_t
+</SECTION>
+
+<SECTION>
+<FILE>hb-uniscribe</FILE>
+hb_uniscribe_font_get_hfont
+hb_uniscribe_font_get_logfontw
+</SECTION>
+
+<SECTION>
+<FILE>hb-version</FILE>
+HB_VERSION_CHECK
+HB_VERSION_MAJOR
+HB_VERSION_MICRO
+HB_VERSION_MINOR
+HB_VERSION_STRING
+hb_version
+hb_version_check
+hb_version_string
+</SECTION>
diff --git a/docs/reference/harfbuzz.types b/docs/reference/harfbuzz.types
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/reference/html/annotation-glossary.html b/docs/reference/html/annotation-glossary.html
new file mode 100644 (file)
index 0000000..a78200e
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="prev" href="deprecated-api-index.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_glossary"><a class="shortcut" href="#glsA">A</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsC">C</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsD">D</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsI">I</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsO">O</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsS">S</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsT">T</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="deprecated-api-index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="glossary">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt>
+<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
+<dd><p>NULL is ok, both for passing and for returning.</p></dd>
+<dt>
+<a name="annotation-glossterm-array"></a>array</dt>
+<dd><p>Parameter points to an array of items.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt>
+<a name="annotation-glossterm-closure"></a>closure</dt>
+<dd><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsD"></a><h3 class="title">D</h3>
+<dt>
+<a name="annotation-glossterm-destroy"></a>destroy</dt>
+<dd><p>This parameter is a 'destroy_data', for callbacks.</p></dd>
+<a name="glsI"></a><h3 class="title">I</h3>
+<dt>
+<a name="annotation-glossterm-inout"></a>inout</dt>
+<dd><p>Parameter for input and for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsO"></a><h3 class="title">O</h3>
+<dt>
+<a name="annotation-glossterm-out"></a>out</dt>
+<dd><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsS"></a><h3 class="title">S</h3>
+<dt>
+<a name="annotation-glossterm-scope%20notified"></a>scope notified</dt>
+<dd><p>The callback is valid until the GDestroyNotify argument is called.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt>
+<a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
+<dd><p>Free data after the code is done.</p></dd>
+<dt>
+<a name="annotation-glossterm-transfer%20none"></a>transfer none</dt>
+<dd><p>Don't free data after the code is done.</p></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/api-index-full.html b/docs/reference/html/api-index-full.html
new file mode 100644 (file)
index 0000000..bb4c5a0
--- /dev/null
@@ -0,0 +1,1449 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="prev" href="object-tree.html" title="Object Hierarchy">
+<link rel="next" href="deprecated-api-index.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxB">B</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxC">C</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxD">D</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxF">F</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxG">G</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxI">I</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxL">L</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxM">M</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxO">O</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxP">P</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxR">R</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxS">S</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxT">T</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxU">U</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxV">V</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="deprecated-api-index.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="api-index-full"></a>API Index</h2></div></div></div>
+<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-create" title="hb_blob_create ()">hb_blob_create</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-create-sub-blob" title="hb_blob_create_sub_blob ()">hb_blob_create_sub_blob</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-destroy" title="hb_blob_destroy ()">hb_blob_destroy</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-data" title="hb_blob_get_data ()">hb_blob_get_data</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-data-writable" title="hb_blob_get_data_writable ()">hb_blob_get_data_writable</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-empty" title="hb_blob_get_empty ()">hb_blob_get_empty</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-length" title="hb_blob_get_length ()">hb_blob_get_length</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-user-data" title="hb_blob_get_user_data ()">hb_blob_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-is-immutable" title="hb_blob_is_immutable ()">hb_blob_is_immutable</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-make-immutable" title="hb_blob_make_immutable ()">hb_blob_make_immutable</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-reference" title="hb_blob_reference ()">hb_blob_reference</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-set-user-data" title="hb_blob_set_user_data ()">hb_blob_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t">hb_blob_t</a>, typedef in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t">hb_bool_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add" title="hb_buffer_add ()">hb_buffer_add</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()">hb_buffer_add_codepoints</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf16" title="hb_buffer_add_utf16 ()">hb_buffer_add_utf16</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf32" title="hb_buffer_add_utf32 ()">hb_buffer_add_utf32</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf8" title="hb_buffer_add_utf8 ()">hb_buffer_add_utf8</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-allocation-successful" title="hb_buffer_allocation_successful ()">hb_buffer_allocation_successful</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-clear-contents" title="hb_buffer_clear_contents ()">hb_buffer_clear_contents</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t">hb_buffer_content_type_t</a>, enum in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-create" title="hb_buffer_create ()">hb_buffer_create</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-deserialize-glyphs" title="hb_buffer_deserialize_glyphs ()">hb_buffer_deserialize_glyphs</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-destroy" title="hb_buffer_destroy ()">hb_buffer_destroy</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_FLAGS_DEFAULT">HB_BUFFER_FLAGS_DEFAULT</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t">hb_buffer_flags_t</a>, enum in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-content-type" title="hb_buffer_get_content_type ()">hb_buffer_get_content_type</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-direction" title="hb_buffer_get_direction ()">hb_buffer_get_direction</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-empty" title="hb_buffer_get_empty ()">hb_buffer_get_empty</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-flags" title="hb_buffer_get_flags ()">hb_buffer_get_flags</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-infos" title="hb_buffer_get_glyph_infos ()">hb_buffer_get_glyph_infos</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-positions" title="hb_buffer_get_glyph_positions ()">hb_buffer_get_glyph_positions</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-language" title="hb_buffer_get_language ()">hb_buffer_get_language</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-length" title="hb_buffer_get_length ()">hb_buffer_get_length</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-replacement-codepoint" title="hb_buffer_get_replacement_codepoint ()">hb_buffer_get_replacement_codepoint</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-script" title="hb_buffer_get_script ()">hb_buffer_get_script</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-segment-properties" title="hb_buffer_get_segment_properties ()">hb_buffer_get_segment_properties</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-unicode-funcs" title="hb_buffer_get_unicode_funcs ()">hb_buffer_get_unicode_funcs</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-user-data" title="hb_buffer_get_user_data ()">hb_buffer_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-guess-segment-properties" title="hb_buffer_guess_segment_properties ()">hb_buffer_guess_segment_properties</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-normalize-glyphs" title="hb_buffer_normalize_glyphs ()">hb_buffer_normalize_glyphs</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-pre-allocate" title="hb_buffer_pre_allocate ()">hb_buffer_pre_allocate</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reference" title="hb_buffer_reference ()">hb_buffer_reference</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reset" title="hb_buffer_reset ()">hb_buffer_reset</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reverse" title="hb_buffer_reverse ()">hb_buffer_reverse</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reverse-clusters" title="hb_buffer_reverse_clusters ()">hb_buffer_reverse_clusters</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_SERIALIZE_FLAGS_DEFAULT">HB_BUFFER_SERIALIZE_FLAGS_DEFAULT</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t">hb_buffer_serialize_flags_t</a>, enum in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-from-string" title="hb_buffer_serialize_format_from_string ()">hb_buffer_serialize_format_from_string</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t">hb_buffer_serialize_format_t</a>, enum in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-to-string" title="hb_buffer_serialize_format_to_string ()">hb_buffer_serialize_format_to_string</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()">hb_buffer_serialize_glyphs</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-list-formats" title="hb_buffer_serialize_list_formats ()">hb_buffer_serialize_list_formats</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-content-type" title="hb_buffer_set_content_type ()">hb_buffer_set_content_type</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()">hb_buffer_set_direction</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-flags" title="hb_buffer_set_flags ()">hb_buffer_set_flags</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-language" title="hb_buffer_set_language ()">hb_buffer_set_language</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-length" title="hb_buffer_set_length ()">hb_buffer_set_length</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()">hb_buffer_set_replacement_codepoint</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-script" title="hb_buffer_set_script ()">hb_buffer_set_script</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-segment-properties" title="hb_buffer_set_segment_properties ()">hb_buffer_set_segment_properties</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-unicode-funcs" title="hb_buffer_set_unicode_funcs ()">hb_buffer_set_unicode_funcs</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-user-data" title="hb_buffer_set_user_data ()">hb_buffer_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t">hb_buffer_t</a>, typedef in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t">hb_codepoint_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-face-create" title="hb_coretext_face_create ()">hb_coretext_face_create</a>, function in <a class="link" href="harfbuzz-hb-coretext.html" title="hb-coretext">hb-coretext</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-face-get-cg-font" title="hb_coretext_face_get_cg_font ()">hb_coretext_face_get_cg_font</a>, function in <a class="link" href="harfbuzz-hb-coretext.html" title="hb-coretext">hb-coretext</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-font-get-ct-font" title="hb_coretext_font_get_ct_font ()">hb_coretext_font_get_ct_font</a>, function in <a class="link" href="harfbuzz-hb-coretext.html" title="hb-coretext">hb-coretext</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORT:CAPS" title="HB_CORETEXT_TAG_MORT">HB_CORETEXT_TAG_MORT</a>, macro in <a class="link" href="harfbuzz-hb-coretext.html" title="hb-coretext">hb-coretext</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORX:CAPS" title="HB_CORETEXT_TAG_MORX">HB_CORETEXT_TAG_MORX</a>, macro in <a class="link" href="harfbuzz-hb-coretext.html" title="hb-coretext">hb-coretext</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()">hb_destroy_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-from-string" title="hb_direction_from_string ()">hb_direction_from_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-BACKWARD:CAPS" title="HB_DIRECTION_IS_BACKWARD()">HB_DIRECTION_IS_BACKWARD</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-FORWARD:CAPS" title="HB_DIRECTION_IS_FORWARD()">HB_DIRECTION_IS_FORWARD</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-HORIZONTAL:CAPS" title="HB_DIRECTION_IS_HORIZONTAL()">HB_DIRECTION_IS_HORIZONTAL</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-VALID:CAPS" title="HB_DIRECTION_IS_VALID()">HB_DIRECTION_IS_VALID</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-VERTICAL:CAPS" title="HB_DIRECTION_IS_VERTICAL()">HB_DIRECTION_IS_VERTICAL</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-REVERSE:CAPS" title="HB_DIRECTION_REVERSE()">HB_DIRECTION_REVERSE</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t">hb_direction_t</a>, enum in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-to-string" title="hb_direction_to_string ()">hb_direction_to_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<a name="idxF"></a><h3 class="title">F</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-create" title="hb_face_create ()">hb_face_create</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-create-for-tables" title="hb_face_create_for_tables ()">hb_face_create_for_tables</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-destroy" title="hb_face_destroy ()">hb_face_destroy</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-empty" title="hb_face_get_empty ()">hb_face_get_empty</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-glyph-count" title="hb_face_get_glyph_count ()">hb_face_get_glyph_count</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-index" title="hb_face_get_index ()">hb_face_get_index</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-upem" title="hb_face_get_upem ()">hb_face_get_upem</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-user-data" title="hb_face_get_user_data ()">hb_face_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-is-immutable" title="hb_face_is_immutable ()">hb_face_is_immutable</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-make-immutable" title="hb_face_make_immutable ()">hb_face_make_immutable</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference" title="hb_face_reference ()">hb_face_reference</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference-blob" title="hb_face_reference_blob ()">hb_face_reference_blob</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference-table" title="hb_face_reference_table ()">hb_face_reference_table</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-glyph-count" title="hb_face_set_glyph_count ()">hb_face_set_glyph_count</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-index" title="hb_face_set_index ()">hb_face_set_index</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-upem" title="hb_face_set_upem ()">hb_face_set_upem</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-user-data" title="hb_face_set_user_data ()">hb_face_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t">hb_face_t</a>, typedef in <a class="link" href="harfbuzz-hb-face.html" title="hb-face">hb-face</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-feature-from-string" title="hb_feature_from_string ()">hb_feature_from_string</a>, function in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-feature-t-struct" title="hb_feature_t">hb_feature_t</a>, struct in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-feature-to-string" title="hb_feature_to_string ()">hb_feature_to_string</a>, function in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-add-glyph-origin-for-direction" title="hb_font_add_glyph_origin_for_direction ()">hb_font_add_glyph_origin_for_direction</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-create" title="hb_font_create ()">hb_font_create</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-create-sub-font" title="hb_font_create_sub_font ()">hb_font_create_sub_font</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-destroy" title="hb_font_destroy ()">hb_font_destroy</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-create" title="hb_font_funcs_create ()">hb_font_funcs_create</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-destroy" title="hb_font_funcs_destroy ()">hb_font_funcs_destroy</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-get-empty" title="hb_font_funcs_get_empty ()">hb_font_funcs_get_empty</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-get-user-data" title="hb_font_funcs_get_user_data ()">hb_font_funcs_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-is-immutable" title="hb_font_funcs_is_immutable ()">hb_font_funcs_is_immutable</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-make-immutable" title="hb_font_funcs_make_immutable ()">hb_font_funcs_make_immutable</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-reference" title="hb_font_funcs_reference ()">hb_font_funcs_reference</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-contour-point-func" title="hb_font_funcs_set_glyph_contour_point_func ()">hb_font_funcs_set_glyph_contour_point_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-extents-func" title="hb_font_funcs_set_glyph_extents_func ()">hb_font_funcs_set_glyph_extents_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-from-name-func" title="hb_font_funcs_set_glyph_from_name_func ()">hb_font_funcs_set_glyph_from_name_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-func" title="hb_font_funcs_set_glyph_func ()">hb_font_funcs_set_glyph_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-advance-func" title="hb_font_funcs_set_glyph_h_advance_func ()">hb_font_funcs_set_glyph_h_advance_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-kerning-func" title="hb_font_funcs_set_glyph_h_kerning_func ()">hb_font_funcs_set_glyph_h_kerning_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-origin-func" title="hb_font_funcs_set_glyph_h_origin_func ()">hb_font_funcs_set_glyph_h_origin_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-name-func" title="hb_font_funcs_set_glyph_name_func ()">hb_font_funcs_set_glyph_name_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-advance-func" title="hb_font_funcs_set_glyph_v_advance_func ()">hb_font_funcs_set_glyph_v_advance_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-kerning-func" title="hb_font_funcs_set_glyph_v_kerning_func ()">hb_font_funcs_set_glyph_v_kerning_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-origin-func" title="hb_font_funcs_set_glyph_v_origin_func ()">hb_font_funcs_set_glyph_v_origin_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-user-data" title="hb_font_funcs_set_user_data ()">hb_font_funcs_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t">hb_font_funcs_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-empty" title="hb_font_get_empty ()">hb_font_get_empty</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-face" title="hb_font_get_face ()">hb_font_get_face</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph" title="hb_font_get_glyph ()">hb_font_get_glyph</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-advance-for-direction" title="hb_font_get_glyph_advance_for_direction ()">hb_font_get_glyph_advance_for_direction</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-advance-func-t" title="hb_font_get_glyph_advance_func_t ()">hb_font_get_glyph_advance_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point" title="hb_font_get_glyph_contour_point ()">hb_font_get_glyph_contour_point</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-for-origin" title="hb_font_get_glyph_contour_point_for_origin ()">hb_font_get_glyph_contour_point_for_origin</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-func-t" title="hb_font_get_glyph_contour_point_func_t ()">hb_font_get_glyph_contour_point_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents" title="hb_font_get_glyph_extents ()">hb_font_get_glyph_extents</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents-for-origin" title="hb_font_get_glyph_extents_for_origin ()">hb_font_get_glyph_extents_for_origin</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents-func-t" title="hb_font_get_glyph_extents_func_t ()">hb_font_get_glyph_extents_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-from-name" title="hb_font_get_glyph_from_name ()">hb_font_get_glyph_from_name</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-from-name-func-t" title="hb_font_get_glyph_from_name_func_t ()">hb_font_get_glyph_from_name_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-func-t" title="hb_font_get_glyph_func_t ()">hb_font_get_glyph_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance" title="hb_font_get_glyph_h_advance ()">hb_font_get_glyph_h_advance</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance-func-t" title="hb_font_get_glyph_h_advance_func_t">hb_font_get_glyph_h_advance_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning" title="hb_font_get_glyph_h_kerning ()">hb_font_get_glyph_h_kerning</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning-func-t" title="hb_font_get_glyph_h_kerning_func_t">hb_font_get_glyph_h_kerning_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin" title="hb_font_get_glyph_h_origin ()">hb_font_get_glyph_h_origin</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin-func-t" title="hb_font_get_glyph_h_origin_func_t">hb_font_get_glyph_h_origin_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-for-direction" title="hb_font_get_glyph_kerning_for_direction ()">hb_font_get_glyph_kerning_for_direction</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-func-t" title="hb_font_get_glyph_kerning_func_t ()">hb_font_get_glyph_kerning_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-name" title="hb_font_get_glyph_name ()">hb_font_get_glyph_name</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-name-func-t" title="hb_font_get_glyph_name_func_t ()">hb_font_get_glyph_name_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-origin-for-direction" title="hb_font_get_glyph_origin_for_direction ()">hb_font_get_glyph_origin_for_direction</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-origin-func-t" title="hb_font_get_glyph_origin_func_t ()">hb_font_get_glyph_origin_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance" title="hb_font_get_glyph_v_advance ()">hb_font_get_glyph_v_advance</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance-func-t" title="hb_font_get_glyph_v_advance_func_t">hb_font_get_glyph_v_advance_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning" title="hb_font_get_glyph_v_kerning ()">hb_font_get_glyph_v_kerning</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning-func-t" title="hb_font_get_glyph_v_kerning_func_t">hb_font_get_glyph_v_kerning_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin" title="hb_font_get_glyph_v_origin ()">hb_font_get_glyph_v_origin</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin-func-t" title="hb_font_get_glyph_v_origin_func_t">hb_font_get_glyph_v_origin_func_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-parent" title="hb_font_get_parent ()">hb_font_get_parent</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-ppem" title="hb_font_get_ppem ()">hb_font_get_ppem</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-scale" title="hb_font_get_scale ()">hb_font_get_scale</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-user-data" title="hb_font_get_user_data ()">hb_font_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-glyph-from-string" title="hb_font_glyph_from_string ()">hb_font_glyph_from_string</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-glyph-to-string" title="hb_font_glyph_to_string ()">hb_font_glyph_to_string</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-is-immutable" title="hb_font_is_immutable ()">hb_font_is_immutable</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-make-immutable" title="hb_font_make_immutable ()">hb_font_make_immutable</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-reference" title="hb_font_reference ()">hb_font_reference</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-funcs" title="hb_font_set_funcs ()">hb_font_set_funcs</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-funcs-data" title="hb_font_set_funcs_data ()">hb_font_set_funcs_data</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-ppem" title="hb_font_set_ppem ()">hb_font_set_ppem</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-scale" title="hb_font_set_scale ()">hb_font_set_scale</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-user-data" title="hb_font_set_user_data ()">hb_font_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-subtract-glyph-origin-for-direction" title="hb_font_subtract_glyph_origin_for_direction ()">hb_font_subtract_glyph_origin_for_direction</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t">hb_font_t</a>, typedef in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create" title="hb_ft_face_create ()">hb_ft_face_create</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create-cached" title="hb_ft_face_create_cached ()">hb_ft_face_create_cached</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-create" title="hb_ft_font_create ()">hb_ft_font_create</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-get-face" title="hb_ft_font_get_face ()">hb_ft_font_get_face</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-set-funcs" title="hb_ft_font_set_funcs ()">hb_ft_font_set_funcs</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
+</dt>
+<dd></dd>
+<a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-get-unicode-funcs" title="hb_glib_get_unicode_funcs ()">hb_glib_get_unicode_funcs</a>, function in <a class="link" href="harfbuzz-hb-glib.html" title="hb-glib">hb-glib</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-script-from-script" title="hb_glib_script_from_script ()">hb_glib_script_from_script</a>, function in <a class="link" href="harfbuzz-hb-glib.html" title="hb-glib">hb-glib</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-script-to-script" title="hb_glib_script_to_script ()">hb_glib_script_to_script</a>, function in <a class="link" href="harfbuzz-hb-glib.html" title="hb-glib">hb-glib</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-info-t-struct" title="hb_glyph_info_t">hb_glyph_info_t</a>, struct in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-position-t-struct" title="hb_glyph_position_t">hb_glyph_position_t</a>, struct in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-graphite2.html#hb-graphite2-face-get-gr-face" title="hb_graphite2_face_get_gr_face ()">hb_graphite2_face_get_gr_face</a>, function in <a class="link" href="harfbuzz-hb-graphite2.html" title="hb-graphite2">hb-graphite2</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-graphite2.html#hb-graphite2-font-get-gr-font" title="hb_graphite2_font_get_gr_font ()">hb_graphite2_font_get_gr_font</a>, function in <a class="link" href="harfbuzz-hb-graphite2.html" title="hb-graphite2">hb-graphite2</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-graphite2.html#HB-GRAPHITE2-TAG-SILF:CAPS" title="HB_GRAPHITE2_TAG_SILF">HB_GRAPHITE2_TAG_SILF</a>, macro in <a class="link" href="harfbuzz-hb-graphite2.html" title="hb-graphite2">hb-graphite2</a>
+</dt>
+<dd></dd>
+<a name="idxI"></a><h3 class="title">I</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-get-unicode-funcs" title="hb_icu_get_unicode_funcs ()">hb_icu_get_unicode_funcs</a>, function in <a class="link" href="harfbuzz-hb-icu.html" title="hb-icu">hb-icu</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-script-from-script" title="hb_icu_script_from_script ()">hb_icu_script_from_script</a>, function in <a class="link" href="harfbuzz-hb-icu.html" title="hb-icu">hb-icu</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-script-to-script" title="hb_icu_script_to_script ()">hb_icu_script_to_script</a>, function in <a class="link" href="harfbuzz-hb-icu.html" title="hb-icu">hb-icu</a>
+</dt>
+<dd></dd>
+<a name="idxL"></a><h3 class="title">L</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-language-from-string" title="hb_language_from_string ()">hb_language_from_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-language-get-default" title="hb_language_get_default ()">hb_language_get_default</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS" title="HB_LANGUAGE_INVALID">HB_LANGUAGE_INVALID</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-language-t">hb_language_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-language-to-string" title="hb_language_to_string ()">hb_language_to_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-mask-t" title="hb_mask_t">hb_mask_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-blob.html#hb-memory-mode-t" title="enum hb_memory_mode_t">hb_memory_mode_t</a>, enum in <a class="link" href="harfbuzz-hb-blob.html" title="hb-blob">hb-blob</a>
+</dt>
+<dd></dd>
+<a name="idxO"></a><h3 class="title">O</h3>
+<dt>
+hb_ot_font_set_funcs, function in hb-ot-font
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-collect-lookups" title="hb_ot_layout_collect_lookups ()">hb_ot_layout_collect_lookups</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS" title="HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX">HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-feature-get-lookups" title="hb_ot_layout_feature_get_lookups ()">hb_ot_layout_feature_get_lookups</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-attach-points" title="hb_ot_layout_get_attach_points ()">hb_ot_layout_get_attach_points</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyphs-in-class" title="hb_ot_layout_get_glyphs_in_class ()">hb_ot_layout_get_glyphs_in_class</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyph-class" title="hb_ot_layout_get_glyph_class ()">hb_ot_layout_get_glyph_class</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-ligature-carets" title="hb_ot_layout_get_ligature_carets ()">hb_ot_layout_get_ligature_carets</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-size-params" title="hb_ot_layout_get_size_params ()">hb_ot_layout_get_size_params</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t">hb_ot_layout_glyph_class_t</a>, enum in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-sequence-func-t" title="hb_ot_layout_glyph_sequence_func_t ()">hb_ot_layout_glyph_sequence_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-glyph-classes" title="hb_ot_layout_has_glyph_classes ()">hb_ot_layout_has_glyph_classes</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-positioning" title="hb_ot_layout_has_positioning ()">hb_ot_layout_has_positioning</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-substitution" title="hb_ot_layout_has_substitution ()">hb_ot_layout_has_substitution</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-find-feature" title="hb_ot_layout_language_find_feature ()">hb_ot_layout_language_find_feature</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-indexes" title="hb_ot_layout_language_get_feature_indexes ()">hb_ot_layout_language_get_feature_indexes</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-tags" title="hb_ot_layout_language_get_feature_tags ()">hb_ot_layout_language_get_feature_tags</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature" title="hb_ot_layout_language_get_required_feature ()">hb_ot_layout_language_get_required_feature</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-collect-glyphs" title="hb_ot_layout_lookup_collect_glyphs ()">hb_ot_layout_lookup_collect_glyphs</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-substitute-closure" title="hb_ot_layout_lookup_substitute_closure ()">hb_ot_layout_lookup_substitute_closure</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-would-substitute" title="hb_ot_layout_lookup_would_substitute ()">hb_ot_layout_lookup_would_substitute</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS" title="HB_OT_LAYOUT_NO_FEATURE_INDEX">HB_OT_LAYOUT_NO_FEATURE_INDEX</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS" title="HB_OT_LAYOUT_NO_SCRIPT_INDEX">HB_OT_LAYOUT_NO_SCRIPT_INDEX</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-find-language" title="hb_ot_layout_script_find_language ()">hb_ot_layout_script_find_language</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-get-language-tags" title="hb_ot_layout_script_get_language_tags ()">hb_ot_layout_script_get_language_tags</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-choose-script" title="hb_ot_layout_table_choose_script ()">hb_ot_layout_table_choose_script</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-find-script" title="hb_ot_layout_table_find_script ()">hb_ot_layout_table_find_script</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-feature-tags" title="hb_ot_layout_table_get_feature_tags ()">hb_ot_layout_table_get_feature_tags</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-lookup-count" title="hb_ot_layout_table_get_lookup_count ()">hb_ot_layout_table_get_lookup_count</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-script-tags" title="hb_ot_layout_table_get_script_tags ()">hb_ot_layout_table_get_script_tags</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+hb_ot_shape_glyphs_closure, function in hb-ot-shape
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-shape-plan-collect-lookups" title="hb_ot_shape_plan_collect_lookups ()">hb_ot_shape_plan_collect_lookups</a>, function in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tags-from-script" title="hb_ot_tags_from_script ()">hb_ot_tags_from_script</a>, function in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-LANGUAGE:CAPS" title="HB_OT_TAG_DEFAULT_LANGUAGE">HB_OT_TAG_DEFAULT_LANGUAGE</a>, macro in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-SCRIPT:CAPS" title="HB_OT_TAG_DEFAULT_SCRIPT">HB_OT_TAG_DEFAULT_SCRIPT</a>, macro in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-from-language" title="hb_ot_tag_from_language ()">hb_ot_tag_from_language</a>, function in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GDEF:CAPS" title="HB_OT_TAG_GDEF">HB_OT_TAG_GDEF</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GPOS:CAPS" title="HB_OT_TAG_GPOS">HB_OT_TAG_GPOS</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GSUB:CAPS" title="HB_OT_TAG_GSUB">HB_OT_TAG_GSUB</a>, macro in <a class="link" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">hb-ot-layout</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-language" title="hb_ot_tag_to_language ()">hb_ot_tag_to_language</a>, function in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-script" title="hb_ot_tag_to_script ()">hb_ot_tag_to_script</a>, function in <a class="link" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">hb-ot-tag</a>
+</dt>
+<dd></dd>
+<a name="idxP"></a><h3 class="title">P</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t">hb_position_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-font.html#hb-reference-table-func-t" title="hb_reference_table_func_t ()">hb_reference_table_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS" title="HB_SCRIPT_CANADIAN_ABORIGINAL">HB_SCRIPT_CANADIAN_ABORIGINAL</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()">hb_script_from_iso15924_tag</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-script-from-string" title="hb_script_from_string ()">hb_script_from_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-script-get-horizontal-direction" title="hb_script_get_horizontal_direction ()">hb_script_get_horizontal_direction</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t">hb_script_t</a>, enum in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-script-to-iso15924-tag" title="hb_script_to_iso15924_tag ()">hb_script_to_iso15924_tag</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS" title="HB_SEGMENT_PROPERTIES_DEFAULT">HB_SEGMENT_PROPERTIES_DEFAULT</a>, macro in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-equal" title="hb_segment_properties_equal ()">hb_segment_properties_equal</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-hash" title="hb_segment_properties_hash ()">hb_segment_properties_hash</a>, function in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t-struct" title="hb_segment_properties_t">hb_segment_properties_t</a>, struct in <a class="link" href="harfbuzz-hb-buffer.html" title="hb-buffer">hb-buffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-add" title="hb_set_add ()">hb_set_add</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-add-range" title="hb_set_add_range ()">hb_set_add_range</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-allocation-successful" title="hb_set_allocation_successful ()">hb_set_allocation_successful</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-clear" title="hb_set_clear ()">hb_set_clear</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-create" title="hb_set_create ()">hb_set_create</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-del" title="hb_set_del ()">hb_set_del</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-del-range" title="hb_set_del_range ()">hb_set_del_range</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-destroy" title="hb_set_destroy ()">hb_set_destroy</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-empty" title="hb_set_get_empty ()">hb_set_get_empty</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-max" title="hb_set_get_max ()">hb_set_get_max</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-min" title="hb_set_get_min ()">hb_set_get_min</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-population" title="hb_set_get_population ()">hb_set_get_population</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-user-data" title="hb_set_get_user_data ()">hb_set_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-has" title="hb_set_has ()">hb_set_has</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-intersect" title="hb_set_intersect ()">hb_set_intersect</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-invert" title="hb_set_invert ()">hb_set_invert</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-is-empty" title="hb_set_is_empty ()">hb_set_is_empty</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-is-equal" title="hb_set_is_equal ()">hb_set_is_equal</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-next" title="hb_set_next ()">hb_set_next</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-next-range" title="hb_set_next_range ()">hb_set_next_range</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-reference" title="hb_set_reference ()">hb_set_reference</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-set" title="hb_set_set ()">hb_set_set</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-set-user-data" title="hb_set_set_user_data ()">hb_set_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-subtract" title="hb_set_subtract ()">hb_set_subtract</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-symmetric-difference" title="hb_set_symmetric_difference ()">hb_set_symmetric_difference</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-t">hb_set_t</a>, typedef in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#hb-set-union" title="hb_set_union ()">hb_set_union</a>, function in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS" title="HB_SET_VALUE_INVALID">HB_SET_VALUE_INVALID</a>, macro in <a class="link" href="harfbuzz-hb-set.html" title="hb-set">hb-set</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape" title="hb_shape ()">hb_shape</a>, function in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape-full" title="hb_shape_full ()">hb_shape_full</a>, function in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape-list-shapers" title="hb_shape_list_shapers ()">hb_shape_list_shapers</a>, function in <a class="link" href="harfbuzz-hb-shape.html" title="hb-shape">hb-shape</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-create" title="hb_shape_plan_create ()">hb_shape_plan_create</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-create-cached" title="hb_shape_plan_create_cached ()">hb_shape_plan_create_cached</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-destroy" title="hb_shape_plan_destroy ()">hb_shape_plan_destroy</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-execute" title="hb_shape_plan_execute ()">hb_shape_plan_execute</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-empty" title="hb_shape_plan_get_empty ()">hb_shape_plan_get_empty</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-shaper" title="hb_shape_plan_get_shaper ()">hb_shape_plan_get_shaper</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-user-data" title="hb_shape_plan_get_user_data ()">hb_shape_plan_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-reference" title="hb_shape_plan_reference ()">hb_shape_plan_reference</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-set-user-data" title="hb_shape_plan_set_user_data ()">hb_shape_plan_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t">hb_shape_plan_t</a>, typedef in <a class="link" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">hb-shape-plan</a>
+</dt>
+<dd></dd>
+<a name="idxT"></a><h3 class="title">T</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-TAG:CAPS" title="HB_TAG()">HB_TAG</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-from-string" title="hb_tag_from_string ()">hb_tag_from_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-TAG-MAX:CAPS" title="HB_TAG_MAX">HB_TAG_MAX</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-TAG-NONE:CAPS" title="HB_TAG_NONE">HB_TAG_NONE</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t">hb_tag_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-to-string" title="hb_tag_to_string ()">hb_tag_to_string</a>, function in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<a name="idxU"></a><h3 class="title">U</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class" title="hb_unicode_combining_class ()">hb_unicode_combining_class</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-func-t" title="hb_unicode_combining_class_func_t ()">hb_unicode_combining_class_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t">hb_unicode_combining_class_t</a>, enum in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-compose" title="hb_unicode_compose ()">hb_unicode_compose</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-compose-func-t" title="hb_unicode_compose_func_t ()">hb_unicode_compose_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose" title="hb_unicode_decompose ()">hb_unicode_decompose</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose-compatibility" title="hb_unicode_decompose_compatibility ()">hb_unicode_decompose_compatibility</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose-func-t" title="hb_unicode_decompose_func_t ()">hb_unicode_decompose_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-eastasian-width" title="hb_unicode_eastasian_width ()">hb_unicode_eastasian_width</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-create" title="hb_unicode_funcs_create ()">hb_unicode_funcs_create</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-destroy" title="hb_unicode_funcs_destroy ()">hb_unicode_funcs_destroy</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-default" title="hb_unicode_funcs_get_default ()">hb_unicode_funcs_get_default</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-empty" title="hb_unicode_funcs_get_empty ()">hb_unicode_funcs_get_empty</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-parent" title="hb_unicode_funcs_get_parent ()">hb_unicode_funcs_get_parent</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-user-data" title="hb_unicode_funcs_get_user_data ()">hb_unicode_funcs_get_user_data</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-is-immutable" title="hb_unicode_funcs_is_immutable ()">hb_unicode_funcs_is_immutable</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-make-immutable" title="hb_unicode_funcs_make_immutable ()">hb_unicode_funcs_make_immutable</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-reference" title="hb_unicode_funcs_reference ()">hb_unicode_funcs_reference</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-combining-class-func" title="hb_unicode_funcs_set_combining_class_func ()">hb_unicode_funcs_set_combining_class_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-compose-func" title="hb_unicode_funcs_set_compose_func ()">hb_unicode_funcs_set_compose_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-compatibility-func" title="hb_unicode_funcs_set_decompose_compatibility_func ()">hb_unicode_funcs_set_decompose_compatibility_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-func" title="hb_unicode_funcs_set_decompose_func ()">hb_unicode_funcs_set_decompose_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-eastasian-width-func" title="hb_unicode_funcs_set_eastasian_width_func ()">hb_unicode_funcs_set_eastasian_width_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-general-category-func" title="hb_unicode_funcs_set_general_category_func ()">hb_unicode_funcs_set_general_category_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-mirroring-func" title="hb_unicode_funcs_set_mirroring_func ()">hb_unicode_funcs_set_mirroring_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-script-func" title="hb_unicode_funcs_set_script_func ()">hb_unicode_funcs_set_script_func</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-user-data" title="hb_unicode_funcs_set_user_data ()">hb_unicode_funcs_set_user_data</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t">hb_unicode_funcs_t</a>, typedef in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category" title="hb_unicode_general_category ()">hb_unicode_general_category</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-func-t" title="hb_unicode_general_category_func_t ()">hb_unicode_general_category_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t">hb_unicode_general_category_t</a>, enum in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS" title="HB_UNICODE_MAX_DECOMPOSITION_LEN">HB_UNICODE_MAX_DECOMPOSITION_LEN</a>, macro in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-mirroring" title="hb_unicode_mirroring ()">hb_unicode_mirroring</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-mirroring-func-t" title="hb_unicode_mirroring_func_t ()">hb_unicode_mirroring_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-script" title="hb_unicode_script ()">hb_unicode_script</a>, function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-script-func-t" title="hb_unicode_script_func_t ()">hb_unicode_script_func_t</a>, user_function in <a class="link" href="harfbuzz-hb-unicode.html" title="hb-unicode">hb-unicode</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-hfont" title="hb_uniscribe_font_get_hfont ()">hb_uniscribe_font_get_hfont</a>, function in <a class="link" href="harfbuzz-hb-uniscribe.html" title="hb-uniscribe">hb-uniscribe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-logfontw" title="hb_uniscribe_font_get_logfontw ()">hb_uniscribe_font_get_logfontw</a>, function in <a class="link" href="harfbuzz-hb-uniscribe.html" title="hb-uniscribe">hb-uniscribe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#HB-UNTAG:CAPS" title="HB_UNTAG()">HB_UNTAG</a>, macro in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t-struct" title="hb_user_data_key_t">hb_user_data_key_t</a>, struct in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<a name="idxV"></a><h3 class="title">V</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-common.html#hb-var-int-t" title="hb_var_int_t">hb_var_int_t</a>, union in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#hb-version" title="hb_version ()">hb_version</a>, function in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MAJOR:CAPS" title="HB_VERSION_MAJOR">HB_VERSION_MAJOR</a>, macro in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MICRO:CAPS" title="HB_VERSION_MICRO">HB_VERSION_MICRO</a>, macro in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MINOR:CAPS" title="HB_VERSION_MINOR">HB_VERSION_MINOR</a>, macro in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-STRING:CAPS" title="HB_VERSION_STRING">HB_VERSION_STRING</a>, macro in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-version.html#hb-version-string" title="hb_version_string ()">hb_version_string</a>, function in <a class="link" href="harfbuzz-hb-version.html" title="hb-version">hb-version</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/ch01.html b/docs/reference/html/ch01.html
new file mode 100644 (file)
index 0000000..58329ec
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>[Insert title here]</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="prev" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="next" href="harfbuzz-hb.html" title="hb">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="idp8266576"></a>[Insert title here]</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb.html">hb</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-common.html">hb-common</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-unicode.html">hb-unicode</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-buffer.html">hb-buffer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-blob.html">hb-blob</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-face.html">hb-face</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-font.html">hb-font</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-shape.html">hb-shape</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-version.html">hb-version</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-deprecated.html">hb-deprecated</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-set.html">hb-set</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot.html">hb-ot</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot-layout.html">hb-ot-layout</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot-tag.html">hb-ot-tag</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-shape-plan.html">hb-shape-plan</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-glib.html">hb-glib</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-icu.html">hb-icu</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ft.html">hb-ft</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-graphite2.html">hb-graphite2</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-uniscribe.html">hb-uniscribe</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-coretext.html">hb-coretext</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-gobject.html">hb-gobject</a></span><span class="refpurpose"></span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/deprecated-api-index.html b/docs/reference/html/deprecated-api-index.html
new file mode 100644 (file)
index 0000000..3ccc21a
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of deprecated API</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="prev" href="api-index-full.html" title="API Index">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxB">B</a>
+                     <span class="dim">|</span> 
+                  <a class="shortcut" href="#idxS">S</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="deprecated-api-index"></a>Index of deprecated API</h2></div></div></div>
+<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_FLAGS_DEFAULT">HB_BUFFER_FLAGS_DEFAULT</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_SERIALIZE_FLAGS_DEFAULT">HB_BUFFER_SERIALIZE_FLAGS_DEFAULT</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="harfbuzz-hb-deprecated.html#HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS" title="HB_SCRIPT_CANADIAN_ABORIGINAL">HB_SCRIPT_CANADIAN_ABORIGINAL</a>, macro in <a class="link" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">hb-deprecated</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-blob.html b/docs/reference/html/harfbuzz-hb-blob.html
new file mode 100644 (file)
index 0000000..00f828d
--- /dev/null
@@ -0,0 +1,610 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-blob</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-buffer.html" title="hb-buffer">
+<link rel="next" href="harfbuzz-hb-face.html" title="hb-face">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-blob.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-blob.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-buffer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-face.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-blob"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-blob.top_of_page"></a>hb-blob</span></h2>
+<p>hb-blob</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-blob.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-create" title="hb_blob_create ()">hb_blob_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-create-sub-blob" title="hb_blob_create_sub_blob ()">hb_blob_create_sub_blob</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-destroy" title="hb_blob_destroy ()">hb_blob_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-data" title="hb_blob_get_data ()">hb_blob_get_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-data-writable" title="hb_blob_get_data_writable ()">hb_blob_get_data_writable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-empty" title="hb_blob_get_empty ()">hb_blob_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-length" title="hb_blob_get_length ()">hb_blob_get_length</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-get-user-data" title="hb_blob_get_user_data ()">hb_blob_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-is-immutable" title="hb_blob_is_immutable ()">hb_blob_is_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-make-immutable" title="hb_blob_make_immutable ()">hb_blob_make_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-reference" title="hb_blob_reference ()">hb_blob_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-set-user-data" title="hb_blob_set_user_data ()">hb_blob_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-blob-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-blob.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t">hb_blob_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-blob.html#hb-memory-mode-t" title="enum hb_memory_mode_t">hb_memory_mode_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-blob.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_blob_t
+    GEnum
+    <span class="lineart">╰──</span> hb_memory_mode_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-blob.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-blob.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-blob-create"></a><h3>hb_blob_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_blob_create (<em class="parameter"><code>const <span class="type">char</span> *data</code></em>,
+                <em class="parameter"><code>unsigned <span class="type">int</span> length</code></em>,
+                <em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-memory-mode-t" title="enum hb_memory_mode_t"><span class="type">hb_memory_mode_t</span></a> mode</code></em>,
+                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp8155232"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-create-sub-blob"></a><h3>hb_blob_create_sub_blob ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_blob_create_sub_blob (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *parent</code></em>,
+                         <em class="parameter"><code>unsigned <span class="type">int</span> offset</code></em>,
+                         <em class="parameter"><code>unsigned <span class="type">int</span> length</code></em>);</pre>
+<p>Returns a blob that represents a range of bytes in <em class="parameter"><code>parent</code></em>
+.  The new
+blob is always created with <a class="link" href="harfbuzz-hb-blob.html#HB-MEMORY-MODE-READONLY:CAPS"><code class="literal">HB_MEMORY_MODE_READONLY</code></a>, meaning that it
+will never modify data in the parent blob.  The parent data is not
+expected to be modified, and will result in undefined behavior if it
+is.</p>
+<p>Makes <em class="parameter"><code>parent</code></em>
+ immutable.</p>
+<div class="refsect3">
+<a name="idp17402736"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p>Parent blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>Start offset of sub-blob within <em class="parameter"><code>parent</code></em>
+, in bytes.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length of sub-blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp17140192"></a><h4>Returns</h4>
+<p> New blob, or the empty blob if something failed or if
+<em class="parameter"><code>length</code></em>
+is zero or <em class="parameter"><code>offset</code></em>
+is beyond the end of <em class="parameter"><code>parent</code></em>
+'s data.  Destroy
+with <a class="link" href="harfbuzz-hb-blob.html#hb-blob-destroy" title="hb_blob_destroy ()"><code class="function">hb_blob_destroy()</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-destroy"></a><h3>hb_blob_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_blob_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>);</pre>
+<p>Descreases the reference count on <em class="parameter"><code>blob</code></em>
+, and if it reaches zero, destroys
+<em class="parameter"><code>blob</code></em>
+, freeing all memory, possibly calling the destroy-callback the blob
+was created for if it has not been called already.</p>
+<p>See TODO:link object types for more information.</p>
+<div class="refsect3">
+<a name="idp18089520"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-get-data"></a><h3>hb_blob_get_data ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_blob_get_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> *length</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21534832"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21133808"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-get-data-writable"></a><h3>hb_blob_get_data_writable ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+hb_blob_get_data_writable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
+                           <em class="parameter"><code>unsigned <span class="type">int</span> *length</code></em>);</pre>
+<p>Tries to make blob data writable (possibly copying it) and
+return pointer to data.</p>
+<p>Fails if blob has been made immutable, or if memory allocation
+fails.</p>
+<div class="refsect3">
+<a name="idp21147760"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p> output length of the writable data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21159888"></a><h4>Returns</h4>
+<p> Writable blob data,
+or <code class="literal">NULL</code> if failed. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-get-empty"></a><h3>hb_blob_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_blob_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Returns the singleton empty blob.</p>
+<p>See TODO:link object types for more information.</p>
+<div class="refsect3">
+<a name="idp21172704"></a><h4>Returns</h4>
+<p> the empty blob. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-get-length"></a><h3>hb_blob_get_length ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_blob_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21183504"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21191904"></a><h4>Returns</h4>
+<p> the length of blob data in bytes.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-get-user-data"></a><h3>hb_blob_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_blob_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21203104"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>key for data to get.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21214112"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-is-immutable"></a><h3>hb_blob_is_immutable ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_blob_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21224768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21233168"></a><h4>Returns</h4>
+<p> TODO</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-make-immutable"></a><h3>hb_blob_make_immutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_blob_make_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21242720"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-reference"></a><h3>hb_blob_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_blob_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>);</pre>
+<p>Increases the reference count on <em class="parameter"><code>blob</code></em>
+.</p>
+<p>See TODO:link object types for more information.</p>
+<div class="refsect3">
+<a name="idp21260576"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21268976"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>blob</code></em>
+.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-blob-set-user-data"></a><h3>hb_blob_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_blob_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                       <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21285920"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>blob</p></td>
+<td class="parameter_description"><p>a blob.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>key for data to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>data to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy</p></td>
+<td class="parameter_description"><p>callback to call when <em class="parameter"><code>data</code></em>
+is not needed anymore.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>replace</p></td>
+<td class="parameter_description"><p>whether to replace an existing data with the same key.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21305600"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-blob.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-blob-t"></a><h3>hb_blob_t</h3>
+<pre class="programlisting">typedef struct hb_blob_t hb_blob_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-memory-mode-t"></a><h3>enum hb_memory_mode_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21317472"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-MEMORY-MODE-DUPLICATE:CAPS"></a>HB_MEMORY_MODE_DUPLICATE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-MEMORY-MODE-READONLY:CAPS"></a>HB_MEMORY_MODE_READONLY</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-MEMORY-MODE-WRITABLE:CAPS"></a>HB_MEMORY_MODE_WRITABLE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-MEMORY-MODE-READONLY-MAY-MAKE-WRITABLE:CAPS"></a>HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-buffer.html b/docs/reference/html/harfbuzz-hb-buffer.html
new file mode 100644 (file)
index 0000000..a4214dd
--- /dev/null
@@ -0,0 +1,1780 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-buffer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-unicode.html" title="hb-unicode">
+<link rel="next" href="harfbuzz-hb-blob.html" title="hb-blob">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-buffer.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-buffer.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-unicode.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-blob.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-buffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-buffer.top_of_page"></a>hb-buffer</span></h2>
+<p>hb-buffer</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-buffer.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add" title="hb_buffer_add ()">hb_buffer_add</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf16" title="hb_buffer_add_utf16 ()">hb_buffer_add_utf16</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf32" title="hb_buffer_add_utf32 ()">hb_buffer_add_utf32</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-utf8" title="hb_buffer_add_utf8 ()">hb_buffer_add_utf8</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()">hb_buffer_add_codepoints</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-allocation-successful" title="hb_buffer_allocation_successful ()">hb_buffer_allocation_successful</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-clear-contents" title="hb_buffer_clear_contents ()">hb_buffer_clear_contents</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-create" title="hb_buffer_create ()">hb_buffer_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-deserialize-glyphs" title="hb_buffer_deserialize_glyphs ()">hb_buffer_deserialize_glyphs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-destroy" title="hb_buffer_destroy ()">hb_buffer_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t"><span class="returnvalue">hb_buffer_content_type_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-content-type" title="hb_buffer_get_content_type ()">hb_buffer_get_content_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-direction" title="hb_buffer_get_direction ()">hb_buffer_get_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-empty" title="hb_buffer_get_empty ()">hb_buffer_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="returnvalue">hb_buffer_flags_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-flags" title="hb_buffer_get_flags ()">hb_buffer_get_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-info-t"><span class="returnvalue">hb_glyph_info_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-infos" title="hb_buffer_get_glyph_infos ()">hb_buffer_get_glyph_infos</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-position-t"><span class="returnvalue">hb_glyph_position_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-positions" title="hb_buffer_get_glyph_positions ()">hb_buffer_get_glyph_positions</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-language" title="hb_buffer_get_language ()">hb_buffer_get_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-length" title="hb_buffer_get_length ()">hb_buffer_get_length</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-replacement-codepoint" title="hb_buffer_get_replacement_codepoint ()">hb_buffer_get_replacement_codepoint</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-script" title="hb_buffer_get_script ()">hb_buffer_get_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-segment-properties" title="hb_buffer_get_segment_properties ()">hb_buffer_get_segment_properties</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-unicode-funcs" title="hb_buffer_get_unicode_funcs ()">hb_buffer_get_unicode_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-get-user-data" title="hb_buffer_get_user_data ()">hb_buffer_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-guess-segment-properties" title="hb_buffer_guess_segment_properties ()">hb_buffer_guess_segment_properties</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-normalize-glyphs" title="hb_buffer_normalize_glyphs ()">hb_buffer_normalize_glyphs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-pre-allocate" title="hb_buffer_pre_allocate ()">hb_buffer_pre_allocate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reference" title="hb_buffer_reference ()">hb_buffer_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reset" title="hb_buffer_reset ()">hb_buffer_reset</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reverse" title="hb_buffer_reverse ()">hb_buffer_reverse</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-reverse-clusters" title="hb_buffer_reverse_clusters ()">hb_buffer_reverse_clusters</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="returnvalue">hb_buffer_serialize_format_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-from-string" title="hb_buffer_serialize_format_from_string ()">hb_buffer_serialize_format_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-to-string" title="hb_buffer_serialize_format_to_string ()">hb_buffer_serialize_format_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()">hb_buffer_serialize_glyphs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-list-formats" title="hb_buffer_serialize_list_formats ()">hb_buffer_serialize_list_formats</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-content-type" title="hb_buffer_set_content_type ()">hb_buffer_set_content_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()">hb_buffer_set_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-flags" title="hb_buffer_set_flags ()">hb_buffer_set_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-language" title="hb_buffer_set_language ()">hb_buffer_set_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-length" title="hb_buffer_set_length ()">hb_buffer_set_length</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()">hb_buffer_set_replacement_codepoint</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-script" title="hb_buffer_set_script ()">hb_buffer_set_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-segment-properties" title="hb_buffer_set_segment_properties ()">hb_buffer_set_segment_properties</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-unicode-funcs" title="hb_buffer_set_unicode_funcs ()">hb_buffer_set_unicode_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-set-user-data" title="hb_buffer_set_user_data ()">hb_buffer_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-equal" title="hb_segment_properties_equal ()">hb_segment_properties_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-hash" title="hb_segment_properties_hash ()">hb_segment_properties_hash</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-buffer-t"></a><a name="hb-glyph-info-t"></a><a name="hb-glyph-position-t"></a><a name="hb-segment-properties-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-buffer.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS" title="HB_SEGMENT_PROPERTIES_DEFAULT">HB_SEGMENT_PROPERTIES_DEFAULT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t">hb_buffer_content_type_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t">hb_buffer_flags_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t">hb_buffer_serialize_flags_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t">hb_buffer_serialize_format_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t">hb_buffer_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-info-t-struct" title="hb_glyph_info_t">hb_glyph_info_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-position-t-struct" title="hb_glyph_position_t">hb_glyph_position_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t-struct" title="hb_segment_properties_t">hb_segment_properties_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-buffer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">├──</span> hb_buffer_t
+    <span class="lineart">├──</span> hb_glyph_info_t
+    <span class="lineart">├──</span> hb_glyph_position_t
+    <span class="lineart">╰──</span> hb_segment_properties_t
+    GEnum
+    <span class="lineart">├──</span> hb_buffer_content_type_t
+    <span class="lineart">╰──</span> hb_buffer_serialize_format_t
+    GFlags
+    <span class="lineart">├──</span> hb_buffer_flags_t
+    <span class="lineart">╰──</span> hb_buffer_serialize_flags_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-buffer.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-buffer.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-buffer-add"></a><h3>hb_buffer_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_add (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+               <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>,
+               <em class="parameter"><code>unsigned <span class="type">int</span> cluster</code></em>);</pre>
+<div class="refsect3">
+<a name="idp20929456"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-add-utf16"></a><h3>hb_buffer_add_utf16 ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_add_utf16 (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                     <em class="parameter"><code>const <span class="type">uint16_t</span> *text</code></em>,
+                     <em class="parameter"><code><span class="type">int</span> text_length</code></em>,
+                     <em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
+                     <em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
+<div class="refsect3">
+<a name="idp20952352"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=text_length]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-add-utf32"></a><h3>hb_buffer_add_utf32 ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_add_utf32 (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                     <em class="parameter"><code>const <span class="type">uint32_t</span> *text</code></em>,
+                     <em class="parameter"><code><span class="type">int</span> text_length</code></em>,
+                     <em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
+                     <em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
+<div class="refsect3">
+<a name="idp20978960"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=text_length]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-add-utf8"></a><h3>hb_buffer_add_utf8 ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_add_utf8 (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                    <em class="parameter"><code>const <span class="type">char</span> *text</code></em>,
+                    <em class="parameter"><code><span class="type">int</span> text_length</code></em>,
+                    <em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
+                    <em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21005488"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=text_length]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-add-codepoints"></a><h3>hb_buffer_add_codepoints ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_add_codepoints (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                          <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *text</code></em>,
+                          <em class="parameter"><code><span class="type">int</span> text_length</code></em>,
+                          <em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
+                          <em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-allocation-successful"></a><h3>hb_buffer_allocation_successful ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_buffer_allocation_successful (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21039872"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21048272"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-clear-contents"></a><h3>hb_buffer_clear_contents ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_clear_contents (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21057392"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-create"></a><h3>hb_buffer_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+hb_buffer_create (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21072704"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-deserialize-glyphs"></a><h3>hb_buffer_deserialize_glyphs ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_buffer_deserialize_glyphs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                              <em class="parameter"><code>const <span class="type">char</span> *buf</code></em>,
+                              <em class="parameter"><code><span class="type">int</span> buf_len</code></em>,
+                              <em class="parameter"><code>const <span class="type">char</span> **end_ptr</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21089760"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=buf_len]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>end_ptr</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22503936"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-destroy"></a><h3>hb_buffer_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22511728"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-content-type"></a><h3>hb_buffer_get_content_type ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t"><span class="returnvalue">hb_buffer_content_type_t</span></a>
+hb_buffer_get_content_type (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22525760"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22533264"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-direction"></a><h3>hb_buffer_get_direction ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+hb_buffer_get_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22541056"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22548560"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-empty"></a><h3>hb_buffer_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+hb_buffer_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp22555808"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-flags"></a><h3>hb_buffer_get_flags ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="returnvalue">hb_buffer_flags_t</span></a>
+hb_buffer_get_flags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22565008"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22572512"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-glyph-infos"></a><h3>hb_buffer_get_glyph_infos ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-info-t"><span class="returnvalue">hb_glyph_info_t</span></a> *
+hb_buffer_get_glyph_infos (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                           <em class="parameter"><code>unsigned <span class="type">int</span> *length</code></em>);</pre>
+<p>Returns buffer glyph information array.  Returned pointer
+is valid as long as buffer contents are not modified.</p>
+<div class="refsect3">
+<a name="idp22582256"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p> output array length. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22593088"></a><h4>Returns</h4>
+<p> buffer glyph information array. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-glyph-positions"></a><h3>hb_buffer_get_glyph_positions ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-position-t"><span class="returnvalue">hb_glyph_position_t</span></a> *
+hb_buffer_get_glyph_positions (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                               <em class="parameter"><code>unsigned <span class="type">int</span> *length</code></em>);</pre>
+<p>Returns buffer glyph position array.  Returned pointer
+is valid as long as buffer contents are not modified.</p>
+<div class="refsect3">
+<a name="idp22604800"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p> output length. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22615632"></a><h4>Returns</h4>
+<p> buffer glyph position array. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-language"></a><h3>hb_buffer_get_language ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+hb_buffer_get_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22625264"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22632768"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-length"></a><h3>hb_buffer_get_length ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_buffer_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<p>Returns the number of items in the buffer.</p>
+<div class="refsect3">
+<a name="idp22641136"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22648640"></a><h4>Returns</h4>
+<p> buffer length.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-replacement-codepoint"></a><h3>hb_buffer_get_replacement_codepoint ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+hb_buffer_get_replacement_codepoint (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-script"></a><h3>hb_buffer_get_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_buffer_get_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22663392"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22670896"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-segment-properties"></a><h3>hb_buffer_get_segment_properties ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_get_segment_properties (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22680064"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-unicode-funcs"></a><h3>hb_buffer_get_unicode_funcs ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_buffer_get_unicode_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22694096"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22701600"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-get-user-data"></a><h3>hb_buffer_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_buffer_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22710768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22718272"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-guess-segment-properties"></a><h3>hb_buffer_guess_segment_properties ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_guess_segment_properties (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<p>Sets unset buffer segment properties based on buffer Unicode
+contents.  If buffer is not empty, it must have content type
+<a class="link" href="harfbuzz-hb-buffer.html#HB-BUFFER-CONTENT-TYPE-UNICODE:CAPS"><code class="literal">HB_BUFFER_CONTENT_TYPE_UNICODE</code></a>.</p>
+<p>If buffer script is not set (ie. is <a class="link" href="harfbuzz-hb-common.html#HB-SCRIPT-INVALID:CAPS"><code class="literal">HB_SCRIPT_INVALID</code></a>), it
+will be set to the Unicode script of the first character in
+the buffer that has a script other than <a class="link" href="harfbuzz-hb-common.html#HB-SCRIPT-COMMON:CAPS"><code class="literal">HB_SCRIPT_COMMON</code></a>,
+<a class="link" href="harfbuzz-hb-common.html#HB-SCRIPT-INHERITED:CAPS"><code class="literal">HB_SCRIPT_INHERITED</code></a>, and <a class="link" href="harfbuzz-hb-common.html#HB-SCRIPT-UNKNOWN:CAPS"><code class="literal">HB_SCRIPT_UNKNOWN</code></a>.</p>
+<p>Next, if buffer direction is not set (ie. is <a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-INVALID:CAPS"><code class="literal">HB_DIRECTION_INVALID</code></a>),
+it will be set to the natural horizontal direction of the
+buffer script as returned by <a class="link" href="harfbuzz-hb-common.html#hb-script-get-horizontal-direction" title="hb_script_get_horizontal_direction ()"><code class="function">hb_script_get_horizontal_direction()</code></a>.</p>
+<p>Finally, if buffer language is not set (ie. is <a class="link" href="harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS" title="HB_LANGUAGE_INVALID"><code class="literal">HB_LANGUAGE_INVALID</code></a>),
+it will be set to the process's default language as returned by
+<a class="link" href="harfbuzz-hb-common.html#hb-language-get-default" title="hb_language_get_default ()"><code class="function">hb_language_get_default()</code></a>.  This may change in the future by
+taking buffer script into consideration when choosing a language.</p>
+<div class="refsect3">
+<a name="idp22738080"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-normalize-glyphs"></a><h3>hb_buffer_normalize_glyphs ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_normalize_glyphs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22752112"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-pre-allocate"></a><h3>hb_buffer_pre_allocate ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_buffer_pre_allocate (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                        <em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22767664"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22775168"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-reference"></a><h3>hb_buffer_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
+hb_buffer_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22782960"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22790464"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-reset"></a><h3>hb_buffer_reset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_reset (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22799664"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-reverse"></a><h3>hb_buffer_reverse ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_reverse (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<p>Reverses buffer contents.</p>
+<div class="refsect3">
+<a name="idp22814128"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-reverse-clusters"></a><h3>hb_buffer_reverse_clusters ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_reverse_clusters (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
+<p>Reverses buffer clusters.  That is, the buffer contents are
+reversed, then each cluster (consecutive items having the
+same cluster number) are reversed again.</p>
+<div class="refsect3">
+<a name="idp22828768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-format-from-string"></a><h3>hb_buffer_serialize_format_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="returnvalue">hb_buffer_serialize_format_t</span></a>
+hb_buffer_serialize_format_from_string
+                               (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+                                <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22844320"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-format-to-string"></a><h3>hb_buffer_serialize_format_to_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_buffer_serialize_format_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22852256"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-glyphs"></a><h3>hb_buffer_serialize_glyphs ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_buffer_serialize_glyphs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                            <em class="parameter"><code>unsigned <span class="type">int</span> start</code></em>,
+                            <em class="parameter"><code>unsigned <span class="type">int</span> end</code></em>,
+                            <em class="parameter"><code><span class="type">char</span> *buf</code></em>,
+                            <em class="parameter"><code>unsigned <span class="type">int</span> buf_size</code></em>,
+                            <em class="parameter"><code>unsigned <span class="type">int</span> *buf_consumed</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t"><span class="type">hb_buffer_serialize_flags_t</span></a> flags</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22871776"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=buf_size]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf_consumed</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22885936"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-list-formats"></a><h3>hb_buffer_serialize_list_formats ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> **
+hb_buffer_serialize_list_formats (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp22893328"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-content-type"></a><h3>hb_buffer_set_content_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_content_type (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t"><span class="type">hb_buffer_content_type_t</span></a> content_type</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22903904"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-direction"></a><h3>hb_buffer_set_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22919312"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-flags"></a><h3>hb_buffer_set_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_flags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="type">hb_buffer_flags_t</span></a> flags</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22934720"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-language"></a><h3>hb_buffer_set_language ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22950128"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-length"></a><h3>hb_buffer_set_length ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_buffer_set_length (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                      <em class="parameter"><code>unsigned <span class="type">int</span> length</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22965680"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22973184"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-replacement-codepoint"></a><h3>hb_buffer_set_replacement_codepoint ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_replacement_codepoint (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> replacement</code></em>);</pre>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-script"></a><h3>hb_buffer_set_script ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22990256"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-segment-properties"></a><h3>hb_buffer_set_segment_properties ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_segment_properties (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                                  <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23005808"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-unicode-funcs"></a><h3>hb_buffer_set_unicode_funcs ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_buffer_set_unicode_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *unicode_funcs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23021216"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-set-user-data"></a><h3>hb_buffer_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_buffer_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                         <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23040752"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23048256"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-segment-properties-equal"></a><h3>hb_segment_properties_equal ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_segment_properties_equal (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *a</code></em>,
+                             <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *b</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23057632"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-segment-properties-hash"></a><h3>hb_segment_properties_hash ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *p</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23065088"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-buffer.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-SEGMENT-PROPERTIES-DEFAULT:CAPS"></a><h3>HB_SEGMENT_PROPERTIES_DEFAULT</h3>
+<pre class="programlisting">#define             HB_SEGMENT_PROPERTIES_DEFAULT</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-content-type-t"></a><h3>enum hb_buffer_content_type_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23074720"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-CONTENT-TYPE-INVALID:CAPS"></a>HB_BUFFER_CONTENT_TYPE_INVALID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-CONTENT-TYPE-UNICODE:CAPS"></a>HB_BUFFER_CONTENT_TYPE_UNICODE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-CONTENT-TYPE-GLYPHS:CAPS"></a>HB_BUFFER_CONTENT_TYPE_GLYPHS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-flags-t"></a><h3>enum hb_buffer_flags_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23090928"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-FLAG-DEFAULT:CAPS"></a>HB_BUFFER_FLAG_DEFAULT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-FLAG-BOT:CAPS"></a>HB_BUFFER_FLAG_BOT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-FLAG-EOT:CAPS"></a>HB_BUFFER_FLAG_EOT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-FLAG-PRESERVE-DEFAULT-IGNORABLES:CAPS"></a>HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-flags-t"></a><h3>enum hb_buffer_serialize_flags_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23110400"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FLAG-DEFAULT:CAPS"></a>HB_BUFFER_SERIALIZE_FLAG_DEFAULT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FLAG-NO-CLUSTERS:CAPS"></a>HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FLAG-NO-POSITIONS:CAPS"></a>HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FLAG-NO-GLYPH-NAMES:CAPS"></a>HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-serialize-format-t"></a><h3>enum hb_buffer_serialize_format_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23132992"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FORMAT-TEXT:CAPS"></a>HB_BUFFER_SERIALIZE_FORMAT_TEXT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FORMAT-JSON:CAPS"></a>HB_BUFFER_SERIALIZE_FORMAT_JSON</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FORMAT-INVALID:CAPS"></a>HB_BUFFER_SERIALIZE_FORMAT_INVALID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-buffer-t"></a><h3>hb_buffer_t</h3>
+<pre class="programlisting">typedef struct hb_buffer_t hb_buffer_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-glyph-info-t-struct"></a><h3>hb_glyph_info_t</h3>
+<pre class="programlisting">typedef struct {
+  hb_codepoint_t codepoint;
+  hb_mask_t      mask;
+  uint32_t       cluster;
+} hb_glyph_info_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-glyph-position-t-struct"></a><h3>hb_glyph_position_t</h3>
+<pre class="programlisting">typedef struct {
+  hb_position_t  x_advance;
+  hb_position_t  y_advance;
+  hb_position_t  x_offset;
+  hb_position_t  y_offset;
+} hb_glyph_position_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-segment-properties-t-struct"></a><h3>hb_segment_properties_t</h3>
+<pre class="programlisting">typedef struct {
+  hb_direction_t  direction;
+  hb_script_t     script;
+  hb_language_t   language;
+} hb_segment_properties_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-common.html b/docs/reference/html/harfbuzz-hb-common.html
new file mode 100644 (file)
index 0000000..47aedb6
--- /dev/null
@@ -0,0 +1,1337 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-common</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb.html" title="hb">
+<link rel="next" href="harfbuzz-hb-unicode.html" title="hb-unicode">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-common.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-common.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-unicode.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-common"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-common.top_of_page"></a>hb-common</span></h2>
+<p>hb-common</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-common.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-REVERSE:CAPS" title="HB_DIRECTION_REVERSE()">HB_DIRECTION_REVERSE</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS" title="HB_LANGUAGE_INVALID">HB_LANGUAGE_INVALID</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-TAG:CAPS" title="HB_TAG()">HB_TAG</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-UNTAG:CAPS" title="HB_UNTAG()">HB_UNTAG</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()">*hb_destroy_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-from-string" title="hb_direction_from_string ()">hb_direction_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-to-string" title="hb_direction_to_string ()">hb_direction_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-from-string" title="hb_language_from_string ()">hb_language_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-get-default" title="hb_language_get_default ()">hb_language_get_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-to-string" title="hb_language_to_string ()">hb_language_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()">hb_script_from_iso15924_tag</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-from-string" title="hb_script_from_string ()">hb_script_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-get-horizontal-direction" title="hb_script_get_horizontal_direction ()">hb_script_get_horizontal_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-to-iso15924-tag" title="hb_script_to_iso15924_tag ()">hb_script_to_iso15924_tag</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-from-string" title="hb_tag_from_string ()">hb_tag_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-to-string" title="hb_tag_to_string ()">hb_tag_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-BACKWARD:CAPS" title="HB_DIRECTION_IS_BACKWARD()">HB_DIRECTION_IS_BACKWARD</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-FORWARD:CAPS" title="HB_DIRECTION_IS_FORWARD()">HB_DIRECTION_IS_FORWARD</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-HORIZONTAL:CAPS" title="HB_DIRECTION_IS_HORIZONTAL()">HB_DIRECTION_IS_HORIZONTAL</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-VALID:CAPS" title="HB_DIRECTION_IS_VALID()">HB_DIRECTION_IS_VALID</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-common.html#HB-DIRECTION-IS-VERTICAL:CAPS" title="HB_DIRECTION_IS_VERTICAL()">HB_DIRECTION_IS_VERTICAL</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-language-t"></a><a name="hb-user-data-key-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-common.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#HB-TAG-NONE:CAPS" title="HB_TAG_NONE">HB_TAG_NONE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#HB-TAG-MAX:CAPS" title="HB_TAG_MAX">HB_TAG_MAX</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t">hb_bool_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t">hb_codepoint_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t">hb_direction_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-language-t">hb_language_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-mask-t" title="hb_mask_t">hb_mask_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t">hb_position_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t">hb_script_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t">hb_tag_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t-struct" title="hb_user_data_key_t">hb_user_data_key_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-var-int-t" title="hb_var_int_t">hb_var_int_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-common.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">├──</span> hb_language_t
+    <span class="lineart">╰──</span> hb_user_data_key_t
+    GEnum
+    <span class="lineart">├──</span> hb_direction_t
+    <span class="lineart">╰──</span> hb_script_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-common.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-common.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="HB-DIRECTION-REVERSE:CAPS"></a><h3>HB_DIRECTION_REVERSE()</h3>
+<pre class="programlisting">#define HB_DIRECTION_REVERSE(dir) ((hb_direction_t) (((unsigned int) (dir)) ^ 1))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-LANGUAGE-INVALID:CAPS"></a><h3>HB_LANGUAGE_INVALID</h3>
+<pre class="programlisting">#define HB_LANGUAGE_INVALID ((hb_language_t) NULL)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-TAG:CAPS"></a><h3>HB_TAG()</h3>
+<pre class="programlisting">#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint8_t)(c1))&lt;&lt;24)|(((uint8_t)(c2))&lt;&lt;16)|(((uint8_t)(c3))&lt;&lt;8)|((uint8_t)(c4))))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-UNTAG:CAPS"></a><h3>HB_UNTAG()</h3>
+<pre class="programlisting">#define HB_UNTAG(tag)   ((uint8_t)((tag)&gt;&gt;24)), ((uint8_t)((tag)&gt;&gt;16)), ((uint8_t)((tag)&gt;&gt;8)), ((uint8_t)(tag))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-destroy-func-t"></a><h3>hb_destroy_func_t ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*hb_destroy_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-direction-from-string"></a><h3>hb_direction_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+hb_direction_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+                          <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="refsect3">
+<a name="idp18987296"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp18996800"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-direction-to-string"></a><h3>hb_direction_to_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_direction_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19006032"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-language-from-string"></a><h3>hb_language_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+hb_language_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+                         <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19018560"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19028064"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-language-get-default"></a><h3>hb_language_get_default ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+hb_language_get_default (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp19036576"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-language-to-string"></a><h3>hb_language_to_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_language_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19045808"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-script-from-iso15924-tag"></a><h3>hb_script_from_iso15924_tag ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_script_from_iso15924_tag (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19056528"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-script-from-string"></a><h3>hb_script_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_script_from_string (<em class="parameter"><code>const <span class="type">char</span> *s</code></em>,
+                       <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19067392"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>s</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19076896"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-script-get-horizontal-direction"></a><h3>hb_script_get_horizontal_direction ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+hb_script_get_horizontal_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19086016"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-script-to-iso15924-tag"></a><h3>hb_script_to_iso15924_tag ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+hb_script_to_iso15924_tag (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19095136"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-tag-from-string"></a><h3>hb_tag_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+hb_tag_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+                    <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19105952"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19115456"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-tag-to-string"></a><h3>hb_tag_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_tag_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>,
+                  <em class="parameter"><code><span class="type">char</span> *buf</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19126096"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> fixed-size=4]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-DIRECTION-IS-BACKWARD:CAPS"></a><h3>HB_DIRECTION_IS_BACKWARD()</h3>
+<pre class="programlisting">#define HB_DIRECTION_IS_BACKWARD(dir) ((((unsigned int) (dir)) &amp; ~2U) == 5)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-DIRECTION-IS-FORWARD:CAPS"></a><h3>HB_DIRECTION_IS_FORWARD()</h3>
+<pre class="programlisting">#define HB_DIRECTION_IS_FORWARD(dir) ((((unsigned int) (dir)) &amp; ~2U) == 4)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-DIRECTION-IS-HORIZONTAL:CAPS"></a><h3>HB_DIRECTION_IS_HORIZONTAL()</h3>
+<pre class="programlisting">#define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) &amp; ~1U) == 4)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-DIRECTION-IS-VALID:CAPS"></a><h3>HB_DIRECTION_IS_VALID()</h3>
+<pre class="programlisting">#define HB_DIRECTION_IS_VALID(dir) ((((unsigned int) (dir)) &amp; ~3U) == 4)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-DIRECTION-IS-VERTICAL:CAPS"></a><h3>HB_DIRECTION_IS_VERTICAL()</h3>
+<pre class="programlisting">#define HB_DIRECTION_IS_VERTICAL(dir) ((((unsigned int) (dir)) &amp; ~1U) == 6)
+</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-common.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-TAG-NONE:CAPS"></a><h3>HB_TAG_NONE</h3>
+<pre class="programlisting">#define HB_TAG_NONE HB_TAG(0,0,0,0)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-TAG-MAX:CAPS"></a><h3>HB_TAG_MAX</h3>
+<pre class="programlisting">#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-bool-t"></a><h3>hb_bool_t</h3>
+<pre class="programlisting">typedef int hb_bool_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-codepoint-t"></a><h3>hb_codepoint_t</h3>
+<pre class="programlisting">typedef uint32_t hb_codepoint_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-direction-t"></a><h3>enum hb_direction_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19182160"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-DIRECTION-INVALID:CAPS"></a>HB_DIRECTION_INVALID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-DIRECTION-LTR:CAPS"></a>HB_DIRECTION_LTR</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-DIRECTION-RTL:CAPS"></a>HB_DIRECTION_RTL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-DIRECTION-TTB:CAPS"></a>HB_DIRECTION_TTB</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-DIRECTION-BTT:CAPS"></a>HB_DIRECTION_BTT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-language-t"></a><h3>hb_language_t</h3>
+<pre class="programlisting">typedef const struct hb_language_impl_t *hb_language_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-mask-t"></a><h3>hb_mask_t</h3>
+<pre class="programlisting">typedef uint32_t hb_mask_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-position-t"></a><h3>hb_position_t</h3>
+<pre class="programlisting">typedef int32_t hb_position_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-script-t"></a><h3>enum hb_script_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19220528"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-COMMON:CAPS"></a>HB_SCRIPT_COMMON</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-INHERITED:CAPS"></a>HB_SCRIPT_INHERITED</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-UNKNOWN:CAPS"></a>HB_SCRIPT_UNKNOWN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-ARABIC:CAPS"></a>HB_SCRIPT_ARABIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-ARMENIAN:CAPS"></a>HB_SCRIPT_ARMENIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BENGALI:CAPS"></a>HB_SCRIPT_BENGALI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CYRILLIC:CAPS"></a>HB_SCRIPT_CYRILLIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-DEVANAGARI:CAPS"></a>HB_SCRIPT_DEVANAGARI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GEORGIAN:CAPS"></a>HB_SCRIPT_GEORGIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GREEK:CAPS"></a>HB_SCRIPT_GREEK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GUJARATI:CAPS"></a>HB_SCRIPT_GUJARATI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GURMUKHI:CAPS"></a>HB_SCRIPT_GURMUKHI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-HANGUL:CAPS"></a>HB_SCRIPT_HANGUL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-HAN:CAPS"></a>HB_SCRIPT_HAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-HEBREW:CAPS"></a>HB_SCRIPT_HEBREW</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-HIRAGANA:CAPS"></a>HB_SCRIPT_HIRAGANA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KANNADA:CAPS"></a>HB_SCRIPT_KANNADA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KATAKANA:CAPS"></a>HB_SCRIPT_KATAKANA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LAO:CAPS"></a>HB_SCRIPT_LAO</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LATIN:CAPS"></a>HB_SCRIPT_LATIN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MALAYALAM:CAPS"></a>HB_SCRIPT_MALAYALAM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-ORIYA:CAPS"></a>HB_SCRIPT_ORIYA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAMIL:CAPS"></a>HB_SCRIPT_TAMIL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TELUGU:CAPS"></a>HB_SCRIPT_TELUGU</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-THAI:CAPS"></a>HB_SCRIPT_THAI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TIBETAN:CAPS"></a>HB_SCRIPT_TIBETAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BOPOMOFO:CAPS"></a>HB_SCRIPT_BOPOMOFO</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BRAILLE:CAPS"></a>HB_SCRIPT_BRAILLE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CANADIAN-SYLLABICS:CAPS"></a>HB_SCRIPT_CANADIAN_SYLLABICS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CHEROKEE:CAPS"></a>HB_SCRIPT_CHEROKEE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-ETHIOPIC:CAPS"></a>HB_SCRIPT_ETHIOPIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KHMER:CAPS"></a>HB_SCRIPT_KHMER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MONGOLIAN:CAPS"></a>HB_SCRIPT_MONGOLIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MYANMAR:CAPS"></a>HB_SCRIPT_MYANMAR</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OGHAM:CAPS"></a>HB_SCRIPT_OGHAM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-RUNIC:CAPS"></a>HB_SCRIPT_RUNIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SINHALA:CAPS"></a>HB_SCRIPT_SINHALA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SYRIAC:CAPS"></a>HB_SCRIPT_SYRIAC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-THAANA:CAPS"></a>HB_SCRIPT_THAANA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-YI:CAPS"></a>HB_SCRIPT_YI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-DESERET:CAPS"></a>HB_SCRIPT_DESERET</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GOTHIC:CAPS"></a>HB_SCRIPT_GOTHIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-ITALIC:CAPS"></a>HB_SCRIPT_OLD_ITALIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BUHID:CAPS"></a>HB_SCRIPT_BUHID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-HANUNOO:CAPS"></a>HB_SCRIPT_HANUNOO</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAGALOG:CAPS"></a>HB_SCRIPT_TAGALOG</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAGBANWA:CAPS"></a>HB_SCRIPT_TAGBANWA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CYPRIOT:CAPS"></a>HB_SCRIPT_CYPRIOT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LIMBU:CAPS"></a>HB_SCRIPT_LIMBU</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LINEAR-B:CAPS"></a>HB_SCRIPT_LINEAR_B</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OSMANYA:CAPS"></a>HB_SCRIPT_OSMANYA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SHAVIAN:CAPS"></a>HB_SCRIPT_SHAVIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAI-LE:CAPS"></a>HB_SCRIPT_TAI_LE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-UGARITIC:CAPS"></a>HB_SCRIPT_UGARITIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BUGINESE:CAPS"></a>HB_SCRIPT_BUGINESE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-COPTIC:CAPS"></a>HB_SCRIPT_COPTIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GLAGOLITIC:CAPS"></a>HB_SCRIPT_GLAGOLITIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KHAROSHTHI:CAPS"></a>HB_SCRIPT_KHAROSHTHI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-NEW-TAI-LUE:CAPS"></a>HB_SCRIPT_NEW_TAI_LUE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-PERSIAN:CAPS"></a>HB_SCRIPT_OLD_PERSIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SYLOTI-NAGRI:CAPS"></a>HB_SCRIPT_SYLOTI_NAGRI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TIFINAGH:CAPS"></a>HB_SCRIPT_TIFINAGH</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BALINESE:CAPS"></a>HB_SCRIPT_BALINESE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CUNEIFORM:CAPS"></a>HB_SCRIPT_CUNEIFORM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-NKO:CAPS"></a>HB_SCRIPT_NKO</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PHAGS-PA:CAPS"></a>HB_SCRIPT_PHAGS_PA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PHOENICIAN:CAPS"></a>HB_SCRIPT_PHOENICIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CARIAN:CAPS"></a>HB_SCRIPT_CARIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CHAM:CAPS"></a>HB_SCRIPT_CHAM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KAYAH-LI:CAPS"></a>HB_SCRIPT_KAYAH_LI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LEPCHA:CAPS"></a>HB_SCRIPT_LEPCHA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LYCIAN:CAPS"></a>HB_SCRIPT_LYCIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LYDIAN:CAPS"></a>HB_SCRIPT_LYDIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OL-CHIKI:CAPS"></a>HB_SCRIPT_OL_CHIKI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-REJANG:CAPS"></a>HB_SCRIPT_REJANG</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SAURASHTRA:CAPS"></a>HB_SCRIPT_SAURASHTRA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SUNDANESE:CAPS"></a>HB_SCRIPT_SUNDANESE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-VAI:CAPS"></a>HB_SCRIPT_VAI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-AVESTAN:CAPS"></a>HB_SCRIPT_AVESTAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BAMUM:CAPS"></a>HB_SCRIPT_BAMUM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-EGYPTIAN-HIEROGLYPHS:CAPS"></a>HB_SCRIPT_EGYPTIAN_HIEROGLYPHS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-IMPERIAL-ARAMAIC:CAPS"></a>HB_SCRIPT_IMPERIAL_ARAMAIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-INSCRIPTIONAL-PAHLAVI:CAPS"></a>HB_SCRIPT_INSCRIPTIONAL_PAHLAVI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-INSCRIPTIONAL-PARTHIAN:CAPS"></a>HB_SCRIPT_INSCRIPTIONAL_PARTHIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-JAVANESE:CAPS"></a>HB_SCRIPT_JAVANESE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KAITHI:CAPS"></a>HB_SCRIPT_KAITHI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LISU:CAPS"></a>HB_SCRIPT_LISU</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MEETEI-MAYEK:CAPS"></a>HB_SCRIPT_MEETEI_MAYEK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-SOUTH-ARABIAN:CAPS"></a>HB_SCRIPT_OLD_SOUTH_ARABIAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-TURKIC:CAPS"></a>HB_SCRIPT_OLD_TURKIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SAMARITAN:CAPS"></a>HB_SCRIPT_SAMARITAN</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAI-THAM:CAPS"></a>HB_SCRIPT_TAI_THAM</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAI-VIET:CAPS"></a>HB_SCRIPT_TAI_VIET</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BATAK:CAPS"></a>HB_SCRIPT_BATAK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BRAHMI:CAPS"></a>HB_SCRIPT_BRAHMI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MANDAIC:CAPS"></a>HB_SCRIPT_MANDAIC</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CHAKMA:CAPS"></a>HB_SCRIPT_CHAKMA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MEROITIC-CURSIVE:CAPS"></a>HB_SCRIPT_MEROITIC_CURSIVE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MEROITIC-HIEROGLYPHS:CAPS"></a>HB_SCRIPT_MEROITIC_HIEROGLYPHS</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MIAO:CAPS"></a>HB_SCRIPT_MIAO</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SHARADA:CAPS"></a>HB_SCRIPT_SHARADA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SORA-SOMPENG:CAPS"></a>HB_SCRIPT_SORA_SOMPENG</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TAKRI:CAPS"></a>HB_SCRIPT_TAKRI</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-BASSA-VAH:CAPS"></a>HB_SCRIPT_BASSA_VAH</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-CAUCASIAN-ALBANIAN:CAPS"></a>HB_SCRIPT_CAUCASIAN_ALBANIAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-DUPLOYAN:CAPS"></a>HB_SCRIPT_DUPLOYAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-ELBASAN:CAPS"></a>HB_SCRIPT_ELBASAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-GRANTHA:CAPS"></a>HB_SCRIPT_GRANTHA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KHOJKI:CAPS"></a>HB_SCRIPT_KHOJKI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-KHUDAWADI:CAPS"></a>HB_SCRIPT_KHUDAWADI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-LINEAR-A:CAPS"></a>HB_SCRIPT_LINEAR_A</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MAHAJANI:CAPS"></a>HB_SCRIPT_MAHAJANI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MANICHAEAN:CAPS"></a>HB_SCRIPT_MANICHAEAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MENDE-KIKAKUI:CAPS"></a>HB_SCRIPT_MENDE_KIKAKUI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MODI:CAPS"></a>HB_SCRIPT_MODI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MRO:CAPS"></a>HB_SCRIPT_MRO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-NABATAEAN:CAPS"></a>HB_SCRIPT_NABATAEAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-NORTH-ARABIAN:CAPS"></a>HB_SCRIPT_OLD_NORTH_ARABIAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-PERMIC:CAPS"></a>HB_SCRIPT_OLD_PERMIC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PAHAWH-HMONG:CAPS"></a>HB_SCRIPT_PAHAWH_HMONG</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PALMYRENE:CAPS"></a>HB_SCRIPT_PALMYRENE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PAU-CIN-HAU:CAPS"></a>HB_SCRIPT_PAU_CIN_HAU</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-PSALTER-PAHLAVI:CAPS"></a>HB_SCRIPT_PSALTER_PAHLAVI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-SIDDHAM:CAPS"></a>HB_SCRIPT_SIDDHAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-TIRHUTA:CAPS"></a>HB_SCRIPT_TIRHUTA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-WARANG-CITI:CAPS"></a>HB_SCRIPT_WARANG_CITI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-INVALID:CAPS"></a>HB_SCRIPT_INVALID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MAX-VALUE:CAPS"></a>_HB_SCRIPT_MAX_VALUE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-SCRIPT-MAX-VALUE-SIGNED:CAPS"></a>_HB_SCRIPT_MAX_VALUE_SIGNED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-tag-t"></a><h3>hb_tag_t</h3>
+<pre class="programlisting">typedef uint32_t hb_tag_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-user-data-key-t-struct"></a><h3>hb_user_data_key_t</h3>
+<pre class="programlisting">typedef struct {
+} hb_user_data_key_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-var-int-t"></a><h3>hb_var_int_t</h3>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-coretext.html b/docs/reference/html/harfbuzz-hb-coretext.html
new file mode 100644 (file)
index 0000000..939d711
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-coretext</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-uniscribe.html" title="hb-uniscribe">
+<link rel="next" href="harfbuzz-hb-gobject.html" title="hb-gobject">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-coretext.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-uniscribe.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-gobject.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-coretext"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-coretext.top_of_page"></a>hb-coretext</span></h2>
+<p>hb-coretext</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-coretext.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-face-create" title="hb_coretext_face_create ()">hb_coretext_face_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">CGFontRef</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-face-get-cg-font" title="hb_coretext_face_get_cg_font ()">hb_coretext_face_get_cg_font</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">CTFontRef</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-coretext.html#hb-coretext-font-get-ct-font" title="hb_coretext_font_get_ct_font ()">hb_coretext_font_get_ct_font</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-coretext.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORT:CAPS" title="HB_CORETEXT_TAG_MORT">HB_CORETEXT_TAG_MORT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORX:CAPS" title="HB_CORETEXT_TAG_MORX">HB_CORETEXT_TAG_MORX</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-coretext.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-coretext.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-coretext-face-create"></a><h3>hb_coretext_face_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_coretext_face_create (<em class="parameter"><code><span class="type">CGFontRef</span> cg_font</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-coretext-face-get-cg-font"></a><h3>hb_coretext_face_get_cg_font ()</h3>
+<pre class="programlisting"><span class="returnvalue">CGFontRef</span>
+hb_coretext_face_get_cg_font (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19763168"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-coretext-font-get-ct-font"></a><h3>hb_coretext_font_get_ct_font ()</h3>
+<pre class="programlisting"><span class="returnvalue">CTFontRef</span>
+hb_coretext_font_get_ct_font (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23989600"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-coretext.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-CORETEXT-TAG-MORT:CAPS"></a><h3>HB_CORETEXT_TAG_MORT</h3>
+<pre class="programlisting">#define HB_CORETEXT_TAG_MORT HB_TAG('m','o','r','t')
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-CORETEXT-TAG-MORX:CAPS"></a><h3>HB_CORETEXT_TAG_MORX</h3>
+<pre class="programlisting">#define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x')
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-deprecated.html b/docs/reference/html/harfbuzz-hb-deprecated.html
new file mode 100644 (file)
index 0000000..09961c1
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-deprecated</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-version.html" title="hb-version">
+<link rel="next" href="harfbuzz-hb-set.html" title="hb-set">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-deprecated.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-version.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-set.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-deprecated"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-deprecated.top_of_page"></a>hb-deprecated</span></h2>
+<p>hb-deprecated</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-deprecated.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_FLAGS_DEFAULT">HB_BUFFER_FLAGS_DEFAULT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-deprecated.html#HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS" title="HB_BUFFER_SERIALIZE_FLAGS_DEFAULT">HB_BUFFER_SERIALIZE_FLAGS_DEFAULT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-deprecated.html#HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS" title="HB_SCRIPT_CANADIAN_ABORIGINAL">HB_SCRIPT_CANADIAN_ABORIGINAL</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-deprecated.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-deprecated.functions_details"></a><h2>Functions</h2>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-deprecated.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-BUFFER-FLAGS-DEFAULT:CAPS"></a><h3>HB_BUFFER_FLAGS_DEFAULT</h3>
+<pre class="programlisting">#define HB_BUFFER_FLAGS_DEFAULT                    HB_BUFFER_FLAG_DEFAULT
+</pre>
+<div class="warning"><p><code class="literal">HB_BUFFER_FLAGS_DEFAULT</code> is deprecated and should not be used in newly-written code.</p></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS"></a><h3>HB_BUFFER_SERIALIZE_FLAGS_DEFAULT</h3>
+<pre class="programlisting">#define HB_BUFFER_SERIALIZE_FLAGS_DEFAULT HB_BUFFER_SERIALIZE_FLAG_DEFAULT
+</pre>
+<div class="warning"><p><code class="literal">HB_BUFFER_SERIALIZE_FLAGS_DEFAULT</code> is deprecated and should not be used in newly-written code.</p></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS"></a><h3>HB_SCRIPT_CANADIAN_ABORIGINAL</h3>
+<pre class="programlisting">#define HB_SCRIPT_CANADIAN_ABORIGINAL              HB_SCRIPT_CANADIAN_SYLLABICS
+</pre>
+<div class="warning"><p><code class="literal">HB_SCRIPT_CANADIAN_ABORIGINAL</code> is deprecated and should not be used in newly-written code.</p></div>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-face.html b/docs/reference/html/harfbuzz-hb-face.html
new file mode 100644 (file)
index 0000000..4a2f856
--- /dev/null
@@ -0,0 +1,630 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-face</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-blob.html" title="hb-blob">
+<link rel="next" href="harfbuzz-hb-font.html" title="hb-font">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-face.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-face.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-blob.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-font.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-face"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-face.top_of_page"></a>hb-face</span></h2>
+<p>hb-face</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-face.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-create" title="hb_face_create ()">hb_face_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-create-for-tables" title="hb_face_create_for_tables ()">hb_face_create_for_tables</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-destroy" title="hb_face_destroy ()">hb_face_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-empty" title="hb_face_get_empty ()">hb_face_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-glyph-count" title="hb_face_get_glyph_count ()">hb_face_get_glyph_count</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-index" title="hb_face_get_index ()">hb_face_get_index</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-upem" title="hb_face_get_upem ()">hb_face_get_upem</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-get-user-data" title="hb_face_get_user_data ()">hb_face_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-is-immutable" title="hb_face_is_immutable ()">hb_face_is_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-make-immutable" title="hb_face_make_immutable ()">hb_face_make_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference" title="hb_face_reference ()">hb_face_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference-blob" title="hb_face_reference_blob ()">hb_face_reference_blob</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-reference-table" title="hb_face_reference_table ()">hb_face_reference_table</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-glyph-count" title="hb_face_set_glyph_count ()">hb_face_set_glyph_count</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-index" title="hb_face_set_index ()">hb_face_set_index</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-upem" title="hb_face_set_upem ()">hb_face_set_upem</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-set-user-data" title="hb_face_set_user_data ()">hb_face_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-face-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-face.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-face.html#hb-face-t">hb_face_t</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-face.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_face_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-face.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-face.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-face-create"></a><h3>hb_face_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_face_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
+                <em class="parameter"><code>unsigned <span class="type">int</span> index</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp17669104"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-create-for-tables"></a><h3>hb_face_create_for_tables ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_face_create_for_tables (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-reference-table-func-t" title="hb_reference_table_func_t ()"><span class="type">hb_reference_table_func_t</span></a> reference_table_func</code></em>,
+                           <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                           <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp16965008"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>reference_table_func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp17846736"></a><h4>Returns</h4>
+<p> (transfer full)</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-destroy"></a><h3>hb_face_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_face_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp14634400"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-get-empty"></a><h3>hb_face_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_face_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp21412768"></a><h4>Returns</h4>
+<p> (transfer full)</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-get-glyph-count"></a><h3>hb_face_get_glyph_count ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_face_get_glyph_count (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22131376"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22139776"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-get-index"></a><h3>hb_face_get_index ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_face_get_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22148976"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22157376"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-get-upem"></a><h3>hb_face_get_upem ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_face_get_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22166576"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22174976"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-get-user-data"></a><h3>hb_face_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_face_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22185664"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22194064"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-is-immutable"></a><h3>hb_face_is_immutable ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_face_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22204720"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22213120"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-make-immutable"></a><h3>hb_face_make_immutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_face_make_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22222176"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-reference"></a><h3>hb_face_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_face_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22238192"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22246592"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-reference-blob"></a><h3>hb_face_reference_blob ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_face_reference_blob (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22255648"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22264048"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-reference-table"></a><h3>hb_face_reference_table ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+hb_face_reference_table (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22276400"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22284800"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-set-glyph-count"></a><h3>hb_face_set_glyph_count ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_face_set_glyph_count (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                         <em class="parameter"><code>unsigned <span class="type">int</span> glyph_count</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22297328"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-set-index"></a><h3>hb_face_set_index ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_face_set_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                   <em class="parameter"><code>unsigned <span class="type">int</span> index</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22315120"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-set-upem"></a><h3>hb_face_set_upem ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_face_set_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> upem</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22332912"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-face-set-user-data"></a><h3>hb_face_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                       <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp22355472"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>face</p></td>
+<td class="parameter_description"><p>a face.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22363872"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-face.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-face-t"></a><h3>hb_face_t</h3>
+<pre class="programlisting">typedef struct hb_face_t hb_face_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-font.html b/docs/reference/html/harfbuzz-hb-font.html
new file mode 100644 (file)
index 0000000..2f91181
--- /dev/null
@@ -0,0 +1,2529 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-font</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-face.html" title="hb-face">
+<link rel="next" href="harfbuzz-hb-shape.html" title="hb-shape">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-font.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-font.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-face.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-shape.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-font"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-font.top_of_page"></a>hb-font</span></h2>
+<p>hb-font</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-font.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-add-glyph-origin-for-direction" title="hb_font_add_glyph_origin_for_direction ()">hb_font_add_glyph_origin_for_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-create" title="hb_font_create ()">hb_font_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-create-sub-font" title="hb_font_create_sub_font ()">hb_font_create_sub_font</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-destroy" title="hb_font_destroy ()">hb_font_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-create" title="hb_font_funcs_create ()">hb_font_funcs_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-destroy" title="hb_font_funcs_destroy ()">hb_font_funcs_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-get-empty" title="hb_font_funcs_get_empty ()">hb_font_funcs_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-get-user-data" title="hb_font_funcs_get_user_data ()">hb_font_funcs_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-is-immutable" title="hb_font_funcs_is_immutable ()">hb_font_funcs_is_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-make-immutable" title="hb_font_funcs_make_immutable ()">hb_font_funcs_make_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-reference" title="hb_font_funcs_reference ()">hb_font_funcs_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-contour-point-func" title="hb_font_funcs_set_glyph_contour_point_func ()">hb_font_funcs_set_glyph_contour_point_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-extents-func" title="hb_font_funcs_set_glyph_extents_func ()">hb_font_funcs_set_glyph_extents_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-from-name-func" title="hb_font_funcs_set_glyph_from_name_func ()">hb_font_funcs_set_glyph_from_name_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-func" title="hb_font_funcs_set_glyph_func ()">hb_font_funcs_set_glyph_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-advance-func" title="hb_font_funcs_set_glyph_h_advance_func ()">hb_font_funcs_set_glyph_h_advance_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-kerning-func" title="hb_font_funcs_set_glyph_h_kerning_func ()">hb_font_funcs_set_glyph_h_kerning_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-origin-func" title="hb_font_funcs_set_glyph_h_origin_func ()">hb_font_funcs_set_glyph_h_origin_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-name-func" title="hb_font_funcs_set_glyph_name_func ()">hb_font_funcs_set_glyph_name_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-advance-func" title="hb_font_funcs_set_glyph_v_advance_func ()">hb_font_funcs_set_glyph_v_advance_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-kerning-func" title="hb_font_funcs_set_glyph_v_kerning_func ()">hb_font_funcs_set_glyph_v_kerning_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-origin-func" title="hb_font_funcs_set_glyph_v_origin_func ()">hb_font_funcs_set_glyph_v_origin_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-user-data" title="hb_font_funcs_set_user_data ()">hb_font_funcs_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-empty" title="hb_font_get_empty ()">hb_font_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-face" title="hb_font_get_face ()">hb_font_get_face</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph" title="hb_font_get_glyph ()">hb_font_get_glyph</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-advance-for-direction" title="hb_font_get_glyph_advance_for_direction ()">hb_font_get_glyph_advance_for_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-advance-func-t" title="hb_font_get_glyph_advance_func_t ()">*hb_font_get_glyph_advance_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point" title="hb_font_get_glyph_contour_point ()">hb_font_get_glyph_contour_point</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-for-origin" title="hb_font_get_glyph_contour_point_for_origin ()">hb_font_get_glyph_contour_point_for_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-func-t" title="hb_font_get_glyph_contour_point_func_t ()">*hb_font_get_glyph_contour_point_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents" title="hb_font_get_glyph_extents ()">hb_font_get_glyph_extents</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents-for-origin" title="hb_font_get_glyph_extents_for_origin ()">hb_font_get_glyph_extents_for_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents-func-t" title="hb_font_get_glyph_extents_func_t ()">*hb_font_get_glyph_extents_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-from-name" title="hb_font_get_glyph_from_name ()">hb_font_get_glyph_from_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-from-name-func-t" title="hb_font_get_glyph_from_name_func_t ()">*hb_font_get_glyph_from_name_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-func-t" title="hb_font_get_glyph_func_t ()">*hb_font_get_glyph_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance" title="hb_font_get_glyph_h_advance ()">hb_font_get_glyph_h_advance</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning" title="hb_font_get_glyph_h_kerning ()">hb_font_get_glyph_h_kerning</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin" title="hb_font_get_glyph_h_origin ()">hb_font_get_glyph_h_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-for-direction" title="hb_font_get_glyph_kerning_for_direction ()">hb_font_get_glyph_kerning_for_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-func-t" title="hb_font_get_glyph_kerning_func_t ()">*hb_font_get_glyph_kerning_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-name" title="hb_font_get_glyph_name ()">hb_font_get_glyph_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-name-func-t" title="hb_font_get_glyph_name_func_t ()">*hb_font_get_glyph_name_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-origin-for-direction" title="hb_font_get_glyph_origin_for_direction ()">hb_font_get_glyph_origin_for_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-origin-func-t" title="hb_font_get_glyph_origin_func_t ()">*hb_font_get_glyph_origin_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance" title="hb_font_get_glyph_v_advance ()">hb_font_get_glyph_v_advance</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning" title="hb_font_get_glyph_v_kerning ()">hb_font_get_glyph_v_kerning</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin" title="hb_font_get_glyph_v_origin ()">hb_font_get_glyph_v_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-parent" title="hb_font_get_parent ()">hb_font_get_parent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-ppem" title="hb_font_get_ppem ()">hb_font_get_ppem</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-scale" title="hb_font_get_scale ()">hb_font_get_scale</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-get-user-data" title="hb_font_get_user_data ()">hb_font_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-glyph-from-string" title="hb_font_glyph_from_string ()">hb_font_glyph_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-glyph-to-string" title="hb_font_glyph_to_string ()">hb_font_glyph_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-is-immutable" title="hb_font_is_immutable ()">hb_font_is_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-make-immutable" title="hb_font_make_immutable ()">hb_font_make_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-reference" title="hb_font_reference ()">hb_font_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-funcs" title="hb_font_set_funcs ()">hb_font_set_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-funcs-data" title="hb_font_set_funcs_data ()">hb_font_set_funcs_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-ppem" title="hb_font_set_ppem ()">hb_font_set_ppem</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-scale" title="hb_font_set_scale ()">hb_font_set_scale</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-set-user-data" title="hb_font_set_user_data ()">hb_font_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-subtract-glyph-origin-for-direction" title="hb_font_subtract_glyph_origin_for_direction ()">hb_font_subtract_glyph_origin_for_direction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-font.html#hb-reference-table-func-t" title="hb_reference_table_func_t ()">*hb_reference_table_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-font-funcs-t"></a><a name="hb-font-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-font.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t">hb_font_funcs_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance-func-t" title="hb_font_get_glyph_h_advance_func_t">hb_font_get_glyph_h_advance_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning-func-t" title="hb_font_get_glyph_h_kerning_func_t">hb_font_get_glyph_h_kerning_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin-func-t" title="hb_font_get_glyph_h_origin_func_t">hb_font_get_glyph_h_origin_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance-func-t" title="hb_font_get_glyph_v_advance_func_t">hb_font_get_glyph_v_advance_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning-func-t" title="hb_font_get_glyph_v_kerning_func_t">hb_font_get_glyph_v_kerning_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin-func-t" title="hb_font_get_glyph_v_origin_func_t">hb_font_get_glyph_v_origin_func_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-t">hb_font_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-font.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">├──</span> hb_font_funcs_t
+    <span class="lineart">╰──</span> hb_font_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-font.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-font.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-font-add-glyph-origin-for-direction"></a><h3>hb_font_add_glyph_origin_for_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_add_glyph_origin_for_direction
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24857136"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-create"></a><h3>hb_font_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_font_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24877744"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-create-sub-font"></a><h3>hb_font_create_sub_font ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_font_create_sub_font (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *parent</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24884992"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p>parent font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24892496"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-destroy"></a><h3>hb_font_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24901696"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-create"></a><h3>hb_font_funcs_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+hb_font_funcs_create (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24915104"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-destroy"></a><h3>hb_font_funcs_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24922352"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-get-empty"></a><h3>hb_font_funcs_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+hb_font_funcs_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp24935840"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-get-user-data"></a><h3>hb_font_funcs_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_font_funcs_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24946416"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24953920"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-is-immutable"></a><h3>hb_font_funcs_is_immutable ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_funcs_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24963120"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24970624"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-make-immutable"></a><h3>hb_font_funcs_make_immutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_make_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24978416"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-reference"></a><h3>hb_font_funcs_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
+hb_font_funcs_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24992448"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24999952"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-contour-point-func"></a><h3>hb_font_funcs_set_glyph_contour_point_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_contour_point_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-func-t" title="hb_font_get_glyph_contour_point_func_t ()"><span class="type">hb_font_get_glyph_contour_point_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25014480"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-extents-func"></a><h3>hb_font_funcs_set_glyph_extents_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_extents_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-extents-func-t" title="hb_font_get_glyph_extents_func_t ()"><span class="type">hb_font_get_glyph_extents_func_t</span></a> func</code></em>,
+                                      <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25040736"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-from-name-func"></a><h3>hb_font_funcs_set_glyph_from_name_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_from_name_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-from-name-func-t" title="hb_font_get_glyph_from_name_func_t ()"><span class="type">hb_font_get_glyph_from_name_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25067056"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-func"></a><h3>hb_font_funcs_set_glyph_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-func-t" title="hb_font_get_glyph_func_t ()"><span class="type">hb_font_get_glyph_func_t</span></a> func</code></em>,
+                              <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25088528"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-h-advance-func"></a><h3>hb_font_funcs_set_glyph_h_advance_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_h_advance_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance-func-t" title="hb_font_get_glyph_h_advance_func_t"><span class="type">hb_font_get_glyph_h_advance_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25110128"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-h-kerning-func"></a><h3>hb_font_funcs_set_glyph_h_kerning_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_h_kerning_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning-func-t" title="hb_font_get_glyph_h_kerning_func_t"><span class="type">hb_font_get_glyph_h_kerning_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25136432"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-h-origin-func"></a><h3>hb_font_funcs_set_glyph_h_origin_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_h_origin_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin-func-t" title="hb_font_get_glyph_h_origin_func_t"><span class="type">hb_font_get_glyph_h_origin_func_t</span></a> func</code></em>,
+                                       <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25162752"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-name-func"></a><h3>hb_font_funcs_set_glyph_name_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_name_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-name-func-t" title="hb_font_get_glyph_name_func_t ()"><span class="type">hb_font_get_glyph_name_func_t</span></a> func</code></em>,
+                                   <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25188992"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-v-advance-func"></a><h3>hb_font_funcs_set_glyph_v_advance_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_v_advance_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance-func-t" title="hb_font_get_glyph_v_advance_func_t"><span class="type">hb_font_get_glyph_v_advance_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25210592"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-v-kerning-func"></a><h3>hb_font_funcs_set_glyph_v_kerning_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_v_kerning_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning-func-t" title="hb_font_get_glyph_v_kerning_func_t"><span class="type">hb_font_get_glyph_v_kerning_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25236896"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-glyph-v-origin-func"></a><h3>hb_font_funcs_set_glyph_v_origin_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_funcs_set_glyph_v_origin_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin-func-t" title="hb_font_get_glyph_v_origin_func_t"><span class="type">hb_font_get_glyph_v_origin_func_t</span></a> func</code></em>,
+                                       <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25263216"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> user_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-funcs-set-user-data"></a><h3>hb_font_funcs_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                             <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25291120"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ffuncs</p></td>
+<td class="parameter_description"><p>font functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25299520"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-empty"></a><h3>hb_font_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_font_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp25308272"></a><h4>Returns</h4>
+<p> (transfer full)</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-face"></a><h3>hb_font_get_face ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_font_get_face (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25318112"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25326512"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph"></a><h3>hb_font_get_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> variation_selector</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25342432"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>glyph</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25354544"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-advance-for-direction"></a><h3>hb_font_get_glyph_advance_for_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_get_glyph_advance_for_direction
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25370832"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-advance-func-t"></a><h3>hb_font_get_glyph_advance_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_advance_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25401296"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-contour-point"></a><h3>hb_font_get_glyph_contour_point ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_contour_point (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                 <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                 <em class="parameter"><code>unsigned <span class="type">int</span> point_index</code></em>,
+                                 <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                 <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25417088"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25432912"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-contour-point-for-origin"></a><h3>hb_font_get_glyph_contour_point_for_origin ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_contour_point_for_origin
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> point_index</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25451136"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25466960"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-contour-point-func-t"></a><h3>hb_font_get_glyph_contour_point_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_contour_point_func_t<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> point_index</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25488288"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-extents"></a><h3>hb_font_get_glyph_extents ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_extents (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                           <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                           <em class="parameter"><code><span class="type">hb_glyph_extents_t</span> *extents</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25500512"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>extents</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25512624"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-extents-for-origin"></a><h3>hb_font_get_glyph_extents_for_origin ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                      <em class="parameter"><code><span class="type">hb_glyph_extents_t</span> *extents</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25527232"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>extents</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25539344"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-extents-func-t"></a><h3>hb_font_get_glyph_extents_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_extents_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                     <em class="parameter"><code><span class="type">hb_glyph_extents_t</span> *extents</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25557120"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-from-name"></a><h3>hb_font_get_glyph_from_name ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                             <em class="parameter"><code><span class="type">int</span> len</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25571216"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>glyph</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25587040"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-from-name-func-t"></a><h3>hb_font_get_glyph_from_name_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_from_name_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                       <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                       <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                       <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25603280"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-func-t"></a><h3>hb_font_get_glyph_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> variation_selector</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *glyph</code></em>,
+                             <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25622080"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-advance"></a><h3>hb_font_get_glyph_h_advance ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+hb_font_get_glyph_h_advance (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25632608"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25641008"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-kerning"></a><h3>hb_font_get_glyph_h_kerning ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+hb_font_get_glyph_h_kerning (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> left_glyph</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> right_glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25653840"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25662240"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-origin"></a><h3>hb_font_get_glyph_h_origin ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_h_origin (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25676768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25692592"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-kerning-for-direction"></a><h3>hb_font_get_glyph_kerning_for_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_get_glyph_kerning_for_direction
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> first_glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> second_glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25710640"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-kerning-func-t"></a><h3>hb_font_get_glyph_kerning_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_kerning_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> first_glyph</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> second_glyph</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25742752"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-name"></a><h3>hb_font_get_glyph_name ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                        <em class="parameter"><code><span class="type">char</span> *name</code></em>,
+                        <em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25756784"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25768896"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-name-func-t"></a><h3>hb_font_get_glyph_name_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_name_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                  <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                  <em class="parameter"><code><span class="type">char</span> *name</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>,
+                                  <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25788480"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-origin-for-direction"></a><h3>hb_font_get_glyph_origin_for_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_get_glyph_origin_for_direction
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25804160"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-origin-func-t"></a><h3>hb_font_get_glyph_origin_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_font_get_glyph_origin_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                    <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>,
+                                    <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25837968"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-advance"></a><h3>hb_font_get_glyph_v_advance ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+hb_font_get_glyph_v_advance (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25848496"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25856896"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-kerning"></a><h3>hb_font_get_glyph_v_kerning ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="returnvalue">hb_position_t</span></a>
+hb_font_get_glyph_v_kerning (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> top_glyph</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> bottom_glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25869728"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25878128"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-origin"></a><h3>hb_font_get_glyph_v_origin ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_get_glyph_v_origin (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25892592"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25908416"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-parent"></a><h3>hb_font_get_parent ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_font_get_parent (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25917776"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp25926176"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-ppem"></a><h3>hb_font_get_ppem ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_get_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> *x_ppem</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> *y_ppem</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25940768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x_ppem</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y_ppem</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-scale"></a><h3>hb_font_get_scale ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_get_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                   <em class="parameter"><code><span class="type">int</span> *x_scale</code></em>,
+                   <em class="parameter"><code><span class="type">int</span> *y_scale</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25967872"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x_scale</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y_scale</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-user-data"></a><h3>hb_font_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_font_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp25993280"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26001680"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-glyph-from-string"></a><h3>hb_font_glyph_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_glyph_from_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                           <em class="parameter"><code>const <span class="type">char</span> *s</code></em>,
+                           <em class="parameter"><code><span class="type">int</span> len</code></em>,
+                           <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *glyph</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26017984"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>s</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>glyph</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26033808"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-glyph-to-string"></a><h3>hb_font_glyph_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_glyph_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                         <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                         <em class="parameter"><code><span class="type">char</span> *s</code></em>,
+                         <em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26048448"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>s</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-is-immutable"></a><h3>hb_font_is_immutable ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26068512"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26076912"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-make-immutable"></a><h3>hb_font_make_immutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_make_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26086288"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-reference"></a><h3>hb_font_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_font_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26102624"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26111024"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-set-funcs"></a><h3>hb_font_set_funcs ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_set_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *klass</code></em>,
+                   <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26127008"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>klass</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> font_data][<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-set-funcs-data"></a><h3>hb_font_set_funcs_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_set_funcs_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                        <em class="parameter"><code><span class="type">void</span> *font_data</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26151456"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>font_data</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-set-ppem"></a><h3>hb_font_set_ppem ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_set_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> x_ppem</code></em>,
+                  <em class="parameter"><code>unsigned <span class="type">int</span> y_ppem</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26175696"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-set-scale"></a><h3>hb_font_set_scale ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_set_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                   <em class="parameter"><code><span class="type">int</span> x_scale</code></em>,
+                   <em class="parameter"><code><span class="type">int</span> y_scale</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26195376"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-set-user-data"></a><h3>hb_font_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_font_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                       <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26218448"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26226848"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-subtract-glyph-origin-for-direction"></a><h3>hb_font_subtract_glyph_origin_for_direction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_font_subtract_glyph_origin_for_direction
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *x</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *y</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26243200"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-reference-table-func-t"></a><h3>hb_reference_table_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="returnvalue">hb_blob_t</span></a> *
+<span class="c_punctuation">(</span>*hb_reference_table_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>,
+                              <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26271920"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-font.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-font-funcs-t"></a><h3>hb_font_funcs_t</h3>
+<pre class="programlisting">typedef struct hb_font_funcs_t hb_font_funcs_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-advance-func-t"></a><h3>hb_font_get_glyph_h_advance_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-kerning-func-t"></a><h3>hb_font_get_glyph_h_kerning_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-h-origin-func-t"></a><h3>hb_font_get_glyph_h_origin_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-advance-func-t"></a><h3>hb_font_get_glyph_v_advance_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-kerning-func-t"></a><h3>hb_font_get_glyph_v_kerning_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-get-glyph-v-origin-func-t"></a><h3>hb_font_get_glyph_v_origin_func_t</h3>
+<pre class="programlisting">typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-font-t"></a><h3>hb_font_t</h3>
+<pre class="programlisting">typedef struct hb_font_t hb_font_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-ft.html b/docs/reference/html/harfbuzz-hb-ft.html
new file mode 100644 (file)
index 0000000..5194725
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-ft</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-icu.html" title="hb-icu">
+<link rel="next" href="harfbuzz-hb-graphite2.html" title="hb-graphite2">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-ft.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-icu.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-graphite2.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-ft"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-ft.top_of_page"></a>hb-ft</span></h2>
+<p>hb-ft</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ft.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create" title="hb_ft_face_create ()">hb_ft_face_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create-cached" title="hb_ft_face_create_cached ()">hb_ft_face_create_cached</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-create" title="hb_ft_font_create ()">hb_ft_font_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">FT_Face</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-get-face" title="hb_ft_font_get_face ()">hb_ft_font_get_face</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-set-funcs" title="hb_ft_font_set_funcs ()">hb_ft_font_set_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ft.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ft.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-ft-face-create"></a><h3>hb_ft_face_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_ft_face_create (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp15898752"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ft_face</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp12575376"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ft-face-create-cached"></a><h3>hb_ft_face_create_cached ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
+hb_ft_face_create_cached (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26678384"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ft-font-create"></a><h3>hb_ft_font_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
+hb_ft_font_create (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19378304"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ft_face</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> destroy][<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24573216"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ft-font-get-face"></a><h3>hb_ft_font_get_face ()</h3>
+<pre class="programlisting"><span class="returnvalue">FT_Face</span>
+hb_ft_font_get_face (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26520048"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ft-font-set-funcs"></a><h3>hb_ft_font_set_funcs ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ft_font_set_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ft.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-glib.html b/docs/reference/html/harfbuzz-hb-glib.html
new file mode 100644 (file)
index 0000000..d8ebd68
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-glib</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">
+<link rel="next" href="harfbuzz-hb-icu.html" title="hb-icu">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-glib.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-shape-plan.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-icu.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-glib"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-glib.top_of_page"></a>hb-glib</span></h2>
+<p>hb-glib</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-glib.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-get-unicode-funcs" title="hb_glib_get_unicode_funcs ()">hb_glib_get_unicode_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GUnicodeScript</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-script-from-script" title="hb_glib_script_from_script ()">hb_glib_script_from_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-glib.html#hb-glib-script-to-script" title="hb_glib_script_to_script ()">hb_glib_script_to_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-glib.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-glib.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-glib-get-unicode-funcs"></a><h3>hb_glib_get_unicode_funcs ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_glib_get_unicode_funcs (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp17205360"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-glib-script-from-script"></a><h3>hb_glib_script_from_script ()</h3>
+<pre class="programlisting"><span class="returnvalue">GUnicodeScript</span>
+hb_glib_script_from_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp15952992"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-glib-script-to-script"></a><h3>hb_glib_script_to_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_glib_script_to_script (<em class="parameter"><code><span class="type">GUnicodeScript</span> script</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp17801872"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-glib.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-gobject.html b/docs/reference/html/harfbuzz-hb-gobject.html
new file mode 100644 (file)
index 0000000..2d21692
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-gobject</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-coretext.html" title="hb-coretext">
+<link rel="next" href="object-tree.html" title="Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-gobject.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-coretext.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-gobject"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-gobject.top_of_page"></a>hb-gobject</span></h2>
+<p>hb-gobject</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-gobject.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-gobject.functions_details"></a><h2>Functions</h2>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-gobject.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-graphite2.html b/docs/reference/html/harfbuzz-hb-graphite2.html
new file mode 100644 (file)
index 0000000..cc51db9
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-graphite2</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-ft.html" title="hb-ft">
+<link rel="next" href="harfbuzz-hb-uniscribe.html" title="hb-uniscribe">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-graphite2.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-ft.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-uniscribe.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-graphite2"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-graphite2.top_of_page"></a>hb-graphite2</span></h2>
+<p>hb-graphite2</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-graphite2.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gr_face</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-graphite2.html#hb-graphite2-face-get-gr-face" title="hb_graphite2_face_get_gr_face ()">hb_graphite2_face_get_gr_face</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gr_font</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-graphite2.html#hb-graphite2-font-get-gr-font" title="hb_graphite2_font_get_gr_font ()">hb_graphite2_font_get_gr_font</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-graphite2.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-graphite2.html#HB-GRAPHITE2-TAG-SILF:CAPS" title="HB_GRAPHITE2_TAG_SILF">HB_GRAPHITE2_TAG_SILF</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-graphite2.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-graphite2.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-graphite2-face-get-gr-face"></a><h3>hb_graphite2_face_get_gr_face ()</h3>
+<pre class="programlisting"><span class="returnvalue">gr_face</span> *
+hb_graphite2_face_get_gr_face (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp9994096"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-graphite2-font-get-gr-font"></a><h3>hb_graphite2_font_get_gr_font ()</h3>
+<pre class="programlisting"><span class="returnvalue">gr_font</span> *
+hb_graphite2_font_get_gr_font (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp18663728"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-graphite2.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-GRAPHITE2-TAG-SILF:CAPS"></a><h3>HB_GRAPHITE2_TAG_SILF</h3>
+<pre class="programlisting">#define HB_GRAPHITE2_TAG_SILF HB_TAG('S','i','l','f')
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-icu.html b/docs/reference/html/harfbuzz-hb-icu.html
new file mode 100644 (file)
index 0000000..77c031c
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-icu</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-glib.html" title="hb-glib">
+<link rel="next" href="harfbuzz-hb-ft.html" title="hb-ft">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-icu.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-glib.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-ft.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-icu"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-icu.top_of_page"></a>hb-icu</span></h2>
+<p>hb-icu</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-icu.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-get-unicode-funcs" title="hb_icu_get_unicode_funcs ()">hb_icu_get_unicode_funcs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">UScriptCode</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-script-from-script" title="hb_icu_script_from_script ()">hb_icu_script_from_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-icu.html#hb-icu-script-to-script" title="hb_icu_script_to_script ()">hb_icu_script_to_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-icu.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-icu.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-icu-get-unicode-funcs"></a><h3>hb_icu_get_unicode_funcs ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_icu_get_unicode_funcs (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp14261024"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-icu-script-from-script"></a><h3>hb_icu_script_from_script ()</h3>
+<pre class="programlisting"><span class="returnvalue">UScriptCode</span>
+hb_icu_script_from_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24211888"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-icu-script-to-script"></a><h3>hb_icu_script_to_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_icu_script_to_script (<em class="parameter"><code><span class="type">UScriptCode</span> script</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp14646672"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-icu.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-ot-layout.html b/docs/reference/html/harfbuzz-hb-ot-layout.html
new file mode 100644 (file)
index 0000000..32a2663
--- /dev/null
@@ -0,0 +1,771 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-ot-layout</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-ot.html" title="hb-ot">
+<link rel="next" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-ot-layout.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-ot-layout.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-ot.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-ot-tag.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-ot-layout"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-ot-layout.top_of_page"></a>hb-ot-layout</span></h2>
+<p>hb-ot-layout</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-collect-lookups" title="hb_ot_layout_collect_lookups ()">hb_ot_layout_collect_lookups</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-feature-get-lookups" title="hb_ot_layout_feature_get_lookups ()">hb_ot_layout_feature_get_lookups</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-attach-points" title="hb_ot_layout_get_attach_points ()">hb_ot_layout_get_attach_points</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t"><span class="returnvalue">hb_ot_layout_glyph_class_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyph-class" title="hb_ot_layout_get_glyph_class ()">hb_ot_layout_get_glyph_class</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyphs-in-class" title="hb_ot_layout_get_glyphs_in_class ()">hb_ot_layout_get_glyphs_in_class</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-ligature-carets" title="hb_ot_layout_get_ligature_carets ()">hb_ot_layout_get_ligature_carets</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-size-params" title="hb_ot_layout_get_size_params ()">hb_ot_layout_get_size_params</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-sequence-func-t" title="hb_ot_layout_glyph_sequence_func_t ()">*hb_ot_layout_glyph_sequence_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-glyph-classes" title="hb_ot_layout_has_glyph_classes ()">hb_ot_layout_has_glyph_classes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-positioning" title="hb_ot_layout_has_positioning ()">hb_ot_layout_has_positioning</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-substitution" title="hb_ot_layout_has_substitution ()">hb_ot_layout_has_substitution</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-find-feature" title="hb_ot_layout_language_find_feature ()">hb_ot_layout_language_find_feature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-indexes" title="hb_ot_layout_language_get_feature_indexes ()">hb_ot_layout_language_get_feature_indexes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-tags" title="hb_ot_layout_language_get_feature_tags ()">hb_ot_layout_language_get_feature_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature" title="hb_ot_layout_language_get_required_feature ()">hb_ot_layout_language_get_required_feature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-collect-glyphs" title="hb_ot_layout_lookup_collect_glyphs ()">hb_ot_layout_lookup_collect_glyphs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-substitute-closure" title="hb_ot_layout_lookup_substitute_closure ()">hb_ot_layout_lookup_substitute_closure</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-would-substitute" title="hb_ot_layout_lookup_would_substitute ()">hb_ot_layout_lookup_would_substitute</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-find-language" title="hb_ot_layout_script_find_language ()">hb_ot_layout_script_find_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-get-language-tags" title="hb_ot_layout_script_get_language_tags ()">hb_ot_layout_script_get_language_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-choose-script" title="hb_ot_layout_table_choose_script ()">hb_ot_layout_table_choose_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-find-script" title="hb_ot_layout_table_find_script ()">hb_ot_layout_table_find_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-feature-tags" title="hb_ot_layout_table_get_feature_tags ()">hb_ot_layout_table_get_feature_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-script-tags" title="hb_ot_layout_table_get_script_tags ()">hb_ot_layout_table_get_script_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-lookup-count" title="hb_ot_layout_table_get_lookup_count ()">hb_ot_layout_table_get_lookup_count</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-shape-plan-collect-lookups" title="hb_ot_shape_plan_collect_lookups ()">hb_ot_shape_plan_collect_lookups</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS" title="HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX">HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS" title="HB_OT_LAYOUT_NO_FEATURE_INDEX">HB_OT_LAYOUT_NO_FEATURE_INDEX</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS" title="HB_OT_LAYOUT_NO_SCRIPT_INDEX">HB_OT_LAYOUT_NO_SCRIPT_INDEX</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GDEF:CAPS" title="HB_OT_TAG_GDEF">HB_OT_TAG_GDEF</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GPOS:CAPS" title="HB_OT_TAG_GPOS">HB_OT_TAG_GPOS</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GSUB:CAPS" title="HB_OT_TAG_GSUB">HB_OT_TAG_GSUB</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t">hb_ot_layout_glyph_class_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GEnum
+    <span class="lineart">╰──</span> hb_ot_layout_glyph_class_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-ot-layout-collect-lookups"></a><h3>hb_ot_layout_collect_lookups ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_layout_collect_lookups (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                              <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *scripts</code></em>,
+                              <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *languages</code></em>,
+                              <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *features</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *lookup_indexes</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-feature-get-lookups"></a><h3>hb_ot_layout_feature_get_lookups ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_feature_get_lookups (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> feature_index</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> *lookup_count</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> *lookup_indexes</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23755552"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-get-attach-points"></a><h3>hb_ot_layout_get_attach_points ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_get_attach_points (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *point_count</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *point_array</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23771216"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-get-glyph-class"></a><h3>hb_ot_layout_get_glyph_class ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t"><span class="returnvalue">hb_ot_layout_glyph_class_t</span></a>
+hb_ot_layout_get_glyph_class (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23781312"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-get-glyphs-in-class"></a><h3>hb_ot_layout_get_glyphs_in_class ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_layout_get_glyphs_in_class (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t"><span class="type">hb_ot_layout_glyph_class_t</span></a> klass</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-get-ligature-carets"></a><h3>hb_ot_layout_get_ligature_carets ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_get_ligature_carets (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> glyph</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> *caret_count</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> *caret_array</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23808736"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-get-size-params"></a><h3>hb_ot_layout_get_size_params ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_get_size_params (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                              <em class="parameter"><code>unsigned <span class="type">int</span> *design_size</code></em>,
+                              <em class="parameter"><code>unsigned <span class="type">int</span> *subfamily_id</code></em>,
+                              <em class="parameter"><code>unsigned <span class="type">int</span> *subfamily_name_id</code></em>,
+                              <em class="parameter"><code>unsigned <span class="type">int</span> *range_start</code></em>,
+                              <em class="parameter"><code>unsigned <span class="type">int</span> *range_end</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23826208"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-glyph-sequence-func-t"></a><h3>hb_ot_layout_glyph_sequence_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_ot_layout_glyph_sequence_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                       <em class="parameter"><code>unsigned <span class="type">int</span> lookup_index</code></em>,
+                                       <em class="parameter"><code>const <span class="type">hb_ot_layout_glyph_sequence_t</span> *sequence</code></em>,
+                                       <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23842928"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-has-glyph-classes"></a><h3>hb_ot_layout_has_glyph_classes ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_has_glyph_classes (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23851360"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-has-positioning"></a><h3>hb_ot_layout_has_positioning ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_has_positioning (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23859792"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-has-substitution"></a><h3>hb_ot_layout_has_substitution ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_has_substitution (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23868224"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-language-find-feature"></a><h3>hb_ot_layout_language_find_feature ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_language_find_feature (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> language_index</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> feature_tag</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> *feature_index</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23885344"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-language-get-feature-indexes"></a><h3>hb_ot_layout_language_get_feature_indexes ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_language_get_feature_indexes
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> language_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *feature_count</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *feature_indexes</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23904336"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-language-get-feature-tags"></a><h3>hb_ot_layout_language_get_feature_tags ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_language_get_feature_tags
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> language_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *feature_count</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *feature_tags</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23923344"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-language-get-required-feature"></a><h3>hb_ot_layout_language_get_required_feature ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_language_get_required_feature
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> language_index</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *feature_index</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *feature_tag</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-lookup-collect-glyphs"></a><h3>hb_ot_layout_lookup_collect_glyphs ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_layout_lookup_collect_glyphs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> lookup_index</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs_before</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs_input</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs_after</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs_output</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-lookup-substitute-closure"></a><h3>hb_ot_layout_lookup_substitute_closure ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_layout_lookup_substitute_closure
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> lookup_index</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-lookup-would-substitute"></a><h3>hb_ot_layout_lookup_would_substitute ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_lookup_would_substitute (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                      <em class="parameter"><code>unsigned <span class="type">int</span> lookup_index</code></em>,
+                                      <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *glyphs</code></em>,
+                                      <em class="parameter"><code>unsigned <span class="type">int</span> glyphs_length</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> zero_context</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23980784"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-script-find-language"></a><h3>hb_ot_layout_script_find_language ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_script_find_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                   <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> language_tag</code></em>,
+                                   <em class="parameter"><code>unsigned <span class="type">int</span> *language_index</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24314880"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-script-get-language-tags"></a><h3>hb_ot_layout_script_get_language_tags ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_script_get_language_tags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                       <em class="parameter"><code>unsigned <span class="type">int</span> script_index</code></em>,
+                                       <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                       <em class="parameter"><code>unsigned <span class="type">int</span> *language_count</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *language_tags</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24331840"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-table-choose-script"></a><h3>hb_ot_layout_table_choose_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_table_choose_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                  <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *script_tags</code></em>,
+                                  <em class="parameter"><code>unsigned <span class="type">int</span> *script_index</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *chosen_script</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24347152"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-table-find-script"></a><h3>hb_ot_layout_table_find_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_ot_layout_table_find_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> script_tag</code></em>,
+                                <em class="parameter"><code>unsigned <span class="type">int</span> *script_index</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24360656"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-table-get-feature-tags"></a><h3>hb_ot_layout_table_get_feature_tags ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_table_get_feature_tags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                     <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                     <em class="parameter"><code>unsigned <span class="type">int</span> *feature_count</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *feature_tags</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24375904"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-table-get-script-tags"></a><h3>hb_ot_layout_table_get_script_tags ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_table_get_script_tags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> start_offset</code></em>,
+                                    <em class="parameter"><code>unsigned <span class="type">int</span> *script_count</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *script_tags</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24391392"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-table-get-lookup-count"></a><h3>hb_ot_layout_table_get_lookup_count ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_ot_layout_table_get_lookup_count (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-shape-plan-collect-lookups"></a><h3>hb_ot_shape_plan_collect_lookups ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_shape_plan_collect_lookups (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> table_tag</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *lookup_indexes</code></em>);</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-layout.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS"></a><h3>HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX</h3>
+<pre class="programlisting">#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX 0xFFFFu
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS"></a><h3>HB_OT_LAYOUT_NO_FEATURE_INDEX</h3>
+<pre class="programlisting">#define HB_OT_LAYOUT_NO_FEATURE_INDEX              0xFFFFu
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS"></a><h3>HB_OT_LAYOUT_NO_SCRIPT_INDEX</h3>
+<pre class="programlisting">#define HB_OT_LAYOUT_NO_SCRIPT_INDEX               0xFFFFu
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-TAG-GDEF:CAPS"></a><h3>HB_OT_TAG_GDEF</h3>
+<pre class="programlisting">#define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-TAG-GPOS:CAPS"></a><h3>HB_OT_TAG_GPOS</h3>
+<pre class="programlisting">#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-TAG-GSUB:CAPS"></a><h3>HB_OT_TAG_GSUB</h3>
+<pre class="programlisting">#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-layout-glyph-class-t"></a><h3>enum hb_ot_layout_glyph_class_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp24443872"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-OT-LAYOUT-GLYPH-CLASS-UNCLASSIFIED:CAPS"></a>HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-OT-LAYOUT-GLYPH-CLASS-BASE-GLYPH:CAPS"></a>HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-OT-LAYOUT-GLYPH-CLASS-LIGATURE:CAPS"></a>HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-OT-LAYOUT-GLYPH-CLASS-MARK:CAPS"></a>HB_OT_LAYOUT_GLYPH_CLASS_MARK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-OT-LAYOUT-GLYPH-CLASS-COMPONENT:CAPS"></a>HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-ot-tag.html b/docs/reference/html/harfbuzz-hb-ot-tag.html
new file mode 100644 (file)
index 0000000..e909d29
--- /dev/null
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-ot-tag</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">
+<link rel="next" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-ot-tag.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-ot-layout.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-shape-plan.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-ot-tag"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-ot-tag.top_of_page"></a>hb-ot-tag</span></h2>
+<p>hb-ot-tag</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-tag.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-from-language" title="hb_ot_tag_from_language ()">hb_ot_tag_from_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-language" title="hb_ot_tag_to_language ()">hb_ot_tag_to_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-script" title="hb_ot_tag_to_script ()">hb_ot_tag_to_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-ot-tag.html#hb-ot-tags-from-script" title="hb_ot_tags_from_script ()">hb_ot_tags_from_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-tag.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-LANGUAGE:CAPS" title="HB_OT_TAG_DEFAULT_LANGUAGE">HB_OT_TAG_DEFAULT_LANGUAGE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-SCRIPT:CAPS" title="HB_OT_TAG_DEFAULT_SCRIPT">HB_OT_TAG_DEFAULT_SCRIPT</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-tag.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-tag.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-ot-tag-from-language"></a><h3>hb_ot_tag_from_language ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+hb_ot_tag_from_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp17314176"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-tag-to-language"></a><h3>hb_ot_tag_to_language ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
+hb_ot_tag_to_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp17962528"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-tag-to-script"></a><h3>hb_ot_tag_to_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_ot_tag_to_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp20744864"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-ot-tags-from-script"></a><h3>hb_ot_tags_from_script ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_ot_tags_from_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *script_tag_1</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> *script_tag_2</code></em>);</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot-tag.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-OT-TAG-DEFAULT-LANGUAGE:CAPS"></a><h3>HB_OT_TAG_DEFAULT_LANGUAGE</h3>
+<pre class="programlisting">#define HB_OT_TAG_DEFAULT_LANGUAGE HB_TAG ('d', 'f', 'l', 't')
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-OT-TAG-DEFAULT-SCRIPT:CAPS"></a><h3>HB_OT_TAG_DEFAULT_SCRIPT</h3>
+<pre class="programlisting">#define HB_OT_TAG_DEFAULT_SCRIPT HB_TAG ('D', 'F', 'L', 'T')
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-ot.html b/docs/reference/html/harfbuzz-hb-ot.html
new file mode 100644 (file)
index 0000000..9c48aad
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-ot</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-set.html" title="hb-set">
+<link rel="next" href="harfbuzz-hb-ot-layout.html" title="hb-ot-layout">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-ot.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-set.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-ot-layout.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-ot"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-ot.top_of_page"></a>hb-ot</span></h2>
+<p>hb-ot</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot.functions_details"></a><h2>Functions</h2>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-ot.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-set.html b/docs/reference/html/harfbuzz-hb-set.html
new file mode 100644 (file)
index 0000000..3663879
--- /dev/null
@@ -0,0 +1,966 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-set</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">
+<link rel="next" href="harfbuzz-hb-ot.html" title="hb-ot">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-set.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-set.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-deprecated.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-ot.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-set"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-set.top_of_page"></a>hb-set</span></h2>
+<p>hb-set</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-set.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS" title="HB_SET_VALUE_INVALID">HB_SET_VALUE_INVALID</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-add" title="hb_set_add ()">hb_set_add</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-add-range" title="hb_set_add_range ()">hb_set_add_range</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-allocation-successful" title="hb_set_allocation_successful ()">hb_set_allocation_successful</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-clear" title="hb_set_clear ()">hb_set_clear</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-create" title="hb_set_create ()">hb_set_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-del" title="hb_set_del ()">hb_set_del</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-del-range" title="hb_set_del_range ()">hb_set_del_range</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-destroy" title="hb_set_destroy ()">hb_set_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-empty" title="hb_set_get_empty ()">hb_set_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-max" title="hb_set_get_max ()">hb_set_get_max</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-min" title="hb_set_get_min ()">hb_set_get_min</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-population" title="hb_set_get_population ()">hb_set_get_population</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-get-user-data" title="hb_set_get_user_data ()">hb_set_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-has" title="hb_set_has ()">hb_set_has</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-intersect" title="hb_set_intersect ()">hb_set_intersect</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-invert" title="hb_set_invert ()">hb_set_invert</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-is-empty" title="hb_set_is_empty ()">hb_set_is_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-is-equal" title="hb_set_is_equal ()">hb_set_is_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-next" title="hb_set_next ()">hb_set_next</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-next-range" title="hb_set_next_range ()">hb_set_next_range</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-reference" title="hb_set_reference ()">hb_set_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-set" title="hb_set_set ()">hb_set_set</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-set-user-data" title="hb_set_set_user_data ()">hb_set_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-subtract" title="hb_set_subtract ()">hb_set_subtract</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-symmetric-difference" title="hb_set_symmetric_difference ()">hb_set_symmetric_difference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-set.html#hb-set-union" title="hb_set_union ()">hb_set_union</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-set-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-set.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-set.html#hb-set-t">hb_set_t</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-set.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_set_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-set.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-set.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="HB-SET-VALUE-INVALID:CAPS"></a><h3>HB_SET_VALUE_INVALID</h3>
+<pre class="programlisting">#define HB_SET_VALUE_INVALID ((hb_codepoint_t) -1)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-add"></a><h3>hb_set_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_add (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23360080"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-add-range"></a><h3>hb_set_add_range ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_add_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> first</code></em>,
+                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> last</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23503168"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-allocation-successful"></a><h3>hb_set_allocation_successful ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_allocation_successful (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23519440"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23527840"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-clear"></a><h3>hb_set_clear ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_clear (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23536864"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-create"></a><h3>hb_set_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+hb_set_create (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp23552176"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-del"></a><h3>hb_set_del ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_del (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23562208"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-del-range"></a><h3>hb_set_del_range ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_del_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> first</code></em>,
+                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> last</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23581440"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-destroy"></a><h3>hb_set_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23597440"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-get-empty"></a><h3>hb_set_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+hb_set_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp23612832"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-get-max"></a><h3>hb_set_get_max ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+hb_set_get_max (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<p>Finds the maximum number in the set.</p>
+<div class="refsect3">
+<a name="idp23624144"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23632544"></a><h4>Returns</h4>
+<p> minimum of the set, or <a class="link" href="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS" title="HB_SET_VALUE_INVALID"><code class="literal">HB_SET_VALUE_INVALID</code></a> if set is empty.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-get-min"></a><h3>hb_set_get_min ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+hb_set_get_min (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<p>Finds the minimum number in the set.</p>
+<div class="refsect3">
+<a name="idp23644080"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23652480"></a><h4>Returns</h4>
+<p> minimum of the set, or <a class="link" href="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS" title="HB_SET_VALUE_INVALID"><code class="literal">HB_SET_VALUE_INVALID</code></a> if set is empty.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-get-population"></a><h3>hb_set_get_population ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_set_get_population (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<p>Returns the number of numbers in the set.</p>
+<div class="refsect3">
+<a name="idp23664176"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23672576"></a><h4>Returns</h4>
+<p> set population.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-get-user-data"></a><h3>hb_set_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_set_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23683760"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23692160"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-has"></a><h3>hb_set_has ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_has (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23704576"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp23712976"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-intersect"></a><h3>hb_set_intersect ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_intersect (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                  <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23723792"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-invert"></a><h3>hb_set_invert ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_invert (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp23739792"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-is-empty"></a><h3>hb_set_is_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_is_empty (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26791456"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26798960"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-is-equal"></a><h3>hb_set_is_equal ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_is_equal (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                 <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26808416"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26815808"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-next"></a><h3>hb_set_next ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_next (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *codepoint</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26825120"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>codepoint</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26835952"></a><h4>Returns</h4>
+<p> whether there was a next value.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-next-range"></a><h3>hb_set_next_range ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_next_range (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *first</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *last</code></em>);</pre>
+<p>Gets the next consecutive range of numbers in <em class="parameter"><code>set</code></em>
+ that
+are greater than current value of <em class="parameter"><code>last</code></em>
+.</p>
+<div class="refsect3">
+<a name="idp26848880"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>first</p></td>
+<td class="parameter_description"><p> output first codepoint in the range. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>last</p></td>
+<td class="parameter_description"><p> input current last and output last codepoint in the range. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26863040"></a><h4>Returns</h4>
+<p> whether there was a next range.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-reference"></a><h3>hb_set_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
+hb_set_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26871264"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26878768"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-set"></a><h3>hb_set_set ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_set (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+            <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26889488"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-set-user-data"></a><h3>hb_set_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                      <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26909024"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p><em class="parameter"><code>destroy</code></em>
+(closure data):</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp26919424"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-subtract"></a><h3>hb_set_subtract ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_subtract (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                 <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26928736"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-symmetric-difference"></a><h3>hb_set_symmetric_difference ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_symmetric_difference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+                             <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26944288"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-set-union"></a><h3>hb_set_union ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_set_union (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
+              <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *other</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26959840"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>set</p></td>
+<td class="parameter_description"><p>a set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-set.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-set-t"></a><h3>hb_set_t</h3>
+<pre class="programlisting">typedef struct hb_set_t hb_set_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-shape-plan.html b/docs/reference/html/harfbuzz-hb-shape-plan.html
new file mode 100644 (file)
index 0000000..0fd311f
--- /dev/null
@@ -0,0 +1,405 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-shape-plan</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">
+<link rel="next" href="harfbuzz-hb-glib.html" title="hb-glib">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-shape-plan.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-shape-plan.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-ot-tag.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-glib.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-shape-plan"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-shape-plan.top_of_page"></a>hb-shape-plan</span></h2>
+<p>hb-shape-plan</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-create" title="hb_shape_plan_create ()">hb_shape_plan_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-create-cached" title="hb_shape_plan_create_cached ()">hb_shape_plan_create_cached</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-destroy" title="hb_shape_plan_destroy ()">hb_shape_plan_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-execute" title="hb_shape_plan_execute ()">hb_shape_plan_execute</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-empty" title="hb_shape_plan_get_empty ()">hb_shape_plan_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-shaper" title="hb_shape_plan_get_shaper ()">hb_shape_plan_get_shaper</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-user-data" title="hb_shape_plan_get_user_data ()">hb_shape_plan_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-reference" title="hb_shape_plan_reference ()">hb_shape_plan_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-set-user-data" title="hb_shape_plan_set_user_data ()">hb_shape_plan_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-shape-plan-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t">hb_shape_plan_t</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_shape_plan_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-shape-plan-create"></a><h3>hb_shape_plan_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+hb_shape_plan_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                      <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>,
+                      <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *user_features</code></em>,
+                      <em class="parameter"><code>unsigned <span class="type">int</span> num_user_features</code></em>,
+                      <em class="parameter"><code>const <span class="type">char</span> * const *shaper_list</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19672080"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-create-cached"></a><h3>hb_shape_plan_create_cached ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+hb_shape_plan_create_cached (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
+                             <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>,
+                             <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *user_features</code></em>,
+                             <em class="parameter"><code>unsigned <span class="type">int</span> num_user_features</code></em>,
+                             <em class="parameter"><code>const <span class="type">char</span> * const *shaper_list</code></em>);</pre>
+<div class="refsect3">
+<a name="idp18027296"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>user_features</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=num_user_features]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>shaper_list</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21113632"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-destroy"></a><h3>hb_shape_plan_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_shape_plan_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>);</pre>
+<div class="refsect3">
+<a name="idp18653136"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-execute"></a><h3>hb_shape_plan_execute ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_shape_plan_execute (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+                       <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</code></em>,
+                       <em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>);</pre>
+<div class="refsect3">
+<a name="idp26555664"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>features</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=num_features]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24004304"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-get-empty"></a><h3>hb_shape_plan_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+hb_shape_plan_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp24012816"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-get-shaper"></a><h3>hb_shape_plan_get_shaper ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_shape_plan_get_shaper (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24023712"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24032112"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-get-user-data"></a><h3>hb_shape_plan_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_shape_plan_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24044464"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24052864"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-reference"></a><h3>hb_shape_plan_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
+hb_shape_plan_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24063584"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24071984"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-plan-set-user-data"></a><h3>hb_shape_plan_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                             <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp24089232"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shape_plan</p></td>
+<td class="parameter_description"><p>a shape plan.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp24097632"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape-plan.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-shape-plan-t"></a><h3>hb_shape_plan_t</h3>
+<pre class="programlisting">typedef struct hb_shape_plan_t hb_shape_plan_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-shape.html b/docs/reference/html/harfbuzz-hb-shape.html
new file mode 100644 (file)
index 0000000..288025d
--- /dev/null
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-shape</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-font.html" title="hb-font">
+<link rel="next" href="harfbuzz-hb-version.html" title="hb-version">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-shape.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-shape.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-font.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-version.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-shape"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-shape.top_of_page"></a>hb-shape</span></h2>
+<p>hb-shape</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape.html#hb-feature-from-string" title="hb_feature_from_string ()">hb_feature_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape.html#hb-feature-to-string" title="hb_feature_to_string ()">hb_feature_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape" title="hb_shape ()">hb_shape</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape-full" title="hb_shape_full ()">hb_shape_full</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-shape.html#hb-shape-list-shapers" title="hb_shape_list_shapers ()">hb_shape_list_shapers</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-feature-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-shape.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-shape.html#hb-feature-t-struct" title="hb_feature_t">hb_feature_t</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_feature_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-feature-from-string"></a><h3>hb_feature_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_feature_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+                        <em class="parameter"><code><span class="type">int</span> len</code></em>,
+                        <em class="parameter"><code><a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *feature</code></em>);</pre>
+<div class="refsect3">
+<a name="idp17629440"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>feature</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp15995600"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-feature-to-string"></a><h3>hb_feature_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_feature_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *feature</code></em>,
+                      <em class="parameter"><code><span class="type">char</span> *buf</code></em>,
+                      <em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
+<div class="refsect3">
+<a name="idp17672592"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape"></a><h3>hb_shape ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_shape (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+          <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+          <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</code></em>,
+          <em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>);</pre>
+<div class="refsect3">
+<a name="idp16399600"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>features</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=num_features]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-full"></a><h3>hb_shape_full ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_shape_full (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
+               <em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
+               <em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</code></em>,
+               <em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>,
+               <em class="parameter"><code>const <span class="type">char</span> * const *shaper_list</code></em>);</pre>
+<div class="refsect3">
+<a name="idp14558768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>font</p></td>
+<td class="parameter_description"><p>a font.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a buffer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>features</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=num_features]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>shaper_list</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp22383984"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-shape-list-shapers"></a><h3>hb_shape_list_shapers ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> **
+hb_shape_list_shapers (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp22392608"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-shape.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-feature-t-struct"></a><h3>hb_feature_t</h3>
+<pre class="programlisting">typedef struct {
+  hb_tag_t      tag;
+  uint32_t      value;
+  unsigned int  start;
+  unsigned int  end;
+} hb_feature_t;
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-unicode.html b/docs/reference/html/harfbuzz-hb-unicode.html
new file mode 100644 (file)
index 0000000..a5ee566
--- /dev/null
@@ -0,0 +1,1523 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-unicode</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-common.html" title="hb-common">
+<link rel="next" href="harfbuzz-hb-buffer.html" title="hb-buffer">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-unicode.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-unicode.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-common.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-buffer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-unicode"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-unicode.top_of_page"></a>hb-unicode</span></h2>
+<p>hb-unicode</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-unicode.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-unicode.html#HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS" title="HB_UNICODE_MAX_DECOMPOSITION_LEN">HB_UNICODE_MAX_DECOMPOSITION_LEN</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t"><span class="returnvalue">hb_unicode_combining_class_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class" title="hb_unicode_combining_class ()">hb_unicode_combining_class</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t"><span class="returnvalue">hb_unicode_combining_class_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-func-t" title="hb_unicode_combining_class_func_t ()">*hb_unicode_combining_class_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-compose" title="hb_unicode_compose ()">hb_unicode_compose</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-compose-func-t" title="hb_unicode_compose_func_t ()">*hb_unicode_compose_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose" title="hb_unicode_decompose ()">hb_unicode_decompose</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose-compatibility" title="hb_unicode_decompose_compatibility ()">hb_unicode_decompose_compatibility</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose-func-t" title="hb_unicode_decompose_func_t ()">*hb_unicode_decompose_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">unsigned <span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-eastasian-width" title="hb_unicode_eastasian_width ()">hb_unicode_eastasian_width</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-create" title="hb_unicode_funcs_create ()">hb_unicode_funcs_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-destroy" title="hb_unicode_funcs_destroy ()">hb_unicode_funcs_destroy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-default" title="hb_unicode_funcs_get_default ()">hb_unicode_funcs_get_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-empty" title="hb_unicode_funcs_get_empty ()">hb_unicode_funcs_get_empty</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-parent" title="hb_unicode_funcs_get_parent ()">hb_unicode_funcs_get_parent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-user-data" title="hb_unicode_funcs_get_user_data ()">hb_unicode_funcs_get_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-is-immutable" title="hb_unicode_funcs_is_immutable ()">hb_unicode_funcs_is_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-make-immutable" title="hb_unicode_funcs_make_immutable ()">hb_unicode_funcs_make_immutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-reference" title="hb_unicode_funcs_reference ()">hb_unicode_funcs_reference</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-combining-class-func" title="hb_unicode_funcs_set_combining_class_func ()">hb_unicode_funcs_set_combining_class_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-compose-func" title="hb_unicode_funcs_set_compose_func ()">hb_unicode_funcs_set_compose_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-compatibility-func" title="hb_unicode_funcs_set_decompose_compatibility_func ()">hb_unicode_funcs_set_decompose_compatibility_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-func" title="hb_unicode_funcs_set_decompose_func ()">hb_unicode_funcs_set_decompose_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-eastasian-width-func" title="hb_unicode_funcs_set_eastasian_width_func ()">hb_unicode_funcs_set_eastasian_width_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-general-category-func" title="hb_unicode_funcs_set_general_category_func ()">hb_unicode_funcs_set_general_category_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-mirroring-func" title="hb_unicode_funcs_set_mirroring_func ()">hb_unicode_funcs_set_mirroring_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-script-func" title="hb_unicode_funcs_set_script_func ()">hb_unicode_funcs_set_script_func</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-user-data" title="hb_unicode_funcs_set_user_data ()">hb_unicode_funcs_set_user_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t"><span class="returnvalue">hb_unicode_general_category_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category" title="hb_unicode_general_category ()">hb_unicode_general_category</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t"><span class="returnvalue">hb_unicode_general_category_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-func-t" title="hb_unicode_general_category_func_t ()">*hb_unicode_general_category_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-mirroring" title="hb_unicode_mirroring ()">hb_unicode_mirroring</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-mirroring-func-t" title="hb_unicode_mirroring_func_t ()">*hb_unicode_mirroring_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-script" title="hb_unicode_script ()">hb_unicode_script</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-script-func-t" title="hb_unicode_script_func_t ()">*hb_unicode_script_func_t</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="hb-unicode-funcs-t"></a><div class="refsect1">
+<a name="harfbuzz-hb-unicode.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t">hb_unicode_combining_class_t</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t">hb_unicode_funcs_t</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t">hb_unicode_general_category_t</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-unicode.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    GBoxed
+    <span class="lineart">╰──</span> hb_unicode_funcs_t
+    GEnum
+    <span class="lineart">├──</span> hb_unicode_combining_class_t
+    <span class="lineart">╰──</span> hb_unicode_general_category_t
+</pre>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-unicode.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-unicode.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS"></a><h3>HB_UNICODE_MAX_DECOMPOSITION_LEN</h3>
+<pre class="programlisting">#define HB_UNICODE_MAX_DECOMPOSITION_LEN (18+1) /* codepoints */
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-combining-class"></a><h3>hb_unicode_combining_class ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t"><span class="returnvalue">hb_unicode_combining_class_t</span></a>
+hb_unicode_combining_class (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19818576"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-combining-class-func-t"></a><h3>hb_unicode_combining_class_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t"><span class="returnvalue">hb_unicode_combining_class_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_combining_class_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                                      <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19831776"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-compose"></a><h3>hb_unicode_compose ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> a</code></em>,
+                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> b</code></em>,
+                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *ab</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19845040"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ab</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19857152"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-compose-func-t"></a><h3>hb_unicode_compose_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_compose_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> a</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> b</code></em>,
+                              <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *ab</code></em>,
+                              <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19874288"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-decompose"></a><h3>hb_unicode_decompose ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_unicode_decompose (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> ab</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *a</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *b</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19887632"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19903456"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-decompose-compatibility"></a><h3>hb_unicode_decompose_compatibility ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> u</code></em>,
+                                    <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *decomposed</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19916016"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>decomposed</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp19928128"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-decompose-func-t"></a><h3>hb_unicode_decompose_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_decompose_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> ab</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *a</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> *b</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19945264"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-eastasian-width"></a><h3>hb_unicode_eastasian_width ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">int</span>
+hb_unicode_eastasian_width (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                            <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19955504"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-create"></a><h3>hb_unicode_funcs_create ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_unicode_funcs_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *parent</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19963936"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-destroy"></a><h3>hb_unicode_funcs_destroy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp19972448"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-get-default"></a><h3>hb_unicode_funcs_get_default ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_unicode_funcs_get_default (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19987856"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-get-empty"></a><h3>hb_unicode_funcs_get_empty ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_unicode_funcs_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="idp19995760"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-get-parent"></a><h3>hb_unicode_funcs_get_parent ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_unicode_funcs_get_parent (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp20006480"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp20014880"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-get-user-data"></a><h3>hb_unicode_funcs_get_user_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> *
+hb_unicode_funcs_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
+<div class="refsect3">
+<a name="idp20025632"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp20034032"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-is-immutable"></a><h3>hb_unicode_funcs_is_immutable ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_unicode_funcs_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21543488"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21550992"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-make-immutable"></a><h3>hb_unicode_funcs_make_immutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_make_immutable (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21558784"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-reference"></a><h3>hb_unicode_funcs_reference ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
+hb_unicode_funcs_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21572816"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21580320"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-combining-class-func"></a><h3>hb_unicode_funcs_set_combining_class_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_combining_class_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-func-t" title="hb_unicode_combining_class_func_t ()"><span class="type">hb_unicode_combining_class_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21593648"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-compose-func"></a><h3>hb_unicode_funcs_set_compose_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_compose_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-compose-func-t" title="hb_unicode_compose_func_t ()"><span class="type">hb_unicode_compose_func_t</span></a> func</code></em>,
+                                   <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21611808"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-decompose-compatibility-func"></a><h3>hb_unicode_funcs_set_decompose_compatibility_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_decompose_compatibility_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><span class="type">hb_unicode_decompose_compatibility_func_t</span> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21629968"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-decompose-func"></a><h3>hb_unicode_funcs_set_decompose_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_decompose_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-decompose-func-t" title="hb_unicode_decompose_func_t ()"><span class="type">hb_unicode_decompose_func_t</span></a> func</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21648128"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-eastasian-width-func"></a><h3>hb_unicode_funcs_set_eastasian_width_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_eastasian_width_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><span class="type">hb_unicode_eastasian_width_func_t</span> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21666288"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-general-category-func"></a><h3>hb_unicode_funcs_set_general_category_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_general_category_func
+                               (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-func-t" title="hb_unicode_general_category_func_t ()"><span class="type">hb_unicode_general_category_func_t</span></a> func</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21684448"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-mirroring-func"></a><h3>hb_unicode_funcs_set_mirroring_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_mirroring_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-mirroring-func-t" title="hb_unicode_mirroring_func_t ()"><span class="type">hb_unicode_mirroring_func_t</span></a> func</code></em>,
+                                     <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                     <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21702608"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-script-func"></a><h3>hb_unicode_funcs_set_script_func ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_unicode_funcs_set_script_func (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-script-func-t" title="hb_unicode_script_func_t ()"><span class="type">hb_unicode_script_func_t</span></a> func</code></em>,
+                                  <em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
+                                  <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21720768"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>a Unicode function structure</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-set-user-data"></a><h3>hb_unicode_funcs_set_user_data ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
+hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *data</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
+<div class="refsect3">
+<a name="idp21740304"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ufuncs</p></td>
+<td class="parameter_description"><p>Unicode functions.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp21747808"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-general-category"></a><h3>hb_unicode_general_category ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t"><span class="returnvalue">hb_unicode_general_category_t</span></a>
+hb_unicode_general_category (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21756896"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-general-category-func-t"></a><h3>hb_unicode_general_category_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t"><span class="returnvalue">hb_unicode_general_category_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_general_category_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                       <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                                       <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21768192"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-mirroring"></a><h3>hb_unicode_mirroring ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+hb_unicode_mirroring (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                      <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21777952"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-mirroring-func-t"></a><h3>hb_unicode_mirroring_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="returnvalue">hb_codepoint_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_mirroring_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                                <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                                <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21791664"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-script"></a><h3>hb_unicode_script ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                   <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21801936"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-script-func-t"></a><h3>hb_unicode_script_func_t ()</h3>
+<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+<span class="c_punctuation">(</span>*hb_unicode_script_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
+                             <em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> unicode</code></em>,
+                             <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21815648"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-unicode.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="hb-unicode-combining-class-t"></a><h3>enum hb_unicode_combining_class_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21822720"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-NOT-REORDERED:CAPS"></a>HB_UNICODE_COMBINING_CLASS_NOT_REORDERED</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-OVERLAY:CAPS"></a>HB_UNICODE_COMBINING_CLASS_OVERLAY</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-NUKTA:CAPS"></a>HB_UNICODE_COMBINING_CLASS_NUKTA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-KANA-VOICING:CAPS"></a>HB_UNICODE_COMBINING_CLASS_KANA_VOICING</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-VIRAMA:CAPS"></a>HB_UNICODE_COMBINING_CLASS_VIRAMA</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC10:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC10</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC11:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC11</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC12:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC12</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC13:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC13</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC14:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC14</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC15:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC15</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC16:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC16</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC17:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC17</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC18:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC18</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC19:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC19</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC20:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC20</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC21:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC21</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC22:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC22</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC23:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC23</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC24:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC24</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC25:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC25</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC26:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC26</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC27:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC27</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC28:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC28</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC29:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC29</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC30:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC30</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC31:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC31</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC32:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC32</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC33:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC33</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC34:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC34</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC35:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC35</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC36:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC36</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC84:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC84</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC91:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC91</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC103:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC103</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC107:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC107</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC118:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC118</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC122:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC122</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC129:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC129</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC130:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC130</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-CCC133:CAPS"></a>HB_UNICODE_COMBINING_CLASS_CCC133</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ATTACHED-BELOW-LEFT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ATTACHED-BELOW:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ATTACHED-ABOVE:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ATTACHED-ABOVE-RIGHT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-BELOW-LEFT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_BELOW_LEFT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-BELOW:CAPS"></a>HB_UNICODE_COMBINING_CLASS_BELOW</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-BELOW-RIGHT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-LEFT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_LEFT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-RIGHT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_RIGHT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ABOVE-LEFT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ABOVE:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ABOVE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-ABOVE-RIGHT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-DOUBLE-BELOW:CAPS"></a>HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-DOUBLE-ABOVE:CAPS"></a>HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-IOTA-SUBSCRIPT:CAPS"></a>HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-COMBINING-CLASS-INVALID:CAPS"></a>HB_UNICODE_COMBINING_CLASS_INVALID</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-funcs-t"></a><h3>hb_unicode_funcs_t</h3>
+<pre class="programlisting">typedef struct hb_unicode_funcs_t hb_unicode_funcs_t;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-unicode-general-category-t"></a><h3>enum hb_unicode_general_category_t</h3>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp22023440"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-CONTROL:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_CONTROL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-FORMAT:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_FORMAT</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-UNASSIGNED:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-PRIVATE-USE:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-SURROGATE:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_SURROGATE</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-LOWERCASE-LETTER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-MODIFIER-LETTER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-OTHER-LETTER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-TITLECASE-LETTER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-UPPERCASE-LETTER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-SPACING-MARK:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-ENCLOSING-MARK:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-NON-SPACING-MARK:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-DECIMAL-NUMBER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-LETTER-NUMBER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-OTHER-NUMBER:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-CONNECT-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-DASH-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-CLOSE-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-FINAL-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-INITIAL-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-OTHER-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-OPEN-PUNCTUATION:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-CURRENCY-SYMBOL:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-MODIFIER-SYMBOL:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-MATH-SYMBOL:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-OTHER-SYMBOL:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-LINE-SEPARATOR:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-PARAGRAPH-SEPARATOR:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HB-UNICODE-GENERAL-CATEGORY-SPACE-SEPARATOR:CAPS"></a>HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR</p></td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-uniscribe.html b/docs/reference/html/harfbuzz-hb-uniscribe.html
new file mode 100644 (file)
index 0000000..eb90c9f
--- /dev/null
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-uniscribe</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-graphite2.html" title="hb-graphite2">
+<link rel="next" href="harfbuzz-hb-coretext.html" title="hb-coretext">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-uniscribe.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-graphite2.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-coretext.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-uniscribe"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-uniscribe.top_of_page"></a>hb-uniscribe</span></h2>
+<p>hb-uniscribe</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-uniscribe.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">HFONT</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-hfont" title="hb_uniscribe_font_get_hfont ()">hb_uniscribe_font_get_hfont</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">LOGFONTW</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-logfontw" title="hb_uniscribe_font_get_logfontw ()">hb_uniscribe_font_get_logfontw</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-uniscribe.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-uniscribe.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-uniscribe-font-get-hfont"></a><h3>hb_uniscribe_font_get_hfont ()</h3>
+<pre class="programlisting"><span class="returnvalue">HFONT</span>
+hb_uniscribe_font_get_hfont (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp18176784"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-uniscribe-font-get-logfontw"></a><h3>hb_uniscribe_font_get_logfontw ()</h3>
+<pre class="programlisting"><span class="returnvalue">LOGFONTW</span> *
+hb_uniscribe_font_get_logfontw (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19749248"></a><h4>Returns</h4>
+<p></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-uniscribe.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb-version.html b/docs/reference/html/harfbuzz-hb-version.html
new file mode 100644 (file)
index 0000000..a20d726
--- /dev/null
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb-version</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="harfbuzz-hb-shape.html" title="hb-shape">
+<link rel="next" href="harfbuzz-hb-deprecated.html" title="hb-deprecated">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb-version.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="harfbuzz-hb-shape.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-deprecated.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb-version"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb-version.top_of_page"></a>hb-version</span></h2>
+<p>hb-version</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb-version.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-version.html#hb-version" title="hb_version ()">hb_version</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="harfbuzz-hb-version.html#hb-version-string" title="hb_version_string ()">hb_version_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-version.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MAJOR:CAPS" title="HB_VERSION_MAJOR">HB_VERSION_MAJOR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MICRO:CAPS" title="HB_VERSION_MICRO">HB_VERSION_MICRO</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-version.html#HB-VERSION-MINOR:CAPS" title="HB_VERSION_MINOR">HB_VERSION_MINOR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="harfbuzz-hb-version.html#HB-VERSION-STRING:CAPS" title="HB_VERSION_STRING">HB_VERSION_STRING</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-version.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-version.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="hb-version"></a><h3>hb_version ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+hb_version (<em class="parameter"><code>unsigned <span class="type">int</span> *major</code></em>,
+            <em class="parameter"><code>unsigned <span class="type">int</span> *minor</code></em>,
+            <em class="parameter"><code>unsigned <span class="type">int</span> *micro</code></em>);</pre>
+<div class="refsect3">
+<a name="idp17096464"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>major</p></td>
+<td class="parameter_description"><p> Library major version component. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>minor</p></td>
+<td class="parameter_description"><p> Library minor version component. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>micro</p></td>
+<td class="parameter_description"><p> Library micro version component. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="hb-version-string"></a><h3>hb_version_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+hb_version_string (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Returns library version as a string with three components.</p>
+<div class="refsect3">
+<a name="idp21398048"></a><h4>Returns</h4>
+<p> library version string.</p>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb-version.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="HB-VERSION-MAJOR:CAPS"></a><h3>HB_VERSION_MAJOR</h3>
+<pre class="programlisting">#define HB_VERSION_MAJOR 0
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-VERSION-MICRO:CAPS"></a><h3>HB_VERSION_MICRO</h3>
+<pre class="programlisting">#define HB_VERSION_MICRO 35
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-VERSION-MINOR:CAPS"></a><h3>HB_VERSION_MINOR</h3>
+<pre class="programlisting">#define HB_VERSION_MINOR 9
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="HB-VERSION-STRING:CAPS"></a><h3>HB_VERSION_STRING</h3>
+<pre class="programlisting">#define HB_VERSION_STRING "0.9.35"
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz-hb.html b/docs/reference/html/harfbuzz-hb.html
new file mode 100644 (file)
index 0000000..0ce86d6
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>hb</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="ch01.html" title="[Insert title here]">
+<link rel="prev" href="ch01.html" title="[Insert title here]">
+<link rel="next" href="harfbuzz-hb-common.html" title="hb-common">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#harfbuzz-hb.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="harfbuzz-hb-common.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="harfbuzz-hb"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="harfbuzz-hb.top_of_page"></a>hb</span></h2>
+<p>hb</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="harfbuzz-hb.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb.functions_details"></a><h2>Functions</h2>
+</div>
+<div class="refsect1">
+<a name="harfbuzz-hb.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/harfbuzz.devhelp2 b/docs/reference/html/harfbuzz.devhelp2
new file mode 100644 (file)
index 0000000..4fdf9d4
--- /dev/null
@@ -0,0 +1,378 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="HarfBuzz Reference Manual" link="index.html" author="" name="harfbuzz" version="2" language="c">
+  <chapters>
+    <sub name="[Insert title here]" link="ch01.html">
+      <sub name="hb" link="harfbuzz-hb.html"/>
+      <sub name="hb-common" link="harfbuzz-hb-common.html"/>
+      <sub name="hb-unicode" link="harfbuzz-hb-unicode.html"/>
+      <sub name="hb-buffer" link="harfbuzz-hb-buffer.html"/>
+      <sub name="hb-blob" link="harfbuzz-hb-blob.html"/>
+      <sub name="hb-face" link="harfbuzz-hb-face.html"/>
+      <sub name="hb-font" link="harfbuzz-hb-font.html"/>
+      <sub name="hb-shape" link="harfbuzz-hb-shape.html"/>
+      <sub name="hb-version" link="harfbuzz-hb-version.html"/>
+      <sub name="hb-deprecated" link="harfbuzz-hb-deprecated.html"/>
+      <sub name="hb-set" link="harfbuzz-hb-set.html"/>
+      <sub name="hb-ot" link="harfbuzz-hb-ot.html"/>
+      <sub name="hb-ot-layout" link="harfbuzz-hb-ot-layout.html"/>
+      <sub name="hb-ot-tag" link="harfbuzz-hb-ot-tag.html"/>
+      <sub name="hb-shape-plan" link="harfbuzz-hb-shape-plan.html"/>
+      <sub name="hb-glib" link="harfbuzz-hb-glib.html"/>
+      <sub name="hb-icu" link="harfbuzz-hb-icu.html"/>
+      <sub name="hb-ft" link="harfbuzz-hb-ft.html"/>
+      <sub name="hb-graphite2" link="harfbuzz-hb-graphite2.html"/>
+      <sub name="hb-uniscribe" link="harfbuzz-hb-uniscribe.html"/>
+      <sub name="hb-coretext" link="harfbuzz-hb-coretext.html"/>
+      <sub name="hb-gobject" link="harfbuzz-hb-gobject.html"/>
+    </sub>
+    <sub name="Object Hierarchy" link="object-tree.html"/>
+    <sub name="API Index" link="api-index-full.html"/>
+    <sub name="Index of deprecated API" link="deprecated-api-index.html"/>
+    <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+  </chapters>
+  <functions>
+    <keyword type="macro" name="HB_DIRECTION_REVERSE()" link="harfbuzz-hb-common.html#HB-DIRECTION-REVERSE:CAPS"/>
+    <keyword type="macro" name="HB_LANGUAGE_INVALID" link="harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS"/>
+    <keyword type="macro" name="HB_TAG()" link="harfbuzz-hb-common.html#HB-TAG:CAPS"/>
+    <keyword type="macro" name="HB_UNTAG()" link="harfbuzz-hb-common.html#HB-UNTAG:CAPS"/>
+    <keyword type="function" name="hb_destroy_func_t ()" link="harfbuzz-hb-common.html#hb-destroy-func-t"/>
+    <keyword type="function" name="hb_direction_from_string ()" link="harfbuzz-hb-common.html#hb-direction-from-string" since="1.0"/>
+    <keyword type="function" name="hb_direction_to_string ()" link="harfbuzz-hb-common.html#hb-direction-to-string" since="1.0"/>
+    <keyword type="function" name="hb_language_from_string ()" link="harfbuzz-hb-common.html#hb-language-from-string" since="1.0"/>
+    <keyword type="function" name="hb_language_get_default ()" link="harfbuzz-hb-common.html#hb-language-get-default" since="1.0"/>
+    <keyword type="function" name="hb_language_to_string ()" link="harfbuzz-hb-common.html#hb-language-to-string" since="1.0"/>
+    <keyword type="function" name="hb_script_from_iso15924_tag ()" link="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" since="1.0"/>
+    <keyword type="function" name="hb_script_from_string ()" link="harfbuzz-hb-common.html#hb-script-from-string" since="1.0"/>
+    <keyword type="function" name="hb_script_get_horizontal_direction ()" link="harfbuzz-hb-common.html#hb-script-get-horizontal-direction" since="1.0"/>
+    <keyword type="function" name="hb_script_to_iso15924_tag ()" link="harfbuzz-hb-common.html#hb-script-to-iso15924-tag" since="1.0"/>
+    <keyword type="function" name="hb_tag_from_string ()" link="harfbuzz-hb-common.html#hb-tag-from-string" since="1.0"/>
+    <keyword type="function" name="hb_tag_to_string ()" link="harfbuzz-hb-common.html#hb-tag-to-string" since="1.0"/>
+    <keyword type="macro" name="HB_DIRECTION_IS_BACKWARD()" link="harfbuzz-hb-common.html#HB-DIRECTION-IS-BACKWARD:CAPS"/>
+    <keyword type="macro" name="HB_DIRECTION_IS_FORWARD()" link="harfbuzz-hb-common.html#HB-DIRECTION-IS-FORWARD:CAPS"/>
+    <keyword type="macro" name="HB_DIRECTION_IS_HORIZONTAL()" link="harfbuzz-hb-common.html#HB-DIRECTION-IS-HORIZONTAL:CAPS"/>
+    <keyword type="macro" name="HB_DIRECTION_IS_VALID()" link="harfbuzz-hb-common.html#HB-DIRECTION-IS-VALID:CAPS"/>
+    <keyword type="macro" name="HB_DIRECTION_IS_VERTICAL()" link="harfbuzz-hb-common.html#HB-DIRECTION-IS-VERTICAL:CAPS"/>
+    <keyword type="macro" name="HB_TAG_NONE" link="harfbuzz-hb-common.html#HB-TAG-NONE:CAPS"/>
+    <keyword type="macro" name="HB_TAG_MAX" link="harfbuzz-hb-common.html#HB-TAG-MAX:CAPS"/>
+    <keyword type="typedef" name="hb_bool_t" link="harfbuzz-hb-common.html#hb-bool-t"/>
+    <keyword type="typedef" name="hb_codepoint_t" link="harfbuzz-hb-common.html#hb-codepoint-t"/>
+    <keyword type="enum" name="enum hb_direction_t" link="harfbuzz-hb-common.html#hb-direction-t"/>
+    <keyword type="typedef" name="hb_language_t" link="harfbuzz-hb-common.html#hb-language-t"/>
+    <keyword type="typedef" name="hb_mask_t" link="harfbuzz-hb-common.html#hb-mask-t"/>
+    <keyword type="typedef" name="hb_position_t" link="harfbuzz-hb-common.html#hb-position-t"/>
+    <keyword type="enum" name="enum hb_script_t" link="harfbuzz-hb-common.html#hb-script-t"/>
+    <keyword type="typedef" name="hb_tag_t" link="harfbuzz-hb-common.html#hb-tag-t"/>
+    <keyword type="struct" name="hb_user_data_key_t" link="harfbuzz-hb-common.html#hb-user-data-key-t-struct"/>
+    <keyword type="union" name="hb_var_int_t" link="harfbuzz-hb-common.html#hb-var-int-t"/>
+    <keyword type="macro" name="HB_UNICODE_MAX_DECOMPOSITION_LEN" link="harfbuzz-hb-unicode.html#HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS"/>
+    <keyword type="function" name="hb_unicode_combining_class ()" link="harfbuzz-hb-unicode.html#hb-unicode-combining-class"/>
+    <keyword type="function" name="hb_unicode_combining_class_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-combining-class-func-t"/>
+    <keyword type="function" name="hb_unicode_compose ()" link="harfbuzz-hb-unicode.html#hb-unicode-compose" since="1.0"/>
+    <keyword type="function" name="hb_unicode_compose_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-compose-func-t"/>
+    <keyword type="function" name="hb_unicode_decompose ()" link="harfbuzz-hb-unicode.html#hb-unicode-decompose" since="1.0"/>
+    <keyword type="function" name="hb_unicode_decompose_compatibility ()" link="harfbuzz-hb-unicode.html#hb-unicode-decompose-compatibility" since="1.0"/>
+    <keyword type="function" name="hb_unicode_decompose_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-decompose-func-t"/>
+    <keyword type="function" name="hb_unicode_eastasian_width ()" link="harfbuzz-hb-unicode.html#hb-unicode-eastasian-width"/>
+    <keyword type="function" name="hb_unicode_funcs_create ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-create"/>
+    <keyword type="function" name="hb_unicode_funcs_destroy ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-destroy" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_get_default ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-default"/>
+    <keyword type="function" name="hb_unicode_funcs_get_empty ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_get_parent ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-parent" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_get_user_data ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_is_immutable ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-is-immutable" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_make_immutable ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-make-immutable" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_reference ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-reference" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_combining_class_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-combining-class-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_compose_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-compose-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_decompose_compatibility_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-compatibility-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_decompose_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_eastasian_width_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-eastasian-width-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_general_category_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-general-category-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_mirroring_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-mirroring-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_script_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-script-func" since="1.0"/>
+    <keyword type="function" name="hb_unicode_funcs_set_user_data ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-user-data" since="1.0"/>
+    <keyword type="function" name="hb_unicode_general_category ()" link="harfbuzz-hb-unicode.html#hb-unicode-general-category"/>
+    <keyword type="function" name="hb_unicode_general_category_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-general-category-func-t"/>
+    <keyword type="function" name="hb_unicode_mirroring ()" link="harfbuzz-hb-unicode.html#hb-unicode-mirroring"/>
+    <keyword type="function" name="hb_unicode_mirroring_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-mirroring-func-t"/>
+    <keyword type="function" name="hb_unicode_script ()" link="harfbuzz-hb-unicode.html#hb-unicode-script"/>
+    <keyword type="function" name="hb_unicode_script_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-script-func-t"/>
+    <keyword type="enum" name="enum hb_unicode_combining_class_t" link="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t"/>
+    <keyword type="typedef" name="hb_unicode_funcs_t" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"/>
+    <keyword type="enum" name="enum hb_unicode_general_category_t" link="harfbuzz-hb-unicode.html#hb-unicode-general-category-t"/>
+    <keyword type="function" name="hb_buffer_add ()" link="harfbuzz-hb-buffer.html#hb-buffer-add" since="1.0"/>
+    <keyword type="function" name="hb_buffer_add_utf16 ()" link="harfbuzz-hb-buffer.html#hb-buffer-add-utf16" since="1.0"/>
+    <keyword type="function" name="hb_buffer_add_utf32 ()" link="harfbuzz-hb-buffer.html#hb-buffer-add-utf32" since="1.0"/>
+    <keyword type="function" name="hb_buffer_add_utf8 ()" link="harfbuzz-hb-buffer.html#hb-buffer-add-utf8" since="1.0"/>
+    <keyword type="function" name="hb_buffer_add_codepoints ()" link="harfbuzz-hb-buffer.html#hb-buffer-add-codepoints" since="1.0"/>
+    <keyword type="function" name="hb_buffer_allocation_successful ()" link="harfbuzz-hb-buffer.html#hb-buffer-allocation-successful" since="1.0"/>
+    <keyword type="function" name="hb_buffer_clear_contents ()" link="harfbuzz-hb-buffer.html#hb-buffer-clear-contents" since="1.0"/>
+    <keyword type="function" name="hb_buffer_create ()" link="harfbuzz-hb-buffer.html#hb-buffer-create"/>
+    <keyword type="function" name="hb_buffer_deserialize_glyphs ()" link="harfbuzz-hb-buffer.html#hb-buffer-deserialize-glyphs" since="1.0"/>
+    <keyword type="function" name="hb_buffer_destroy ()" link="harfbuzz-hb-buffer.html#hb-buffer-destroy" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_content_type ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-content-type" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_direction ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-direction" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_empty ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_flags ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-flags" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_glyph_infos ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-infos" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_glyph_positions ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-glyph-positions" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_language ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-language" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_length ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-length" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_replacement_codepoint ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-replacement-codepoint" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_script ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-script" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_segment_properties ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-segment-properties" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_unicode_funcs ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-unicode-funcs" since="1.0"/>
+    <keyword type="function" name="hb_buffer_get_user_data ()" link="harfbuzz-hb-buffer.html#hb-buffer-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_buffer_guess_segment_properties ()" link="harfbuzz-hb-buffer.html#hb-buffer-guess-segment-properties" since="1.0"/>
+    <keyword type="function" name="hb_buffer_normalize_glyphs ()" link="harfbuzz-hb-buffer.html#hb-buffer-normalize-glyphs" since="1.0"/>
+    <keyword type="function" name="hb_buffer_pre_allocate ()" link="harfbuzz-hb-buffer.html#hb-buffer-pre-allocate" since="1.0"/>
+    <keyword type="function" name="hb_buffer_reference ()" link="harfbuzz-hb-buffer.html#hb-buffer-reference" since="1.0"/>
+    <keyword type="function" name="hb_buffer_reset ()" link="harfbuzz-hb-buffer.html#hb-buffer-reset" since="1.0"/>
+    <keyword type="function" name="hb_buffer_reverse ()" link="harfbuzz-hb-buffer.html#hb-buffer-reverse" since="1.0"/>
+    <keyword type="function" name="hb_buffer_reverse_clusters ()" link="harfbuzz-hb-buffer.html#hb-buffer-reverse-clusters" since="1.0"/>
+    <keyword type="function" name="hb_buffer_serialize_format_from_string ()" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-from-string" since="1.0"/>
+    <keyword type="function" name="hb_buffer_serialize_format_to_string ()" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-to-string" since="1.0"/>
+    <keyword type="function" name="hb_buffer_serialize_glyphs ()" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-glyphs" since="1.0"/>
+    <keyword type="function" name="hb_buffer_serialize_list_formats ()" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-list-formats" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_content_type ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-content-type" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_direction ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-direction" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_flags ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-flags" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_language ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-language" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_length ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-length" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_replacement_codepoint ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-replacement-codepoint" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_script ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-script" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_segment_properties ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-segment-properties" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_unicode_funcs ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-unicode-funcs" since="1.0"/>
+    <keyword type="function" name="hb_buffer_set_user_data ()" link="harfbuzz-hb-buffer.html#hb-buffer-set-user-data" since="1.0"/>
+    <keyword type="function" name="hb_segment_properties_equal ()" link="harfbuzz-hb-buffer.html#hb-segment-properties-equal"/>
+    <keyword type="function" name="hb_segment_properties_hash ()" link="harfbuzz-hb-buffer.html#hb-segment-properties-hash"/>
+    <keyword type="macro" name="HB_SEGMENT_PROPERTIES_DEFAULT" link="harfbuzz-hb-buffer.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS"/>
+    <keyword type="enum" name="enum hb_buffer_content_type_t" link="harfbuzz-hb-buffer.html#hb-buffer-content-type-t"/>
+    <keyword type="enum" name="enum hb_buffer_flags_t" link="harfbuzz-hb-buffer.html#hb-buffer-flags-t"/>
+    <keyword type="enum" name="enum hb_buffer_serialize_flags_t" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t"/>
+    <keyword type="enum" name="enum hb_buffer_serialize_format_t" link="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t"/>
+    <keyword type="typedef" name="hb_buffer_t" link="harfbuzz-hb-buffer.html#hb-buffer-t"/>
+    <keyword type="struct" name="hb_glyph_info_t" link="harfbuzz-hb-buffer.html#hb-glyph-info-t-struct"/>
+    <keyword type="struct" name="hb_glyph_position_t" link="harfbuzz-hb-buffer.html#hb-glyph-position-t-struct"/>
+    <keyword type="struct" name="hb_segment_properties_t" link="harfbuzz-hb-buffer.html#hb-segment-properties-t-struct"/>
+    <keyword type="function" name="hb_blob_create ()" link="harfbuzz-hb-blob.html#hb-blob-create"/>
+    <keyword type="function" name="hb_blob_create_sub_blob ()" link="harfbuzz-hb-blob.html#hb-blob-create-sub-blob" since="1.0"/>
+    <keyword type="function" name="hb_blob_destroy ()" link="harfbuzz-hb-blob.html#hb-blob-destroy" since="1.0"/>
+    <keyword type="function" name="hb_blob_get_data ()" link="harfbuzz-hb-blob.html#hb-blob-get-data" since="1.0"/>
+    <keyword type="function" name="hb_blob_get_data_writable ()" link="harfbuzz-hb-blob.html#hb-blob-get-data-writable" since="1.0"/>
+    <keyword type="function" name="hb_blob_get_empty ()" link="harfbuzz-hb-blob.html#hb-blob-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_blob_get_length ()" link="harfbuzz-hb-blob.html#hb-blob-get-length" since="1.0"/>
+    <keyword type="function" name="hb_blob_get_user_data ()" link="harfbuzz-hb-blob.html#hb-blob-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_blob_is_immutable ()" link="harfbuzz-hb-blob.html#hb-blob-is-immutable" since="1.0"/>
+    <keyword type="function" name="hb_blob_make_immutable ()" link="harfbuzz-hb-blob.html#hb-blob-make-immutable" since="1.0"/>
+    <keyword type="function" name="hb_blob_reference ()" link="harfbuzz-hb-blob.html#hb-blob-reference" since="1.0"/>
+    <keyword type="function" name="hb_blob_set_user_data ()" link="harfbuzz-hb-blob.html#hb-blob-set-user-data" since="1.0"/>
+    <keyword type="typedef" name="hb_blob_t" link="harfbuzz-hb-blob.html#hb-blob-t"/>
+    <keyword type="enum" name="enum hb_memory_mode_t" link="harfbuzz-hb-blob.html#hb-memory-mode-t"/>
+    <keyword type="function" name="hb_face_create ()" link="harfbuzz-hb-face.html#hb-face-create"/>
+    <keyword type="function" name="hb_face_create_for_tables ()" link="harfbuzz-hb-face.html#hb-face-create-for-tables" since="1.0"/>
+    <keyword type="function" name="hb_face_destroy ()" link="harfbuzz-hb-face.html#hb-face-destroy" since="1.0"/>
+    <keyword type="function" name="hb_face_get_empty ()" link="harfbuzz-hb-face.html#hb-face-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_face_get_glyph_count ()" link="harfbuzz-hb-face.html#hb-face-get-glyph-count" since="1.0"/>
+    <keyword type="function" name="hb_face_get_index ()" link="harfbuzz-hb-face.html#hb-face-get-index" since="1.0"/>
+    <keyword type="function" name="hb_face_get_upem ()" link="harfbuzz-hb-face.html#hb-face-get-upem" since="1.0"/>
+    <keyword type="function" name="hb_face_get_user_data ()" link="harfbuzz-hb-face.html#hb-face-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_face_is_immutable ()" link="harfbuzz-hb-face.html#hb-face-is-immutable" since="1.0"/>
+    <keyword type="function" name="hb_face_make_immutable ()" link="harfbuzz-hb-face.html#hb-face-make-immutable" since="1.0"/>
+    <keyword type="function" name="hb_face_reference ()" link="harfbuzz-hb-face.html#hb-face-reference" since="1.0"/>
+    <keyword type="function" name="hb_face_reference_blob ()" link="harfbuzz-hb-face.html#hb-face-reference-blob" since="1.0"/>
+    <keyword type="function" name="hb_face_reference_table ()" link="harfbuzz-hb-face.html#hb-face-reference-table" since="1.0"/>
+    <keyword type="function" name="hb_face_set_glyph_count ()" link="harfbuzz-hb-face.html#hb-face-set-glyph-count" since="1.0"/>
+    <keyword type="function" name="hb_face_set_index ()" link="harfbuzz-hb-face.html#hb-face-set-index" since="1.0"/>
+    <keyword type="function" name="hb_face_set_upem ()" link="harfbuzz-hb-face.html#hb-face-set-upem" since="1.0"/>
+    <keyword type="function" name="hb_face_set_user_data ()" link="harfbuzz-hb-face.html#hb-face-set-user-data" since="1.0"/>
+    <keyword type="typedef" name="hb_face_t" link="harfbuzz-hb-face.html#hb-face-t"/>
+    <keyword type="function" name="hb_font_add_glyph_origin_for_direction ()" link="harfbuzz-hb-font.html#hb-font-add-glyph-origin-for-direction" since="1.0"/>
+    <keyword type="function" name="hb_font_create ()" link="harfbuzz-hb-font.html#hb-font-create"/>
+    <keyword type="function" name="hb_font_create_sub_font ()" link="harfbuzz-hb-font.html#hb-font-create-sub-font" since="1.0"/>
+    <keyword type="function" name="hb_font_destroy ()" link="harfbuzz-hb-font.html#hb-font-destroy" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_create ()" link="harfbuzz-hb-font.html#hb-font-funcs-create"/>
+    <keyword type="function" name="hb_font_funcs_destroy ()" link="harfbuzz-hb-font.html#hb-font-funcs-destroy" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_get_empty ()" link="harfbuzz-hb-font.html#hb-font-funcs-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_get_user_data ()" link="harfbuzz-hb-font.html#hb-font-funcs-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_is_immutable ()" link="harfbuzz-hb-font.html#hb-font-funcs-is-immutable" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_make_immutable ()" link="harfbuzz-hb-font.html#hb-font-funcs-make-immutable" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_reference ()" link="harfbuzz-hb-font.html#hb-font-funcs-reference" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_contour_point_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-contour-point-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_extents_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-extents-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_from_name_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-from-name-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_h_advance_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-advance-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_h_kerning_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-kerning-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_h_origin_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-origin-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_name_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-name-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_v_advance_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-advance-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_v_kerning_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-kerning-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_glyph_v_origin_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-origin-func" since="1.0"/>
+    <keyword type="function" name="hb_font_funcs_set_user_data ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-user-data" since="1.0"/>
+    <keyword type="function" name="hb_font_get_empty ()" link="harfbuzz-hb-font.html#hb-font-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_font_get_face ()" link="harfbuzz-hb-font.html#hb-font-get-face" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph ()" link="harfbuzz-hb-font.html#hb-font-get-glyph" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_advance_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-advance-for-direction" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_advance_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-advance-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_contour_point ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_contour_point_for_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-for-origin" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_contour_point_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_extents ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-extents" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_extents_for_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-extents-for-origin" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_extents_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-extents-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_from_name ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-from-name" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_from_name_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-from-name-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_h_advance ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_h_kerning ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_h_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_kerning_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-for-direction" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_kerning_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_name ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-name" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_name_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-name-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_origin_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-origin-for-direction" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_origin_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-origin-func-t"/>
+    <keyword type="function" name="hb_font_get_glyph_v_advance ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_v_kerning ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning" since="1.0"/>
+    <keyword type="function" name="hb_font_get_glyph_v_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin" since="1.0"/>
+    <keyword type="function" name="hb_font_get_parent ()" link="harfbuzz-hb-font.html#hb-font-get-parent" since="1.0"/>
+    <keyword type="function" name="hb_font_get_ppem ()" link="harfbuzz-hb-font.html#hb-font-get-ppem" since="1.0"/>
+    <keyword type="function" name="hb_font_get_scale ()" link="harfbuzz-hb-font.html#hb-font-get-scale" since="1.0"/>
+    <keyword type="function" name="hb_font_get_user_data ()" link="harfbuzz-hb-font.html#hb-font-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_font_glyph_from_string ()" link="harfbuzz-hb-font.html#hb-font-glyph-from-string" since="1.0"/>
+    <keyword type="function" name="hb_font_glyph_to_string ()" link="harfbuzz-hb-font.html#hb-font-glyph-to-string" since="1.0"/>
+    <keyword type="function" name="hb_font_is_immutable ()" link="harfbuzz-hb-font.html#hb-font-is-immutable" since="1.0"/>
+    <keyword type="function" name="hb_font_make_immutable ()" link="harfbuzz-hb-font.html#hb-font-make-immutable" since="1.0"/>
+    <keyword type="function" name="hb_font_reference ()" link="harfbuzz-hb-font.html#hb-font-reference" since="1.0"/>
+    <keyword type="function" name="hb_font_set_funcs ()" link="harfbuzz-hb-font.html#hb-font-set-funcs" since="1.0"/>
+    <keyword type="function" name="hb_font_set_funcs_data ()" link="harfbuzz-hb-font.html#hb-font-set-funcs-data" since="1.0"/>
+    <keyword type="function" name="hb_font_set_ppem ()" link="harfbuzz-hb-font.html#hb-font-set-ppem" since="1.0"/>
+    <keyword type="function" name="hb_font_set_scale ()" link="harfbuzz-hb-font.html#hb-font-set-scale" since="1.0"/>
+    <keyword type="function" name="hb_font_set_user_data ()" link="harfbuzz-hb-font.html#hb-font-set-user-data" since="1.0"/>
+    <keyword type="function" name="hb_font_subtract_glyph_origin_for_direction ()" link="harfbuzz-hb-font.html#hb-font-subtract-glyph-origin-for-direction" since="1.0"/>
+    <keyword type="function" name="hb_reference_table_func_t ()" link="harfbuzz-hb-font.html#hb-reference-table-func-t"/>
+    <keyword type="typedef" name="hb_font_funcs_t" link="harfbuzz-hb-font.html#hb-font-funcs-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_h_advance_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance-func-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_h_kerning_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning-func-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_h_origin_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin-func-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_v_advance_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-advance-func-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_v_kerning_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning-func-t"/>
+    <keyword type="typedef" name="hb_font_get_glyph_v_origin_func_t" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin-func-t"/>
+    <keyword type="typedef" name="hb_font_t" link="harfbuzz-hb-font.html#hb-font-t"/>
+    <keyword type="function" name="hb_feature_from_string ()" link="harfbuzz-hb-shape.html#hb-feature-from-string" since="1.0"/>
+    <keyword type="function" name="hb_feature_to_string ()" link="harfbuzz-hb-shape.html#hb-feature-to-string" since="1.0"/>
+    <keyword type="function" name="hb_shape ()" link="harfbuzz-hb-shape.html#hb-shape" since="1.0"/>
+    <keyword type="function" name="hb_shape_full ()" link="harfbuzz-hb-shape.html#hb-shape-full" since="1.0"/>
+    <keyword type="function" name="hb_shape_list_shapers ()" link="harfbuzz-hb-shape.html#hb-shape-list-shapers" since="1.0"/>
+    <keyword type="struct" name="hb_feature_t" link="harfbuzz-hb-shape.html#hb-feature-t-struct"/>
+    <keyword type="function" name="hb_version ()" link="harfbuzz-hb-version.html#hb-version" since="1.0"/>
+    <keyword type="function" name="hb_version_string ()" link="harfbuzz-hb-version.html#hb-version-string" since="1.0"/>
+    <keyword type="macro" name="HB_VERSION_MAJOR" link="harfbuzz-hb-version.html#HB-VERSION-MAJOR:CAPS"/>
+    <keyword type="macro" name="HB_VERSION_MICRO" link="harfbuzz-hb-version.html#HB-VERSION-MICRO:CAPS"/>
+    <keyword type="macro" name="HB_VERSION_MINOR" link="harfbuzz-hb-version.html#HB-VERSION-MINOR:CAPS"/>
+    <keyword type="macro" name="HB_VERSION_STRING" link="harfbuzz-hb-version.html#HB-VERSION-STRING:CAPS"/>
+    <keyword type="macro" name="HB_BUFFER_FLAGS_DEFAULT" link="harfbuzz-hb-deprecated.html#HB-BUFFER-FLAGS-DEFAULT:CAPS" deprecated=""/>
+    <keyword type="macro" name="HB_BUFFER_SERIALIZE_FLAGS_DEFAULT" link="harfbuzz-hb-deprecated.html#HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS" deprecated=""/>
+    <keyword type="macro" name="HB_SCRIPT_CANADIAN_ABORIGINAL" link="harfbuzz-hb-deprecated.html#HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS" deprecated=""/>
+    <keyword type="macro" name="HB_SET_VALUE_INVALID" link="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS"/>
+    <keyword type="function" name="hb_set_add ()" link="harfbuzz-hb-set.html#hb-set-add" since="1.0"/>
+    <keyword type="function" name="hb_set_add_range ()" link="harfbuzz-hb-set.html#hb-set-add-range" since="1.0"/>
+    <keyword type="function" name="hb_set_allocation_successful ()" link="harfbuzz-hb-set.html#hb-set-allocation-successful" since="1.0"/>
+    <keyword type="function" name="hb_set_clear ()" link="harfbuzz-hb-set.html#hb-set-clear" since="1.0"/>
+    <keyword type="function" name="hb_set_create ()" link="harfbuzz-hb-set.html#hb-set-create"/>
+    <keyword type="function" name="hb_set_del ()" link="harfbuzz-hb-set.html#hb-set-del" since="1.0"/>
+    <keyword type="function" name="hb_set_del_range ()" link="harfbuzz-hb-set.html#hb-set-del-range" since="1.0"/>
+    <keyword type="function" name="hb_set_destroy ()" link="harfbuzz-hb-set.html#hb-set-destroy" since="1.0"/>
+    <keyword type="function" name="hb_set_get_empty ()" link="harfbuzz-hb-set.html#hb-set-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_set_get_max ()" link="harfbuzz-hb-set.html#hb-set-get-max" since="1.0"/>
+    <keyword type="function" name="hb_set_get_min ()" link="harfbuzz-hb-set.html#hb-set-get-min" since="1.0"/>
+    <keyword type="function" name="hb_set_get_population ()" link="harfbuzz-hb-set.html#hb-set-get-population" since="1.0"/>
+    <keyword type="function" name="hb_set_get_user_data ()" link="harfbuzz-hb-set.html#hb-set-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_set_has ()" link="harfbuzz-hb-set.html#hb-set-has" since="1.0"/>
+    <keyword type="function" name="hb_set_intersect ()" link="harfbuzz-hb-set.html#hb-set-intersect" since="1.0"/>
+    <keyword type="function" name="hb_set_invert ()" link="harfbuzz-hb-set.html#hb-set-invert" since="1.0"/>
+    <keyword type="function" name="hb_set_is_empty ()" link="harfbuzz-hb-set.html#hb-set-is-empty" since="1.0"/>
+    <keyword type="function" name="hb_set_is_equal ()" link="harfbuzz-hb-set.html#hb-set-is-equal" since="1.0"/>
+    <keyword type="function" name="hb_set_next ()" link="harfbuzz-hb-set.html#hb-set-next" since="1.0"/>
+    <keyword type="function" name="hb_set_next_range ()" link="harfbuzz-hb-set.html#hb-set-next-range" since="1.0"/>
+    <keyword type="function" name="hb_set_reference ()" link="harfbuzz-hb-set.html#hb-set-reference" since="1.0"/>
+    <keyword type="function" name="hb_set_set ()" link="harfbuzz-hb-set.html#hb-set-set" since="1.0"/>
+    <keyword type="function" name="hb_set_set_user_data ()" link="harfbuzz-hb-set.html#hb-set-set-user-data" since="1.0"/>
+    <keyword type="function" name="hb_set_subtract ()" link="harfbuzz-hb-set.html#hb-set-subtract" since="1.0"/>
+    <keyword type="function" name="hb_set_symmetric_difference ()" link="harfbuzz-hb-set.html#hb-set-symmetric-difference" since="1.0"/>
+    <keyword type="function" name="hb_set_union ()" link="harfbuzz-hb-set.html#hb-set-union" since="1.0"/>
+    <keyword type="typedef" name="hb_set_t" link="harfbuzz-hb-set.html#hb-set-t"/>
+    <keyword type="function" name="hb_ot_layout_collect_lookups ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-collect-lookups"/>
+    <keyword type="function" name="hb_ot_layout_feature_get_lookups ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-feature-get-lookups"/>
+    <keyword type="function" name="hb_ot_layout_get_attach_points ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-attach-points"/>
+    <keyword type="function" name="hb_ot_layout_get_glyph_class ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyph-class"/>
+    <keyword type="function" name="hb_ot_layout_get_glyphs_in_class ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyphs-in-class"/>
+    <keyword type="function" name="hb_ot_layout_get_ligature_carets ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-ligature-carets"/>
+    <keyword type="function" name="hb_ot_layout_get_size_params ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-size-params"/>
+    <keyword type="function" name="hb_ot_layout_glyph_sequence_func_t ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-sequence-func-t"/>
+    <keyword type="function" name="hb_ot_layout_has_glyph_classes ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-glyph-classes"/>
+    <keyword type="function" name="hb_ot_layout_has_positioning ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-positioning"/>
+    <keyword type="function" name="hb_ot_layout_has_substitution ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-has-substitution"/>
+    <keyword type="function" name="hb_ot_layout_language_find_feature ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-find-feature"/>
+    <keyword type="function" name="hb_ot_layout_language_get_feature_indexes ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-indexes"/>
+    <keyword type="function" name="hb_ot_layout_language_get_feature_tags ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-tags"/>
+    <keyword type="function" name="hb_ot_layout_language_get_required_feature ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature"/>
+    <keyword type="function" name="hb_ot_layout_lookup_collect_glyphs ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-collect-glyphs"/>
+    <keyword type="function" name="hb_ot_layout_lookup_substitute_closure ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-substitute-closure"/>
+    <keyword type="function" name="hb_ot_layout_lookup_would_substitute ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-would-substitute"/>
+    <keyword type="function" name="hb_ot_layout_script_find_language ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-find-language"/>
+    <keyword type="function" name="hb_ot_layout_script_get_language_tags ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-script-get-language-tags"/>
+    <keyword type="function" name="hb_ot_layout_table_choose_script ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-choose-script"/>
+    <keyword type="function" name="hb_ot_layout_table_find_script ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-find-script"/>
+    <keyword type="function" name="hb_ot_layout_table_get_feature_tags ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-feature-tags"/>
+    <keyword type="function" name="hb_ot_layout_table_get_script_tags ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-script-tags"/>
+    <keyword type="function" name="hb_ot_layout_table_get_lookup_count ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-lookup-count"/>
+    <keyword type="function" name="hb_ot_shape_plan_collect_lookups ()" link="harfbuzz-hb-ot-layout.html#hb-ot-shape-plan-collect-lookups"/>
+    <keyword type="macro" name="HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS"/>
+    <keyword type="macro" name="HB_OT_LAYOUT_NO_FEATURE_INDEX" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS"/>
+    <keyword type="macro" name="HB_OT_LAYOUT_NO_SCRIPT_INDEX" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS"/>
+    <keyword type="macro" name="HB_OT_TAG_GDEF" link="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GDEF:CAPS"/>
+    <keyword type="macro" name="HB_OT_TAG_GPOS" link="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GPOS:CAPS"/>
+    <keyword type="macro" name="HB_OT_TAG_GSUB" link="harfbuzz-hb-ot-layout.html#HB-OT-TAG-GSUB:CAPS"/>
+    <keyword type="enum" name="enum hb_ot_layout_glyph_class_t" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t"/>
+    <keyword type="function" name="hb_ot_tag_from_language ()" link="harfbuzz-hb-ot-tag.html#hb-ot-tag-from-language"/>
+    <keyword type="function" name="hb_ot_tag_to_language ()" link="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-language"/>
+    <keyword type="function" name="hb_ot_tag_to_script ()" link="harfbuzz-hb-ot-tag.html#hb-ot-tag-to-script"/>
+    <keyword type="function" name="hb_ot_tags_from_script ()" link="harfbuzz-hb-ot-tag.html#hb-ot-tags-from-script"/>
+    <keyword type="macro" name="HB_OT_TAG_DEFAULT_LANGUAGE" link="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-LANGUAGE:CAPS"/>
+    <keyword type="macro" name="HB_OT_TAG_DEFAULT_SCRIPT" link="harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-SCRIPT:CAPS"/>
+    <keyword type="function" name="hb_shape_plan_create ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-create"/>
+    <keyword type="function" name="hb_shape_plan_create_cached ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-create-cached" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_destroy ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-destroy" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_execute ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-execute" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_get_empty ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-empty" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_get_shaper ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-shaper" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_get_user_data ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-user-data" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_reference ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-reference" since="1.0"/>
+    <keyword type="function" name="hb_shape_plan_set_user_data ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-set-user-data" since="1.0"/>
+    <keyword type="typedef" name="hb_shape_plan_t" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"/>
+    <keyword type="function" name="hb_glib_get_unicode_funcs ()" link="harfbuzz-hb-glib.html#hb-glib-get-unicode-funcs"/>
+    <keyword type="function" name="hb_glib_script_from_script ()" link="harfbuzz-hb-glib.html#hb-glib-script-from-script"/>
+    <keyword type="function" name="hb_glib_script_to_script ()" link="harfbuzz-hb-glib.html#hb-glib-script-to-script"/>
+    <keyword type="function" name="hb_icu_get_unicode_funcs ()" link="harfbuzz-hb-icu.html#hb-icu-get-unicode-funcs"/>
+    <keyword type="function" name="hb_icu_script_from_script ()" link="harfbuzz-hb-icu.html#hb-icu-script-from-script"/>
+    <keyword type="function" name="hb_icu_script_to_script ()" link="harfbuzz-hb-icu.html#hb-icu-script-to-script"/>
+    <keyword type="function" name="hb_ft_face_create ()" link="harfbuzz-hb-ft.html#hb-ft-face-create" since="1.0"/>
+    <keyword type="function" name="hb_ft_face_create_cached ()" link="harfbuzz-hb-ft.html#hb-ft-face-create-cached" since="1.0"/>
+    <keyword type="function" name="hb_ft_font_create ()" link="harfbuzz-hb-ft.html#hb-ft-font-create" since="1.0"/>
+    <keyword type="function" name="hb_ft_font_get_face ()" link="harfbuzz-hb-ft.html#hb-ft-font-get-face"/>
+    <keyword type="function" name="hb_ft_font_set_funcs ()" link="harfbuzz-hb-ft.html#hb-ft-font-set-funcs"/>
+    <keyword type="function" name="hb_graphite2_face_get_gr_face ()" link="harfbuzz-hb-graphite2.html#hb-graphite2-face-get-gr-face"/>
+    <keyword type="function" name="hb_graphite2_font_get_gr_font ()" link="harfbuzz-hb-graphite2.html#hb-graphite2-font-get-gr-font"/>
+    <keyword type="macro" name="HB_GRAPHITE2_TAG_SILF" link="harfbuzz-hb-graphite2.html#HB-GRAPHITE2-TAG-SILF:CAPS"/>
+    <keyword type="function" name="hb_uniscribe_font_get_hfont ()" link="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-hfont"/>
+    <keyword type="function" name="hb_uniscribe_font_get_logfontw ()" link="harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-logfontw"/>
+    <keyword type="function" name="hb_coretext_face_create ()" link="harfbuzz-hb-coretext.html#hb-coretext-face-create"/>
+    <keyword type="function" name="hb_coretext_face_get_cg_font ()" link="harfbuzz-hb-coretext.html#hb-coretext-face-get-cg-font"/>
+    <keyword type="function" name="hb_coretext_font_get_ct_font ()" link="harfbuzz-hb-coretext.html#hb-coretext-font-get-ct-font"/>
+    <keyword type="macro" name="HB_CORETEXT_TAG_MORT" link="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORT:CAPS"/>
+    <keyword type="macro" name="HB_CORETEXT_TAG_MORX" link="harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORX:CAPS"/>
+  </functions>
+</book>
diff --git a/docs/reference/html/home.png b/docs/reference/html/home.png
new file mode 100644 (file)
index 0000000..9346b33
Binary files /dev/null and b/docs/reference/html/home.png differ
diff --git a/docs/reference/html/index.html b/docs/reference/html/index.html
new file mode 100644 (file)
index 0000000..d5cc2bb
--- /dev/null
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>HarfBuzz Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="next" href="ch01.html" title="[Insert title here]">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">HarfBuzz Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+      for HarfBuzz 0.9.35
+.
+      
+    </p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">[Insert title here]</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb.html">hb</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-common.html">hb-common</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-unicode.html">hb-unicode</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-buffer.html">hb-buffer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-blob.html">hb-blob</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-face.html">hb-face</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-font.html">hb-font</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-shape.html">hb-shape</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-version.html">hb-version</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-deprecated.html">hb-deprecated</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-set.html">hb-set</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot.html">hb-ot</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot-layout.html">hb-ot-layout</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ot-tag.html">hb-ot-tag</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-shape-plan.html">hb-shape-plan</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-glib.html">hb-glib</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-icu.html">hb-icu</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-ft.html">hb-ft</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-graphite2.html">hb-graphite2</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-uniscribe.html">hb-uniscribe</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-coretext.html">hb-coretext</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="harfbuzz-hb-gobject.html">hb-gobject</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="object-tree.html">Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
+<dt><span class="index"><a href="deprecated-api-index.html">Index of deprecated API</a></span></dt>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/index.sgml b/docs/reference/html/index.sgml
new file mode 100644 (file)
index 0000000..e9d29e0
--- /dev/null
@@ -0,0 +1,496 @@
+<ANCHOR id="harfbuzz-hb" href="harfbuzz/harfbuzz-hb.html">
+<ANCHOR id="harfbuzz-hb.description" href="harfbuzz/harfbuzz-hb.html#harfbuzz-hb.description">
+<ANCHOR id="harfbuzz-hb.functions_details" href="harfbuzz/harfbuzz-hb.html#harfbuzz-hb.functions_details">
+<ANCHOR id="harfbuzz-hb.other_details" href="harfbuzz/harfbuzz-hb.html#harfbuzz-hb.other_details">
+<ANCHOR id="harfbuzz-hb-common" href="harfbuzz/harfbuzz-hb-common.html">
+<ANCHOR id="harfbuzz-hb-common.functions" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.functions">
+<ANCHOR id="hb-language-t" href="harfbuzz/harfbuzz-hb-common.html#hb-language-t">
+<ANCHOR id="hb-user-data-key-t" href="harfbuzz/harfbuzz-hb-common.html#hb-user-data-key-t">
+<ANCHOR id="harfbuzz-hb-common.other" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.other">
+<ANCHOR id="harfbuzz-hb-common.object-hierarchy" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-common.description" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.description">
+<ANCHOR id="harfbuzz-hb-common.functions_details" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.functions_details">
+<ANCHOR id="HB-DIRECTION-REVERSE:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-REVERSE:CAPS">
+<ANCHOR id="HB-LANGUAGE-INVALID:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS">
+<ANCHOR id="HB-TAG:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-TAG:CAPS">
+<ANCHOR id="HB-UNTAG:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-UNTAG:CAPS">
+<ANCHOR id="hb-destroy-func-t" href="harfbuzz/harfbuzz-hb-common.html#hb-destroy-func-t">
+<ANCHOR id="hb-direction-from-string" href="harfbuzz/harfbuzz-hb-common.html#hb-direction-from-string">
+<ANCHOR id="hb-direction-to-string" href="harfbuzz/harfbuzz-hb-common.html#hb-direction-to-string">
+<ANCHOR id="hb-language-from-string" href="harfbuzz/harfbuzz-hb-common.html#hb-language-from-string">
+<ANCHOR id="hb-language-get-default" href="harfbuzz/harfbuzz-hb-common.html#hb-language-get-default">
+<ANCHOR id="hb-language-to-string" href="harfbuzz/harfbuzz-hb-common.html#hb-language-to-string">
+<ANCHOR id="hb-script-from-iso15924-tag" href="harfbuzz/harfbuzz-hb-common.html#hb-script-from-iso15924-tag">
+<ANCHOR id="hb-script-from-string" href="harfbuzz/harfbuzz-hb-common.html#hb-script-from-string">
+<ANCHOR id="hb-script-get-horizontal-direction" href="harfbuzz/harfbuzz-hb-common.html#hb-script-get-horizontal-direction">
+<ANCHOR id="hb-script-to-iso15924-tag" href="harfbuzz/harfbuzz-hb-common.html#hb-script-to-iso15924-tag">
+<ANCHOR id="hb-tag-from-string" href="harfbuzz/harfbuzz-hb-common.html#hb-tag-from-string">
+<ANCHOR id="hb-tag-to-string" href="harfbuzz/harfbuzz-hb-common.html#hb-tag-to-string">
+<ANCHOR id="HB-DIRECTION-IS-BACKWARD:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-IS-BACKWARD:CAPS">
+<ANCHOR id="HB-DIRECTION-IS-FORWARD:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-IS-FORWARD:CAPS">
+<ANCHOR id="HB-DIRECTION-IS-HORIZONTAL:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-IS-HORIZONTAL:CAPS">
+<ANCHOR id="HB-DIRECTION-IS-VALID:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-IS-VALID:CAPS">
+<ANCHOR id="HB-DIRECTION-IS-VERTICAL:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-DIRECTION-IS-VERTICAL:CAPS">
+<ANCHOR id="harfbuzz-hb-common.other_details" href="harfbuzz/harfbuzz-hb-common.html#harfbuzz-hb-common.other_details">
+<ANCHOR id="HB-TAG-NONE:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-TAG-NONE:CAPS">
+<ANCHOR id="HB-TAG-MAX:CAPS" href="harfbuzz/harfbuzz-hb-common.html#HB-TAG-MAX:CAPS">
+<ANCHOR id="hb-bool-t" href="harfbuzz/harfbuzz-hb-common.html#hb-bool-t">
+<ANCHOR id="hb-codepoint-t" href="harfbuzz/harfbuzz-hb-common.html#hb-codepoint-t">
+<ANCHOR id="hb-direction-t" href="harfbuzz/harfbuzz-hb-common.html#hb-direction-t">
+<ANCHOR id="hb-language-t" href="harfbuzz/harfbuzz-hb-common.html#hb-language-t">
+<ANCHOR id="hb-mask-t" href="harfbuzz/harfbuzz-hb-common.html#hb-mask-t">
+<ANCHOR id="hb-position-t" href="harfbuzz/harfbuzz-hb-common.html#hb-position-t">
+<ANCHOR id="hb-script-t" href="harfbuzz/harfbuzz-hb-common.html#hb-script-t">
+<ANCHOR id="hb-tag-t" href="harfbuzz/harfbuzz-hb-common.html#hb-tag-t">
+<ANCHOR id="hb-user-data-key-t-struct" href="harfbuzz/harfbuzz-hb-common.html#hb-user-data-key-t-struct">
+<ANCHOR id="hb-var-int-t" href="harfbuzz/harfbuzz-hb-common.html#hb-var-int-t">
+<ANCHOR id="harfbuzz-hb-unicode" href="harfbuzz/harfbuzz-hb-unicode.html">
+<ANCHOR id="harfbuzz-hb-unicode.functions" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.functions">
+<ANCHOR id="hb-unicode-funcs-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-t">
+<ANCHOR id="harfbuzz-hb-unicode.other" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.other">
+<ANCHOR id="harfbuzz-hb-unicode.object-hierarchy" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-unicode.description" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.description">
+<ANCHOR id="harfbuzz-hb-unicode.functions_details" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.functions_details">
+<ANCHOR id="HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS" href="harfbuzz/harfbuzz-hb-unicode.html#HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS">
+<ANCHOR id="hb-unicode-combining-class" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-combining-class">
+<ANCHOR id="hb-unicode-combining-class-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-combining-class-func-t">
+<ANCHOR id="hb-unicode-compose" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-compose">
+<ANCHOR id="hb-unicode-compose-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-compose-func-t">
+<ANCHOR id="hb-unicode-decompose" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-decompose">
+<ANCHOR id="hb-unicode-decompose-compatibility" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-decompose-compatibility">
+<ANCHOR id="hb-unicode-decompose-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-decompose-func-t">
+<ANCHOR id="hb-unicode-eastasian-width" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-eastasian-width">
+<ANCHOR id="hb-unicode-funcs-create" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-create">
+<ANCHOR id="hb-unicode-funcs-destroy" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-destroy">
+<ANCHOR id="hb-unicode-funcs-get-default" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-get-default">
+<ANCHOR id="hb-unicode-funcs-get-empty" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-get-empty">
+<ANCHOR id="hb-unicode-funcs-get-parent" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-get-parent">
+<ANCHOR id="hb-unicode-funcs-get-user-data" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-get-user-data">
+<ANCHOR id="hb-unicode-funcs-is-immutable" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-is-immutable">
+<ANCHOR id="hb-unicode-funcs-make-immutable" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-make-immutable">
+<ANCHOR id="hb-unicode-funcs-reference" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-reference">
+<ANCHOR id="hb-unicode-funcs-set-combining-class-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-combining-class-func">
+<ANCHOR id="hb-unicode-funcs-set-compose-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-compose-func">
+<ANCHOR id="hb-unicode-funcs-set-decompose-compatibility-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-compatibility-func">
+<ANCHOR id="hb-unicode-funcs-set-decompose-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-func">
+<ANCHOR id="hb-unicode-funcs-set-eastasian-width-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-eastasian-width-func">
+<ANCHOR id="hb-unicode-funcs-set-general-category-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-general-category-func">
+<ANCHOR id="hb-unicode-funcs-set-mirroring-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-mirroring-func">
+<ANCHOR id="hb-unicode-funcs-set-script-func" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-script-func">
+<ANCHOR id="hb-unicode-funcs-set-user-data" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-set-user-data">
+<ANCHOR id="hb-unicode-general-category" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-general-category">
+<ANCHOR id="hb-unicode-general-category-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-general-category-func-t">
+<ANCHOR id="hb-unicode-mirroring" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-mirroring">
+<ANCHOR id="hb-unicode-mirroring-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-mirroring-func-t">
+<ANCHOR id="hb-unicode-script" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-script">
+<ANCHOR id="hb-unicode-script-func-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-script-func-t">
+<ANCHOR id="harfbuzz-hb-unicode.other_details" href="harfbuzz/harfbuzz-hb-unicode.html#harfbuzz-hb-unicode.other_details">
+<ANCHOR id="hb-unicode-combining-class-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-combining-class-t">
+<ANCHOR id="hb-unicode-funcs-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-funcs-t">
+<ANCHOR id="hb-unicode-general-category-t" href="harfbuzz/harfbuzz-hb-unicode.html#hb-unicode-general-category-t">
+<ANCHOR id="harfbuzz-hb-buffer" href="harfbuzz/harfbuzz-hb-buffer.html">
+<ANCHOR id="harfbuzz-hb-buffer.functions" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.functions">
+<ANCHOR id="hb-buffer-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-t">
+<ANCHOR id="hb-glyph-info-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-glyph-info-t">
+<ANCHOR id="hb-glyph-position-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-glyph-position-t">
+<ANCHOR id="hb-segment-properties-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-segment-properties-t">
+<ANCHOR id="harfbuzz-hb-buffer.other" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.other">
+<ANCHOR id="harfbuzz-hb-buffer.object-hierarchy" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-buffer.description" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.description">
+<ANCHOR id="harfbuzz-hb-buffer.functions_details" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.functions_details">
+<ANCHOR id="hb-buffer-add" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-add">
+<ANCHOR id="hb-buffer-add-utf16" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-add-utf16">
+<ANCHOR id="hb-buffer-add-utf32" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-add-utf32">
+<ANCHOR id="hb-buffer-add-utf8" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-add-utf8">
+<ANCHOR id="hb-buffer-add-codepoints" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-add-codepoints">
+<ANCHOR id="hb-buffer-allocation-successful" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-allocation-successful">
+<ANCHOR id="hb-buffer-clear-contents" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-clear-contents">
+<ANCHOR id="hb-buffer-create" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-create">
+<ANCHOR id="hb-buffer-deserialize-glyphs" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-deserialize-glyphs">
+<ANCHOR id="hb-buffer-destroy" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-destroy">
+<ANCHOR id="hb-buffer-get-content-type" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-content-type">
+<ANCHOR id="hb-buffer-get-direction" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-direction">
+<ANCHOR id="hb-buffer-get-empty" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-empty">
+<ANCHOR id="hb-buffer-get-flags" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-flags">
+<ANCHOR id="hb-buffer-get-glyph-infos" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-glyph-infos">
+<ANCHOR id="hb-buffer-get-glyph-positions" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-glyph-positions">
+<ANCHOR id="hb-buffer-get-language" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-language">
+<ANCHOR id="hb-buffer-get-length" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-length">
+<ANCHOR id="hb-buffer-get-replacement-codepoint" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-replacement-codepoint">
+<ANCHOR id="hb-buffer-get-script" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-script">
+<ANCHOR id="hb-buffer-get-segment-properties" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-segment-properties">
+<ANCHOR id="hb-buffer-get-unicode-funcs" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-unicode-funcs">
+<ANCHOR id="hb-buffer-get-user-data" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-get-user-data">
+<ANCHOR id="hb-buffer-guess-segment-properties" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-guess-segment-properties">
+<ANCHOR id="hb-buffer-normalize-glyphs" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-normalize-glyphs">
+<ANCHOR id="hb-buffer-pre-allocate" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-pre-allocate">
+<ANCHOR id="hb-buffer-reference" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-reference">
+<ANCHOR id="hb-buffer-reset" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-reset">
+<ANCHOR id="hb-buffer-reverse" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-reverse">
+<ANCHOR id="hb-buffer-reverse-clusters" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-reverse-clusters">
+<ANCHOR id="hb-buffer-serialize-format-from-string" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-format-from-string">
+<ANCHOR id="hb-buffer-serialize-format-to-string" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-format-to-string">
+<ANCHOR id="hb-buffer-serialize-glyphs" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-glyphs">
+<ANCHOR id="hb-buffer-serialize-list-formats" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-list-formats">
+<ANCHOR id="hb-buffer-set-content-type" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-content-type">
+<ANCHOR id="hb-buffer-set-direction" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-direction">
+<ANCHOR id="hb-buffer-set-flags" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-flags">
+<ANCHOR id="hb-buffer-set-language" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-language">
+<ANCHOR id="hb-buffer-set-length" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-length">
+<ANCHOR id="hb-buffer-set-replacement-codepoint" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-replacement-codepoint">
+<ANCHOR id="hb-buffer-set-script" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-script">
+<ANCHOR id="hb-buffer-set-segment-properties" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-segment-properties">
+<ANCHOR id="hb-buffer-set-unicode-funcs" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-unicode-funcs">
+<ANCHOR id="hb-buffer-set-user-data" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-set-user-data">
+<ANCHOR id="hb-segment-properties-equal" href="harfbuzz/harfbuzz-hb-buffer.html#hb-segment-properties-equal">
+<ANCHOR id="hb-segment-properties-hash" href="harfbuzz/harfbuzz-hb-buffer.html#hb-segment-properties-hash">
+<ANCHOR id="harfbuzz-hb-buffer.other_details" href="harfbuzz/harfbuzz-hb-buffer.html#harfbuzz-hb-buffer.other_details">
+<ANCHOR id="HB-SEGMENT-PROPERTIES-DEFAULT:CAPS" href="harfbuzz/harfbuzz-hb-buffer.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS">
+<ANCHOR id="hb-buffer-content-type-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-content-type-t">
+<ANCHOR id="hb-buffer-flags-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-flags-t">
+<ANCHOR id="hb-buffer-serialize-flags-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t">
+<ANCHOR id="hb-buffer-serialize-format-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t">
+<ANCHOR id="hb-buffer-t" href="harfbuzz/harfbuzz-hb-buffer.html#hb-buffer-t">
+<ANCHOR id="hb-glyph-info-t-struct" href="harfbuzz/harfbuzz-hb-buffer.html#hb-glyph-info-t-struct">
+<ANCHOR id="hb-glyph-position-t-struct" href="harfbuzz/harfbuzz-hb-buffer.html#hb-glyph-position-t-struct">
+<ANCHOR id="hb-segment-properties-t-struct" href="harfbuzz/harfbuzz-hb-buffer.html#hb-segment-properties-t-struct">
+<ANCHOR id="harfbuzz-hb-blob" href="harfbuzz/harfbuzz-hb-blob.html">
+<ANCHOR id="harfbuzz-hb-blob.functions" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.functions">
+<ANCHOR id="hb-blob-t" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-t">
+<ANCHOR id="harfbuzz-hb-blob.other" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.other">
+<ANCHOR id="harfbuzz-hb-blob.object-hierarchy" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-blob.description" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.description">
+<ANCHOR id="harfbuzz-hb-blob.functions_details" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.functions_details">
+<ANCHOR id="hb-blob-create" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-create">
+<ANCHOR id="hb-blob-create-sub-blob" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-create-sub-blob">
+<ANCHOR id="hb-blob-destroy" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-destroy">
+<ANCHOR id="hb-blob-get-data" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-get-data">
+<ANCHOR id="hb-blob-get-data-writable" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-get-data-writable">
+<ANCHOR id="hb-blob-get-empty" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-get-empty">
+<ANCHOR id="hb-blob-get-length" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-get-length">
+<ANCHOR id="hb-blob-get-user-data" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-get-user-data">
+<ANCHOR id="hb-blob-is-immutable" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-is-immutable">
+<ANCHOR id="hb-blob-make-immutable" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-make-immutable">
+<ANCHOR id="hb-blob-reference" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-reference">
+<ANCHOR id="hb-blob-set-user-data" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-set-user-data">
+<ANCHOR id="harfbuzz-hb-blob.other_details" href="harfbuzz/harfbuzz-hb-blob.html#harfbuzz-hb-blob.other_details">
+<ANCHOR id="hb-blob-t" href="harfbuzz/harfbuzz-hb-blob.html#hb-blob-t">
+<ANCHOR id="hb-memory-mode-t" href="harfbuzz/harfbuzz-hb-blob.html#hb-memory-mode-t">
+<ANCHOR id="harfbuzz-hb-face" href="harfbuzz/harfbuzz-hb-face.html">
+<ANCHOR id="harfbuzz-hb-face.functions" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.functions">
+<ANCHOR id="hb-face-t" href="harfbuzz/harfbuzz-hb-face.html#hb-face-t">
+<ANCHOR id="harfbuzz-hb-face.other" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.other">
+<ANCHOR id="harfbuzz-hb-face.object-hierarchy" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-face.description" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.description">
+<ANCHOR id="harfbuzz-hb-face.functions_details" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.functions_details">
+<ANCHOR id="hb-face-create" href="harfbuzz/harfbuzz-hb-face.html#hb-face-create">
+<ANCHOR id="hb-face-create-for-tables" href="harfbuzz/harfbuzz-hb-face.html#hb-face-create-for-tables">
+<ANCHOR id="hb-face-destroy" href="harfbuzz/harfbuzz-hb-face.html#hb-face-destroy">
+<ANCHOR id="hb-face-get-empty" href="harfbuzz/harfbuzz-hb-face.html#hb-face-get-empty">
+<ANCHOR id="hb-face-get-glyph-count" href="harfbuzz/harfbuzz-hb-face.html#hb-face-get-glyph-count">
+<ANCHOR id="hb-face-get-index" href="harfbuzz/harfbuzz-hb-face.html#hb-face-get-index">
+<ANCHOR id="hb-face-get-upem" href="harfbuzz/harfbuzz-hb-face.html#hb-face-get-upem">
+<ANCHOR id="hb-face-get-user-data" href="harfbuzz/harfbuzz-hb-face.html#hb-face-get-user-data">
+<ANCHOR id="hb-face-is-immutable" href="harfbuzz/harfbuzz-hb-face.html#hb-face-is-immutable">
+<ANCHOR id="hb-face-make-immutable" href="harfbuzz/harfbuzz-hb-face.html#hb-face-make-immutable">
+<ANCHOR id="hb-face-reference" href="harfbuzz/harfbuzz-hb-face.html#hb-face-reference">
+<ANCHOR id="hb-face-reference-blob" href="harfbuzz/harfbuzz-hb-face.html#hb-face-reference-blob">
+<ANCHOR id="hb-face-reference-table" href="harfbuzz/harfbuzz-hb-face.html#hb-face-reference-table">
+<ANCHOR id="hb-face-set-glyph-count" href="harfbuzz/harfbuzz-hb-face.html#hb-face-set-glyph-count">
+<ANCHOR id="hb-face-set-index" href="harfbuzz/harfbuzz-hb-face.html#hb-face-set-index">
+<ANCHOR id="hb-face-set-upem" href="harfbuzz/harfbuzz-hb-face.html#hb-face-set-upem">
+<ANCHOR id="hb-face-set-user-data" href="harfbuzz/harfbuzz-hb-face.html#hb-face-set-user-data">
+<ANCHOR id="harfbuzz-hb-face.other_details" href="harfbuzz/harfbuzz-hb-face.html#harfbuzz-hb-face.other_details">
+<ANCHOR id="hb-face-t" href="harfbuzz/harfbuzz-hb-face.html#hb-face-t">
+<ANCHOR id="harfbuzz-hb-font" href="harfbuzz/harfbuzz-hb-font.html">
+<ANCHOR id="harfbuzz-hb-font.functions" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.functions">
+<ANCHOR id="hb-font-funcs-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-t">
+<ANCHOR id="hb-font-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-t">
+<ANCHOR id="harfbuzz-hb-font.other" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.other">
+<ANCHOR id="harfbuzz-hb-font.object-hierarchy" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-font.description" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.description">
+<ANCHOR id="harfbuzz-hb-font.functions_details" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.functions_details">
+<ANCHOR id="hb-font-add-glyph-origin-for-direction" href="harfbuzz/harfbuzz-hb-font.html#hb-font-add-glyph-origin-for-direction">
+<ANCHOR id="hb-font-create" href="harfbuzz/harfbuzz-hb-font.html#hb-font-create">
+<ANCHOR id="hb-font-create-sub-font" href="harfbuzz/harfbuzz-hb-font.html#hb-font-create-sub-font">
+<ANCHOR id="hb-font-destroy" href="harfbuzz/harfbuzz-hb-font.html#hb-font-destroy">
+<ANCHOR id="hb-font-funcs-create" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-create">
+<ANCHOR id="hb-font-funcs-destroy" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-destroy">
+<ANCHOR id="hb-font-funcs-get-empty" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-get-empty">
+<ANCHOR id="hb-font-funcs-get-user-data" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-get-user-data">
+<ANCHOR id="hb-font-funcs-is-immutable" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-is-immutable">
+<ANCHOR id="hb-font-funcs-make-immutable" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-make-immutable">
+<ANCHOR id="hb-font-funcs-reference" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-reference">
+<ANCHOR id="hb-font-funcs-set-glyph-contour-point-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-contour-point-func">
+<ANCHOR id="hb-font-funcs-set-glyph-extents-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-extents-func">
+<ANCHOR id="hb-font-funcs-set-glyph-from-name-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-from-name-func">
+<ANCHOR id="hb-font-funcs-set-glyph-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-func">
+<ANCHOR id="hb-font-funcs-set-glyph-h-advance-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-advance-func">
+<ANCHOR id="hb-font-funcs-set-glyph-h-kerning-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-kerning-func">
+<ANCHOR id="hb-font-funcs-set-glyph-h-origin-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-h-origin-func">
+<ANCHOR id="hb-font-funcs-set-glyph-name-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-name-func">
+<ANCHOR id="hb-font-funcs-set-glyph-v-advance-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-advance-func">
+<ANCHOR id="hb-font-funcs-set-glyph-v-kerning-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-kerning-func">
+<ANCHOR id="hb-font-funcs-set-glyph-v-origin-func" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-glyph-v-origin-func">
+<ANCHOR id="hb-font-funcs-set-user-data" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-set-user-data">
+<ANCHOR id="hb-font-get-empty" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-empty">
+<ANCHOR id="hb-font-get-face" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-face">
+<ANCHOR id="hb-font-get-glyph" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph">
+<ANCHOR id="hb-font-get-glyph-advance-for-direction" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-advance-for-direction">
+<ANCHOR id="hb-font-get-glyph-advance-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-advance-func-t">
+<ANCHOR id="hb-font-get-glyph-contour-point" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-contour-point">
+<ANCHOR id="hb-font-get-glyph-contour-point-for-origin" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-for-origin">
+<ANCHOR id="hb-font-get-glyph-contour-point-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-contour-point-func-t">
+<ANCHOR id="hb-font-get-glyph-extents" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-extents">
+<ANCHOR id="hb-font-get-glyph-extents-for-origin" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-extents-for-origin">
+<ANCHOR id="hb-font-get-glyph-extents-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-extents-func-t">
+<ANCHOR id="hb-font-get-glyph-from-name" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-from-name">
+<ANCHOR id="hb-font-get-glyph-from-name-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-from-name-func-t">
+<ANCHOR id="hb-font-get-glyph-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-func-t">
+<ANCHOR id="hb-font-get-glyph-h-advance" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-advance">
+<ANCHOR id="hb-font-get-glyph-h-kerning" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning">
+<ANCHOR id="hb-font-get-glyph-h-origin" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-origin">
+<ANCHOR id="hb-font-get-glyph-kerning-for-direction" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-kerning-for-direction">
+<ANCHOR id="hb-font-get-glyph-kerning-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-kerning-func-t">
+<ANCHOR id="hb-font-get-glyph-name" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-name">
+<ANCHOR id="hb-font-get-glyph-name-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-name-func-t">
+<ANCHOR id="hb-font-get-glyph-origin-for-direction" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-origin-for-direction">
+<ANCHOR id="hb-font-get-glyph-origin-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-origin-func-t">
+<ANCHOR id="hb-font-get-glyph-v-advance" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-advance">
+<ANCHOR id="hb-font-get-glyph-v-kerning" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning">
+<ANCHOR id="hb-font-get-glyph-v-origin" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-origin">
+<ANCHOR id="hb-font-get-parent" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-parent">
+<ANCHOR id="hb-font-get-ppem" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-ppem">
+<ANCHOR id="hb-font-get-scale" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-scale">
+<ANCHOR id="hb-font-get-user-data" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-user-data">
+<ANCHOR id="hb-font-glyph-from-string" href="harfbuzz/harfbuzz-hb-font.html#hb-font-glyph-from-string">
+<ANCHOR id="hb-font-glyph-to-string" href="harfbuzz/harfbuzz-hb-font.html#hb-font-glyph-to-string">
+<ANCHOR id="hb-font-is-immutable" href="harfbuzz/harfbuzz-hb-font.html#hb-font-is-immutable">
+<ANCHOR id="hb-font-make-immutable" href="harfbuzz/harfbuzz-hb-font.html#hb-font-make-immutable">
+<ANCHOR id="hb-font-reference" href="harfbuzz/harfbuzz-hb-font.html#hb-font-reference">
+<ANCHOR id="hb-font-set-funcs" href="harfbuzz/harfbuzz-hb-font.html#hb-font-set-funcs">
+<ANCHOR id="hb-font-set-funcs-data" href="harfbuzz/harfbuzz-hb-font.html#hb-font-set-funcs-data">
+<ANCHOR id="hb-font-set-ppem" href="harfbuzz/harfbuzz-hb-font.html#hb-font-set-ppem">
+<ANCHOR id="hb-font-set-scale" href="harfbuzz/harfbuzz-hb-font.html#hb-font-set-scale">
+<ANCHOR id="hb-font-set-user-data" href="harfbuzz/harfbuzz-hb-font.html#hb-font-set-user-data">
+<ANCHOR id="hb-font-subtract-glyph-origin-for-direction" href="harfbuzz/harfbuzz-hb-font.html#hb-font-subtract-glyph-origin-for-direction">
+<ANCHOR id="hb-reference-table-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-reference-table-func-t">
+<ANCHOR id="harfbuzz-hb-font.other_details" href="harfbuzz/harfbuzz-hb-font.html#harfbuzz-hb-font.other_details">
+<ANCHOR id="hb-font-funcs-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-funcs-t">
+<ANCHOR id="hb-font-get-glyph-h-advance-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-advance-func-t">
+<ANCHOR id="hb-font-get-glyph-h-kerning-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning-func-t">
+<ANCHOR id="hb-font-get-glyph-h-origin-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-h-origin-func-t">
+<ANCHOR id="hb-font-get-glyph-v-advance-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-advance-func-t">
+<ANCHOR id="hb-font-get-glyph-v-kerning-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning-func-t">
+<ANCHOR id="hb-font-get-glyph-v-origin-func-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-get-glyph-v-origin-func-t">
+<ANCHOR id="hb-font-t" href="harfbuzz/harfbuzz-hb-font.html#hb-font-t">
+<ANCHOR id="harfbuzz-hb-shape" href="harfbuzz/harfbuzz-hb-shape.html">
+<ANCHOR id="harfbuzz-hb-shape.functions" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.functions">
+<ANCHOR id="hb-feature-t" href="harfbuzz/harfbuzz-hb-shape.html#hb-feature-t">
+<ANCHOR id="harfbuzz-hb-shape.other" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.other">
+<ANCHOR id="harfbuzz-hb-shape.object-hierarchy" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-shape.description" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.description">
+<ANCHOR id="harfbuzz-hb-shape.functions_details" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.functions_details">
+<ANCHOR id="hb-feature-from-string" href="harfbuzz/harfbuzz-hb-shape.html#hb-feature-from-string">
+<ANCHOR id="hb-feature-to-string" href="harfbuzz/harfbuzz-hb-shape.html#hb-feature-to-string">
+<ANCHOR id="hb-shape" href="harfbuzz/harfbuzz-hb-shape.html#hb-shape">
+<ANCHOR id="hb-shape-full" href="harfbuzz/harfbuzz-hb-shape.html#hb-shape-full">
+<ANCHOR id="hb-shape-list-shapers" href="harfbuzz/harfbuzz-hb-shape.html#hb-shape-list-shapers">
+<ANCHOR id="harfbuzz-hb-shape.other_details" href="harfbuzz/harfbuzz-hb-shape.html#harfbuzz-hb-shape.other_details">
+<ANCHOR id="hb-feature-t-struct" href="harfbuzz/harfbuzz-hb-shape.html#hb-feature-t-struct">
+<ANCHOR id="harfbuzz-hb-version" href="harfbuzz/harfbuzz-hb-version.html">
+<ANCHOR id="harfbuzz-hb-version.functions" href="harfbuzz/harfbuzz-hb-version.html#harfbuzz-hb-version.functions">
+<ANCHOR id="harfbuzz-hb-version.other" href="harfbuzz/harfbuzz-hb-version.html#harfbuzz-hb-version.other">
+<ANCHOR id="harfbuzz-hb-version.description" href="harfbuzz/harfbuzz-hb-version.html#harfbuzz-hb-version.description">
+<ANCHOR id="harfbuzz-hb-version.functions_details" href="harfbuzz/harfbuzz-hb-version.html#harfbuzz-hb-version.functions_details">
+<ANCHOR id="hb-version" href="harfbuzz/harfbuzz-hb-version.html#hb-version">
+<ANCHOR id="hb-version-string" href="harfbuzz/harfbuzz-hb-version.html#hb-version-string">
+<ANCHOR id="harfbuzz-hb-version.other_details" href="harfbuzz/harfbuzz-hb-version.html#harfbuzz-hb-version.other_details">
+<ANCHOR id="HB-VERSION-MAJOR:CAPS" href="harfbuzz/harfbuzz-hb-version.html#HB-VERSION-MAJOR:CAPS">
+<ANCHOR id="HB-VERSION-MICRO:CAPS" href="harfbuzz/harfbuzz-hb-version.html#HB-VERSION-MICRO:CAPS">
+<ANCHOR id="HB-VERSION-MINOR:CAPS" href="harfbuzz/harfbuzz-hb-version.html#HB-VERSION-MINOR:CAPS">
+<ANCHOR id="HB-VERSION-STRING:CAPS" href="harfbuzz/harfbuzz-hb-version.html#HB-VERSION-STRING:CAPS">
+<ANCHOR id="harfbuzz-hb-deprecated" href="harfbuzz/harfbuzz-hb-deprecated.html">
+<ANCHOR id="harfbuzz-hb-deprecated.other" href="harfbuzz/harfbuzz-hb-deprecated.html#harfbuzz-hb-deprecated.other">
+<ANCHOR id="harfbuzz-hb-deprecated.description" href="harfbuzz/harfbuzz-hb-deprecated.html#harfbuzz-hb-deprecated.description">
+<ANCHOR id="harfbuzz-hb-deprecated.functions_details" href="harfbuzz/harfbuzz-hb-deprecated.html#harfbuzz-hb-deprecated.functions_details">
+<ANCHOR id="harfbuzz-hb-deprecated.other_details" href="harfbuzz/harfbuzz-hb-deprecated.html#harfbuzz-hb-deprecated.other_details">
+<ANCHOR id="HB-BUFFER-FLAGS-DEFAULT:CAPS" href="harfbuzz/harfbuzz-hb-deprecated.html#HB-BUFFER-FLAGS-DEFAULT:CAPS">
+<ANCHOR id="HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS" href="harfbuzz/harfbuzz-hb-deprecated.html#HB-BUFFER-SERIALIZE-FLAGS-DEFAULT:CAPS">
+<ANCHOR id="HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS" href="harfbuzz/harfbuzz-hb-deprecated.html#HB-SCRIPT-CANADIAN-ABORIGINAL:CAPS">
+<ANCHOR id="harfbuzz-hb-set" href="harfbuzz/harfbuzz-hb-set.html">
+<ANCHOR id="harfbuzz-hb-set.functions" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.functions">
+<ANCHOR id="hb-set-t" href="harfbuzz/harfbuzz-hb-set.html#hb-set-t">
+<ANCHOR id="harfbuzz-hb-set.other" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.other">
+<ANCHOR id="harfbuzz-hb-set.object-hierarchy" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-set.description" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.description">
+<ANCHOR id="harfbuzz-hb-set.functions_details" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.functions_details">
+<ANCHOR id="HB-SET-VALUE-INVALID:CAPS" href="harfbuzz/harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS">
+<ANCHOR id="hb-set-add" href="harfbuzz/harfbuzz-hb-set.html#hb-set-add">
+<ANCHOR id="hb-set-add-range" href="harfbuzz/harfbuzz-hb-set.html#hb-set-add-range">
+<ANCHOR id="hb-set-allocation-successful" href="harfbuzz/harfbuzz-hb-set.html#hb-set-allocation-successful">
+<ANCHOR id="hb-set-clear" href="harfbuzz/harfbuzz-hb-set.html#hb-set-clear">
+<ANCHOR id="hb-set-create" href="harfbuzz/harfbuzz-hb-set.html#hb-set-create">
+<ANCHOR id="hb-set-del" href="harfbuzz/harfbuzz-hb-set.html#hb-set-del">
+<ANCHOR id="hb-set-del-range" href="harfbuzz/harfbuzz-hb-set.html#hb-set-del-range">
+<ANCHOR id="hb-set-destroy" href="harfbuzz/harfbuzz-hb-set.html#hb-set-destroy">
+<ANCHOR id="hb-set-get-empty" href="harfbuzz/harfbuzz-hb-set.html#hb-set-get-empty">
+<ANCHOR id="hb-set-get-max" href="harfbuzz/harfbuzz-hb-set.html#hb-set-get-max">
+<ANCHOR id="hb-set-get-min" href="harfbuzz/harfbuzz-hb-set.html#hb-set-get-min">
+<ANCHOR id="hb-set-get-population" href="harfbuzz/harfbuzz-hb-set.html#hb-set-get-population">
+<ANCHOR id="hb-set-get-user-data" href="harfbuzz/harfbuzz-hb-set.html#hb-set-get-user-data">
+<ANCHOR id="hb-set-has" href="harfbuzz/harfbuzz-hb-set.html#hb-set-has">
+<ANCHOR id="hb-set-intersect" href="harfbuzz/harfbuzz-hb-set.html#hb-set-intersect">
+<ANCHOR id="hb-set-invert" href="harfbuzz/harfbuzz-hb-set.html#hb-set-invert">
+<ANCHOR id="hb-set-is-empty" href="harfbuzz/harfbuzz-hb-set.html#hb-set-is-empty">
+<ANCHOR id="hb-set-is-equal" href="harfbuzz/harfbuzz-hb-set.html#hb-set-is-equal">
+<ANCHOR id="hb-set-next" href="harfbuzz/harfbuzz-hb-set.html#hb-set-next">
+<ANCHOR id="hb-set-next-range" href="harfbuzz/harfbuzz-hb-set.html#hb-set-next-range">
+<ANCHOR id="hb-set-reference" href="harfbuzz/harfbuzz-hb-set.html#hb-set-reference">
+<ANCHOR id="hb-set-set" href="harfbuzz/harfbuzz-hb-set.html#hb-set-set">
+<ANCHOR id="hb-set-set-user-data" href="harfbuzz/harfbuzz-hb-set.html#hb-set-set-user-data">
+<ANCHOR id="hb-set-subtract" href="harfbuzz/harfbuzz-hb-set.html#hb-set-subtract">
+<ANCHOR id="hb-set-symmetric-difference" href="harfbuzz/harfbuzz-hb-set.html#hb-set-symmetric-difference">
+<ANCHOR id="hb-set-union" href="harfbuzz/harfbuzz-hb-set.html#hb-set-union">
+<ANCHOR id="harfbuzz-hb-set.other_details" href="harfbuzz/harfbuzz-hb-set.html#harfbuzz-hb-set.other_details">
+<ANCHOR id="hb-set-t" href="harfbuzz/harfbuzz-hb-set.html#hb-set-t">
+<ANCHOR id="harfbuzz-hb-ot" href="harfbuzz/harfbuzz-hb-ot.html">
+<ANCHOR id="harfbuzz-hb-ot.description" href="harfbuzz/harfbuzz-hb-ot.html#harfbuzz-hb-ot.description">
+<ANCHOR id="harfbuzz-hb-ot.functions_details" href="harfbuzz/harfbuzz-hb-ot.html#harfbuzz-hb-ot.functions_details">
+<ANCHOR id="harfbuzz-hb-ot.other_details" href="harfbuzz/harfbuzz-hb-ot.html#harfbuzz-hb-ot.other_details">
+<ANCHOR id="harfbuzz-hb-ot-layout" href="harfbuzz/harfbuzz-hb-ot-layout.html">
+<ANCHOR id="harfbuzz-hb-ot-layout.functions" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.functions">
+<ANCHOR id="harfbuzz-hb-ot-layout.other" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.other">
+<ANCHOR id="harfbuzz-hb-ot-layout.object-hierarchy" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-ot-layout.description" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.description">
+<ANCHOR id="harfbuzz-hb-ot-layout.functions_details" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.functions_details">
+<ANCHOR id="hb-ot-layout-collect-lookups" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-collect-lookups">
+<ANCHOR id="hb-ot-layout-feature-get-lookups" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-feature-get-lookups">
+<ANCHOR id="hb-ot-layout-get-attach-points" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-get-attach-points">
+<ANCHOR id="hb-ot-layout-get-glyph-class" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyph-class">
+<ANCHOR id="hb-ot-layout-get-glyphs-in-class" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyphs-in-class">
+<ANCHOR id="hb-ot-layout-get-ligature-carets" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-get-ligature-carets">
+<ANCHOR id="hb-ot-layout-get-size-params" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-get-size-params">
+<ANCHOR id="hb-ot-layout-glyph-sequence-func-t" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-sequence-func-t">
+<ANCHOR id="hb-ot-layout-has-glyph-classes" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-has-glyph-classes">
+<ANCHOR id="hb-ot-layout-has-positioning" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-has-positioning">
+<ANCHOR id="hb-ot-layout-has-substitution" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-has-substitution">
+<ANCHOR id="hb-ot-layout-language-find-feature" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-language-find-feature">
+<ANCHOR id="hb-ot-layout-language-get-feature-indexes" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-indexes">
+<ANCHOR id="hb-ot-layout-language-get-feature-tags" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-feature-tags">
+<ANCHOR id="hb-ot-layout-language-get-required-feature" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature">
+<ANCHOR id="hb-ot-layout-lookup-collect-glyphs" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-collect-glyphs">
+<ANCHOR id="hb-ot-layout-lookup-substitute-closure" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-substitute-closure">
+<ANCHOR id="hb-ot-layout-lookup-would-substitute" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-would-substitute">
+<ANCHOR id="hb-ot-layout-script-find-language" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-script-find-language">
+<ANCHOR id="hb-ot-layout-script-get-language-tags" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-script-get-language-tags">
+<ANCHOR id="hb-ot-layout-table-choose-script" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-table-choose-script">
+<ANCHOR id="hb-ot-layout-table-find-script" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-table-find-script">
+<ANCHOR id="hb-ot-layout-table-get-feature-tags" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-feature-tags">
+<ANCHOR id="hb-ot-layout-table-get-script-tags" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-script-tags">
+<ANCHOR id="hb-ot-layout-table-get-lookup-count" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-table-get-lookup-count">
+<ANCHOR id="hb-ot-shape-plan-collect-lookups" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-shape-plan-collect-lookups">
+<ANCHOR id="harfbuzz-hb-ot-layout.other_details" href="harfbuzz/harfbuzz-hb-ot-layout.html#harfbuzz-hb-ot-layout.other_details">
+<ANCHOR id="HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-DEFAULT-LANGUAGE-INDEX:CAPS">
+<ANCHOR id="HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-FEATURE-INDEX:CAPS">
+<ANCHOR id="HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-NO-SCRIPT-INDEX:CAPS">
+<ANCHOR id="HB-OT-TAG-GDEF:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-TAG-GDEF:CAPS">
+<ANCHOR id="HB-OT-TAG-GPOS:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-TAG-GPOS:CAPS">
+<ANCHOR id="HB-OT-TAG-GSUB:CAPS" href="harfbuzz/harfbuzz-hb-ot-layout.html#HB-OT-TAG-GSUB:CAPS">
+<ANCHOR id="hb-ot-layout-glyph-class-t" href="harfbuzz/harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t">
+<ANCHOR id="harfbuzz-hb-ot-tag" href="harfbuzz/harfbuzz-hb-ot-tag.html">
+<ANCHOR id="harfbuzz-hb-ot-tag.functions" href="harfbuzz/harfbuzz-hb-ot-tag.html#harfbuzz-hb-ot-tag.functions">
+<ANCHOR id="harfbuzz-hb-ot-tag.other" href="harfbuzz/harfbuzz-hb-ot-tag.html#harfbuzz-hb-ot-tag.other">
+<ANCHOR id="harfbuzz-hb-ot-tag.description" href="harfbuzz/harfbuzz-hb-ot-tag.html#harfbuzz-hb-ot-tag.description">
+<ANCHOR id="harfbuzz-hb-ot-tag.functions_details" href="harfbuzz/harfbuzz-hb-ot-tag.html#harfbuzz-hb-ot-tag.functions_details">
+<ANCHOR id="hb-ot-tag-from-language" href="harfbuzz/harfbuzz-hb-ot-tag.html#hb-ot-tag-from-language">
+<ANCHOR id="hb-ot-tag-to-language" href="harfbuzz/harfbuzz-hb-ot-tag.html#hb-ot-tag-to-language">
+<ANCHOR id="hb-ot-tag-to-script" href="harfbuzz/harfbuzz-hb-ot-tag.html#hb-ot-tag-to-script">
+<ANCHOR id="hb-ot-tags-from-script" href="harfbuzz/harfbuzz-hb-ot-tag.html#hb-ot-tags-from-script">
+<ANCHOR id="harfbuzz-hb-ot-tag.other_details" href="harfbuzz/harfbuzz-hb-ot-tag.html#harfbuzz-hb-ot-tag.other_details">
+<ANCHOR id="HB-OT-TAG-DEFAULT-LANGUAGE:CAPS" href="harfbuzz/harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-LANGUAGE:CAPS">
+<ANCHOR id="HB-OT-TAG-DEFAULT-SCRIPT:CAPS" href="harfbuzz/harfbuzz-hb-ot-tag.html#HB-OT-TAG-DEFAULT-SCRIPT:CAPS">
+<ANCHOR id="harfbuzz-hb-shape-plan" href="harfbuzz/harfbuzz-hb-shape-plan.html">
+<ANCHOR id="harfbuzz-hb-shape-plan.functions" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.functions">
+<ANCHOR id="hb-shape-plan-t" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-t">
+<ANCHOR id="harfbuzz-hb-shape-plan.other" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.other">
+<ANCHOR id="harfbuzz-hb-shape-plan.object-hierarchy" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.object-hierarchy">
+<ANCHOR id="harfbuzz-hb-shape-plan.description" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.description">
+<ANCHOR id="harfbuzz-hb-shape-plan.functions_details" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.functions_details">
+<ANCHOR id="hb-shape-plan-create" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-create">
+<ANCHOR id="hb-shape-plan-create-cached" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-create-cached">
+<ANCHOR id="hb-shape-plan-destroy" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-destroy">
+<ANCHOR id="hb-shape-plan-execute" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-execute">
+<ANCHOR id="hb-shape-plan-get-empty" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-get-empty">
+<ANCHOR id="hb-shape-plan-get-shaper" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-get-shaper">
+<ANCHOR id="hb-shape-plan-get-user-data" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-get-user-data">
+<ANCHOR id="hb-shape-plan-reference" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-reference">
+<ANCHOR id="hb-shape-plan-set-user-data" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-set-user-data">
+<ANCHOR id="harfbuzz-hb-shape-plan.other_details" href="harfbuzz/harfbuzz-hb-shape-plan.html#harfbuzz-hb-shape-plan.other_details">
+<ANCHOR id="hb-shape-plan-t" href="harfbuzz/harfbuzz-hb-shape-plan.html#hb-shape-plan-t">
+<ANCHOR id="harfbuzz-hb-glib" href="harfbuzz/harfbuzz-hb-glib.html">
+<ANCHOR id="harfbuzz-hb-glib.functions" href="harfbuzz/harfbuzz-hb-glib.html#harfbuzz-hb-glib.functions">
+<ANCHOR id="harfbuzz-hb-glib.description" href="harfbuzz/harfbuzz-hb-glib.html#harfbuzz-hb-glib.description">
+<ANCHOR id="harfbuzz-hb-glib.functions_details" href="harfbuzz/harfbuzz-hb-glib.html#harfbuzz-hb-glib.functions_details">
+<ANCHOR id="hb-glib-get-unicode-funcs" href="harfbuzz/harfbuzz-hb-glib.html#hb-glib-get-unicode-funcs">
+<ANCHOR id="hb-glib-script-from-script" href="harfbuzz/harfbuzz-hb-glib.html#hb-glib-script-from-script">
+<ANCHOR id="hb-glib-script-to-script" href="harfbuzz/harfbuzz-hb-glib.html#hb-glib-script-to-script">
+<ANCHOR id="harfbuzz-hb-glib.other_details" href="harfbuzz/harfbuzz-hb-glib.html#harfbuzz-hb-glib.other_details">
+<ANCHOR id="harfbuzz-hb-icu" href="harfbuzz/harfbuzz-hb-icu.html">
+<ANCHOR id="harfbuzz-hb-icu.functions" href="harfbuzz/harfbuzz-hb-icu.html#harfbuzz-hb-icu.functions">
+<ANCHOR id="harfbuzz-hb-icu.description" href="harfbuzz/harfbuzz-hb-icu.html#harfbuzz-hb-icu.description">
+<ANCHOR id="harfbuzz-hb-icu.functions_details" href="harfbuzz/harfbuzz-hb-icu.html#harfbuzz-hb-icu.functions_details">
+<ANCHOR id="hb-icu-get-unicode-funcs" href="harfbuzz/harfbuzz-hb-icu.html#hb-icu-get-unicode-funcs">
+<ANCHOR id="hb-icu-script-from-script" href="harfbuzz/harfbuzz-hb-icu.html#hb-icu-script-from-script">
+<ANCHOR id="hb-icu-script-to-script" href="harfbuzz/harfbuzz-hb-icu.html#hb-icu-script-to-script">
+<ANCHOR id="harfbuzz-hb-icu.other_details" href="harfbuzz/harfbuzz-hb-icu.html#harfbuzz-hb-icu.other_details">
+<ANCHOR id="harfbuzz-hb-ft" href="harfbuzz/harfbuzz-hb-ft.html">
+<ANCHOR id="harfbuzz-hb-ft.functions" href="harfbuzz/harfbuzz-hb-ft.html#harfbuzz-hb-ft.functions">
+<ANCHOR id="harfbuzz-hb-ft.description" href="harfbuzz/harfbuzz-hb-ft.html#harfbuzz-hb-ft.description">
+<ANCHOR id="harfbuzz-hb-ft.functions_details" href="harfbuzz/harfbuzz-hb-ft.html#harfbuzz-hb-ft.functions_details">
+<ANCHOR id="hb-ft-face-create" href="harfbuzz/harfbuzz-hb-ft.html#hb-ft-face-create">
+<ANCHOR id="hb-ft-face-create-cached" href="harfbuzz/harfbuzz-hb-ft.html#hb-ft-face-create-cached">
+<ANCHOR id="hb-ft-font-create" href="harfbuzz/harfbuzz-hb-ft.html#hb-ft-font-create">
+<ANCHOR id="hb-ft-font-get-face" href="harfbuzz/harfbuzz-hb-ft.html#hb-ft-font-get-face">
+<ANCHOR id="hb-ft-font-set-funcs" href="harfbuzz/harfbuzz-hb-ft.html#hb-ft-font-set-funcs">
+<ANCHOR id="harfbuzz-hb-ft.other_details" href="harfbuzz/harfbuzz-hb-ft.html#harfbuzz-hb-ft.other_details">
+<ANCHOR id="harfbuzz-hb-graphite2" href="harfbuzz/harfbuzz-hb-graphite2.html">
+<ANCHOR id="harfbuzz-hb-graphite2.functions" href="harfbuzz/harfbuzz-hb-graphite2.html#harfbuzz-hb-graphite2.functions">
+<ANCHOR id="harfbuzz-hb-graphite2.other" href="harfbuzz/harfbuzz-hb-graphite2.html#harfbuzz-hb-graphite2.other">
+<ANCHOR id="harfbuzz-hb-graphite2.description" href="harfbuzz/harfbuzz-hb-graphite2.html#harfbuzz-hb-graphite2.description">
+<ANCHOR id="harfbuzz-hb-graphite2.functions_details" href="harfbuzz/harfbuzz-hb-graphite2.html#harfbuzz-hb-graphite2.functions_details">
+<ANCHOR id="hb-graphite2-face-get-gr-face" href="harfbuzz/harfbuzz-hb-graphite2.html#hb-graphite2-face-get-gr-face">
+<ANCHOR id="hb-graphite2-font-get-gr-font" href="harfbuzz/harfbuzz-hb-graphite2.html#hb-graphite2-font-get-gr-font">
+<ANCHOR id="harfbuzz-hb-graphite2.other_details" href="harfbuzz/harfbuzz-hb-graphite2.html#harfbuzz-hb-graphite2.other_details">
+<ANCHOR id="HB-GRAPHITE2-TAG-SILF:CAPS" href="harfbuzz/harfbuzz-hb-graphite2.html#HB-GRAPHITE2-TAG-SILF:CAPS">
+<ANCHOR id="harfbuzz-hb-uniscribe" href="harfbuzz/harfbuzz-hb-uniscribe.html">
+<ANCHOR id="harfbuzz-hb-uniscribe.functions" href="harfbuzz/harfbuzz-hb-uniscribe.html#harfbuzz-hb-uniscribe.functions">
+<ANCHOR id="harfbuzz-hb-uniscribe.description" href="harfbuzz/harfbuzz-hb-uniscribe.html#harfbuzz-hb-uniscribe.description">
+<ANCHOR id="harfbuzz-hb-uniscribe.functions_details" href="harfbuzz/harfbuzz-hb-uniscribe.html#harfbuzz-hb-uniscribe.functions_details">
+<ANCHOR id="hb-uniscribe-font-get-hfont" href="harfbuzz/harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-hfont">
+<ANCHOR id="hb-uniscribe-font-get-logfontw" href="harfbuzz/harfbuzz-hb-uniscribe.html#hb-uniscribe-font-get-logfontw">
+<ANCHOR id="harfbuzz-hb-uniscribe.other_details" href="harfbuzz/harfbuzz-hb-uniscribe.html#harfbuzz-hb-uniscribe.other_details">
+<ANCHOR id="harfbuzz-hb-coretext" href="harfbuzz/harfbuzz-hb-coretext.html">
+<ANCHOR id="harfbuzz-hb-coretext.functions" href="harfbuzz/harfbuzz-hb-coretext.html#harfbuzz-hb-coretext.functions">
+<ANCHOR id="harfbuzz-hb-coretext.other" href="harfbuzz/harfbuzz-hb-coretext.html#harfbuzz-hb-coretext.other">
+<ANCHOR id="harfbuzz-hb-coretext.description" href="harfbuzz/harfbuzz-hb-coretext.html#harfbuzz-hb-coretext.description">
+<ANCHOR id="harfbuzz-hb-coretext.functions_details" href="harfbuzz/harfbuzz-hb-coretext.html#harfbuzz-hb-coretext.functions_details">
+<ANCHOR id="hb-coretext-face-create" href="harfbuzz/harfbuzz-hb-coretext.html#hb-coretext-face-create">
+<ANCHOR id="hb-coretext-face-get-cg-font" href="harfbuzz/harfbuzz-hb-coretext.html#hb-coretext-face-get-cg-font">
+<ANCHOR id="hb-coretext-font-get-ct-font" href="harfbuzz/harfbuzz-hb-coretext.html#hb-coretext-font-get-ct-font">
+<ANCHOR id="harfbuzz-hb-coretext.other_details" href="harfbuzz/harfbuzz-hb-coretext.html#harfbuzz-hb-coretext.other_details">
+<ANCHOR id="HB-CORETEXT-TAG-MORT:CAPS" href="harfbuzz/harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORT:CAPS">
+<ANCHOR id="HB-CORETEXT-TAG-MORX:CAPS" href="harfbuzz/harfbuzz-hb-coretext.html#HB-CORETEXT-TAG-MORX:CAPS">
+<ANCHOR id="harfbuzz-hb-gobject" href="harfbuzz/harfbuzz-hb-gobject.html">
+<ANCHOR id="harfbuzz-hb-gobject.description" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.description">
+<ANCHOR id="harfbuzz-hb-gobject.functions_details" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.functions_details">
+<ANCHOR id="harfbuzz-hb-gobject.other_details" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.other_details">
+<ANCHOR id="annotation-glossterm-allow-none" href="harfbuzz/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-array" href="harfbuzz/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-closure" href="harfbuzz/annotation-glossary.html#annotation-glossterm-closure">
+<ANCHOR id="annotation-glossterm-destroy" href="harfbuzz/annotation-glossary.html#annotation-glossterm-destroy">
+<ANCHOR id="annotation-glossterm-inout" href="harfbuzz/annotation-glossary.html#annotation-glossterm-inout">
+<ANCHOR id="annotation-glossterm-out" href="harfbuzz/annotation-glossary.html#annotation-glossterm-out">
+<ANCHOR id="annotation-glossterm-scope notified" href="harfbuzz/annotation-glossary.html#annotation-glossterm-scope notified">
+<ANCHOR id="annotation-glossterm-transfer full" href="harfbuzz/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-transfer none" href="harfbuzz/annotation-glossary.html#annotation-glossterm-transfer none">
diff --git a/docs/reference/html/left-insensitive.png b/docs/reference/html/left-insensitive.png
new file mode 100644 (file)
index 0000000..3269393
Binary files /dev/null and b/docs/reference/html/left-insensitive.png differ
diff --git a/docs/reference/html/left.png b/docs/reference/html/left.png
new file mode 100644 (file)
index 0000000..2abde03
Binary files /dev/null and b/docs/reference/html/left.png differ
diff --git a/docs/reference/html/object-tree.html b/docs/reference/html/object-tree.html
new file mode 100644 (file)
index 0000000..c4f447b
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="up" href="index.html" title="HarfBuzz Reference Manual">
+<link rel="prev" href="harfbuzz-hb-gobject.html" title="hb-gobject">
+<link rel="next" href="api-index-full.html" title="API Index">
+<meta name="generator" content="GTK-Doc V1.20.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="harfbuzz-hb-gobject.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="object-tree"></a>Object Hierarchy</h2></div></div></div>
+<pre class="screen">
+    GBoxed
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-blob.html#hb-blob-t">hb_blob_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t">hb_buffer_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-face.html#hb-face-t">hb_face_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t">hb_feature_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t">hb_font_funcs_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-font.html#hb-font-t">hb_font_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-info-t">hb_glyph_info_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-glyph-position-t">hb_glyph_position_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-common.html#hb-language-t">hb_language_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t">hb_segment_properties_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-set.html#hb-set-t">hb_set_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t">hb_shape_plan_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t">hb_unicode_funcs_t</a>
+    <span class="lineart">╰──</span> <a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t">hb_user_data_key_t</a>
+    GEnum
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t">hb_buffer_content_type_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t">hb_buffer_serialize_format_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t">hb_direction_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-blob.html#hb-memory-mode-t" title="enum hb_memory_mode_t">hb_memory_mode_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-glyph-class-t" title="enum hb_ot_layout_glyph_class_t">hb_ot_layout_glyph_class_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t">hb_script_t</a>
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-combining-class-t" title="enum hb_unicode_combining_class_t">hb_unicode_combining_class_t</a>
+    <span class="lineart">╰──</span> <a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-general-category-t" title="enum hb_unicode_general_category_t">hb_unicode_general_category_t</a>
+    GFlags
+    <span class="lineart">├──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t">hb_buffer_flags_t</a>
+    <span class="lineart">╰──</span> <a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t">hb_buffer_serialize_flags_t</a>
+</pre>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reference/html/right-insensitive.png b/docs/reference/html/right-insensitive.png
new file mode 100644 (file)
index 0000000..4c95785
Binary files /dev/null and b/docs/reference/html/right-insensitive.png differ
diff --git a/docs/reference/html/right.png b/docs/reference/html/right.png
new file mode 100644 (file)
index 0000000..76260ec
Binary files /dev/null and b/docs/reference/html/right.png differ
diff --git a/docs/reference/html/style.css b/docs/reference/html/style.css
new file mode 100644 (file)
index 0000000..c141ddd
--- /dev/null
@@ -0,0 +1,476 @@
+body
+{
+  font-family: cantarell, sans-serif;
+}
+.synopsis, .classsynopsis
+{
+  /* tango:aluminium 1/2 */
+  background: #eeeeec;
+  background: rgba(238, 238, 236, 0.5);
+  border: solid 1px rgb(238, 238, 236);
+  padding: 0.5em;
+}
+.programlisting
+{
+  /* tango:sky blue 0/1 */
+  /* fallback for no rgba support */
+  background: #e6f3ff;
+  border: solid 1px #729fcf;
+  background: rgba(114, 159, 207, 0.1);
+  border: solid 1px rgba(114, 159, 207, 0.2);
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+
+a, a:visited
+{
+  text-decoration: none;
+  /* tango:sky blue 2 */
+  color: #3465a4;
+}
+a:hover
+{
+  text-decoration: underline;
+  /* tango:sky blue 1 */
+  color: #729fcf;
+}
+
+div.informaltable table
+{
+  border-collapse: separate;
+  border-spacing: 1em 0.5em;
+  border: none;
+}
+
+div.informaltable table td, div.informaltable table th
+{
+  vertical-align: top;
+}
+
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.parameter_name,
+.struct_member_name,
+.union_member_name,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword
+{
+  text-align: right;
+}
+
+/* dim non-primary columns */
+.c_punctuation,
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword,
+.property_flags,
+.signal_flags,
+.parameter_annotations,
+.enum_member_annotations,
+.struct_member_annotations,
+.union_member_annotations
+{
+  color: #888a85;
+}
+
+.function_type a,
+.function_type a:visited,
+.function_type a:hover,
+.property_type a,
+.property_type a:visited,
+.property_type a:hover,
+.signal_type a,
+.signal_type a:visited,
+.signal_type a:hover,
+.signal_flags a,
+.signal_flags a:visited,
+.signal_flags a:hover
+{
+ color: #729fcf;
+}
+
+td p
+{
+  margin: 0.25em;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  /* tango:aluminium 2 */
+  background-color: #d3d7cf;
+}
+
+h4
+{
+  color: #555753;
+}
+
+hr
+{
+  /* tango:aluminium 1 */
+  color: #d3d7cf;
+  background: #d3d7cf;
+  border: none 0px;
+  height: 1px;
+  clear: both;
+  margin: 2.0em 0em 2.0em 0em;
+}
+
+dl.toc dt
+{
+  padding-bottom: 0.25em;
+}
+
+dl.toc > dd > dl > dt
+{
+  padding-top: 0.25em;
+  padding-bottom: 0.25em;
+}
+
+dl.toc > dt
+{
+  padding-top: 1em;
+  padding-bottom: 0.5em;
+  font-weight: bold;
+}
+
+.parameter
+{
+  font-style: normal;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  text-align: center;
+  font-size: 80%;
+}
+
+.informalfigure,
+.figure
+{
+  margin: 1em;
+}
+
+.informalexample,
+.example
+{
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+.warning
+{
+  /* tango:orange 0/1 */
+  background: #ffeed9;
+  background: rgba(252, 175, 62, 0.1);
+  border-color: #ffb04f;
+  border-color: rgba(252, 175, 62, 0.2);
+}
+.note
+{
+  /* tango:chameleon 0/0.5 */
+  background: #d8ffb2;
+  background: rgba(138, 226, 52, 0.1);
+  border-color: #abf562;
+  border-color: rgba(138, 226, 52, 0.2);
+}
+div.blockquote
+{
+  border-color: #eeeeec;
+}
+.note, .warning, div.blockquote
+{
+  padding: 0.5em;
+  border-width: 1px;
+  border-style: solid;
+  margin: 2em;
+}
+.note p, .warning p
+{
+  margin: 0;
+}
+
+div.warning h3.title,
+div.note h3.title
+{
+  display: none;
+}
+
+p + div.section
+{
+  margin-top: 1em;
+}
+
+div.refnamediv,
+div.refsynopsisdiv,
+div.refsect1,
+div.refsect2,
+div.toc,
+div.section
+{
+  margin-bottom: 1em;
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+  float: right;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+.lineart
+{
+  color: #d3d7cf;
+  font-weight: normal;
+}
+
+.annotation
+{
+  /* tango:aluminium 5 */
+  color: #555753;
+  font-weight: normal;
+}
+
+.structfield
+{
+  font-style: normal;
+  font-weight: normal;
+}
+
+acronym,abbr 
+{
+  border-bottom: 1px dotted gray;
+}
+
+/* code listings */
+
+.listing_code .programlisting .normal,
+.listing_code .programlisting .normal a,
+.listing_code .programlisting .number,
+.listing_code .programlisting .cbracket,
+.listing_code .programlisting .symbol     { color: #555753; }
+.listing_code .programlisting .comment,
+.listing_code .programlisting .linenum    { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .function,
+.listing_code .programlisting .function a,
+.listing_code .programlisting .preproc    { color: #204a87; } /* tango: sky blue 3  */
+.listing_code .programlisting .string     { color: #ad7fa8; } /* tango: plum */
+.listing_code .programlisting .keyword,
+.listing_code .programlisting .usertype,
+.listing_code .programlisting .type,
+.listing_code .programlisting .type a     { color: #4e9a06; } /* tango: chameleon 3  */
+
+.listing_frame {
+  /* tango:sky blue 1 */
+  border: solid 1px #729fcf;
+  border: solid 1px rgba(114, 159, 207, 0.2);
+  padding: 0px;
+}
+
+.listing_lines, .listing_code {
+  margin-top: 0px;
+  margin-bottom: 0px;
+  padding: 0.5em;
+}
+.listing_lines {
+  /* tango:sky blue 0.5 */
+  background: #a6c5e3;
+  background: rgba(114, 159, 207, 0.2);
+  /* tango:aluminium 6 */
+  color: #2e3436;
+}
+.listing_code {
+  /* tango:sky blue 0 */
+  background: #e6f3ff;
+  background: rgba(114, 159, 207, 0.1);
+}
+.listing_code .programlisting {
+  /* override from previous */
+  border: none 0px;
+  padding: 0px;
+  background: none;
+}
+.listing_lines pre, .listing_code pre {
+  margin: 0px;
+}
+
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+  }
+  /* this is needed so that the local anchors are displayed below the naviagtion */
+  div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+  {
+    display: inline-block;
+    position: relative;
+    top:-5em;
+  }
+  /* this seems to be a bug in the xsl style sheets when generating indexes */
+  div.index div.index
+  {
+    top: 0em;
+  }
+  /* make space for the fixed navigation bar and add space at the bottom so that
+   * link targets appear somewhat close to top
+   */
+  body
+  {
+    padding-top: 2.5em;
+    padding-bottom: 500px;
+    max-width: 60em;
+  }
+  p
+  {
+    max-width: 60em;
+  }
+  /* style and size the navigation bar */
+  table.navigation#top
+  {
+    position: fixed;
+    background: #e2e2e2;
+    border-bottom: solid 1px #babdb6;
+    border-spacing: 5px;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    z-index: 10;
+  }
+  table.navigation#top td
+  {
+    padding-left: 6px;
+    padding-right: 6px;
+  }
+  .navigation a, .navigation a:visited
+  {
+    /* tango:sky blue 3 */
+    color: #204a87;
+  }
+  .navigation a:hover
+  {
+    /* tango:sky blue 2 */
+    color: #3465a4;
+  }
+  td.shortcuts
+  {
+    /* tango:sky blue 2 */
+    color: #3465a4;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+  td.shortcuts .dim
+  {
+    color: #babdb6;
+  }
+  .navigation .title
+  {
+    font-size: 80%;
+    max-width: none;
+    margin: 0px;
+    font-weight: normal;
+  }
+}
+@media screen and (min-width: 60em) {
+  /* screen larger than 60em */
+  body { margin: auto; }
+}
+@media screen and (max-width: 60em) {
+  /* screen less than 60em */
+  #nav_hierarchy { display: none; }
+  #nav_interfaces { display: none; }
+  #nav_prerequisites { display: none; }
+  #nav_derived_interfaces { display: none; }
+  #nav_implementations { display: none; }
+  #nav_child_properties { display: none; }
+  #nav_style_properties { display: none; }
+  #nav_index { display: none; }
+  #nav_glossary { display: none; }
+  .gallery_image { display: none; }
+  .property_flags { display: none; }
+  .signal_flags { display: none; }
+  .parameter_annotations { display: none; }
+  .enum_member_annotations { display: none; }
+  .struct_member_annotations { display: none; }
+  .union_member_annotations { display: none; }
+  /* now that a column is hidden, optimize space */
+  col.parameters_name { width: auto; }
+  col.parameters_description { width: auto; }
+  col.struct_members_name { width: auto; }
+  col.struct_members_description { width: auto; }
+  col.enum_members_name { width: auto; }
+  col.enum_members_description { width: auto; }
+  col.union_members_name { width: auto; }
+  col.union_members_description { width: auto; }
+  .listing_lines { display: none; }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    background: #e2e2e2;
+    border: solid 1px #babdb6;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+  }
+}
+
diff --git a/docs/reference/html/up-insensitive.png b/docs/reference/html/up-insensitive.png
new file mode 100644 (file)
index 0000000..f404986
Binary files /dev/null and b/docs/reference/html/up-insensitive.png differ
diff --git a/docs/reference/html/up.png b/docs/reference/html/up.png
new file mode 100644 (file)
index 0000000..80b4b37
Binary files /dev/null and b/docs/reference/html/up.png differ
diff --git a/docs/reference/version.xml b/docs/reference/version.xml
new file mode 100644 (file)
index 0000000..8e99e29
--- /dev/null
@@ -0,0 +1 @@
+0.9.35
diff --git a/docs/reference/version.xml.in b/docs/reference/version.xml.in
new file mode 100644 (file)
index 0000000..de213c2
--- /dev/null
@@ -0,0 +1 @@
+@HB_VERSION@
diff --git a/gtk-doc.make b/gtk-doc.make
new file mode 100644 (file)
index 0000000..e791656
--- /dev/null
@@ -0,0 +1,289 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN =
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+SETUP_FILES = \
+       $(content_files)                \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+EXTRA_DIST =                           \
+       $(HTML_IMAGES)                  \
+       $(SETUP_FILES)
+
+DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \
+       html-build.stamp pdf-build.stamp \
+       sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES =                 \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+REPORT_FILES = \
+       $(DOC_MODULE)-undocumented.txt \
+       $(DOC_MODULE)-undeclared.txt \
+       $(DOC_MODULE)-unused.txt
+
+gtkdoc-check.test: Makefile
+       $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
+               echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
+               chmod +x $@
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test
+
+if GTK_DOC_BUILD_HTML
+HTML_BUILD_STAMP=html-build.stamp
+else
+HTML_BUILD_STAMP=
+endif
+if GTK_DOC_BUILD_PDF
+PDF_BUILD_STAMP=pdf-build.stamp
+else
+PDF_BUILD_STAMP=
+endif
+
+all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+.PHONY: all-gtk-doc
+
+if ENABLE_GTK_DOC
+all-local: all-gtk-doc
+endif
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(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 \
+           files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+           if test "x$$files" != "x" ; then \
+               for file in $$files ; do \
+                   destdir=`dirname $(abs_builddir)/$$file`; \
+                   test -d "$$destdir" || mkdir -p "$$destdir"; \
+                   test -f $(abs_srcdir)/$$file && \
+                       cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+               done; \
+           fi; \
+       fi
+       $(AM_V_at)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: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+       $(GTK_DOC_V_SCAN)_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 \
+           scanobj_options=""; \
+           gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+           if test "$(?)" = "0"; then \
+               if test "x$(V)" = "x1"; then \
+                   scanobj_options="--verbose"; \
+               fi; \
+           fi; \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+           gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+       else \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       $(AM_V_at)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='' ; \
+       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
+
+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=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+       if test "$(?)" = "0"; then \
+         if test "x$(V)" = "x1"; then \
+           mkhtml_options="$$mkhtml_options --verbose"; \
+         fi; \
+       fi; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+       fi; \
+       cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       -@test "x$(HTML_IMAGES)" = "x" || \
+       for file in $(HTML_IMAGES) ; do \
+         if test -f $(abs_srcdir)/$$file ; then \
+           cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+         fi; \
+         if test -f $(abs_builddir)/$$file ; then \
+           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
+
+#### 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=""; \
+       gtkdoc-mkpdf 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+       if test "$(?)" = "0"; then \
+         if test "x$(V)" = "x1"; then \
+           mkpdf_options="$$mkpdf_options --verbose"; \
+         fi; \
+       fi; \
+       if test "x$(HTML_IMAGES)" != "x"; then \
+         for img in $(HTML_IMAGES); do \
+           part=`dirname $$img`; \
+           echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+           if test $$? != 0; then \
+             mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+           fi; \
+         done; \
+       fi; \
+       gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+       $(AM_V_at)touch pdf-build.stamp
+
+##############
+
+clean-local:
+       @rm -f *~ *.bak
+       @rm -rf .libs
+       @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
+         rm -f $(DOC_MODULE).types; \
+       fi
+
+distclean-local:
+       @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+           $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+       @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+           rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+       fi
+
+maintainer-clean-local:
+       @rm -rf xml html
+
+install-data-local:
+       @installfiles=`echo $(builddir)/html/*`; \
+       if test "$$installfiles" = '$(builddir)/html/*'; \
+       then echo 1>&2 'Nothing to install' ; \
+       else \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+         else \
+           installdir="$(DESTDIR)$(TARGET_DIR)"; \
+         fi; \
+         $(mkinstalldirs) $${installdir} ; \
+         for i in $$installfiles; do \
+           echo ' $(INSTALL_DATA) '$$i ; \
+           $(INSTALL_DATA) $$i $${installdir}; \
+         done; \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+         fi; \
+         $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+       fi
+
+uninstall-local:
+       @if test -n "$(DOC_MODULE_VERSION)"; then \
+         installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+       else \
+         installdir="$(DESTDIR)$(TARGET_DIR)"; \
+       fi; \
+       rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+if HAVE_GTK_DOC
+dist-check-gtkdoc: docs
+else
+dist-check-gtkdoc:
+       @echo "*** gtk-doc is needed to run 'make dist'.         ***"
+       @echo "*** gtk-doc was not found when 'configure' ran.   ***"
+       @echo "*** please install gtk-doc and rerun 'configure'. ***"
+       @false
+endif
+
+dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+       @mkdir $(distdir)/html
+       @cp ./html/* $(distdir)/html
+       @-cp ./$(DOC_MODULE).pdf $(distdir)/
+       @-cp ./$(DOC_MODULE).types $(distdir)/
+       @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+       @cd $(distdir) && rm -f $(DISTCLEANFILES)
+       @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/harfbuzz.pc.in b/harfbuzz.pc.in
deleted file mode 100644 (file)
index e92319e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: harfbuzz
-Description: Text shaping library
-Version: @VERSION@
-
-Libs: -L${libdir} -lharfbuzz
-Cflags: -I${includedir}/harfbuzz
index a9244eb..377bb86 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-01-19.21; # UTC
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2011-01-19.21; # UTC
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
@@ -156,7 +156,7 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
-       # Protect names problematic for `test' and other utilities.
+       # Protect names problematic for 'test' and other utilities.
        case $dst_arg in
          -* | [=\(\)!]) dst_arg=./$dst_arg;;
        esac
        case $dst_arg in
          -* | [=\(\)!]) dst_arg=./$dst_arg;;
        esac
@@ -190,7 +190,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for `test' and other utilities.
+    # Protect names problematic for 'test' and other utilities.
     case $dst_arg in
       -* | [=\(\)!]) dst_arg=./$dst_arg;;
     esac
     case $dst_arg in
       -* | [=\(\)!]) dst_arg=./$dst_arg;;
     esac
@@ -202,7 +202,7 @@ if test $# -eq 0; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
   # This can happen when creating conditional directories.
   exit 0
 fi
@@ -240,7 +240,7 @@ fi
 
 for src
 do
 
 for src
 do
-  # Protect names problematic for `test' and other utilities.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
     -* | [=\(\)!]) src=./$src;;
   esac
   case $src in
     -* | [=\(\)!]) src=./$src;;
   esac
@@ -354,7 +354,7 @@ do
              if test -z "$dir_arg" || {
                   # Check for POSIX incompatibilities with -m.
                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
              if test -z "$dir_arg" || {
                   # Check for POSIX incompatibilities with -m.
                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                  # other-writeable bit of parent directory when it shouldn't.
+                  # other-writable bit of parent directory when it shouldn't.
                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
                   case $ls_ld_tmpdir in
                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
                   case $ls_ld_tmpdir in
index c2852d8..a50a21a 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,10 @@
+#! /bin/sh
 
 
-# libtool (GNU libtool) 2.4.2
+# libtool (GNU libtool) 2.4.2.418
+# Provide generalized library-building support services.
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html,
-# or obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-# Usage: $progname [OPTION]... [MODE-ARG]...
-#
-# Provide generalized library-building support services.
-#
-#       --config             show all configuration variables
-#       --debug              enable verbose shell tracing
-#   -n, --dry-run            display commands without modifying any files
-#       --features           display basic configuration information and exit
-#       --mode=MODE          use operation mode MODE
-#       --preserve-dup-deps  don't remove duplicate dependency libraries
-#       --quiet, --silent    don't print informational messages
-#       --no-quiet, --no-silent
-#                            print informational messages (default)
-#       --no-warn            don't display warning messages
-#       --tag=TAG            use configuration variables from tag TAG
-#   -v, --verbose            print more informational messages than default
-#       --no-verbose         don't print the extra informational messages
-#       --version            print version information
-#   -h, --help, --help-all   print short, long, or detailed help message
-#
-# MODE must be one of the following:
-#
-#         clean              remove files from the build directory
-#         compile            compile a source file into a libtool object
-#         execute            automatically set library path, then run a program
-#         finish             complete the installation of libtool libraries
-#         install            install libraries or executables
-#         link               create a library or an executable
-#         uninstall          remove libraries from an installed directory
-#
-# MODE-ARGS vary depending on the MODE.  When passed as first option,
-# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
-# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
-#
-# When reporting a bug, please describe a test case to reproduce it and
-# include the following information:
-#
-#         host-triplet:        $host
-#         shell:               $SHELL
-#         compiler:            $LTCC
-#         compiler flags:              $LTCFLAGS
-#         linker:              $LD (gnu? $with_gnu_ld)
-#         $progname:   (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1
-#         automake:    $automake_version
-#         autoconf:    $autoconf_version
-#
-# Report bugs to <bug-libtool@gnu.org>.
-# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
 PROGRAM=libtool
 PACKAGE=libtool
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1ubuntu1"
-TIMESTAMP=""
-package_revision=1.3337
+VERSION=2.4.2.418
+package_revision=2.4.2.418
 
 
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2013-08-23.20; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
 fi
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
 
 
-# NLS nuisances: We save the old values to restore during execute mode.
-lt_user_locale=
-lt_safe_locale=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
 do
 do
-  eval "if test \"\${$lt_var+set}\" = set; then
-          save_$lt_var=\$$lt_var
-          $lt_var=C
-         export $lt_var
-         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
-         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+         export $_G_var
+         _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+         _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
        fi"
 done
        fi"
 done
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
 
 
-$lt_unset CDPATH
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp       $nl"
+
+# There are still modern systems that have problems with 'echo' mis-
+# handling backslashes, among others, so make sure $bs_echo is set to a
+# command that correctly interprets backslashes.
+# (this code from Autoconf 2.68)
+
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+bs_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
+bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $bs_echo`" = "X$bs_echo") 2>/dev/null; then
+  bs_echo='print -r --'
+  bs_echo_n='print -rn --'
+elif (test "X`printf %s $bs_echo`" = "X$bs_echo") 2>/dev/null; then
+  bs_echo='printf %s\n'
+  bs_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $bs_echo) 2>/dev/null`" = "X-n $bs_echo"; then
+    bs_echo_body='eval /usr/ucb/echo -n "$1$nl"'
+    bs_echo_n='/usr/ucb/echo -n'
+  else
+    bs_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    bs_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$nl"*)
+       expr "X$arg" : "X\\(.*\\)$nl";
+       arg=`expr "X$arg" : ".*$nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$nl"
+    '
+    export bs_echo_n_body
+    bs_echo_n='sh -c $bs_echo_n_body bs_echo'
+  fi
+  export bs_echo_body
+  bs_echo='sh -c $bs_echo_body bs_echo'
+fi
 
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
 
 
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
 
 
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
 
 : ${CP="cp -f"}
 
 : ${CP="cp -f"}
-test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${ECHO="$bs_echo"}
+: ${EGREP="grep -E"}
+: ${FGREP="grep -F"}
+: ${GREP="grep"}
+: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
+: ${SED="sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-: ${Xsed="$SED -e 1s/^X//"}
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
-EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
-
-exit_status=$EXIT_SUCCESS
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS="  $lt_nl"
 
 
-dirname="s,/[^/]*$,,"
-basename="s,^.*/,,"
 
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-} # func_dirname may be replaced by extended shell implementation
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
 
 
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
 
 
-# func_basename file
-func_basename ()
-{
-    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-} # func_basename may be replaced by extended shell implementation
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
 
 
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
 
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-    # Extract subdirectory from the argument.
-    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-} # func_dirname_and_basename may be replaced by extended shell implementation
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
 
 
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion.  Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
 
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-    case ${2} in
-      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-    esac
-} # func_stripname may be replaced by extended shell implementation
 
 
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
 
 
-# These SED scripts presuppose an absolute path with a trailing slash.
-pathcar='s,^/\([^/]*\).*$,\1,'
-pathcdr='s,^/[^/]*,,'
-removedotparts=':dotsl
-               s@/\./@/@g
-               t dotsl
-               s,/\.$,/,'
-collapseslashes='s@/\{1,\}@/@g'
-finalslash='s,/*$,/,'
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
 
 
-# func_normal_abspath PATH
-# Remove doubled-up and trailing slashes, "." path components,
-# and cancel out any ".." path components in PATH after making
-# it an absolute path.
-#             value returned in "$func_normal_abspath_result"
-func_normal_abspath ()
-{
-  # Start from root dir and reassemble the path.
-  func_normal_abspath_result=
-  func_normal_abspath_tpath=$1
-  func_normal_abspath_altnamespace=
-  case $func_normal_abspath_tpath in
-    "")
-      # Empty path, that just means $cwd.
-      func_stripname '' '/' "`pwd`"
-      func_normal_abspath_result=$func_stripname_result
-      return
-    ;;
-    # The next three entries are used to spot a run of precisely
-    # two leading slashes without using negated character classes;
-    # we take advantage of case's first-match behaviour.
-    ///*)
-      # Unusual form of absolute path, do nothing.
-    ;;
-    //*)
-      # Not necessarily an ordinary path; POSIX reserves leading '//'
-      # and for example Cygwin uses it to access remote file shares
-      # over CIFS/SMB, so we conserve a leading double slash if found.
-      func_normal_abspath_altnamespace=/
-    ;;
-    /*)
-      # Absolute path, do nothing.
-    ;;
-    *)
-      # Relative path, prepend $cwd.
-      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
-    ;;
-  esac
-  # Cancel out all the simple stuff to save iterations.  We also want
-  # the path to end with a slash for ease of parsing, so make sure
-  # there is one (and only one) here.
-  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
-  while :; do
-    # Processed it all yet?
-    if test "$func_normal_abspath_tpath" = / ; then
-      # If we ascended to the root using ".." the result may be empty now.
-      if test -z "$func_normal_abspath_result" ; then
-        func_normal_abspath_result=/
-      fi
-      break
-    fi
-    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcar"`
-    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcdr"`
-    # Figure out what to do with it
-    case $func_normal_abspath_tcomponent in
-      "")
-        # Trailing empty path component, ignore it.
-      ;;
-      ..)
-        # Parent dir; strip last assembled component from result.
-        func_dirname "$func_normal_abspath_result"
-        func_normal_abspath_result=$func_dirname_result
-      ;;
-      *)
-        # Actual path component, append it.
-        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
-      ;;
-    esac
-  done
-  # Restore leading double-slash if one was found on entry.
-  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-}
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
 
 
-# func_relative_path SRCDIR DSTDIR
-# generates a relative path from SRCDIR to DSTDIR, with a trailing
-# slash if non-empty, suitable for immediately appending a filename
-# without needing to append a separator.
-#             value returned in "$func_relative_path_result"
-func_relative_path ()
-{
-  func_relative_path_result=
-  func_normal_abspath "$1"
-  func_relative_path_tlibdir=$func_normal_abspath_result
-  func_normal_abspath "$2"
-  func_relative_path_tbindir=$func_normal_abspath_result
-
-  # Ascend the tree starting from libdir
-  while :; do
-    # check if we have found a prefix of bindir
-    case $func_relative_path_tbindir in
-      $func_relative_path_tlibdir)
-        # found an exact match
-        func_relative_path_tcancelled=
-        break
-        ;;
-      $func_relative_path_tlibdir*)
-        # found a matching prefix
-        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
-        func_relative_path_tcancelled=$func_stripname_result
-        if test -z "$func_relative_path_result"; then
-          func_relative_path_result=.
-        fi
-        break
-        ;;
-      *)
-        func_dirname $func_relative_path_tlibdir
-        func_relative_path_tlibdir=${func_dirname_result}
-        if test "x$func_relative_path_tlibdir" = x ; then
-          # Have to descend all the way to the root!
-          func_relative_path_result=../$func_relative_path_result
-          func_relative_path_tcancelled=$func_relative_path_tbindir
-          break
-        fi
-        func_relative_path_result=../$func_relative_path_result
-        ;;
-    esac
-  done
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
 
 
-  # Now calculate path; take care to avoid doubling-up slashes.
-  func_stripname '' '/' "$func_relative_path_result"
-  func_relative_path_result=$func_stripname_result
-  func_stripname '/' '/' "$func_relative_path_tcancelled"
-  if test "x$func_stripname_result" != x ; then
-    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
-  fi
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
 
 
-  # Normalisation. If bindir is libdir, return empty string,
-  # else relative path ending with a slash; either way, target
-  # file name can be directly appended.
-  if test ! -z "$func_relative_path_result"; then
-    func_stripname './' '' "$func_relative_path_result/"
-    func_relative_path_result=$func_stripname_result
-  fi
-}
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
 
 
-# The name of this program:
-func_dirname_and_basename "$progpath"
-progname=$func_basename_result
+# The name of this program.
+progname=`$bs_echo "$progpath" |$SED "$sed_basename"`
 
 
-# Make sure we have an absolute path for reexecution:
+# Make sure we have an absolute progpath for reexecution:
 case $progpath in
   [\\/]*|[A-Za-z]:\\*) ;;
   *[\\/]*)
 case $progpath in
   [\\/]*|[A-Za-z]:\\*) ;;
   *[\\/]*)
-     progdir=$func_dirname_result
+     progdir=`$bs_echo "$progpath" |$SED "$sed_dirname"`
      progdir=`cd "$progdir" && pwd`
      progdir=`cd "$progdir" && pwd`
-     progpath="$progdir/$progname"
+     progpath=$progdir/$progname
      ;;
   *)
      ;;
   *)
-     save_IFS="$IFS"
+     _G_IFS=$IFS
      IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
      IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
-       IFS="$save_IFS"
+       IFS=$_G_IFS
        test -x "$progdir/$progname" && break
      done
        test -x "$progdir/$progname" && break
      done
-     IFS="$save_IFS"
+     IFS=$_G_IFS
      test -n "$progdir" || progdir=`pwd`
      test -n "$progdir" || progdir=`pwd`
-     progpath="$progdir/$progname"
+     progpath=$progdir/$progname
      ;;
 esac
 
      ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
 
-# Sed substitution that turns a string into a regex matching for the
-# string literally.
-sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
 
 
-# Sed substitution that converts a w32 file name or path
-# which contains forward slashes, into one that contains
-# (escaped) backslashes.  A very naive implementation.
-lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-
-# Re-`\' parameter expansions in output of double_quote_subst that were
-# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
-# in input to double_quote_subst, that '$' was protected from expansion.
-# Since each input `\' is now two `\'s, look for any number of runs of
-# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
-bs='\\'
-bs2='\\\\'
-bs4='\\\\\\\\'
-dollar='\$'
-sed_double_backslash="\
-  s/$bs4/&\\
-/g
-  s/^$bs2$dollar/$bs&/
-  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
-  s/\n//g"
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
 
 
-# Standard options:
 opt_dry_run=false
 opt_dry_run=false
-opt_help=false
 opt_quiet=false
 opt_verbose=false
 opt_quiet=false
 opt_verbose=false
-opt_warning=:
 
 
-# func_echo arg...
-# Echo program name prefixed message, along with the current mode
-# name if it has been set yet.
-func_echo ()
-{
-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
-}
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
 
 
-# func_verbose arg...
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
-    $opt_verbose && func_echo ${1+"$@"}
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
 
 
-    # A bug in bash halts the script if the last line of a function
-    # fails when set -e is in force, so we need another command to
-    # work around that:
-    :
-}
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
 
 
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO "$*"
-}
 
 
-# func_error arg...
-# Echo program name prefixed message to standard error.
-func_error ()
-{
-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
-}
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
 
 
-# func_warning arg...
-# Echo program name prefixed warning message to standard error.
-func_warning ()
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
 {
 {
-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset='\e[0m'
+        tc_bold='\e[1m';   tc_standout='\e[7m'
+        tc_red='\e[31m';   tc_green='\e[32m'
+        tc_blue='\e[34m';  tc_cyan='\e[36m'
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
 
 
-    # bash bug again:
-    :
+    require_term_colors=:
 }
 
 }
 
-# func_fatal_error arg...
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
 {
 {
-    func_error ${1+"$@"}
-    exit $EXIT_FAILURE
+    $debug_cmd
+
+    eval _G_current_value='`$bs_echo $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
 }
 
 }
 
-# func_fatal_help arg...
-# Echo program name prefixed message to standard error, followed by
-# a help hint, and exit.
-func_fatal_help ()
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+    $debug_cmd
+
+    '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $bs_echo "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$bs_echo "$_G_tc" | sed "$sed_make_literal_regex"`
+        _G_indent=`$bs_echo "$_G_indent" | sed "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | sed 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $bs_echo "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $debug_cmd
+
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    $debug_cmd
+
+    _G_directory_path=$1
+    _G_dir_list=
+
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$_G_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        _G_dir_list=$_G_directory_path:$_G_dir_list
+
+        # If the last portion added has no slash in it, the list is done
+        case $_G_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+      done
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+       IFS=$func_mkdir_p_IFS
+        # mkdir can fail with a 'File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$_G_dir" 2>/dev/null || :
+      done
+      IFS=$func_mkdir_p_IFS
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
+    fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+    $debug_cmd
+
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+    if test : = "$opt_dry_run"; then
+      # Return a directory name, but don't create it in dry-run mode
+      _G_tmpdir=$_G_template-$$
+    else
+
+      # If mktemp works, use that first and foremost
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$_G_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+        func_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$_G_tmpdir"
+        umask $func_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+               s|/\./|/|g
+               t dotsl
+               s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
+      "")
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
+        ;;
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
+        ;;
+      *)
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+        ;;
+    esac
+
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+    $debug_cmd
+
+    $opt_quiet || func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+    $debug_cmd
+
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
+
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
+    fi
+
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
+    :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
+{
+    $debug_cmd
+
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+         _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+       func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \  ]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+         ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+       func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    $debug_cmd
+
+    case $1 in
+      *[\\\`\"]*)
+       _G_arg=`$ECHO "$1" | $SED \
+           -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
+    esac
+
+    case $_G_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        _G_arg=\"$_G_arg\"
+        ;;
+    esac
+
+    func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    $opt_dry_run || {
+      eval "$_G_user_locale
+           $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $debug_cmd
+
+    $opt_verbose && func_echo "$*"
+
+    :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    ver1=$1
+    ver2=$2
+
+    # Split on '.' and compare each component.
+    i=1
+    while :; do
+      p1=`echo "$ver1" |cut -d. -f$i`
+      p2=`echo "$ver2" |cut -d. -f$i`
+      if test ! "$p1"; then
+        echo "$1 $2"
+        break
+      elif test ! "$p2"; then
+        echo "$2 $1"
+        break
+      elif test ! "$p1" = "$p2"; then
+        if test "$p1" -gt "$p2" 2>/dev/null; then # numeric comparison
+          echo "$2 $1"
+        elif test "$p2" -gt "$p1" 2>/dev/null; then # numeric comparison
+          echo "$1 $2"
+        else # numeric, then lexicographic comparison
+          lp=`printf "$p1\n$p2\n" |sort -n |tail -n1`
+          if test "$lp" = "$p2"; then
+            echo "$1 $2"
+          else
+            echo "$2 $1"
+          fi
+        fi
+        break
+      fi
+      i=`expr $i + 1`
+    done
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2012-10-21.11; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$bs_echo "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
+    done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=: ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
+#          esac
+#        done
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
 {
 {
-    func_error ${1+"$@"}
-    func_fatal_error "$help"
+    $debug_cmd
+
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
+
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
+
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
 }
 }
-help="Try \`$progname --help' for more information."  ## default
 
 
 
 
-# func_grep expression filename
-# Check whether EXPRESSION matches any line of FILENAME, without output.
-func_grep ()
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
 {
 {
-    $GREP "$1" "$2" >/dev/null 2>&1
+    $debug_cmd
+
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    func_run_hooks func_options_prep ${1+"$@"}
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
 }
 
 
 }
 
 
-# func_mkdir_p directory-path
-# Make sure the entire path to DIRECTORY-PATH is available.
-func_mkdir_p ()
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
 {
 {
-    my_directory_path="$1"
-    my_dir_list=
+    $debug_cmd
 
 
-    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+    func_parse_options_result=
 
 
-      # Protect directory names starting with `-'
-      case $my_directory_path in
-        -*) my_directory_path="./$my_directory_path" ;;
-      esac
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      func_run_hooks func_parse_options ${1+"$@"}
 
 
-      # While some portion of DIR does not yet exist...
-      while test ! -d "$my_directory_path"; do
-        # ...make a list in topmost first order.  Use a colon delimited
-       # list incase some portion of path contains whitespace.
-        my_dir_list="$my_directory_path:$my_dir_list"
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
 
 
-        # If the last portion added has no slash in it, the list is done
-        case $my_directory_path in */*) ;; *) break ;; esac
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
 
 
-        # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
-      done
-      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+                     ;;
 
 
-      save_mkdir_p_IFS="$IFS"; IFS=':'
-      for my_dir in $my_dir_list; do
-       IFS="$save_mkdir_p_IFS"
-        # mkdir can fail with a `File exist' error if two processes
-        # try to create one of the directories concurrently.  Don't
-        # stop in that case!
-        $MKDIR "$my_dir" 2>/dev/null || :
-      done
-      IFS="$save_mkdir_p_IFS"
+        --warnings|--warning|-W)
+                      test $# = 0 && func_missing_arg $_G_opt && break
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+       # Separate optargs to long options (plugins may need this):
+       --*=*)        func_split_equals "$_G_opt"
+                     set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+      esac
+    done
 
 
-      # Bail out if we (or some other process) failed to create a directory.
-      test -d "$my_directory_path" || \
-        func_fatal_error "Failed to create \`$1'"
-    fi
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
 }
 
 
 }
 
 
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible.  If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
 {
 {
-    my_template="${TMPDIR-/tmp}/${1-$progname}"
+    $debug_cmd
 
 
-    if test "$opt_dry_run" = ":"; then
-      # Return a directory name, but don't create it in dry-run mode
-      my_tmpdir="${my_template}-$$"
-    else
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
 
 
-      # If mktemp works, use that first and foremost
-      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+    func_run_hooks func_validate_options ${1+"$@"}
 
 
-      if test ! -d "$my_tmpdir"; then
-        # Failing that, at least try and use $RANDOM to avoid a race
-        my_tmpdir="${my_template}-${RANDOM-0}$$"
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
 
 
-        save_mktempdir_umask=`umask`
-        umask 0077
-        $MKDIR "$my_tmpdir"
-        umask $save_mktempdir_umask
-      fi
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
+}
 
 
-      # If we're not in dry-run mode, bomb out on failure
-      test -d "$my_tmpdir" || \
-        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
-    fi
 
 
-    $ECHO "$my_tmpdir"
-}
 
 
+## ------------------##
+## Helper functions. ##
+## ------------------##
 
 
-# func_quote_for_eval arg
-# Aesthetically quote ARG to be evaled later.
-# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
-# is double-quoted, suitable for a subsequent eval, whereas
-# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
-# which are still active within double quotes backslashified.
-func_quote_for_eval ()
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
 {
 {
-    case $1 in
-      *[\\\`\"\$]*)
-       func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
-      *)
-        func_quote_for_eval_unquoted_result="$1" ;;
-    esac
+    $debug_cmd
 
 
-    case $func_quote_for_eval_unquoted_result in
-      # Double-quote args containing shell metacharacters to delay
-      # word splitting, command substitution and and variable
-      # expansion for a subsequent eval.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
-        ;;
-      *)
-        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
-    esac
+    eval \$bs_echo \""Usage: $usage"\"
+    eval \$bs_echo \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
 }
 
 
 }
 
 
-# func_quote_for_expand arg
-# Aesthetically quote ARG to be evaled later; same as above,
-# but do not quote variable references.
-func_quote_for_expand ()
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
 {
 {
-    case $1 in
-      *[\\\`\"]*)
-       my_arg=`$ECHO "$1" | $SED \
-           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
-      *)
-        my_arg="$1" ;;
-    esac
-
-    case $my_arg in
-      # Double-quote args containing shell metacharacters to delay
-      # word splitting and command substitution for a subsequent eval.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-        my_arg="\"$my_arg\""
-        ;;
-    esac
+    $debug_cmd
 
 
-    func_quote_for_expand_result="$my_arg"
+    func_usage_message
+    $bs_echo "$long_help_message"
+    exit 0
 }
 
 
 }
 
 
-# func_show_eval cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.
-func_show_eval ()
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
 {
 {
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
-
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
+    $debug_cmd
 
 
-    if ${opt_dry_run-false}; then :; else
-      eval "$my_cmd"
-      my_status=$?
-      if test "$my_status" -eq 0; then :; else
-       eval "(exit $my_status); $my_fail_exp"
-      fi
-    fi
+    func_error "Missing argument for '$1'."
+    exit_cmd=exit
 }
 
 
 }
 
 
-# func_show_eval_locale cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.  Use the saved locale for evaluation.
-func_show_eval_locale ()
-{
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
 
 
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
 
 
-    if ${opt_dry_run-false}; then :; else
-      eval "$lt_user_locale
-           $my_cmd"
-      my_status=$?
-      eval "$lt_safe_locale"
-      if test "$my_status" -eq 0; then :; else
-       eval "(exit $my_status); $my_fail_exp"
-      fi
-    fi
-}
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
 
 
-# func_tr_sh
-# Turn $1 into a string suitable for a shell variable name.
-# Result is stored in $func_tr_sh_result.  All characters
-# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-# if $1 begins with a digit, a '_' is prepended as well.
-func_tr_sh ()
-{
-  case $1 in
-  [0-9]* | *[!a-zA-Z0-9_]*)
-    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-    ;;
-  * )
-    func_tr_sh_result=$1
-    ;;
-  esac
-}
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
 
 
 
 
-# func_version
-# Echo version message to standard output and exit.
-func_version ()
-{
-    $opt_debug
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
 
 
-    $SED -n '/(C)/!b go
-       :more
-       /\./!{
-         N
-         s/\n# / /
-         b more
-       }
-       :go
-       /^# '$PROGRAM' (GNU /,/# warranty; / {
-        s/^# //
-       s/^# *$//
-        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
-        p
-     }' < "$progpath"
-     exit $?
-}
 
 # func_usage
 
 # func_usage
+# ----------
 # Echo short help message to standard output and exit.
 func_usage ()
 {
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $opt_debug
+    $debug_cmd
 
 
-    $SED -n '/^# Usage:/,/^#  *.*--help/ {
-        s/^# //
-       s/^# *$//
-       s/\$progname/'$progname'/
-       p
-    }' < "$progpath"
-    echo
-    $ECHO "run \`$progname --help | more' for full usage"
-    exit $?
+    func_usage_message
+    $bs_echo "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
 }
 
 }
 
-# func_help [NOEXIT]
-# Echo long help message to standard output and exit,
-# unless 'noexit' is passed as argument.
-func_help ()
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
 {
 {
-    $opt_debug
-
-    $SED -n '/^# Usage:/,/# Report bugs to/ {
-       :print
-        s/^# //
-       s/^# *$//
-       s*\$progname*'$progname'*
-       s*\$host*'"$host"'*
-       s*\$SHELL*'"$SHELL"'*
-       s*\$LTCC*'"$LTCC"'*
-       s*\$LTCFLAGS*'"$LTCFLAGS"'*
-       s*\$LD*'"$LD"'*
-       s/\$with_gnu_ld/'"$with_gnu_ld"'/
-       s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
-       s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
-       p
-       d
-     }
-     /^# .* home page:/b print
-     /^# General help using/b print
-     ' < "$progpath"
-    ret=$?
-    if test -z "$1"; then
-      exit $ret
-    fi
+    $debug_cmd
+
+    eval \$bs_echo \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+       h
+       /^Written by/q' < "$progpath"
+    echo
+    eval \$bs_echo \""$usage_message"\"
 }
 
 }
 
-# func_missing_arg argname
-# Echo program name prefixed message to standard error and set global
-# exit_cmd.
-func_missing_arg ()
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
 {
 {
-    $opt_debug
+    $debug_cmd
+
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '/^##/q
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
 
 
-    func_error "missing argument for $1."
-    exit_cmd=exit
+    exit $?
 }
 
 
 }
 
 
-# func_split_short_opt shortopt
-# Set func_split_short_opt_name and func_split_short_opt_arg shell
-# variables after splitting SHORTOPT after the 2nd character.
-func_split_short_opt ()
-{
-    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
 
 
-    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-} # func_split_short_opt may be replaced by extended shell implementation
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.2.418'
 
 
 
 
-# func_split_long_opt longopt
-# Set func_split_long_opt_name and func_split_long_opt_arg shell
-# variables after splitting LONGOPT at the `=' sign.
-func_split_long_opt ()
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
 {
 {
-    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-    my_sed_long_arg='1s/^--[^=]*=//'
+    $debug_cmd
 
 
-    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-} # func_split_long_opt may be replaced by extended shell implementation
+    _G_message=$*
 
 
-exit_cmd=:
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $bs_echo "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
 
 
 
 
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+    $debug_cmd
+
+    $warning_func ${1+"$@"}
+}
 
 
 
 
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --config             show all configuration variables
+       --debug              enable verbose shell tracing
+   -n, --dry-run            display commands without modifying any files
+       --features           display basic configuration information and exit
+       --mode=MODE          use operation mode MODE
+       --no-warnings        equivalent to '-Wnone'
+       --preserve-dup-deps  don't remove duplicate dependency libraries
+       --quiet, --silent    don't print informational messages
+       --tag=TAG            use configuration variables from tag TAG
+   -v, --verbose            print more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
 
 
-magic="%%%MAGIC variable%%%"
-magic_exe="%%%MAGIC EXE variable%%%"
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message=$long_help_message"
 
 
-# Global variables.
-nonopt=
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
+MODE must be one of the following:
 
 
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
+       clean           remove files from the build directory
+       compile         compile a source file into a libtool object
+       execute         automatically set library path, then run a program
+       finish          complete the installation of libtool libraries
+       install         install libraries or executables
+       link            create a library or an executable
+       uninstall       remove libraries from an installed directory
 
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-    eval "${1}=\$${1}\${2}"
-} # func_append may be replaced by extended shell implementation
+MODE-ARGS vary depending on the MODE.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
 
 
-# func_append_quoted var value
-# Quote VALUE and append to the end of shell variable VAR, separated
-# by a space.
-func_append_quoted ()
-{
-    func_quote_for_eval "${2}"
-    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-} # func_append_quoted may be replaced by extended shell implementation
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
 
 
+       host-triplet:   $host
+       shell:          $SHELL
+       compiler:       $LTCC
+       compiler flags: $LTCFLAGS
+       linker:         $LD (gnu? $with_gnu_ld)
+       version:        $progname (GNU libtool) 2.4.2.418
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-    func_arith_result=`expr "${@}"`
-} # func_arith may be replaced by extended shell implementation
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
 
 
 
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-} # func_len may be replaced by extended shell implementation
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
 
 
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
 
 
-# func_lo2o object
-func_lo2o ()
-{
-    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-} # func_lo2o may be replaced by extended shell implementation
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
 
 
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
 
 
-# func_xform libobj-or-source
-func_xform ()
-{
-    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-} # func_xform may be replaced by extended shell implementation
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
 
 
 
 
-# func_fatal_configuration arg...
+# func_fatal_configuration ARG...
+# -------------------------------
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
 func_fatal_configuration ()
 {
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
 func_fatal_configuration ()
 {
-    func_error ${1+"$@"}
-    func_error "See the $PACKAGE documentation for more information."
-    func_fatal_error "Fatal configuration error."
+    func__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
 }
 
 
 # func_config
 }
 
 
 # func_config
+# -----------
 # Display the configuration for all the tags in this script.
 func_config ()
 {
 # Display the configuration for all the tags in this script.
 func_config ()
 {
@@ -915,17 +2048,19 @@ func_config ()
     exit $?
 }
 
     exit $?
 }
 
+
 # func_features
 # func_features
+# -------------
 # Display the features supported by this script.
 func_features ()
 {
     echo "host: $host"
 # Display the features supported by this script.
 func_features ()
 {
     echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       echo "enable shared libraries"
     else
       echo "disable shared libraries"
     fi
       echo "enable shared libraries"
     else
       echo "disable shared libraries"
     fi
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       echo "enable static libraries"
     else
       echo "disable static libraries"
       echo "enable static libraries"
     else
       echo "disable static libraries"
@@ -934,298 +2069,325 @@ func_features ()
     exit $?
 }
 
     exit $?
 }
 
-# func_enable_tag tagname
+
+# func_enable_tag TAGNAME
+# -----------------------
 # Verify that TAGNAME is valid, and either flag an error and exit, or
 # enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
 # variable here.
 func_enable_tag ()
 {
 # Verify that TAGNAME is valid, and either flag an error and exit, or
 # enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
 # variable here.
 func_enable_tag ()
 {
-  # Global variable:
-  tagname="$1"
+    # Global variable:
+    tagname=$1
 
 
-  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
-  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
-  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+    sed_extractcf=/$re_begincf/,/$re_endcf/p
 
 
-  # Validate tagname.
-  case $tagname in
-    *[!-_A-Za-z0-9,/]*)
-      func_fatal_error "invalid tag name: $tagname"
-      ;;
-  esac
+    # Validate tagname.
+    case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+        func_fatal_error "invalid tag name: $tagname"
+        ;;
+    esac
 
 
-  # Don't test for the "default" C tag, as we know it's
-  # there but not specially marked.
-  case $tagname in
-    CC) ;;
+    # Don't test for the "default" C tag, as we know it's
+    # there but not specially marked.
+    case $tagname in
+        CC) ;;
     *)
     *)
-      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
-       taglist="$taglist $tagname"
-
-       # Evaluate the configuration.  Be careful to quote the path
-       # and the sed script, to avoid splitting on whitespace, but
-       # also don't use non-portable quotes within backquotes within
-       # quotes we have to do it in 2 steps:
-       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
-       eval "$extractedcf"
-      else
-       func_error "ignoring unknown tag $tagname"
-      fi
-      ;;
-  esac
+        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+         taglist="$taglist $tagname"
+
+         # Evaluate the configuration.  Be careful to quote the path
+         # and the sed script, to avoid splitting on whitespace, but
+         # also don't use non-portable quotes within backquotes within
+         # quotes we have to do it in 2 steps:
+         extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+         eval "$extractedcf"
+        else
+         func_error "ignoring unknown tag $tagname"
+        fi
+        ;;
+    esac
 }
 
 }
 
+
 # func_check_version_match
 # func_check_version_match
+# ------------------------
 # Ensure that we are using m4 macros, and libtool script from the same
 # release of libtool.
 func_check_version_match ()
 {
 # Ensure that we are using m4 macros, and libtool script from the same
 # release of libtool.
 func_check_version_match ()
 {
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
+    if test "$package_revision" != "$macro_revision"; then
+      if test "$VERSION" != "$macro_version"; then
+        if test -z "$macro_version"; then
+          cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from an older release.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from an older release.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
-      else
-        cat >&2 <<_LT_EOF
+        else
+          cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
+        fi
+      else
+        cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
 $progname: of $PACKAGE $VERSION and run autoconf again.
 _LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
 $progname: of $PACKAGE $VERSION and run autoconf again.
 _LT_EOF
-    fi
+      fi
 
 
-    exit $EXIT_MISMATCH
-  fi
+      exit $EXIT_MISMATCH
+    fi
 }
 
 
 }
 
 
-# Shorthand for --mode=foo, only valid as the first argument
-case $1 in
-clean|clea|cle|cl)
-  shift; set dummy --mode clean ${1+"$@"}; shift
-  ;;
-compile|compil|compi|comp|com|co|c)
-  shift; set dummy --mode compile ${1+"$@"}; shift
-  ;;
-execute|execut|execu|exec|exe|ex|e)
-  shift; set dummy --mode execute ${1+"$@"}; shift
-  ;;
-finish|finis|fini|fin|fi|f)
-  shift; set dummy --mode finish ${1+"$@"}; shift
-  ;;
-install|instal|insta|inst|ins|in|i)
-  shift; set dummy --mode install ${1+"$@"}; shift
-  ;;
-link|lin|li|l)
-  shift; set dummy --mode link ${1+"$@"}; shift
-  ;;
-uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-  shift; set dummy --mode uninstall ${1+"$@"}; shift
-  ;;
-esac
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+    $debug_mode
 
 
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
 
 
+    nonopt=
+    preserve_args=
 
 
-# Option defaults:
-opt_debug=:
-opt_dry_run=false
-opt_config=false
-opt_preserve_dup_deps=false
-opt_features=false
-opt_finish=false
-opt_help=false
-opt_help_all=false
-opt_silent=:
-opt_warning=:
-opt_verbose=:
-opt_silent=false
-opt_verbose=false
+    # Shorthand for --mode=foo, only valid as the first argument
+    case $1 in
+    clean|clea|cle|cl)
+      shift; set dummy --mode clean ${1+"$@"}; shift
+      ;;
+    compile|compil|compi|comp|com|co|c)
+      shift; set dummy --mode compile ${1+"$@"}; shift
+      ;;
+    execute|execut|execu|exec|exe|ex|e)
+      shift; set dummy --mode execute ${1+"$@"}; shift
+      ;;
+    finish|finis|fini|fin|fi|f)
+      shift; set dummy --mode finish ${1+"$@"}; shift
+      ;;
+    install|instal|insta|inst|ins|in|i)
+      shift; set dummy --mode install ${1+"$@"}; shift
+      ;;
+    link|lin|li|l)
+      shift; set dummy --mode link ${1+"$@"}; shift
+      ;;
+    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+      shift; set dummy --mode uninstall ${1+"$@"}; shift
+      ;;
+    esac
+
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
 
 
 
 
-# Parse options once, thoroughly.  This comes as soon as possible in the
-# script to make things like `--version' happen as quickly as we can.
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
 {
 {
-  # this just eases exit handling
-  while test $# -gt 0; do
-    opt="$1"
-    shift
-    case $opt in
-      --debug|-x)      opt_debug='set -x'
-                       func_echo "enabling shell trace mode"
-                       $opt_debug
-                       ;;
-      --dry-run|--dryrun|-n)
-                       opt_dry_run=:
-                       ;;
-      --config)
-                       opt_config=:
-func_config
-                       ;;
-      --dlopen|-dlopen)
-                       optarg="$1"
-                       opt_dlopen="${opt_dlopen+$opt_dlopen
-}$optarg"
-                       shift
-                       ;;
-      --preserve-dup-deps)
-                       opt_preserve_dup_deps=:
-                       ;;
-      --features)
-                       opt_features=:
-func_features
-                       ;;
-      --finish)
-                       opt_finish=:
-set dummy --mode finish ${1+"$@"}; shift
-                       ;;
-      --help)
-                       opt_help=:
-                       ;;
-      --help-all)
-                       opt_help_all=:
-opt_help=': help-all'
-                       ;;
-      --mode)
-                       test $# = 0 && func_missing_arg $opt && break
-                       optarg="$1"
-                       opt_mode="$optarg"
-case $optarg in
-  # Valid mode arguments:
-  clean|compile|execute|finish|install|link|relink|uninstall) ;;
-
-  # Catch anything else as an error
-  *) func_error "invalid argument for $opt"
-     exit_cmd=exit
-     break
-     ;;
-esac
-                       shift
-                       ;;
-      --no-silent|--no-quiet)
-                       opt_silent=false
-func_append preserve_args " $opt"
-                       ;;
-      --no-warning|--no-warn)
-                       opt_warning=false
-func_append preserve_args " $opt"
-                       ;;
-      --no-verbose)
-                       opt_verbose=false
-func_append preserve_args " $opt"
-                       ;;
-      --silent|--quiet)
-                       opt_silent=:
-func_append preserve_args " $opt"
-        opt_verbose=false
-                       ;;
-      --verbose|-v)
-                       opt_verbose=:
-func_append preserve_args " $opt"
-opt_silent=false
-                       ;;
-      --tag)
-                       test $# = 0 && func_missing_arg $opt && break
-                       optarg="$1"
-                       opt_tag="$optarg"
-func_append preserve_args " $opt $optarg"
-func_enable_tag "$optarg"
-                       shift
-                       ;;
-
-      -\?|-h)          func_usage                              ;;
-      --help)          func_help                               ;;
-      --version)       func_version                            ;;
-
-      # Separate optargs to long options:
-      --*=*)
-                       func_split_long_opt "$opt"
-                       set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
-                       shift
-                       ;;
-
-      # Separate non-argument short options:
-      -\?*|-h*|-n*|-v*)
-                       func_split_short_opt "$opt"
-                       set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-                       shift
-                       ;;
-
-      --)              break                                   ;;
-      -*)              func_fatal_help "unrecognized option \`$opt'" ;;
-      *)               set dummy "$opt" ${1+"$@"};     shift; break  ;;
-    esac
-  done
+    $debug_cmd
 
 
-  # Validate options:
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        case $1 in
+                          # Valid mode arguments:
+                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+                          # Catch anything else as an error
+                          *) func_error "invalid argument for $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+       # An option not handled by this hook function:
+        *)             set dummy "$_G_opt" ${1+"$@"};  shift; break  ;;
+      esac
+    done
 
 
-  # save first non-option argument
-  if test "$#" -gt 0; then
-    nonopt="$opt"
-    shift
-  fi
 
 
-  # preserve --debug
-  test "$opt_debug" = : || func_append preserve_args " --debug"
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
 
 
-  case $host in
-    *cygwin* | *mingw* | *pw32* | *cegcc*)
-      # don't eliminate duplications in $postdeps and $predeps
-      opt_duplicate_compiler_generated_deps=:
-      ;;
-    *)
-      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
-      ;;
-  esac
 
 
-  $opt_help || {
-    # Sanity checks first:
-    func_check_version_match
 
 
-    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-      func_fatal_configuration "not configured to build any kind of library"
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
     fi
 
     fi
 
-    # Darwin sucks
-    eval std_shrext=\"$shrext_cmds\"
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+    case $host in
+      *cygwin* | *mingw* | *pw32* | *cegcc*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
+
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
 
 
-    # Only execute mode is allowed to have -dlopen flags.
-    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-      func_error "unrecognized option \`-dlopen'"
-      $ECHO "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
 
 
-    # Change the help message to a mode-specific one.
-    generic_help="$help"
-    help="Try \`$progname --help --mode=$opt_mode' for more information."
-  }
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+        func_error "unrecognized option '-dlopen'"
+        $ECHO "$help" 1>&2
+        exit $EXIT_FAILURE
+      fi
 
 
+      # Change the help message to a mode-specific one.
+      generic_help=$help
+      help="Try '$progname --help --mode=$opt_mode' for more information."
+    }
 
 
-  # Bail if the options were screwed
-  $exit_cmd $EXIT_FAILURE
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
 }
 }
+func_add_hook func_validate_options libtool_validate_options
 
 
 
 
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
 
 
 ## ----------- ##
 ##    Main.    ##
 ## ----------- ##
 
 
 
 ## ----------- ##
 ##    Main.    ##
 ## ----------- ##
 
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # func_lalib_p file
 # func_lalib_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
+# True iff FILE is a libtool '.la' library or '.lo' object file.
 # This function is only a basic sanity check; it will hardly flush out
 # determined imposters.
 func_lalib_p ()
 # This function is only a basic sanity check; it will hardly flush out
 # determined imposters.
 func_lalib_p ()
@@ -1236,12 +2398,12 @@ func_lalib_p ()
 }
 
 # func_lalib_unsafe_p file
 }
 
 # func_lalib_unsafe_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
+# True iff FILE is a libtool '.la' library or '.lo' object file.
 # This function implements the same check as func_lalib_p without
 # resorting to external programs.  To this end, it redirects stdin and
 # closes it afterwards, without saving the original file descriptor.
 # As a safety measure, use it only where a negative result would be
 # This function implements the same check as func_lalib_p without
 # resorting to external programs.  To this end, it redirects stdin and
 # closes it afterwards, without saving the original file descriptor.
 # As a safety measure, use it only where a negative result would be
-# fatal anyway.  Works if `file' does not exist.
+# fatal anyway.  Works if 'file' does not exist.
 func_lalib_unsafe_p ()
 {
     lalib_p=no
 func_lalib_unsafe_p ()
 {
     lalib_p=no
@@ -1249,13 +2411,13 @@ func_lalib_unsafe_p ()
        for lalib_p_l in 1 2 3 4
        do
            read lalib_p_line
        for lalib_p_l in 1 2 3 4
        do
            read lalib_p_line
-           case "$lalib_p_line" in
+           case $lalib_p_line in
                \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
            esac
        done
        exec 0<&5 5<&-
     fi
                \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
            esac
        done
        exec 0<&5 5<&-
     fi
-    test "$lalib_p" = yes
+    test yes = "$lalib_p"
 }
 
 # func_ltwrapper_script_p file
 }
 
 # func_ltwrapper_script_p file
@@ -1289,7 +2451,7 @@ func_ltwrapper_scriptname ()
 {
     func_dirname_and_basename "$1" "" "."
     func_stripname '' '.exe' "$func_basename_result"
 {
     func_dirname_and_basename "$1" "" "."
     func_stripname '' '.exe' "$func_basename_result"
-    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
 }
 
 # func_ltwrapper_p file
 }
 
 # func_ltwrapper_p file
@@ -1308,11 +2470,13 @@ func_ltwrapper_p ()
 # FAIL_CMD may read-access the current command in variable CMD!
 func_execute_cmds ()
 {
 # FAIL_CMD may read-access the current command in variable CMD!
 func_execute_cmds ()
 {
-    $opt_debug
+    $debug_cmd
+
     save_ifs=$IFS; IFS='~'
     for cmd in $1; do
     save_ifs=$IFS; IFS='~'
     for cmd in $1; do
-      IFS=$save_ifs
+      IFS=$sp$nl
       eval cmd=\"$cmd\"
       eval cmd=\"$cmd\"
+      IFS=$save_ifs
       func_show_eval "$cmd" "${2-:}"
     done
     IFS=$save_ifs
       func_show_eval "$cmd" "${2-:}"
     done
     IFS=$save_ifs
@@ -1324,10 +2488,11 @@ func_execute_cmds ()
 # Note that it is not necessary on cygwin/mingw to append a dot to
 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
 # behavior happens only for exec(3), not for open(2)!  Also, sourcing
 # Note that it is not necessary on cygwin/mingw to append a dot to
 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
 # behavior happens only for exec(3), not for open(2)!  Also, sourcing
-# `FILE.' does not work on cygwin managed mounts.
+# 'FILE.' does not work on cygwin managed mounts.
 func_source ()
 {
 func_source ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $1 in
     */* | *\\*)        . "$1" ;;
     *)         . "./$1" ;;
     case $1 in
     */* | *\\*)        . "$1" ;;
     *)         . "./$1" ;;
@@ -1354,10 +2519,10 @@ func_resolve_sysroot ()
 # store the result into func_replace_sysroot_result.
 func_replace_sysroot ()
 {
 # store the result into func_replace_sysroot_result.
 func_replace_sysroot ()
 {
-  case "$lt_sysroot:$1" in
+  case $lt_sysroot:$1 in
   ?*:"$lt_sysroot"*)
     func_stripname "$lt_sysroot" '' "$1"
   ?*:"$lt_sysroot"*)
     func_stripname "$lt_sysroot" '' "$1"
-    func_replace_sysroot_result="=$func_stripname_result"
+    func_replace_sysroot_result='='$func_stripname_result
     ;;
   *)
     # Including no sysroot.
     ;;
   *)
     # Including no sysroot.
@@ -1374,7 +2539,8 @@ func_replace_sysroot ()
 # arg is usually of the form 'gcc ...'
 func_infer_tag ()
 {
 # arg is usually of the form 'gcc ...'
 func_infer_tag ()
 {
-    $opt_debug
+    $debug_cmd
+
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
@@ -1393,7 +2559,7 @@ func_infer_tag ()
        for z in $available_tags; do
          if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
            # Evaluate the configuration.
        for z in $available_tags; do
          if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
            # Evaluate the configuration.
-           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
            CC_quoted=
            for arg in $CC; do
              # Double-quote args containing other shell metacharacters.
            CC_quoted=
            for arg in $CC; do
              # Double-quote args containing other shell metacharacters.
@@ -1418,7 +2584,7 @@ func_infer_tag ()
        # line option must be used.
        if test -z "$tagname"; then
          func_echo "unable to infer tagged configuration"
        # line option must be used.
        if test -z "$tagname"; then
          func_echo "unable to infer tagged configuration"
-         func_fatal_error "specify a tag with \`--tag'"
+         func_fatal_error "specify a tag with '--tag'"
 #      else
 #        func_verbose "using $tagname tagged configuration"
        fi
 #      else
 #        func_verbose "using $tagname tagged configuration"
        fi
@@ -1434,15 +2600,15 @@ func_infer_tag ()
 # but don't create it if we're doing a dry run.
 func_write_libtool_object ()
 {
 # but don't create it if we're doing a dry run.
 func_write_libtool_object ()
 {
-    write_libobj=${1}
-    if test "$build_libtool_libs" = yes; then
-      write_lobj=\'${2}\'
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
     else
       write_lobj=none
     fi
 
     else
       write_lobj=none
     fi
 
-    if test "$build_old_libs" = yes; then
-      write_oldobj=\'${3}\'
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
     else
       write_oldobj=none
     fi
     else
       write_oldobj=none
     fi
@@ -1450,7 +2616,7 @@ func_write_libtool_object ()
     $opt_dry_run || {
       cat >${write_libobj}T <<EOF
 # $write_libobj - a libtool object file
     $opt_dry_run || {
       cat >${write_libobj}T <<EOF
 # $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -1462,7 +2628,7 @@ pic_object=$write_lobj
 non_pic_object=$write_oldobj
 
 EOF
 non_pic_object=$write_oldobj
 
 EOF
-      $MV "${write_libobj}T" "${write_libobj}"
+      $MV "${write_libobj}T" "$write_libobj"
     }
 }
 
     }
 }
 
@@ -1482,8 +2648,9 @@ EOF
 # be empty on error (or when ARG is empty)
 func_convert_core_file_wine_to_w32 ()
 {
 # be empty on error (or when ARG is empty)
 func_convert_core_file_wine_to_w32 ()
 {
-  $opt_debug
-  func_convert_core_file_wine_to_w32_result="$1"
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
   if test -n "$1"; then
     # Unfortunately, winepath does not exit with a non-zero error code, so we
     # are forced to check the contents of stdout. On the other hand, if the
   if test -n "$1"; then
     # Unfortunately, winepath does not exit with a non-zero error code, so we
     # are forced to check the contents of stdout. On the other hand, if the
@@ -1491,9 +2658,9 @@ func_convert_core_file_wine_to_w32 ()
     # *an error message* to stdout. So we must check for both error code of
     # zero AND non-empty stdout, which explains the odd construction:
     func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
     # *an error message* to stdout. So we must check for both error code of
     # zero AND non-empty stdout, which explains the odd construction:
     func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
       func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
       func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-        $SED -e "$lt_sed_naive_backslashify"`
+        $SED -e "$sed_naive_backslashify"`
     else
       func_convert_core_file_wine_to_w32_result=
     fi
     else
       func_convert_core_file_wine_to_w32_result=
     fi
@@ -1514,18 +2681,19 @@ func_convert_core_file_wine_to_w32 ()
 # are convertible, then the result may be empty.
 func_convert_core_path_wine_to_w32 ()
 {
 # are convertible, then the result may be empty.
 func_convert_core_path_wine_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # unfortunately, winepath doesn't convert paths, only file names
   # unfortunately, winepath doesn't convert paths, only file names
-  func_convert_core_path_wine_to_w32_result=""
+  func_convert_core_path_wine_to_w32_result=
   if test -n "$1"; then
     oldIFS=$IFS
     IFS=:
     for func_convert_core_path_wine_to_w32_f in $1; do
       IFS=$oldIFS
       func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
   if test -n "$1"; then
     oldIFS=$IFS
     IFS=:
     for func_convert_core_path_wine_to_w32_f in $1; do
       IFS=$oldIFS
       func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
         if test -z "$func_convert_core_path_wine_to_w32_result"; then
         if test -z "$func_convert_core_path_wine_to_w32_result"; then
-          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
         else
           func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
         fi
         else
           func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
         fi
@@ -1554,7 +2722,8 @@ func_convert_core_path_wine_to_w32 ()
 # environment variable; do not put it in $PATH.
 func_cygpath ()
 {
 # environment variable; do not put it in $PATH.
 func_cygpath ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
     func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
     if test "$?" -ne 0; then
   if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
     func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
     if test "$?" -ne 0; then
@@ -1563,7 +2732,7 @@ func_cygpath ()
     fi
   else
     func_cygpath_result=
     fi
   else
     func_cygpath_result=
-    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
   fi
 }
 #end: func_cygpath
   fi
 }
 #end: func_cygpath
@@ -1574,10 +2743,11 @@ func_cygpath ()
 # result in func_convert_core_msys_to_w32_result.
 func_convert_core_msys_to_w32 ()
 {
 # result in func_convert_core_msys_to_w32_result.
 func_convert_core_msys_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # awkward: cmd appends spaces to result
   func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
   # awkward: cmd appends spaces to result
   func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
 }
 #end: func_convert_core_msys_to_w32
 
 }
 #end: func_convert_core_msys_to_w32
 
@@ -1588,13 +2758,14 @@ func_convert_core_msys_to_w32 ()
 # func_to_host_file_result to ARG1).
 func_convert_file_check ()
 {
 # func_to_host_file_result to ARG1).
 func_convert_file_check ()
 {
-  $opt_debug
-  if test -z "$2" && test -n "$1" ; then
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
     func_error "Could not determine host file name corresponding to"
     func_error "Could not determine host file name corresponding to"
-    func_error "  \`$1'"
+    func_error "  '$1'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback:
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback:
-    func_to_host_file_result="$1"
+    func_to_host_file_result=$1
   fi
 }
 # end func_convert_file_check
   fi
 }
 # end func_convert_file_check
@@ -1606,10 +2777,11 @@ func_convert_file_check ()
 # func_to_host_file_result to a simplistic fallback value (see below).
 func_convert_path_check ()
 {
 # func_to_host_file_result to a simplistic fallback value (see below).
 func_convert_path_check ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$4" && test -n "$3"; then
     func_error "Could not determine the host path corresponding to"
   if test -z "$4" && test -n "$3"; then
     func_error "Could not determine the host path corresponding to"
-    func_error "  \`$3'"
+    func_error "  '$3'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback.  This is a deliberately simplistic "conversion" and
     # should not be "improved".  See libtool.info.
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback.  This is a deliberately simplistic "conversion" and
     # should not be "improved".  See libtool.info.
@@ -1618,7 +2790,7 @@ func_convert_path_check ()
       func_to_host_path_result=`echo "$3" |
         $SED -e "$lt_replace_pathsep_chars"`
     else
       func_to_host_path_result=`echo "$3" |
         $SED -e "$lt_replace_pathsep_chars"`
     else
-      func_to_host_path_result="$3"
+      func_to_host_path_result=$3
     fi
   fi
 }
     fi
   fi
 }
@@ -1630,9 +2802,10 @@ func_convert_path_check ()
 # and appending REPL if ORIG matches BACKPAT.
 func_convert_path_front_back_pathsep ()
 {
 # and appending REPL if ORIG matches BACKPAT.
 func_convert_path_front_back_pathsep ()
 {
-  $opt_debug
+  $debug_cmd
+
   case $4 in
   case $4 in
-  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
     ;;
   esac
   case $4 in
     ;;
   esac
   case $4 in
@@ -1646,7 +2819,7 @@ func_convert_path_front_back_pathsep ()
 ##################################################
 # $build to $host FILE NAME CONVERSION FUNCTIONS #
 ##################################################
 ##################################################
 # $build to $host FILE NAME CONVERSION FUNCTIONS #
 ##################################################
-# invoked via `$to_host_file_cmd ARG'
+# invoked via '$to_host_file_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # Result will be available in $func_to_host_file_result.
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # Result will be available in $func_to_host_file_result.
@@ -1657,7 +2830,8 @@ func_convert_path_front_back_pathsep ()
 # in func_to_host_file_result.
 func_to_host_file ()
 {
 # in func_to_host_file_result.
 func_to_host_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   $to_host_file_cmd "$1"
 }
 # end func_to_host_file
   $to_host_file_cmd "$1"
 }
 # end func_to_host_file
@@ -1669,7 +2843,8 @@ func_to_host_file ()
 # in (the comma separated) LAZY, no conversion takes place.
 func_to_tool_file ()
 {
 # in (the comma separated) LAZY, no conversion takes place.
 func_to_tool_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   case ,$2, in
     *,"$to_tool_file_cmd",*)
       func_to_tool_file_result=$1
   case ,$2, in
     *,"$to_tool_file_cmd",*)
       func_to_tool_file_result=$1
@@ -1687,7 +2862,7 @@ func_to_tool_file ()
 # Copy ARG to func_to_host_file_result.
 func_convert_file_noop ()
 {
 # Copy ARG to func_to_host_file_result.
 func_convert_file_noop ()
 {
-  func_to_host_file_result="$1"
+  func_to_host_file_result=$1
 }
 # end func_convert_file_noop
 
 }
 # end func_convert_file_noop
 
@@ -1698,11 +2873,12 @@ func_convert_file_noop ()
 # func_to_host_file_result.
 func_convert_file_msys_to_w32 ()
 {
 # func_to_host_file_result.
 func_convert_file_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1714,8 +2890,9 @@ func_convert_file_msys_to_w32 ()
 # func_to_host_file_result.
 func_convert_file_cygwin_to_w32 ()
 {
 # func_to_host_file_result.
 func_convert_file_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
     # LT_CYGPATH in this case.
   if test -n "$1"; then
     # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
     # LT_CYGPATH in this case.
@@ -1731,11 +2908,12 @@ func_convert_file_cygwin_to_w32 ()
 # and a working winepath. Returns result in func_to_host_file_result.
 func_convert_file_nix_to_w32 ()
 {
 # and a working winepath. Returns result in func_to_host_file_result.
 func_convert_file_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_file_wine_to_w32 "$1"
   if test -n "$1"; then
     func_convert_core_file_wine_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1747,12 +2925,13 @@ func_convert_file_nix_to_w32 ()
 # Returns result in func_to_host_file_result.
 func_convert_file_msys_to_cygwin ()
 {
 # Returns result in func_to_host_file_result.
 func_convert_file_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
     func_cygpath -u "$func_convert_core_msys_to_w32_result"
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
     func_cygpath -u "$func_convert_core_msys_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1765,13 +2944,14 @@ func_convert_file_msys_to_cygwin ()
 # in func_to_host_file_result.
 func_convert_file_nix_to_cygwin ()
 {
 # in func_to_host_file_result.
 func_convert_file_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
     func_convert_core_file_wine_to_w32 "$1"
     func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
   if test -n "$1"; then
     # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
     func_convert_core_file_wine_to_w32 "$1"
     func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1781,7 +2961,7 @@ func_convert_file_nix_to_cygwin ()
 #############################################
 # $build to $host PATH CONVERSION FUNCTIONS #
 #############################################
 #############################################
 # $build to $host PATH CONVERSION FUNCTIONS #
 #############################################
-# invoked via `$to_host_path_cmd ARG'
+# invoked via '$to_host_path_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # The result will be available in $func_to_host_path_result.
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # The result will be available in $func_to_host_path_result.
@@ -1805,10 +2985,11 @@ func_convert_file_nix_to_cygwin ()
 to_host_path_cmd=
 func_init_to_host_path_cmd ()
 {
 to_host_path_cmd=
 func_init_to_host_path_cmd ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$to_host_path_cmd"; then
     func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
   if test -z "$to_host_path_cmd"; then
     func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
   fi
 }
 
   fi
 }
 
@@ -1818,7 +2999,8 @@ func_init_to_host_path_cmd ()
 # in func_to_host_path_result.
 func_to_host_path ()
 {
 # in func_to_host_path_result.
 func_to_host_path ()
 {
-  $opt_debug
+  $debug_cmd
+
   func_init_to_host_path_cmd
   $to_host_path_cmd "$1"
 }
   func_init_to_host_path_cmd
   $to_host_path_cmd "$1"
 }
@@ -1829,7 +3011,7 @@ func_to_host_path ()
 # Copy ARG to func_to_host_path_result.
 func_convert_path_noop ()
 {
 # Copy ARG to func_to_host_path_result.
 func_convert_path_noop ()
 {
-  func_to_host_path_result="$1"
+  func_to_host_path_result=$1
 }
 # end func_convert_path_noop
 
 }
 # end func_convert_path_noop
 
@@ -1840,8 +3022,9 @@ func_convert_path_noop ()
 # func_to_host_path_result.
 func_convert_path_msys_to_w32 ()
 {
 # func_to_host_path_result.
 func_convert_path_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from ARG.  MSYS
     # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from ARG.  MSYS
     # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
@@ -1849,7 +3032,7 @@ func_convert_path_msys_to_w32 ()
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1863,8 +3046,9 @@ func_convert_path_msys_to_w32 ()
 # func_to_host_file_result.
 func_convert_path_cygwin_to_w32 ()
 {
 # func_to_host_file_result.
 func_convert_path_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
@@ -1883,14 +3067,15 @@ func_convert_path_cygwin_to_w32 ()
 # a working winepath.  Returns result in func_to_host_file_result.
 func_convert_path_nix_to_w32 ()
 {
 # a working winepath.  Returns result in func_to_host_file_result.
 func_convert_path_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1904,15 +3089,16 @@ func_convert_path_nix_to_w32 ()
 # Returns result in func_to_host_file_result.
 func_convert_path_msys_to_cygwin ()
 {
 # Returns result in func_to_host_file_result.
 func_convert_path_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1927,8 +3113,9 @@ func_convert_path_msys_to_cygwin ()
 # func_to_host_file_result.
 func_convert_path_nix_to_cygwin ()
 {
 # func_to_host_file_result.
 func_convert_path_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from
     # ARG. msys behavior is inconsistent here, cygpath turns them
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from
     # ARG. msys behavior is inconsistent here, cygpath turns them
@@ -1937,7 +3124,7 @@ func_convert_path_nix_to_cygwin ()
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1946,13 +3133,31 @@ func_convert_path_nix_to_cygwin ()
 # end func_convert_path_nix_to_cygwin
 
 
 # end func_convert_path_nix_to_cygwin
 
 
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[    ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([      ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
 # func_mode_compile arg...
 func_mode_compile ()
 {
-    $opt_debug
+    $debug_cmd
+
     # Get the compilation command and the source file.
     base_compile=
     # Get the compilation command and the source file.
     base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
     suppress_opt=yes
     suppress_output=
     arg_mode=normal
     suppress_opt=yes
     suppress_output=
     arg_mode=normal
@@ -1965,12 +3170,12 @@ func_mode_compile ()
       case $arg_mode in
       arg  )
        # do not "continue".  Instead, add this to base_compile
       case $arg_mode in
       arg  )
        # do not "continue".  Instead, add this to base_compile
-       lastarg="$arg"
+       lastarg=$arg
        arg_mode=normal
        ;;
 
       target )
        arg_mode=normal
        ;;
 
       target )
-       libobj="$arg"
+       libobj=$arg
        arg_mode=normal
        continue
        ;;
        arg_mode=normal
        continue
        ;;
@@ -1980,7 +3185,7 @@ func_mode_compile ()
        case $arg in
        -o)
          test -n "$libobj" && \
        case $arg in
        -o)
          test -n "$libobj" && \
-           func_fatal_error "you cannot specify \`-o' more than once"
+           func_fatal_error "you cannot specify '-o' more than once"
          arg_mode=target
          continue
          ;;
          arg_mode=target
          continue
          ;;
@@ -2009,12 +3214,12 @@ func_mode_compile ()
          func_stripname '-Wc,' '' "$arg"
          args=$func_stripname_result
          lastarg=
          func_stripname '-Wc,' '' "$arg"
          args=$func_stripname_result
          lastarg=
-         save_ifs="$IFS"; IFS=','
+         save_ifs=$IFS; IFS=,
          for arg in $args; do
          for arg in $args; do
-           IFS="$save_ifs"
+           IFS=$save_ifs
            func_append_quoted lastarg "$arg"
          done
            func_append_quoted lastarg "$arg"
          done
-         IFS="$save_ifs"
+         IFS=$save_ifs
          func_stripname ' ' '' "$lastarg"
          lastarg=$func_stripname_result
 
          func_stripname ' ' '' "$lastarg"
          lastarg=$func_stripname_result
 
@@ -2027,8 +3232,8 @@ func_mode_compile ()
          # Accept the current argument as the source file.
          # The previous "srcfile" becomes the current argument.
          #
          # Accept the current argument as the source file.
          # The previous "srcfile" becomes the current argument.
          #
-         lastarg="$srcfile"
-         srcfile="$arg"
+         lastarg=$srcfile
+         srcfile=$arg
          ;;
        esac  #  case $arg
        ;;
          ;;
        esac  #  case $arg
        ;;
@@ -2043,13 +3248,13 @@ func_mode_compile ()
       func_fatal_error "you must specify an argument for -Xcompile"
       ;;
     target)
       func_fatal_error "you must specify an argument for -Xcompile"
       ;;
     target)
-      func_fatal_error "you must specify a target with \`-o'"
+      func_fatal_error "you must specify a target with '-o'"
       ;;
     *)
       # Get the name of the library object.
       test -z "$libobj" && {
        func_basename "$srcfile"
       ;;
     *)
       # Get the name of the library object.
       test -z "$libobj" && {
        func_basename "$srcfile"
-       libobj="$func_basename_result"
+       libobj=$func_basename_result
       }
       ;;
     esac
       }
       ;;
     esac
@@ -2069,7 +3274,7 @@ func_mode_compile ()
     case $libobj in
     *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
     *)
     case $libobj in
     *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
     *)
-      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      func_fatal_error "cannot determine name of library object from '$libobj'"
       ;;
     esac
 
       ;;
     esac
 
@@ -2078,8 +3283,8 @@ func_mode_compile ()
     for arg in $later; do
       case $arg in
       -shared)
     for arg in $later; do
       case $arg in
       -shared)
-       test "$build_libtool_libs" != yes && \
-         func_fatal_configuration "can not build a shared library"
+       test yes = "$build_libtool_libs" \
+         || func_fatal_configuration "cannot build a shared library"
        build_old_libs=no
        continue
        ;;
        build_old_libs=no
        continue
        ;;
@@ -2105,17 +3310,17 @@ func_mode_compile ()
     func_quote_for_eval "$libobj"
     test "X$libobj" != "X$func_quote_for_eval_result" \
       && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
     func_quote_for_eval "$libobj"
     test "X$libobj" != "X$func_quote_for_eval_result" \
       && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
-      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+      && func_warning "libobj name '$libobj' may not contain shell special characters."
     func_dirname_and_basename "$obj" "/" ""
     func_dirname_and_basename "$obj" "/" ""
-    objname="$func_basename_result"
-    xdir="$func_dirname_result"
-    lobj=${xdir}$objdir/$objname
+    objname=$func_basename_result
+    xdir=$func_dirname_result
+    lobj=$xdir$objdir/$objname
 
     test -z "$base_compile" && \
       func_fatal_help "you must specify a compilation command"
 
     # Delete any leftover library objects.
 
     test -z "$base_compile" && \
       func_fatal_help "you must specify a compilation command"
 
     # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       removelist="$obj $lobj $libobj ${libobj}T"
     else
       removelist="$lobj $libobj ${libobj}T"
       removelist="$obj $lobj $libobj ${libobj}T"
     else
       removelist="$lobj $libobj ${libobj}T"
@@ -2127,16 +3332,16 @@ func_mode_compile ()
       pic_mode=default
       ;;
     esac
       pic_mode=default
       ;;
     esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
       # non-PIC code in shared libraries is not supported
       pic_mode=default
     fi
 
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
       # non-PIC code in shared libraries is not supported
       pic_mode=default
     fi
 
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
     else
       output_obj=
       need_locks=no
     else
       output_obj=
       need_locks=no
@@ -2145,12 +3350,12 @@ func_mode_compile ()
 
     # Lock this critical section if it is needed
     # We use this script file to make the link, it avoids creating a new file
 
     # Lock this critical section if it is needed
     # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
+    if test yes = "$need_locks"; then
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
        func_echo "Waiting for $lockfile to be removed"
        sleep 2
       done
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
        func_echo "Waiting for $lockfile to be removed"
        sleep 2
       done
-    elif test "$need_locks" = warn; then
+    elif test warn = "$need_locks"; then
       if test -f "$lockfile"; then
        $ECHO "\
 *** ERROR, $lockfile exists and contains:
       if test -f "$lockfile"; then
        $ECHO "\
 *** ERROR, $lockfile exists and contains:
@@ -2158,7 +3363,7 @@ func_mode_compile ()
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2180,11 +3385,11 @@ compiler."
     qsrcfile=$func_quote_for_eval_result
 
     # Only build a PIC object if we are building libtool libraries.
     qsrcfile=$func_quote_for_eval_result
 
     # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       # Without this assignment, base_compile gets emptied.
       fbsd_hideous_sh_bug=$base_compile
 
       # Without this assignment, base_compile gets emptied.
       fbsd_hideous_sh_bug=$base_compile
 
-      if test "$pic_mode" != no; then
+      if test no != "$pic_mode"; then
        command="$base_compile $qsrcfile $pic_flag"
       else
        # Don't build PIC code
        command="$base_compile $qsrcfile $pic_flag"
       else
        # Don't build PIC code
@@ -2201,7 +3406,7 @@ compiler."
       func_show_eval_locale "$command" \
           'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
 
       func_show_eval_locale "$command" \
           'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
@@ -2212,7 +3417,7 @@ $srcfile
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2228,20 +3433,20 @@ compiler."
       fi
 
       # Allow error messages only from the first compilation.
       fi
 
       # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
+      if test yes = "$suppress_opt"; then
        suppress_output=' >/dev/null 2>&1'
       fi
     fi
 
     # Only build a position-dependent object if we build old libraries.
        suppress_output=' >/dev/null 2>&1'
       fi
     fi
 
     # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; then
        # Don't build PIC code
        command="$base_compile $qsrcfile$pie_flag"
       else
        command="$base_compile $qsrcfile $pic_flag"
       fi
        # Don't build PIC code
        command="$base_compile $qsrcfile$pie_flag"
       else
        command="$base_compile $qsrcfile $pic_flag"
       fi
-      if test "$compiler_c_o" = yes; then
+      if test yes = "$compiler_c_o"; then
        func_append command " -o $obj"
       fi
 
        func_append command " -o $obj"
       fi
 
@@ -2250,7 +3455,7 @@ compiler."
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
@@ -2261,7 +3466,7 @@ $srcfile
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2281,7 +3486,7 @@ compiler."
       func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
 
       # Unlock the critical section if it was locked
       func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
 
       # Unlock the critical section if it was locked
-      if test "$need_locks" != no; then
+      if test no != "$need_locks"; then
        removelist=$lockfile
         $RM "$lockfile"
       fi
        removelist=$lockfile
         $RM "$lockfile"
       fi
@@ -2291,7 +3496,7 @@ compiler."
 }
 
 $opt_help || {
 }
 
 $opt_help || {
-  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 }
 
 func_mode_help ()
@@ -2311,7 +3516,7 @@ func_mode_help ()
 Remove files from the build directory.
 
 RM is the name of the program to use to delete files associated with each FILE
 Remove files from the build directory.
 
 RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
 to RM.
 
 If FILE is a libtool library, object or program, all the files associated
 to RM.
 
 If FILE is a libtool library, object or program, all the files associated
@@ -2330,16 +3535,16 @@ This mode accepts the following additional options:
   -no-suppress      do not suppress compiler output for multiple passes
   -prefer-pic       try to build PIC objects only
   -prefer-non-pic   try to build non-PIC objects only
   -no-suppress      do not suppress compiler output for multiple passes
   -prefer-pic       try to build PIC objects only
   -prefer-non-pic   try to build non-PIC objects only
-  -shared           do not build a \`.o' file suitable for static linking
-  -static           only build a \`.o' file suitable for static linking
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
   -Wc,FLAG          pass FLAG directly to the compiler
 
   -Wc,FLAG          pass FLAG directly to the compiler
 
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
 from the given SOURCEFILE.
 
 The output file name is determined by removing the directory component from
 from the given SOURCEFILE.
 
 The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
         ;;
 
       execute)
         ;;
 
       execute)
@@ -2352,7 +3557,7 @@ This mode accepts the following additional options:
 
   -dlopen FILE      add the directory containing FILE to the library path
 
 
   -dlopen FILE      add the directory containing FILE to the library path
 
-This mode sets the library path environment variable according to \`-dlopen'
+This mode sets the library path environment variable according to '-dlopen'
 flags.
 
 If any of the ARGS are libtool executable wrappers, then they are translated
 flags.
 
 If any of the ARGS are libtool executable wrappers, then they are translated
@@ -2371,7 +3576,7 @@ Complete the installation of libtool libraries.
 Each LIBDIR is a directory that contains libtool libraries.
 
 The commands that this mode executes may require superuser privileges.  Use
 Each LIBDIR is a directory that contains libtool libraries.
 
 The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
+the '--dry-run' option if you just want to see what would be executed."
         ;;
 
       install)
         ;;
 
       install)
@@ -2381,7 +3586,7 @@ the \`--dry-run' option if you just want to see what would be executed."
 Install executables or libraries.
 
 INSTALL-COMMAND is the installation command.  The first component should be
 Install executables or libraries.
 
 INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
+either the 'install' or 'cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
 
 The following components of INSTALL-COMMAND are treated specially:
 
@@ -2407,7 +3612,7 @@ The following components of LINK-COMMAND are treated specially:
   -avoid-version    do not add a version suffix if possible
   -bindir BINDIR    specify path to binaries directory (for systems where
                     libraries must be found in the PATH setting at runtime)
   -avoid-version    do not add a version suffix if possible
   -bindir BINDIR    specify path to binaries directory (for systems where
                     libraries must be found in the PATH setting at runtime)
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
   -export-symbols SYMFILE
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
   -export-symbols SYMFILE
@@ -2441,20 +3646,20 @@ The following components of LINK-COMMAND are treated specially:
   -Xlinker FLAG     pass linker-specific FLAG directly to the linker
   -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
   -Xlinker FLAG     pass linker-specific FLAG directly to the linker
   -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
-All other options (arguments beginning with \`-') are ignored.
+All other options (arguments beginning with '-') are ignored.
 
 
-Every other argument is treated as a filename.  Files ending in \`.la' are
+Every other argument is treated as a filename.  Files ending in '.la' are
 treated as uninstalled libtool libraries, other files are standard or library
 object files.
 
 treated as uninstalled libtool libraries, other files are standard or library
 object files.
 
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
 required, except when creating a convenience library.
 
 required, except when creating a convenience library.
 
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
 
 
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
 is created, otherwise an executable program is created."
         ;;
 
 is created, otherwise an executable program is created."
         ;;
 
@@ -2465,7 +3670,7 @@ is created, otherwise an executable program is created."
 Remove libraries from an installation directory.
 
 RM is the name of the program to use to delete files associated with each FILE
 Remove libraries from an installation directory.
 
 RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
 to RM.
 
 If FILE is a libtool library, all the files associated with it are deleted.
 to RM.
 
 If FILE is a libtool library, all the files associated with it are deleted.
@@ -2473,17 +3678,17 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$opt_mode'"
+        func_fatal_help "invalid operation mode '$opt_mode'"
         ;;
     esac
 
     echo
         ;;
     esac
 
     echo
-    $ECHO "Try \`$progname --help' for more information about other modes."
+    $ECHO "Try '$progname --help' for more information about other modes."
 }
 
 # Now that we've collected a possible --mode arg, show help if necessary
 if $opt_help; then
 }
 
 # Now that we've collected a possible --mode arg, show help if necessary
 if $opt_help; then
-  if test "$opt_help" = :; then
+  if test : = "$opt_help"; then
     func_mode_help
   else
     {
     func_mode_help
   else
     {
@@ -2516,16 +3721,17 @@ fi
 # func_mode_execute arg...
 func_mode_execute ()
 {
 # func_mode_execute arg...
 func_mode_execute ()
 {
-    $opt_debug
+    $debug_cmd
+
     # The first argument is the command name.
     # The first argument is the command name.
-    cmd="$nonopt"
+    cmd=$nonopt
     test -z "$cmd" && \
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
     for file in $opt_dlopen; do
       test -f "$file" \
     test -z "$cmd" && \
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
     for file in $opt_dlopen; do
       test -f "$file" \
-       || func_fatal_help "\`$file' is not a file"
+       || func_fatal_help "'$file' is not a file"
 
       dir=
       case $file in
 
       dir=
       case $file in
@@ -2535,7 +3741,7 @@ func_mode_execute ()
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
-         || func_fatal_help "\`$lib' is not a valid libtool archive"
+         || func_fatal_help "'$lib' is not a valid libtool archive"
 
        # Read the libtool library.
        dlname=
 
        # Read the libtool library.
        dlname=
@@ -2546,18 +3752,18 @@ func_mode_execute ()
        if test -z "$dlname"; then
          # Warn if it was a shared library.
          test -n "$library_names" && \
        if test -z "$dlname"; then
          # Warn if it was a shared library.
          test -n "$library_names" && \
-           func_warning "\`$file' was not linked with \`-export-dynamic'"
+           func_warning "'$file' was not linked with '-export-dynamic'"
          continue
        fi
 
        func_dirname "$file" "" "."
          continue
        fi
 
        func_dirname "$file" "" "."
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
 
        if test -f "$dir/$objdir/$dlname"; then
          func_append dir "/$objdir"
        else
          if test ! -f "$dir/$dlname"; then
 
        if test -f "$dir/$objdir/$dlname"; then
          func_append dir "/$objdir"
        else
          if test ! -f "$dir/$dlname"; then
-           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+           func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
          fi
        fi
        ;;
          fi
        fi
        ;;
@@ -2565,18 +3771,18 @@ func_mode_execute ()
       *.lo)
        # Just add the directory containing the .lo file.
        func_dirname "$file" "" "."
       *.lo)
        # Just add the directory containing the .lo file.
        func_dirname "$file" "" "."
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
        ;;
 
       *)
        ;;
 
       *)
-       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
        continue
        ;;
       esac
 
       # Get the absolute pathname.
       absdir=`cd "$dir" && pwd`
        continue
        ;;
       esac
 
       # Get the absolute pathname.
       absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
+      test -n "$absdir" && dir=$absdir
 
       # Now add the directory to shlibpath_var.
       if eval "test -z \"\$$shlibpath_var\""; then
 
       # Now add the directory to shlibpath_var.
       if eval "test -z \"\$$shlibpath_var\""; then
@@ -2588,7 +3794,7 @@ func_mode_execute ()
 
     # This variable tells wrapper scripts just to set shlibpath_var
     # rather than running their programs.
 
     # This variable tells wrapper scripts just to set shlibpath_var
     # rather than running their programs.
-    libtool_execute_magic="$magic"
+    libtool_execute_magic=$magic
 
     # Check if any of the arguments is a wrapper script.
     args=
 
     # Check if any of the arguments is a wrapper script.
     args=
@@ -2601,12 +3807,12 @@ func_mode_execute ()
        if func_ltwrapper_script_p "$file"; then
          func_source "$file"
          # Transform arg to wrapped name.
        if func_ltwrapper_script_p "$file"; then
          func_source "$file"
          # Transform arg to wrapped name.
-         file="$progdir/$program"
+         file=$progdir/$program
        elif func_ltwrapper_executable_p "$file"; then
          func_ltwrapper_scriptname "$file"
          func_source "$func_ltwrapper_scriptname_result"
          # Transform arg to wrapped name.
        elif func_ltwrapper_executable_p "$file"; then
          func_ltwrapper_scriptname "$file"
          func_source "$func_ltwrapper_scriptname_result"
          # Transform arg to wrapped name.
-         file="$progdir/$program"
+         file=$progdir/$program
        fi
        ;;
       esac
        fi
        ;;
       esac
@@ -2614,7 +3820,15 @@ func_mode_execute ()
       func_append_quoted args "$file"
     done
 
       func_append_quoted args "$file"
     done
 
-    if test "X$opt_dry_run" = Xfalse; then
+    if $opt_dry_run; then
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    else
       if test -n "$shlibpath_var"; then
        # Export the shlibpath_var.
        eval "export $shlibpath_var"
       if test -n "$shlibpath_var"; then
        # Export the shlibpath_var.
        eval "export $shlibpath_var"
@@ -2631,25 +3845,18 @@ func_mode_execute ()
       done
 
       # Now prepare to actually exec the command.
       done
 
       # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-       echo "export $shlibpath_var"
-      fi
-      $ECHO "$cmd$args"
-      exit $EXIT_SUCCESS
+      exec_cmd=\$cmd$args
     fi
 }
 
     fi
 }
 
-test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
-    $opt_debug
+    $debug_cmd
+
     libs=
     libdirs=
     admincmds=
     libs=
     libdirs=
     admincmds=
@@ -2663,11 +3870,11 @@ func_mode_finish ()
        if func_lalib_unsafe_p "$opt"; then
          func_append libs " $opt"
        else
        if func_lalib_unsafe_p "$opt"; then
          func_append libs " $opt"
        else
-         func_warning "\`$opt' is not a valid libtool archive"
+         func_warning "'$opt' is not a valid libtool archive"
        fi
 
       else
        fi
 
       else
-       func_fatal_error "invalid argument \`$opt'"
+       func_fatal_error "invalid argument '$opt'"
       fi
     done
 
       fi
     done
 
@@ -2682,12 +3889,12 @@ func_mode_finish ()
       # Remove sysroot references
       if $opt_dry_run; then
         for lib in $libs; do
       # Remove sysroot references
       if $opt_dry_run; then
         for lib in $libs; do
-          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
         done
       else
         tmpdir=`func_mktempdir`
         for lib in $libs; do
         done
       else
         tmpdir=`func_mktempdir`
         for lib in $libs; do
-         sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+         sed -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
            > $tmpdir/tmp-la
          mv -f $tmpdir/tmp-la $lib
        done
            > $tmpdir/tmp-la
          mv -f $tmpdir/tmp-la $lib
        done
@@ -2712,7 +3919,7 @@ func_mode_finish ()
     fi
 
     # Exit here if they wanted silent mode.
     fi
 
     # Exit here if they wanted silent mode.
-    $opt_silent && exit $EXIT_SUCCESS
+    $opt_quiet && exit $EXIT_SUCCESS
 
     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       echo "----------------------------------------------------------------------"
 
     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       echo "----------------------------------------------------------------------"
@@ -2723,27 +3930,27 @@ func_mode_finish ()
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
-      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
-       echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+       echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
        echo "     during execution"
       fi
       if test -n "$runpath_var"; then
        echo "     during execution"
       fi
       if test -n "$runpath_var"; then
-       echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+       echo "   - add LIBDIR to the '$runpath_var' environment variable"
        echo "     during linking"
       fi
       if test -n "$hardcode_libdir_flag_spec"; then
        libdir=LIBDIR
        eval flag=\"$hardcode_libdir_flag_spec\"
 
        echo "     during linking"
       fi
       if test -n "$hardcode_libdir_flag_spec"; then
        libdir=LIBDIR
        eval flag=\"$hardcode_libdir_flag_spec\"
 
-       $ECHO "   - use the \`$flag' linker flag"
+       $ECHO "   - use the '$flag' linker flag"
       fi
       if test -n "$admincmds"; then
        $ECHO "   - have your system administrator run these commands:$admincmds"
       fi
       if test -f /etc/ld.so.conf; then
       fi
       if test -n "$admincmds"; then
        $ECHO "   - have your system administrator run these commands:$admincmds"
       fi
       if test -f /etc/ld.so.conf; then
-       echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+       echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
       fi
       echo
 
       fi
       echo
 
@@ -2762,18 +3969,20 @@ func_mode_finish ()
     exit $EXIT_SUCCESS
 }
 
     exit $EXIT_SUCCESS
 }
 
-test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
 func_mode_install ()
 {
 
 
 # func_mode_install arg...
 func_mode_install ()
 {
-    $opt_debug
+    $debug_cmd
+
     # There may be an optional sh(1) argument at the beginning of
     # install_prog (especially on Windows NT).
     # There may be an optional sh(1) argument at the beginning of
     # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
        # Allow the use of GNU shtool's install command.
        # Allow the use of GNU shtool's install command.
-       case $nonopt in *shtool*) :;; *) false;; esac; then
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -2800,7 +4009,7 @@ func_mode_install ()
     opts=
     prev=
     install_type=
     opts=
     prev=
     install_type=
-    isdir=no
+    isdir=false
     stripme=
     no_mode=:
     for arg
     stripme=
     no_mode=:
     for arg
@@ -2813,7 +4022,7 @@ func_mode_install ()
       fi
 
       case $arg in
       fi
 
       case $arg in
-      -d) isdir=yes ;;
+      -d) isdir=: ;;
       -f)
        if $install_cp; then :; else
          prev=$arg
       -f)
        if $install_cp; then :; else
          prev=$arg
@@ -2831,7 +4040,7 @@ func_mode_install ()
       *)
        # If the previous option needed an argument, then skip it.
        if test -n "$prev"; then
       *)
        # If the previous option needed an argument, then skip it.
        if test -n "$prev"; then
-         if test "x$prev" = x-m && test -n "$install_override_mode"; then
+         if test X-m = "X$prev" && test -n "$install_override_mode"; then
            arg2=$install_override_mode
            no_mode=false
          fi
            arg2=$install_override_mode
            no_mode=false
          fi
@@ -2856,7 +4065,7 @@ func_mode_install ()
       func_fatal_help "you must specify an install program"
 
     test -n "$prev" && \
       func_fatal_help "you must specify an install program"
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prev' option requires an argument"
+      func_fatal_help "the '$prev' option requires an argument"
 
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
 
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
@@ -2878,19 +4087,19 @@ func_mode_install ()
     dest=$func_stripname_result
 
     # Check to see that the destination is a directory.
     dest=$func_stripname_result
 
     # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
       destname=
     else
       func_dirname_and_basename "$dest" "" "."
       destname=
     else
       func_dirname_and_basename "$dest" "" "."
-      destdir="$func_dirname_result"
-      destname="$func_basename_result"
+      destdir=$func_dirname_result
+      destname=$func_basename_result
 
       # Not a directory, so check to see that there is only one file specified.
       set dummy $files; shift
       test "$#" -gt 1 && \
 
       # Not a directory, so check to see that there is only one file specified.
       set dummy $files; shift
       test "$#" -gt 1 && \
-       func_fatal_help "\`$dest' is not a directory"
+       func_fatal_help "'$dest' is not a directory"
     fi
     case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
     fi
     case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -2899,7 +4108,7 @@ func_mode_install ()
        case $file in
        *.lo) ;;
        *)
        case $file in
        *.lo) ;;
        *)
-         func_fatal_help "\`$destdir' must be an absolute directory name"
+         func_fatal_help "'$destdir' must be an absolute directory name"
          ;;
        esac
       done
          ;;
        esac
       done
@@ -2908,7 +4117,7 @@ func_mode_install ()
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     staticlibs=
     future_libdirs=
 
     staticlibs=
     future_libdirs=
@@ -2928,7 +4137,7 @@ func_mode_install ()
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$file" \
-         || func_fatal_help "\`$file' is not a valid libtool archive"
+         || func_fatal_help "'$file' is not a valid libtool archive"
 
        library_names=
        old_library=
 
        library_names=
        old_library=
@@ -2950,7 +4159,7 @@ func_mode_install ()
        fi
 
        func_dirname "$file" "/" ""
        fi
 
        func_dirname "$file" "/" ""
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
        func_append dir "$objdir"
 
        if test -n "$relink_command"; then
        func_append dir "$objdir"
 
        if test -n "$relink_command"; then
@@ -2964,7 +4173,7 @@ func_mode_install ()
          # are installed into $libdir/../bin (currently, that works fine)
          # but it's something to keep an eye on.
          test "$inst_prefix_dir" = "$destdir" && \
          # are installed into $libdir/../bin (currently, that works fine)
          # but it's something to keep an eye on.
          test "$inst_prefix_dir" = "$destdir" && \
-           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+           func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
 
          if test -n "$inst_prefix_dir"; then
            # Stick the inst_prefix_dir data into the link command.
 
          if test -n "$inst_prefix_dir"; then
            # Stick the inst_prefix_dir data into the link command.
@@ -2973,29 +4182,29 @@ func_mode_install ()
            relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
          fi
 
            relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
          fi
 
-         func_warning "relinking \`$file'"
+         func_warning "relinking '$file'"
          func_show_eval "$relink_command" \
          func_show_eval "$relink_command" \
-           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+           'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
        fi
 
        # See the names of the shared library.
        set dummy $library_names; shift
        if test -n "$1"; then
        fi
 
        # See the names of the shared library.
        set dummy $library_names; shift
        if test -n "$1"; then
-         realname="$1"
+         realname=$1
          shift
 
          shift
 
-         srcname="$realname"
-         test -n "$relink_command" && srcname="$realname"T
+         srcname=$realname
+         test -n "$relink_command" && srcname=${realname}T
 
          # Install the shared library and build the symlinks.
          func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
              'exit $?'
 
          # Install the shared library and build the symlinks.
          func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
              'exit $?'
-         tstripme="$stripme"
+         tstripme=$stripme
          case $host_os in
          cygwin* | mingw* | pw32* | cegcc*)
            case $realname in
            *.dll.a)
          case $host_os in
          cygwin* | mingw* | pw32* | cegcc*)
            case $realname in
            *.dll.a)
-             tstripme=""
+             tstripme=
              ;;
            esac
            ;;
              ;;
            esac
            ;;
@@ -3006,7 +4215,7 @@ func_mode_install ()
 
          if test "$#" -gt 0; then
            # Delete the old symlinks, and create new ones.
 
          if test "$#" -gt 0; then
            # Delete the old symlinks, and create new ones.
-           # Try `ln -sf' first, because the `ln' binary might depend on
+           # Try 'ln -sf' first, because the 'ln' binary might depend on
            # the symlink we replace!  Solaris /bin/ln does not understand -f,
            # so we also need to try rm && ln -s.
            for linkname
            # the symlink we replace!  Solaris /bin/ln does not understand -f,
            # so we also need to try rm && ln -s.
            for linkname
@@ -3017,14 +4226,14 @@ func_mode_install ()
          fi
 
          # Do each command in the postinstall commands.
          fi
 
          # Do each command in the postinstall commands.
-         lib="$destdir/$realname"
+         lib=$destdir/$realname
          func_execute_cmds "$postinstall_cmds" 'exit $?'
        fi
 
        # Install the pseudo-library for information purposes.
        func_basename "$file"
          func_execute_cmds "$postinstall_cmds" 'exit $?'
        fi
 
        # Install the pseudo-library for information purposes.
        func_basename "$file"
-       name="$func_basename_result"
-       instname="$dir/$name"i
+       name=$func_basename_result
+       instname=$dir/${name}i
        func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
        # Maybe install the static library, too.
        func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
        # Maybe install the static library, too.
@@ -3036,11 +4245,11 @@ func_mode_install ()
 
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
 
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
-         destfile="$destdir/$destname"
+         destfile=$destdir/$destname
        else
          func_basename "$file"
        else
          func_basename "$file"
-         destfile="$func_basename_result"
-         destfile="$destdir/$destfile"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
        fi
 
        # Deduce the name of the destination old-style object file.
        fi
 
        # Deduce the name of the destination old-style object file.
@@ -3050,11 +4259,11 @@ func_mode_install ()
          staticdest=$func_lo2o_result
          ;;
        *.$objext)
          staticdest=$func_lo2o_result
          ;;
        *.$objext)
-         staticdest="$destfile"
+         staticdest=$destfile
          destfile=
          ;;
        *)
          destfile=
          ;;
        *)
-         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         func_fatal_help "cannot copy a libtool object to '$destfile'"
          ;;
        esac
 
          ;;
        esac
 
@@ -3063,7 +4272,7 @@ func_mode_install ()
          func_show_eval "$install_prog $file $destfile" 'exit $?'
 
        # Install the old object if enabled.
          func_show_eval "$install_prog $file $destfile" 'exit $?'
 
        # Install the old object if enabled.
-       if test "$build_old_libs" = yes; then
+       if test yes = "$build_old_libs"; then
          # Deduce the name of the old-style object file.
          func_lo2o "$file"
          staticobj=$func_lo2o_result
          # Deduce the name of the old-style object file.
          func_lo2o "$file"
          staticobj=$func_lo2o_result
@@ -3075,23 +4284,23 @@ func_mode_install ()
       *)
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
       *)
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
-         destfile="$destdir/$destname"
+         destfile=$destdir/$destname
        else
          func_basename "$file"
        else
          func_basename "$file"
-         destfile="$func_basename_result"
-         destfile="$destdir/$destfile"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
        fi
 
        # If the file is missing, and there is a .exe on the end, strip it
        # because it is most likely a libtool script we actually want to
        # install
        fi
 
        # If the file is missing, and there is a .exe on the end, strip it
        # because it is most likely a libtool script we actually want to
        # install
-       stripped_ext=""
+       stripped_ext=
        case $file in
          *.exe)
            if test ! -f "$file"; then
              func_stripname '' '.exe' "$file"
              file=$func_stripname_result
        case $file in
          *.exe)
            if test ! -f "$file"; then
              func_stripname '' '.exe' "$file"
              file=$func_stripname_result
-             stripped_ext=".exe"
+             stripped_ext=.exe
            fi
            ;;
        esac
            fi
            ;;
        esac
@@ -3119,19 +4328,19 @@ func_mode_install ()
 
          # Check the variables that should have been set.
          test -z "$generated_by_libtool_version" && \
 
          # Check the variables that should have been set.
          test -z "$generated_by_libtool_version" && \
-           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+           func_fatal_error "invalid libtool wrapper script '$wrapper'"
 
 
-         finalize=yes
+         finalize=:
          for lib in $notinst_deplibs; do
            # Check to see that each library is installed.
            libdir=
            if test -f "$lib"; then
              func_source "$lib"
            fi
          for lib in $notinst_deplibs; do
            # Check to see that each library is installed.
            libdir=
            if test -f "$lib"; then
              func_source "$lib"
            fi
-           libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
            if test -n "$libdir" && test ! -f "$libfile"; then
            if test -n "$libdir" && test ! -f "$libfile"; then
-             func_warning "\`$lib' has not been installed in \`$libdir'"
-             finalize=no
+             func_warning "'$lib' has not been installed in '$libdir'"
+             finalize=false
            fi
          done
 
            fi
          done
 
@@ -3139,29 +4348,29 @@ func_mode_install ()
          func_source "$wrapper"
 
          outputname=
          func_source "$wrapper"
 
          outputname=
-         if test "$fast_install" = no && test -n "$relink_command"; then
+         if test no = "$fast_install" && test -n "$relink_command"; then
            $opt_dry_run || {
            $opt_dry_run || {
-             if test "$finalize" = yes; then
+             if $finalize; then
                tmpdir=`func_mktempdir`
                func_basename "$file$stripped_ext"
                tmpdir=`func_mktempdir`
                func_basename "$file$stripped_ext"
-               file="$func_basename_result"
-               outputname="$tmpdir/$file"
+               file=$func_basename_result
+               outputname=$tmpdir/$file
                # Replace the output file specification.
                relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
                # Replace the output file specification.
                relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
-               $opt_silent || {
+               $opt_quiet || {
                  func_quote_for_expand "$relink_command"
                  eval "func_echo $func_quote_for_expand_result"
                }
                if eval "$relink_command"; then :
                  else
                  func_quote_for_expand "$relink_command"
                  eval "func_echo $func_quote_for_expand_result"
                }
                if eval "$relink_command"; then :
                  else
-                 func_error "error: relink \`$file' with the above command before installing it"
+                 func_error "error: relink '$file' with the above command before installing it"
                  $opt_dry_run || ${RM}r "$tmpdir"
                  continue
                fi
                  $opt_dry_run || ${RM}r "$tmpdir"
                  continue
                fi
-               file="$outputname"
+               file=$outputname
              else
              else
-               func_warning "cannot relink \`$file'"
+               func_warning "cannot relink '$file'"
              fi
            }
          else
              fi
            }
          else
@@ -3198,10 +4407,10 @@ func_mode_install ()
 
     for file in $staticlibs; do
       func_basename "$file"
 
     for file in $staticlibs; do
       func_basename "$file"
-      name="$func_basename_result"
+      name=$func_basename_result
 
       # Set up the ranlib parameters.
 
       # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
+      oldlib=$destdir/$name
       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
       tool_oldlib=$func_to_tool_file_result
 
       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
       tool_oldlib=$func_to_tool_file_result
 
@@ -3216,18 +4425,18 @@ func_mode_install ()
     done
 
     test -n "$future_libdirs" && \
     done
 
     test -n "$future_libdirs" && \
-      func_warning "remember to run \`$progname --finish$future_libdirs'"
+      func_warning "remember to run '$progname --finish$future_libdirs'"
 
     if test -n "$current_libdirs"; then
       # Maybe just do a dry run.
       $opt_dry_run && current_libdirs=" -n$current_libdirs"
 
     if test -n "$current_libdirs"; then
       # Maybe just do a dry run.
       $opt_dry_run && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
     else
       exit $EXIT_SUCCESS
     fi
 }
 
     else
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$opt_mode" = install && func_mode_install ${1+"$@"}
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -3235,16 +4444,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"}
 # a dlpreopen symbol table.
 func_generate_dlsyms ()
 {
 # a dlpreopen symbol table.
 func_generate_dlsyms ()
 {
-    $opt_debug
-    my_outputname="$1"
-    my_originator="$2"
-    my_pic_p="${3-no}"
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
     my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
     my_dlsyms=
 
     my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
     my_dlsyms=
 
-    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
       if test -n "$NM" && test -n "$global_symbol_pipe"; then
       if test -n "$NM" && test -n "$global_symbol_pipe"; then
-       my_dlsyms="${my_outputname}S.c"
+       my_dlsyms=${my_outputname}S.c
       else
        func_error "not configured to extract global symbols from dlpreopened files"
       fi
       else
        func_error "not configured to extract global symbols from dlpreopened files"
       fi
@@ -3255,7 +4465,7 @@ func_generate_dlsyms ()
       "") ;;
       *.c)
        # Discover the nlist of each of the dlfiles.
       "") ;;
       *.c)
        # Discover the nlist of each of the dlfiles.
-       nlist="$output_objdir/${my_outputname}.nm"
+       nlist=$output_objdir/$my_outputname.nm
 
        func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
 
 
        func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
 
@@ -3263,34 +4473,36 @@ func_generate_dlsyms ()
        func_verbose "creating $output_objdir/$my_dlsyms"
 
        $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
        func_verbose "creating $output_objdir/$my_dlsyms"
 
        $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
-/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
 
 #ifdef __cplusplus
 extern \"C\" {
 #endif
 
 
 #ifdef __cplusplus
 extern \"C\" {
 #endif
 
-#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
 #endif
 
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
 #endif
 
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
 # define LT_DLSYM_CONST const
 #endif
 
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
 # define LT_DLSYM_CONST const
 #endif
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* External symbol declarations for the compiler. */\
 "
 
 /* External symbol declarations for the compiler. */\
 "
 
-       if test "$dlself" = yes; then
-         func_verbose "generating symbol list for \`$output'"
+       if test yes = "$dlself"; then
+         func_verbose "generating symbol list for '$output'"
 
          $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
 
          $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
@@ -3298,7 +4510,7 @@ extern \"C\" {
          progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
          for progfile in $progfiles; do
            func_to_tool_file "$progfile" func_convert_file_msys_to_w32
          progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
          for progfile in $progfiles; do
            func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-           func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+           func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
            $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
          done
 
            $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
          done
 
@@ -3318,10 +4530,10 @@ extern \"C\" {
 
          # Prepare the list of exported symbols
          if test -z "$export_symbols"; then
 
          # Prepare the list of exported symbols
          if test -z "$export_symbols"; then
-           export_symbols="$output_objdir/$outputname.exp"
+           export_symbols=$output_objdir/$outputname.exp
            $opt_dry_run || {
              $RM $export_symbols
            $opt_dry_run || {
              $RM $export_symbols
-             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
              case $host in
              *cygwin* | *mingw* | *cegcc* )
                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
              case $host in
              *cygwin* | *mingw* | *cegcc* )
                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
@@ -3331,7 +4543,7 @@ extern \"C\" {
            }
          else
            $opt_dry_run || {
            }
          else
            $opt_dry_run || {
-             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
              eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
              eval '$MV "$nlist"T "$nlist"'
              case $host in
              eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
              eval '$MV "$nlist"T "$nlist"'
              case $host in
@@ -3345,22 +4557,22 @@ extern \"C\" {
        fi
 
        for dlprefile in $dlprefiles; do
        fi
 
        for dlprefile in $dlprefiles; do
-         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_verbose "extracting global C symbols from '$dlprefile'"
          func_basename "$dlprefile"
          func_basename "$dlprefile"
-         name="$func_basename_result"
+         name=$func_basename_result
           case $host in
            *cygwin* | *mingw* | *cegcc* )
              # if an import library, we need to obtain dlname
              if func_win32_import_lib_p "$dlprefile"; then
                func_tr_sh "$dlprefile"
                eval "curr_lafile=\$libfile_$func_tr_sh_result"
           case $host in
            *cygwin* | *mingw* | *cegcc* )
              # if an import library, we need to obtain dlname
              if func_win32_import_lib_p "$dlprefile"; then
                func_tr_sh "$dlprefile"
                eval "curr_lafile=\$libfile_$func_tr_sh_result"
-               dlprefile_dlbasename=""
+               dlprefile_dlbasename=
                if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
                  # Use subshell, to avoid clobbering current variable values
                  dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
                if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
                  # Use subshell, to avoid clobbering current variable values
                  dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-                 if test -n "$dlprefile_dlname" ; then
+                 if test -n "$dlprefile_dlname"; then
                    func_basename "$dlprefile_dlname"
                    func_basename "$dlprefile_dlname"
-                   dlprefile_dlbasename="$func_basename_result"
+                   dlprefile_dlbasename=$func_basename_result
                  else
                    # no lafile. user explicitly requested -dlpreopen <import library>.
                    $sharedlib_from_linklib_cmd "$dlprefile"
                  else
                    # no lafile. user explicitly requested -dlpreopen <import library>.
                    $sharedlib_from_linklib_cmd "$dlprefile"
@@ -3368,7 +4580,7 @@ extern \"C\" {
                  fi
                fi
                $opt_dry_run || {
                  fi
                fi
                $opt_dry_run || {
-                 if test -n "$dlprefile_dlbasename" ; then
+                 if test -n "$dlprefile_dlbasename"; then
                    eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
                  else
                    func_warning "Could not compute DLL name from $name"
                    eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
                  else
                    func_warning "Could not compute DLL name from $name"
@@ -3424,6 +4636,11 @@ extern \"C\" {
            echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
          fi
 
            echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
          fi
 
+         func_show_eval '$RM "${nlist}I"'
+         if test -n "$global_symbol_to_import"; then
+           eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+         fi
+
          echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
          echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
@@ -3432,11 +4649,30 @@ typedef struct {
   void *address;
 } lt_dlsymlist;
 extern LT_DLSYM_CONST lt_dlsymlist
   void *address;
 } lt_dlsymlist;
 extern LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+           $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+           echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+         fi
+         echo >> "$output_objdir/$my_dlsyms" "\
 LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
-{\
-  { \"$my_originator\", (void *) 0 },"
+{ {\"$my_originator\", (void *) 0},"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+         fi
 
          case $need_lib_prefix in
          no)
 
          case $need_lib_prefix in
          no)
@@ -3478,9 +4714,7 @@ static const void *lt_preloaded_setup() {
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
          *)
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
          *)
-           if test "X$my_pic_p" != Xno; then
-             pic_flag_for_symtable=" $pic_flag"
-           fi
+           $my_pic_p && pic_flag_for_symtable=" $pic_flag"
            ;;
          esac
          ;;
            ;;
          esac
          ;;
@@ -3497,10 +4731,10 @@ static const void *lt_preloaded_setup() {
        func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
 
        # Clean up the generated files.
        func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
 
        # Clean up the generated files.
-       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
 
        # Transform the symbol file into the correct name.
 
        # Transform the symbol file into the correct name.
-       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       symfileobj=$output_objdir/${my_outputname}S.$objext
        case $host in
        *cygwin* | *mingw* | *cegcc* )
          if test -f "$output_objdir/$my_outputname.def"; then
        case $host in
        *cygwin* | *mingw* | *cegcc* )
          if test -f "$output_objdir/$my_outputname.def"; then
@@ -3518,7 +4752,7 @@ static const void *lt_preloaded_setup() {
        esac
        ;;
       *)
        esac
        ;;
       *)
-       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       func_fatal_error "unknown suffix for '$my_dlsyms'"
        ;;
       esac
     else
        ;;
       esac
     else
@@ -3532,6 +4766,32 @@ static const void *lt_preloaded_setup() {
     fi
 }
 
     fi
 }
 
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
 # func_win32_libid arg
 # return the library type of file 'arg'
 #
 # func_win32_libid arg
 # return the library type of file 'arg'
 #
@@ -3541,8 +4801,9 @@ static const void *lt_preloaded_setup() {
 # Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
 # Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
-  $opt_debug
-  win32_libid_type="unknown"
+  $debug_cmd
+
+  win32_libid_type=unknown
   win32_fileres=`file -L $1 2>/dev/null`
   case $win32_fileres in
   *ar\ archive\ import\ library*) # definitely import
   win32_fileres=`file -L $1 2>/dev/null`
   case $win32_fileres in
   *ar\ archive\ import\ library*) # definitely import
@@ -3552,16 +4813,29 @@ func_win32_libid ()
     # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
        $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
     # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
        $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-      func_to_tool_file "$1" func_convert_file_msys_to_w32
-      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
-       $SED -n -e '
+      case $nm_interface in
+      "MS dumpbin")
+       if func_cygming_ms_implib_p "$1" ||
+          func_cygming_gnu_implib_p "$1"
+       then
+         win32_nmres=import
+       else
+         win32_nmres=
+       fi
+       ;;
+      *)
+       func_to_tool_file "$1" func_convert_file_msys_to_w32
+       win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+         $SED -n -e '
            1,100{
                / I /{
            1,100{
                / I /{
-                   s,.*,import,
+                   s|.*|import|
                    p
                    q
                }
            }'`
                    p
                    q
                }
            }'`
+       ;;
+      esac
       case $win32_nmres in
       import*)  win32_libid_type="x86 archive import";;
       *)        win32_libid_type="x86 archive static";;
       case $win32_nmres in
       import*)  win32_libid_type="x86 archive import";;
       *)        win32_libid_type="x86 archive static";;
@@ -3593,7 +4867,8 @@ func_win32_libid ()
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib ()
 {
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib ()
 {
-  $opt_debug
+  $debug_cmd
+
   sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
 }
 
   sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
 }
 
@@ -3610,7 +4885,8 @@ func_cygming_dll_for_implib ()
 # specified import library.
 func_cygming_dll_for_implib_fallback_core ()
 {
 # specified import library.
 func_cygming_dll_for_implib_fallback_core ()
 {
-  $opt_debug
+  $debug_cmd
+
   match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
   $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
     $SED '/^Contents of section '"$match_literal"':/{
   match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
   $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
     $SED '/^Contents of section '"$match_literal"':/{
@@ -3646,8 +4922,8 @@ func_cygming_dll_for_implib_fallback_core ()
       /./p' |
     # we now have a list, one entry per line, of the stringified
     # contents of the appropriate section of all members of the
       /./p' |
     # we now have a list, one entry per line, of the stringified
     # contents of the appropriate section of all members of the
-    # archive which possess that section. Heuristic: eliminate
-    # all those which have a first or second character that is
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
     # a '.' (that is, objdump's representation of an unprintable
     # character.) This should work for all archives with less than
     # 0x302f exports -- but will fail for DLLs whose name actually
     # a '.' (that is, objdump's representation of an unprintable
     # character.) This should work for all archives with less than
     # 0x302f exports -- but will fail for DLLs whose name actually
@@ -3658,30 +4934,6 @@ func_cygming_dll_for_implib_fallback_core ()
     $SED -e '/^\./d;/^.\./d;q'
 }
 
     $SED -e '/^\./d;/^.\./d;q'
 }
 
-# func_cygming_gnu_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is a GNU/binutils-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_gnu_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-  test -n "$func_cygming_gnu_implib_tmp"
-}
-
-# func_cygming_ms_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is an MS-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_ms_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-  test -n "$func_cygming_ms_implib_tmp"
-}
-
 # func_cygming_dll_for_implib_fallback ARG
 # Platform-specific function to extract the
 # name of the DLL associated with the specified
 # func_cygming_dll_for_implib_fallback ARG
 # Platform-specific function to extract the
 # name of the DLL associated with the specified
@@ -3695,16 +4947,17 @@ func_cygming_ms_implib_p ()
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib_fallback ()
 {
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib_fallback ()
 {
-  $opt_debug
-  if func_cygming_gnu_implib_p "$1" ; then
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
     # binutils import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
     # binutils import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-  elif func_cygming_ms_implib_p "$1" ; then
+  elif func_cygming_ms_implib_p "$1"; then
     # ms-generated import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
   else
     # unknown
     # ms-generated import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
   else
     # unknown
-    sharedlib_from_linklib_result=""
+    sharedlib_from_linklib_result=
   fi
 }
 
   fi
 }
 
@@ -3712,10 +4965,11 @@ func_cygming_dll_for_implib_fallback ()
 # func_extract_an_archive dir oldlib
 func_extract_an_archive ()
 {
 # func_extract_an_archive dir oldlib
 func_extract_an_archive ()
 {
-    $opt_debug
-    f_ex_an_ar_dir="$1"; shift
-    f_ex_an_ar_oldlib="$1"
-    if test "$lock_old_archive_extraction" = yes; then
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
       lockfile=$f_ex_an_ar_oldlib.lock
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
        func_echo "Waiting for $lockfile to be removed"
       lockfile=$f_ex_an_ar_oldlib.lock
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
        func_echo "Waiting for $lockfile to be removed"
@@ -3724,7 +4978,7 @@ func_extract_an_archive ()
     fi
     func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
                   'stat=$?; rm -f "$lockfile"; exit $stat'
     fi
     func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
                   'stat=$?; rm -f "$lockfile"; exit $stat'
-    if test "$lock_old_archive_extraction" = yes; then
+    if test yes = "$lock_old_archive_extraction"; then
       $opt_dry_run || rm -f "$lockfile"
     fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
       $opt_dry_run || rm -f "$lockfile"
     fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
@@ -3738,22 +4992,23 @@ func_extract_an_archive ()
 # func_extract_archives gentop oldlib ...
 func_extract_archives ()
 {
 # func_extract_archives gentop oldlib ...
 func_extract_archives ()
 {
-    $opt_debug
-    my_gentop="$1"; shift
+    $debug_cmd
+
+    my_gentop=$1; shift
     my_oldlibs=${1+"$@"}
     my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
+    my_oldobjs=
+    my_xlib=
+    my_xabs=
+    my_xdir=
 
     for my_xlib in $my_oldlibs; do
       # Extract the objects.
       case $my_xlib in
 
     for my_xlib in $my_oldlibs; do
       # Extract the objects.
       case $my_xlib in
-       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
        *) my_xabs=`pwd`"/$my_xlib" ;;
       esac
       func_basename "$my_xlib"
        *) my_xabs=`pwd`"/$my_xlib" ;;
       esac
       func_basename "$my_xlib"
-      my_xlib="$func_basename_result"
+      my_xlib=$func_basename_result
       my_xlib_u=$my_xlib
       while :; do
         case " $extracted_archives " in
       my_xlib_u=$my_xlib
       while :; do
         case " $extracted_archives " in
@@ -3765,7 +5020,7 @@ func_extract_archives ()
        esac
       done
       extracted_archives="$extracted_archives $my_xlib_u"
        esac
       done
       extracted_archives="$extracted_archives $my_xlib_u"
-      my_xdir="$my_gentop/$my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
 
       func_mkdir_p "$my_xdir"
 
 
       func_mkdir_p "$my_xdir"
 
@@ -3778,19 +5033,20 @@ func_extract_archives ()
          cd $my_xdir || exit $?
          darwin_archive=$my_xabs
          darwin_curdir=`pwd`
          cd $my_xdir || exit $?
          darwin_archive=$my_xabs
          darwin_curdir=`pwd`
-         darwin_base_archive=`basename "$darwin_archive"`
+         func_basename "$darwin_archive"
+         darwin_base_archive=$func_basename_result
          darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
          if test -n "$darwin_arches"; then
            darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
            darwin_arch=
            func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
          darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
          if test -n "$darwin_arches"; then
            darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
            darwin_arch=
            func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
-           for darwin_arch in  $darwin_arches ; do
-             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+           for darwin_arch in  $darwin_arches; do
+             func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+             $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+             cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+             func_extract_an_archive "`pwd`" "$darwin_base_archive"
              cd "$darwin_curdir"
              cd "$darwin_curdir"
-             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+             $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
            done # $darwin_arches
             ## Okay now we've a bunch of thin objects, gotta fatten them up :)
            darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
            done # $darwin_arches
             ## Okay now we've a bunch of thin objects, gotta fatten them up :)
            darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
@@ -3815,7 +5071,7 @@ func_extract_archives ()
       my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
       my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
-    func_extract_archives_result="$my_oldobjs"
+    func_extract_archives_result=$my_oldobjs
 }
 
 
 }
 
 
@@ -3830,7 +5086,7 @@ func_extract_archives ()
 #
 # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
 # variable will take.  If 'yes', then the emitted script
 #
 # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
 # variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
+# will assume that the directory where it is stored is
 # the $objdir directory.  This is a cygwin/mingw-specific
 # behavior.
 func_emit_wrapper ()
 # the $objdir directory.  This is a cygwin/mingw-specific
 # behavior.
 func_emit_wrapper ()
@@ -3841,7 +5097,7 @@ func_emit_wrapper ()
 #! $SHELL
 
 # $output - temporary wrapper script for $objdir/$outputname
 #! $SHELL
 
 # $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # The $output program cannot be directly executed until all the libtool
 # libraries that it depends on are installed.
 #
 # The $output program cannot be directly executed until all the libtool
 # libraries that it depends on are installed.
@@ -3898,9 +5154,9 @@ _LTECHO_EOF'
 
 # Very basic option parsing. These options are (a) specific to
 # the libtool wrapper, (b) are identical between the wrapper
 
 # Very basic option parsing. These options are (a) specific to
 # the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ which is used only on
+# /script/ and the wrapper /executable/ that is used only on
 # windows platforms, and (c) all begin with the string "--lt-"
 # windows platforms, and (c) all begin with the string "--lt-"
-# (application programs are unlikely to have options which match
+# (application programs are unlikely to have options that match
 # this pattern).
 #
 # There are only two supported options: --lt-debug and
 # this pattern).
 #
 # There are only two supported options: --lt-debug and
@@ -3933,7 +5189,7 @@ func_parse_lt_options ()
 
   # Print the debug banner immediately:
   if test -n \"\$lt_option_debug\"; then
 
   # Print the debug banner immediately:
   if test -n \"\$lt_option_debug\"; then
-    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
   fi
 }
 
   fi
 }
 
@@ -3944,7 +5200,7 @@ func_lt_dump_args ()
   lt_dump_args_N=1;
   for lt_arg
   do
   lt_dump_args_N=1;
   for lt_arg
   do
-    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
     lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
   done
 }
     lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
   done
 }
@@ -3958,7 +5214,7 @@ func_exec_program_core ()
   *-*-mingw | *-*-os2* | *-cegcc*)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
   *-*-mingw | *-*-os2* | *-cegcc*)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
@@ -3968,7 +5224,7 @@ func_exec_program_core ()
   *)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
   *)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir/\$program\" \${1+\"\$@\"}
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir/\$program\" \${1+\"\$@\"}
@@ -4043,13 +5299,13 @@ func_exec_program ()
   test -n \"\$absdir\" && thisdir=\"\$absdir\"
 "
 
   test -n \"\$absdir\" && thisdir=\"\$absdir\"
 "
 
-       if test "$fast_install" = yes; then
+       if test yes = "$fast_install"; then
          $ECHO "\
   program=lt-'$outputname'$exeext
   progdir=\"\$thisdir/$objdir\"
 
   if test ! -f \"\$progdir/\$program\" ||
          $ECHO "\
   program=lt-'$outputname'$exeext
   progdir=\"\$thisdir/$objdir\"
 
   if test ! -f \"\$progdir/\$program\" ||
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
@@ -4101,7 +5357,7 @@ func_exec_program ()
        fi
 
        # Export our shlibpath_var if we have one.
        fi
 
        # Export our shlibpath_var if we have one.
-       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+       if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
          $ECHO "\
     # Add our own library path to $shlibpath_var
     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
          $ECHO "\
     # Add our own library path to $shlibpath_var
     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
@@ -4121,7 +5377,7 @@ func_exec_program ()
     fi
   else
     # The program doesn't exist.
     fi
   else
     # The program doesn't exist.
-    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
     \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
     \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
@@ -4140,7 +5396,7 @@ func_emit_cwrapperexe_src ()
        cat <<EOF
 
 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
        cat <<EOF
 
 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 
    The $output program cannot be directly executed until all the libtool
    libraries that it depends on are installed.
 
    The $output program cannot be directly executed until all the libtool
    libraries that it depends on are installed.
@@ -4175,47 +5431,45 @@ EOF
 #include <fcntl.h>
 #include <sys/stat.h>
 
 #include <fcntl.h>
 #include <sys/stat.h>
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* declarations of non-ANSI functions */
 /* declarations of non-ANSI functions */
-#if defined(__MINGW32__)
+#if defined __MINGW32__
 # ifdef __STRICT_ANSI__
 int _putenv (const char *);
 # endif
 # ifdef __STRICT_ANSI__
 int _putenv (const char *);
 # endif
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
 # endif
 # ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
 # endif
-/* #elif defined (other platforms) ... */
+/* #elif defined other_platform || defined ... */
 #endif
 
 /* portability defines, excluding path handling macros */
 #endif
 
 /* portability defines, excluding path handling macros */
-#if defined(_MSC_VER)
+#if defined _MSC_VER
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
 # define S_IXUSR _S_IEXEC
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
 # define S_IXUSR _S_IEXEC
-# ifndef _INTPTR_T_DEFINED
-#  define _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#elif defined(__MINGW32__)
+#elif defined __MINGW32__
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # define HAVE_SETENV
 # define FOPEN_WB "wb"
 # define HAVE_SETENV
 # define FOPEN_WB "wb"
-/* #elif defined (other platforms) ... */
+/* #elif defined other platforms ... */
 #endif
 
 #endif
 
-#if defined(PATH_MAX)
+#if defined PATH_MAX
 # define LT_PATHMAX PATH_MAX
 # define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
+#elif defined MAXPATHLEN
 # define LT_PATHMAX MAXPATHLEN
 #else
 # define LT_PATHMAX 1024
 # define LT_PATHMAX MAXPATHLEN
 #else
 # define LT_PATHMAX 1024
@@ -4234,8 +5488,8 @@ int setenv (const char *, const char *, int);
 # define PATH_SEPARATOR ':'
 #endif
 
 # define PATH_SEPARATOR ':'
 #endif
 
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
 # define HAVE_DOS_BASED_FILE_SYSTEM
 # define FOPEN_WB "wb"
 # ifndef DIR_SEPARATOR_2
 # define HAVE_DOS_BASED_FILE_SYSTEM
 # define FOPEN_WB "wb"
 # ifndef DIR_SEPARATOR_2
@@ -4268,10 +5522,10 @@ int setenv (const char *, const char *, int);
 
 #define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
 #define XFREE(stale) do { \
 
 #define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
 #define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
+  if (stale) { free (stale); stale = 0; } \
 } while (0)
 
 } while (0)
 
-#if defined(LT_DEBUGWRAPPER)
+#if defined LT_DEBUGWRAPPER
 static int lt_debug = 1;
 #else
 static int lt_debug = 0;
 static int lt_debug = 1;
 #else
 static int lt_debug = 0;
@@ -4304,7 +5558,7 @@ volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
-           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+           if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
               func_to_host_path "$temp_rpath"
              cat <<EOF
 const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
               func_to_host_path "$temp_rpath"
              cat <<EOF
 const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
@@ -4328,7 +5582,7 @@ const char * EXE_PATH_VALUE   = "";
 EOF
            fi
 
 EOF
            fi
 
-           if test "$fast_install" = yes; then
+           if test yes = "$fast_install"; then
              cat <<EOF
 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
 EOF
              cat <<EOF
 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
 EOF
@@ -4357,12 +5611,12 @@ main (int argc, char *argv[])
   char *actual_cwrapper_name;
   char *target_name;
   char *lt_argv_zero;
   char *actual_cwrapper_name;
   char *target_name;
   char *lt_argv_zero;
-  intptr_t rval = 127;
+  int rval = 127;
 
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
 
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  newargz = XMALLOC (char *, argc + 1);
+  newargz = XMALLOC (char *, (size_t) argc + 1);
 
   /* very simple arg parsing; don't want to rely on getopt
    * also, copy all non cwrapper options to newargz, except
 
   /* very simple arg parsing; don't want to rely on getopt
    * also, copy all non cwrapper options to newargz, except
@@ -4371,10 +5625,10 @@ main (int argc, char *argv[])
   newargc=0;
   for (i = 1; i < argc; i++)
     {
   newargc=0;
   for (i = 1; i < argc; i++)
     {
-      if (strcmp (argv[i], dumpscript_opt) == 0)
+      if (STREQ (argv[i], dumpscript_opt))
        {
 EOF
        {
 EOF
-           case "$host" in
+           case $host in
              *mingw* | *cygwin* )
                # make stdout use "unix" line endings
                echo "          setmode(1,_O_BINARY);"
              *mingw* | *cygwin* )
                # make stdout use "unix" line endings
                echo "          setmode(1,_O_BINARY);"
@@ -4385,12 +5639,12 @@ EOF
          lt_dump_script (stdout);
          return 0;
        }
          lt_dump_script (stdout);
          return 0;
        }
-      if (strcmp (argv[i], debug_opt) == 0)
+      if (STREQ (argv[i], debug_opt))
        {
           lt_debug = 1;
           continue;
        }
        {
           lt_debug = 1;
           continue;
        }
-      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+      if (STREQ (argv[i], ltwrapper_option_prefix))
         {
           /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
              namespace, but it is not one of the ones we know about and
         {
           /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
              namespace, but it is not one of the ones we know about and
@@ -4413,7 +5667,7 @@ EOF
 EOF
            cat <<EOF
   /* The GNU banner must be the first non-error debug message */
 EOF
            cat <<EOF
   /* The GNU banner must be the first non-error debug message */
-  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
 EOF
            cat <<"EOF"
   lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
 EOF
            cat <<"EOF"
   lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
@@ -4524,7 +5778,7 @@ EOF
                cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
   newargz = prepare_spawn (newargz);
                cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
   newargz = prepare_spawn (newargz);
-  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
   if (rval == -1)
     {
       /* failed to start process */
@@ -4569,7 +5823,7 @@ base_name (const char *name)
 {
   const char *base;
 
 {
   const char *base;
 
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
   /* Skip over the disk name in MSDOS pathnames. */
   if (isalpha ((unsigned char) name[0]) && name[1] == ':')
     name += 2;
   /* Skip over the disk name in MSDOS pathnames. */
   if (isalpha ((unsigned char) name[0]) && name[1] == ':')
     name += 2;
@@ -4628,7 +5882,7 @@ find_executable (const char *wrapper)
   const char *p_next;
   /* static buffer for getcwd */
   char tmp[LT_PATHMAX + 1];
   const char *p_next;
   /* static buffer for getcwd */
   char tmp[LT_PATHMAX + 1];
-  int tmp_len;
+  size_t tmp_len;
   char *concat_name;
 
   lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
   char *concat_name;
 
   lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
@@ -4638,7 +5892,7 @@ find_executable (const char *wrapper)
     return NULL;
 
   /* Absolute path? */
     return NULL;
 
   /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
   if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
     {
       concat_name = xstrdup (wrapper);
   if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
     {
       concat_name = xstrdup (wrapper);
@@ -4656,7 +5910,7 @@ find_executable (const char *wrapper)
            return concat_name;
          XFREE (concat_name);
        }
            return concat_name;
          XFREE (concat_name);
        }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
     }
 #endif
 
     }
 #endif
 
@@ -4679,7 +5933,7 @@ find_executable (const char *wrapper)
              for (q = p; *q; q++)
                if (IS_PATH_SEPARATOR (*q))
                  break;
              for (q = p; *q; q++)
                if (IS_PATH_SEPARATOR (*q))
                  break;
-             p_len = q - p;
+             p_len = (size_t) (q - p);
              p_next = (*q == '\0' ? q : q + 1);
              if (p_len == 0)
                {
              p_next = (*q == '\0' ? q : q + 1);
              if (p_len == 0)
                {
@@ -4798,7 +6052,7 @@ strendzap (char *str, const char *pat)
   if (patlen <= len)
     {
       str += len - patlen;
   if (patlen <= len)
     {
       str += len - patlen;
-      if (strcmp (str, pat) == 0)
+      if (STREQ (str, pat))
        *str = '\0';
     }
   return str;
        *str = '\0';
     }
   return str;
@@ -4863,7 +6117,7 @@ lt_setenv (const char *name, const char *value)
     char *str = xstrdup (value);
     setenv (name, str, 1);
 #else
     char *str = xstrdup (value);
     setenv (name, str, 1);
 #else
-    int len = strlen (name) + 1 + strlen (value) + 1;
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
     char *str = XMALLOC (char, len);
     sprintf (str, "%s=%s", name, value);
     if (putenv (str) != EXIT_SUCCESS)
     char *str = XMALLOC (char, len);
     sprintf (str, "%s=%s", name, value);
     if (putenv (str) != EXIT_SUCCESS)
@@ -4880,8 +6134,8 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   char *new_value;
   if (orig_value && *orig_value)
     {
   char *new_value;
   if (orig_value && *orig_value)
     {
-      int orig_value_len = strlen (orig_value);
-      int add_len = strlen (add);
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
       new_value = XMALLOC (char, add_len + orig_value_len + 1);
       if (to_end)
         {
       new_value = XMALLOC (char, add_len + orig_value_len + 1);
       if (to_end)
         {
@@ -4912,10 +6166,10 @@ lt_update_exe_path (const char *name, const char *value)
     {
       char *new_value = lt_extend_str (getenv (name), value, 0);
       /* some systems can't cope with a ':'-terminated path #' */
     {
       char *new_value = lt_extend_str (getenv (name), value, 0);
       /* some systems can't cope with a ':'-terminated path #' */
-      int len = strlen (new_value);
-      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
         {
         {
-          new_value[len-1] = '\0';
+          new_value[--len] = '\0';
         }
       lt_setenv (name, new_value);
       XFREE (new_value);
         }
       lt_setenv (name, new_value);
       XFREE (new_value);
@@ -5082,7 +6336,8 @@ EOF
 # True if ARG is an import lib, as indicated by $file_magic_cmd
 func_win32_import_lib_p ()
 {
 # True if ARG is an import lib, as indicated by $file_magic_cmd
 func_win32_import_lib_p ()
 {
-    $opt_debug
+    $debug_cmd
+
     case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
     *import*) : ;;
     *) false ;;
     case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
     *import*) : ;;
     *) false ;;
@@ -5092,17 +6347,18 @@ func_win32_import_lib_p ()
 # func_mode_link arg...
 func_mode_link ()
 {
 # func_mode_link arg...
 func_mode_link ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $host in
     *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
       # It is impossible to link a dll without this setting, and
       # we shouldn't force the makefile maintainer to figure out
     case $host in
     *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
       # It is impossible to link a dll without this setting, and
       # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
+      # what system we are compiling for in order to pass an extra
       # flag for every libtool invocation.
       # allow_undefined=no
 
       # FIXME: Unfortunately, there are problems with the above when trying
       # flag for every libtool invocation.
       # allow_undefined=no
 
       # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
+      # to make a dll that has undefined symbols, in which case not
       # even a static library is built.  For now, we need to specify
       # -no-undefined on the libtool link line when we can be certain
       # that all symbols are satisfied, otherwise we get a static library.
       # even a static library is built.  For now, we need to specify
       # -no-undefined on the libtool link line when we can be certain
       # that all symbols are satisfied, otherwise we get a static library.
@@ -5149,7 +6405,7 @@ func_mode_link ()
     non_pic_objects=
     precious_files_regex=
     prefer_static_libs=no
     non_pic_objects=
     precious_files_regex=
     prefer_static_libs=no
-    preload=no
+    preload=false
     prev=
     prevarg=
     release=
     prev=
     prevarg=
     release=
@@ -5161,7 +6417,7 @@ func_mode_link ()
     vinfo=
     vinfo_number=no
     weak_libs=
     vinfo=
     vinfo_number=no
     weak_libs=
-    single_module="${wl}-single_module"
+    single_module=$wl-single_module
     func_infer_tag $base_compile
 
     # We need to know -static, to get the right output filenames.
     func_infer_tag $base_compile
 
     # We need to know -static, to get the right output filenames.
@@ -5169,15 +6425,15 @@ func_mode_link ()
     do
       case $arg in
       -shared)
     do
       case $arg in
       -shared)
-       test "$build_libtool_libs" != yes && \
-         func_fatal_configuration "can not build a shared library"
+       test yes != "$build_libtool_libs" \
+         && func_fatal_configuration "cannot build a shared library"
        build_old_libs=no
        break
        ;;
       -all-static | -static | -static-libtool-libs)
        case $arg in
        -all-static)
        build_old_libs=no
        break
        ;;
       -all-static | -static | -static-libtool-libs)
        case $arg in
        -all-static)
-         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+         if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
            func_warning "complete static linking is impossible in this configuration"
          fi
          if test -n "$link_static_flag"; then
            func_warning "complete static linking is impossible in this configuration"
          fi
          if test -n "$link_static_flag"; then
@@ -5210,7 +6466,7 @@ func_mode_link ()
 
     # Go through the arguments, transforming them on the way.
     while test "$#" -gt 0; do
 
     # Go through the arguments, transforming them on the way.
     while test "$#" -gt 0; do
-      arg="$1"
+      arg=$1
       shift
       func_quote_for_eval "$arg"
       qarg=$func_quote_for_eval_unquoted_result
       shift
       func_quote_for_eval "$arg"
       qarg=$func_quote_for_eval_unquoted_result
@@ -5227,21 +6483,21 @@ func_mode_link ()
 
        case $prev in
        bindir)
 
        case $prev in
        bindir)
-         bindir="$arg"
+         bindir=$arg
          prev=
          continue
          ;;
        dlfiles|dlprefiles)
          prev=
          continue
          ;;
        dlfiles|dlprefiles)
-         if test "$preload" = no; then
+         $preload || {
            # Add the symbol object into the linking commands.
            func_append compile_command " @SYMFILE@"
            func_append finalize_command " @SYMFILE@"
            # Add the symbol object into the linking commands.
            func_append compile_command " @SYMFILE@"
            func_append finalize_command " @SYMFILE@"
-           preload=yes
-         fi
+           preload=:
+         }
          case $arg in
          *.la | *.lo) ;;  # We handle these cases below.
          force)
          case $arg in
          *.la | *.lo) ;;  # We handle these cases below.
          force)
-           if test "$dlself" = no; then
+           if test no = "$dlself"; then
              dlself=needless
              export_dynamic=yes
            fi
              dlself=needless
              export_dynamic=yes
            fi
@@ -5249,9 +6505,9 @@ func_mode_link ()
            continue
            ;;
          self)
            continue
            ;;
          self)
-           if test "$prev" = dlprefiles; then
+           if test dlprefiles = "$prev"; then
              dlself=yes
              dlself=yes
-           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+           elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
              dlself=yes
            else
              dlself=needless
              dlself=yes
            else
              dlself=needless
@@ -5261,7 +6517,7 @@ func_mode_link ()
            continue
            ;;
          *)
            continue
            ;;
          *)
-           if test "$prev" = dlfiles; then
+           if test dlfiles = "$prev"; then
              func_append dlfiles " $arg"
            else
              func_append dlprefiles " $arg"
              func_append dlfiles " $arg"
            else
              func_append dlprefiles " $arg"
@@ -5272,14 +6528,14 @@ func_mode_link ()
          esac
          ;;
        expsyms)
          esac
          ;;
        expsyms)
-         export_symbols="$arg"
+         export_symbols=$arg
          test -f "$arg" \
          test -f "$arg" \
-           || func_fatal_error "symbol file \`$arg' does not exist"
+           || func_fatal_error "symbol file '$arg' does not exist"
          prev=
          continue
          ;;
        expsyms_regex)
          prev=
          continue
          ;;
        expsyms_regex)
-         export_symbols_regex="$arg"
+         export_symbols_regex=$arg
          prev=
          continue
          ;;
          prev=
          continue
          ;;
@@ -5297,7 +6553,13 @@ func_mode_link ()
          continue
          ;;
        inst_prefix)
          continue
          ;;
        inst_prefix)
-         inst_prefix_dir="$arg"
+         inst_prefix_dir=$arg
+         prev=
+         continue
+         ;;
+       mllvm)
+         # Clang does not use LLVM to link, so we can simply discard any
+         # '-mllvm $arg' options when doing the link step.
          prev=
          continue
          ;;
          prev=
          continue
          ;;
@@ -5321,21 +6583,21 @@ func_mode_link ()
 
                if test -z "$pic_object" ||
                   test -z "$non_pic_object" ||
 
                if test -z "$pic_object" ||
                   test -z "$non_pic_object" ||
-                  test "$pic_object" = none &&
-                  test "$non_pic_object" = none; then
-                 func_fatal_error "cannot find name of object for \`$arg'"
+                  test none = "$pic_object" &&
+                  test none = "$non_pic_object"; then
+                 func_fatal_error "cannot find name of object for '$arg'"
                fi
 
                # Extract subdirectory from the argument.
                func_dirname "$arg" "/" ""
                fi
 
                # Extract subdirectory from the argument.
                func_dirname "$arg" "/" ""
-               xdir="$func_dirname_result"
+               xdir=$func_dirname_result
 
 
-               if test "$pic_object" != none; then
+               if test none != "$pic_object"; then
                  # Prepend the subdirectory the object is found in.
                  # Prepend the subdirectory the object is found in.
-                 pic_object="$xdir$pic_object"
+                 pic_object=$xdir$pic_object
 
 
-                 if test "$prev" = dlfiles; then
-                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                 if test dlfiles = "$prev"; then
+                   if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
                      func_append dlfiles " $pic_object"
                      prev=
                      continue
                      func_append dlfiles " $pic_object"
                      prev=
                      continue
@@ -5346,7 +6608,7 @@ func_mode_link ()
                  fi
 
                  # CHECK ME:  I think I busted this.  -Ossama
                  fi
 
                  # CHECK ME:  I think I busted this.  -Ossama
-                 if test "$prev" = dlprefiles; then
+                 if test dlprefiles = "$prev"; then
                    # Preload the old-style object.
                    func_append dlprefiles " $pic_object"
                    prev=
                    # Preload the old-style object.
                    func_append dlprefiles " $pic_object"
                    prev=
@@ -5354,23 +6616,23 @@ func_mode_link ()
 
                  # A PIC object.
                  func_append libobjs " $pic_object"
 
                  # A PIC object.
                  func_append libobjs " $pic_object"
-                 arg="$pic_object"
+                 arg=$pic_object
                fi
 
                # Non-PIC object.
                fi
 
                # Non-PIC object.
-               if test "$non_pic_object" != none; then
+               if test none != "$non_pic_object"; then
                  # Prepend the subdirectory the object is found in.
                  # Prepend the subdirectory the object is found in.
-                 non_pic_object="$xdir$non_pic_object"
+                 non_pic_object=$xdir$non_pic_object
 
                  # A standard non-PIC object
                  func_append non_pic_objects " $non_pic_object"
 
                  # A standard non-PIC object
                  func_append non_pic_objects " $non_pic_object"
-                 if test -z "$pic_object" || test "$pic_object" = none ; then
-                   arg="$non_pic_object"
+                 if test -z "$pic_object" || test none = "$pic_object"; then
+                   arg=$non_pic_object
                  fi
                else
                  # If the PIC object exists, use it instead.
                  # $xdir was prepended to $pic_object above.
                  fi
                else
                  # If the PIC object exists, use it instead.
                  # $xdir was prepended to $pic_object above.
-                 non_pic_object="$pic_object"
+                 non_pic_object=$pic_object
                  func_append non_pic_objects " $non_pic_object"
                fi
              else
                  func_append non_pic_objects " $non_pic_object"
                fi
              else
@@ -5378,7 +6640,7 @@ func_mode_link ()
                if $opt_dry_run; then
                  # Extract subdirectory from the argument.
                  func_dirname "$arg" "/" ""
                if $opt_dry_run; then
                  # Extract subdirectory from the argument.
                  func_dirname "$arg" "/" ""
-                 xdir="$func_dirname_result"
+                 xdir=$func_dirname_result
 
                  func_lo2o "$arg"
                  pic_object=$xdir$objdir/$func_lo2o_result
 
                  func_lo2o "$arg"
                  pic_object=$xdir$objdir/$func_lo2o_result
@@ -5386,24 +6648,24 @@ func_mode_link ()
                  func_append libobjs " $pic_object"
                  func_append non_pic_objects " $non_pic_object"
                else
                  func_append libobjs " $pic_object"
                  func_append non_pic_objects " $non_pic_object"
                else
-                 func_fatal_error "\`$arg' is not a valid libtool object"
+                 func_fatal_error "'$arg' is not a valid libtool object"
                fi
              fi
            done
          else
                fi
              fi
            done
          else
-           func_fatal_error "link input file \`$arg' does not exist"
+           func_fatal_error "link input file '$arg' does not exist"
          fi
          arg=$save_arg
          prev=
          continue
          ;;
        precious_regex)
          fi
          arg=$save_arg
          prev=
          continue
          ;;
        precious_regex)
-         precious_files_regex="$arg"
+         precious_files_regex=$arg
          prev=
          continue
          ;;
        release)
          prev=
          continue
          ;;
        release)
-         release="-$arg"
+         release=-$arg
          prev=
          continue
          ;;
          prev=
          continue
          ;;
@@ -5415,7 +6677,7 @@ func_mode_link ()
            func_fatal_error "only absolute run-paths are allowed"
            ;;
          esac
            func_fatal_error "only absolute run-paths are allowed"
            ;;
          esac
-         if test "$prev" = rpath; then
+         if test rpath = "$prev"; then
            case "$rpath " in
            *" $arg "*) ;;
            *) func_append rpath " $arg" ;;
            case "$rpath " in
            *" $arg "*) ;;
            *) func_append rpath " $arg" ;;
@@ -5430,7 +6692,7 @@ func_mode_link ()
          continue
          ;;
        shrext)
          continue
          ;;
        shrext)
-         shrext_cmds="$arg"
+         shrext_cmds=$arg
          prev=
          continue
          ;;
          prev=
          continue
          ;;
@@ -5470,7 +6732,7 @@ func_mode_link ()
        esac
       fi # test -n "$prev"
 
        esac
       fi # test -n "$prev"
 
-      prevarg="$arg"
+      prevarg=$arg
 
       case $arg in
       -all-static)
 
       case $arg in
       -all-static)
@@ -5484,7 +6746,7 @@ func_mode_link ()
 
       -allow-undefined)
        # FIXME: remove this flag sometime in the future.
 
       -allow-undefined)
        # FIXME: remove this flag sometime in the future.
-       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       func_fatal_error "'-allow-undefined' must not be used because it is the default"
        ;;
 
       -avoid-version)
        ;;
 
       -avoid-version)
@@ -5516,7 +6778,7 @@ func_mode_link ()
        if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
          func_fatal_error "more than one -exported-symbols argument is not allowed"
        fi
        if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
          func_fatal_error "more than one -exported-symbols argument is not allowed"
        fi
-       if test "X$arg" = "X-export-symbols"; then
+       if test X-export-symbols = "X$arg"; then
          prev=expsyms
        else
          prev=expsyms_regex
          prev=expsyms
        else
          prev=expsyms_regex
@@ -5550,9 +6812,9 @@ func_mode_link ()
        func_stripname "-L" '' "$arg"
        if test -z "$func_stripname_result"; then
          if test "$#" -gt 0; then
        func_stripname "-L" '' "$arg"
        if test -z "$func_stripname_result"; then
          if test "$#" -gt 0; then
-           func_fatal_error "require no space between \`-L' and \`$1'"
+           func_fatal_error "require no space between '-L' and '$1'"
          else
          else
-           func_fatal_error "need path for \`-L' option"
+           func_fatal_error "need path for '-L' option"
          fi
        fi
        func_resolve_sysroot "$func_stripname_result"
          fi
        fi
        func_resolve_sysroot "$func_stripname_result"
@@ -5563,8 +6825,8 @@ func_mode_link ()
        *)
          absdir=`cd "$dir" && pwd`
          test -z "$absdir" && \
        *)
          absdir=`cd "$dir" && pwd`
          test -z "$absdir" && \
-           func_fatal_error "cannot determine absolute directory name of \`$dir'"
-         dir="$absdir"
+           func_fatal_error "cannot determine absolute directory name of '$dir'"
+         dir=$absdir
          ;;
        esac
        case "$deplibs " in
          ;;
        esac
        case "$deplibs " in
@@ -5599,7 +6861,7 @@ func_mode_link ()
        ;;
 
       -l*)
        ;;
 
       -l*)
-       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+       if test X-lc = "X$arg" || test X-lm = "X$arg"; then
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
            # These systems don't actually have a C or math library (as such)
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
            # These systems don't actually have a C or math library (as such)
@@ -5607,11 +6869,11 @@ func_mode_link ()
            ;;
          *-*-os2*)
            # These systems don't actually have a C library (as such)
            ;;
          *-*-os2*)
            # These systems don't actually have a C library (as such)
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
            ;;
-         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
            # Do not include libc due to us having libc/libc_r.
            # Do not include libc due to us having libc/libc_r.
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C and math libraries are in the System framework
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C and math libraries are in the System framework
@@ -5620,16 +6882,16 @@ func_mode_link ()
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
            # Causes problems with __ctype
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
            # Causes problems with __ctype
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
            # Compiler inserts libc in the correct place for threads to work
            ;;
          *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
            # Compiler inserts libc in the correct place for threads to work
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          esac
            ;;
          esac
-       elif test "X$arg" = "X-lc_r"; then
+       elif test X-lc_r = "X$arg"; then
         case $host in
         case $host in
-        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
           # Do not include libc_r directly, use -pthread flag.
           continue
           ;;
           # Do not include libc_r directly, use -pthread flag.
           continue
           ;;
@@ -5639,6 +6901,11 @@ func_mode_link ()
        continue
        ;;
 
        continue
        ;;
 
+      -mllvm)
+       prev=mllvm
+       continue
+       ;;
+
       -module)
        module=yes
        continue
       -module)
        module=yes
        continue
@@ -5668,7 +6935,7 @@ func_mode_link ()
        ;;
 
       -multi_module)
        ;;
 
       -multi_module)
-       single_module="${wl}-multi_module"
+       single_module=$wl-multi_module
        continue
        ;;
 
        continue
        ;;
 
@@ -5682,8 +6949,8 @@ func_mode_link ()
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
          # The PATH hackery in wrapper scripts is required on Windows
          # and Darwin in order for the loader to find any dlls it needs.
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
          # The PATH hackery in wrapper scripts is required on Windows
          # and Darwin in order for the loader to find any dlls it needs.
-         func_warning "\`-no-install' is ignored for $host"
-         func_warning "assuming \`-no-fast-install' instead"
+         func_warning "'-no-install' is ignored for $host"
+         func_warning "assuming '-no-fast-install' instead"
          fast_install=no
          ;;
        *) no_install=yes ;;
          fast_install=no
          ;;
        *) no_install=yes ;;
@@ -5788,14 +7055,14 @@ func_mode_link ()
        func_stripname '-Wc,' '' "$arg"
        args=$func_stripname_result
        arg=
        func_stripname '-Wc,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        for flag in $args; do
        for flag in $args; do
-         IFS="$save_ifs"
+         IFS=$save_ifs
           func_quote_for_eval "$flag"
          func_append arg " $func_quote_for_eval_result"
          func_append compiler_flags " $func_quote_for_eval_result"
        done
           func_quote_for_eval "$flag"
          func_append arg " $func_quote_for_eval_result"
          func_append compiler_flags " $func_quote_for_eval_result"
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5804,15 +7071,15 @@ func_mode_link ()
        func_stripname '-Wl,' '' "$arg"
        args=$func_stripname_result
        arg=
        func_stripname '-Wl,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        for flag in $args; do
        for flag in $args; do
-         IFS="$save_ifs"
+         IFS=$save_ifs
           func_quote_for_eval "$flag"
          func_append arg " $wl$func_quote_for_eval_result"
          func_append compiler_flags " $wl$func_quote_for_eval_result"
          func_append linker_flags " $func_quote_for_eval_result"
        done
           func_quote_for_eval "$flag"
          func_append arg " $wl$func_quote_for_eval_result"
          func_append compiler_flags " $wl$func_quote_for_eval_result"
          func_append linker_flags " $func_quote_for_eval_result"
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5835,7 +7102,7 @@ func_mode_link ()
       # -msg_* for osf cc
       -msg_*)
        func_quote_for_eval "$arg"
       # -msg_* for osf cc
       -msg_*)
        func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
 
       # Flags to be passed through unchanged, with rationale:
        ;;
 
       # Flags to be passed through unchanged, with rationale:
@@ -5850,12 +7117,13 @@ func_mode_link ()
       # @file                GCC response files
       # -tp=*                Portland pgcc target processor selection
       # --sysroot=*          for sysroot support
       # @file                GCC response files
       # -tp=*                Portland pgcc target processor selection
       # --sysroot=*          for sysroot support
-      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -stdlib=*            select c++ std lib with clang
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*)
         func_quote_for_eval "$arg"
         func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
         func_append compiler_flags " $arg"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
         func_append compiler_flags " $arg"
@@ -5865,7 +7133,7 @@ func_mode_link ()
       # Some other compiler flag.
       -* | +*)
         func_quote_for_eval "$arg"
       # Some other compiler flag.
       -* | +*)
         func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
 
       *.$objext)
        ;;
 
       *.$objext)
@@ -5886,21 +7154,21 @@ func_mode_link ()
 
          if test -z "$pic_object" ||
             test -z "$non_pic_object" ||
 
          if test -z "$pic_object" ||
             test -z "$non_pic_object" ||
-            test "$pic_object" = none &&
-            test "$non_pic_object" = none; then
-           func_fatal_error "cannot find name of object for \`$arg'"
+            test none = "$pic_object" &&
+            test none = "$non_pic_object"; then
+           func_fatal_error "cannot find name of object for '$arg'"
          fi
 
          # Extract subdirectory from the argument.
          func_dirname "$arg" "/" ""
          fi
 
          # Extract subdirectory from the argument.
          func_dirname "$arg" "/" ""
-         xdir="$func_dirname_result"
+         xdir=$func_dirname_result
 
 
-         if test "$pic_object" != none; then
+         test none = "$pic_object" || {
            # Prepend the subdirectory the object is found in.
            # Prepend the subdirectory the object is found in.
-           pic_object="$xdir$pic_object"
+           pic_object=$xdir$pic_object
 
 
-           if test "$prev" = dlfiles; then
-             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+           if test dlfiles = "$prev"; then
+             if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
                func_append dlfiles " $pic_object"
                prev=
                continue
                func_append dlfiles " $pic_object"
                prev=
                continue
@@ -5911,7 +7179,7 @@ func_mode_link ()
            fi
 
            # CHECK ME:  I think I busted this.  -Ossama
            fi
 
            # CHECK ME:  I think I busted this.  -Ossama
-           if test "$prev" = dlprefiles; then
+           if test dlprefiles = "$prev"; then
              # Preload the old-style object.
              func_append dlprefiles " $pic_object"
              prev=
              # Preload the old-style object.
              func_append dlprefiles " $pic_object"
              prev=
@@ -5919,23 +7187,23 @@ func_mode_link ()
 
            # A PIC object.
            func_append libobjs " $pic_object"
 
            # A PIC object.
            func_append libobjs " $pic_object"
-           arg="$pic_object"
-         fi
+           arg=$pic_object
+         }
 
          # Non-PIC object.
 
          # Non-PIC object.
-         if test "$non_pic_object" != none; then
+         if test none != "$non_pic_object"; then
            # Prepend the subdirectory the object is found in.
            # Prepend the subdirectory the object is found in.
-           non_pic_object="$xdir$non_pic_object"
+           non_pic_object=$xdir$non_pic_object
 
            # A standard non-PIC object
            func_append non_pic_objects " $non_pic_object"
 
            # A standard non-PIC object
            func_append non_pic_objects " $non_pic_object"
-           if test -z "$pic_object" || test "$pic_object" = none ; then
-             arg="$non_pic_object"
+           if test -z "$pic_object" || test none = "$pic_object"; then
+             arg=$non_pic_object
            fi
          else
            # If the PIC object exists, use it instead.
            # $xdir was prepended to $pic_object above.
            fi
          else
            # If the PIC object exists, use it instead.
            # $xdir was prepended to $pic_object above.
-           non_pic_object="$pic_object"
+           non_pic_object=$pic_object
            func_append non_pic_objects " $non_pic_object"
          fi
        else
            func_append non_pic_objects " $non_pic_object"
          fi
        else
@@ -5943,7 +7211,7 @@ func_mode_link ()
          if $opt_dry_run; then
            # Extract subdirectory from the argument.
            func_dirname "$arg" "/" ""
          if $opt_dry_run; then
            # Extract subdirectory from the argument.
            func_dirname "$arg" "/" ""
-           xdir="$func_dirname_result"
+           xdir=$func_dirname_result
 
            func_lo2o "$arg"
            pic_object=$xdir$objdir/$func_lo2o_result
 
            func_lo2o "$arg"
            pic_object=$xdir$objdir/$func_lo2o_result
@@ -5951,7 +7219,7 @@ func_mode_link ()
            func_append libobjs " $pic_object"
            func_append non_pic_objects " $non_pic_object"
          else
            func_append libobjs " $pic_object"
            func_append non_pic_objects " $non_pic_object"
          else
-           func_fatal_error "\`$arg' is not a valid libtool object"
+           func_fatal_error "'$arg' is not a valid libtool object"
          fi
        fi
        ;;
          fi
        fi
        ;;
@@ -5967,11 +7235,11 @@ func_mode_link ()
        # A libtool-controlled library.
 
        func_resolve_sysroot "$arg"
        # A libtool-controlled library.
 
        func_resolve_sysroot "$arg"
-       if test "$prev" = dlfiles; then
+       if test dlfiles = "$prev"; then
          # This library was specified with -dlopen.
          func_append dlfiles " $func_resolve_sysroot_result"
          prev=
          # This library was specified with -dlopen.
          func_append dlfiles " $func_resolve_sysroot_result"
          prev=
-       elif test "$prev" = dlprefiles; then
+       elif test dlprefiles = "$prev"; then
          # The library was specified with -dlpreopen.
          func_append dlprefiles " $func_resolve_sysroot_result"
          prev=
          # The library was specified with -dlpreopen.
          func_append dlprefiles " $func_resolve_sysroot_result"
          prev=
@@ -5986,7 +7254,7 @@ func_mode_link ()
        # Unknown arguments in both finalize_command and compile_command need
        # to be aesthetically quoted because they are evaled later.
        func_quote_for_eval "$arg"
        # Unknown arguments in both finalize_command and compile_command need
        # to be aesthetically quoted because they are evaled later.
        func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
       esac # arg
 
        ;;
       esac # arg
 
@@ -5998,9 +7266,9 @@ func_mode_link ()
     done # argument parsing loop
 
     test -n "$prev" && \
     done # argument parsing loop
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prevarg' option requires an argument"
+      func_fatal_help "the '$prevarg' option requires an argument"
 
 
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
       eval arg=\"$export_dynamic_flag_spec\"
       func_append compile_command " $arg"
       func_append finalize_command " $arg"
       eval arg=\"$export_dynamic_flag_spec\"
       func_append compile_command " $arg"
       func_append finalize_command " $arg"
@@ -6009,12 +7277,12 @@ func_mode_link ()
     oldlibs=
     # calculate the name of the file, without its directory
     func_basename "$output"
     oldlibs=
     # calculate the name of the file, without its directory
     func_basename "$output"
-    outputname="$func_basename_result"
-    libobjs_save="$libobjs"
+    outputname=$func_basename_result
+    libobjs_save=$libobjs
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
     else
       shlib_search_path=
     fi
@@ -6022,7 +7290,7 @@ func_mode_link ()
     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
 
     func_dirname "$output" "/" ""
     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
 
     func_dirname "$output" "/" ""
-    output_objdir="$func_dirname_result$objdir"
+    output_objdir=$func_dirname_result$objdir
     func_to_tool_file "$output_objdir/"
     tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_to_tool_file "$output_objdir/"
     tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
@@ -6045,7 +7313,7 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_preserve_dup_deps ; then
+      if $opt_preserve_dup_deps; then
        case "$libs " in
        *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
        case "$libs " in
        *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
@@ -6053,7 +7321,7 @@ func_mode_link ()
       func_append libs " $deplib"
     done
 
       func_append libs " $deplib"
     done
 
-    if test "$linkmode" = lib; then
+    if test lib = "$linkmode"; then
       libs="$predeps $libs $compiler_lib_search_path $postdeps"
 
       # Compute libraries that are listed more than once in $predeps
       libs="$predeps $libs $compiler_lib_search_path $postdeps"
 
       # Compute libraries that are listed more than once in $predeps
@@ -6085,7 +7353,7 @@ func_mode_link ()
          case $file in
          *.la) ;;
          *)
          case $file in
          *.la) ;;
          *)
-           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
            ;;
          esac
        done
            ;;
          esac
        done
@@ -6093,7 +7361,7 @@ func_mode_link ()
     prog)
        compile_deplibs=
        finalize_deplibs=
     prog)
        compile_deplibs=
        finalize_deplibs=
-       alldeplibs=no
+       alldeplibs=false
        newdlfiles=
        newdlprefiles=
        passes="conv scan dlopen dlpreopen link"
        newdlfiles=
        newdlprefiles=
        passes="conv scan dlopen dlpreopen link"
@@ -6105,32 +7373,29 @@ func_mode_link ()
     for pass in $passes; do
       # The preopen pass in lib mode reverses $deplibs; put it back here
       # so that -L comes before libs that need it for instance...
     for pass in $passes; do
       # The preopen pass in lib mode reverses $deplibs; put it back here
       # so that -L comes before libs that need it for instance...
-      if test "$linkmode,$pass" = "lib,link"; then
+      if test lib,link = "$linkmode,$pass"; then
        ## FIXME: Find the place where the list is rebuilt in the wrong
        ##        order, and fix it there properly
         tmp_deplibs=
        for deplib in $deplibs; do
          tmp_deplibs="$deplib $tmp_deplibs"
        done
        ## FIXME: Find the place where the list is rebuilt in the wrong
        ##        order, and fix it there properly
         tmp_deplibs=
        for deplib in $deplibs; do
          tmp_deplibs="$deplib $tmp_deplibs"
        done
-       deplibs="$tmp_deplibs"
+       deplibs=$tmp_deplibs
       fi
 
       fi
 
-      if test "$linkmode,$pass" = "lib,link" ||
-        test "$linkmode,$pass" = "prog,scan"; then
-       libs="$deplibs"
+      if test lib,link = "$linkmode,$pass" ||
+        test prog,scan = "$linkmode,$pass"; then
+       libs=$deplibs
        deplibs=
       fi
        deplibs=
       fi
-      if test "$linkmode" = prog; then
+      if test prog = "$linkmode"; then
        case $pass in
        case $pass in
-       dlopen) libs="$dlfiles" ;;
-       dlpreopen) libs="$dlprefiles" ;;
-       link)
-         libs="$deplibs %DEPLIBS%"
-         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-         ;;
+       dlopen) libs=$dlfiles ;;
+       dlpreopen) libs=$dlprefiles ;;
+       link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
        esac
       fi
        esac
       fi
-      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+      if test lib,dlpreopen = "$linkmode,$pass"; then
        # Collect and forward deplibs of preopened libtool libs
        for lib in $dlprefiles; do
          # Ignore non-libtool-libs
        # Collect and forward deplibs of preopened libtool libs
        for lib in $dlprefiles; do
          # Ignore non-libtool-libs
@@ -6151,26 +7416,26 @@ func_mode_link ()
            esac
          done
        done
            esac
          done
        done
-       libs="$dlprefiles"
+       libs=$dlprefiles
       fi
       fi
-      if test "$pass" = dlopen; then
+      if test dlopen = "$pass"; then
        # Collect dlpreopened libraries
        # Collect dlpreopened libraries
-       save_deplibs="$deplibs"
+       save_deplibs=$deplibs
        deplibs=
       fi
 
       for deplib in $libs; do
        lib=
        deplibs=
       fi
 
       for deplib in $libs; do
        lib=
-       found=no
+       found=false
        case $deplib in
        -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
         |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
        case $deplib in
        -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
         |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
-         if test "$linkmode,$pass" = "prog,link"; then
+         if test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            func_append compiler_flags " $deplib"
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            func_append compiler_flags " $deplib"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6180,13 +7445,13 @@ func_mode_link ()
          continue
          ;;
        -l*)
          continue
          ;;
        -l*)
-         if test "$linkmode" != lib && test "$linkmode" != prog; then
-           func_warning "\`-l' is ignored for archives/objects"
+         if test lib != "$linkmode" && test prog != "$linkmode"; then
+           func_warning "'-l' is ignored for archives/objects"
            continue
          fi
          func_stripname '-l' '' "$deplib"
          name=$func_stripname_result
            continue
          fi
          func_stripname '-l' '' "$deplib"
          name=$func_stripname_result
-         if test "$linkmode" = lib; then
+         if test lib = "$linkmode"; then
            searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
          else
            searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
            searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
          else
            searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
@@ -6194,31 +7459,22 @@ func_mode_link ()
          for searchdir in $searchdirs; do
            for search_ext in .la $std_shrext .so .a; do
              # Search the libtool library
          for searchdir in $searchdirs; do
            for search_ext in .la $std_shrext .so .a; do
              # Search the libtool library
-             lib="$searchdir/lib${name}${search_ext}"
+             lib=$searchdir/lib$name$search_ext
              if test -f "$lib"; then
              if test -f "$lib"; then
-               if test "$search_ext" = ".la"; then
-                 found=yes
+               if test .la = "$search_ext"; then
+                 found=:
                else
                else
-                 found=no
+                 found=false
                fi
                break 2
              fi
            done
          done
                fi
                break 2
              fi
            done
          done
-         if test "$found" != yes; then
-           # deplib doesn't seem to be a libtool library
-           if test "$linkmode,$pass" = "prog,link"; then
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           else
-             deplibs="$deplib $deplibs"
-             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-           fi
-           continue
-         else # deplib is a libtool library
+         if $found; then
+           # deplib is a libtool library
            # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
            # We need to do some special things here, and not later.
            # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
            # We need to do some special things here, and not later.
-           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           if test yes = "$allow_libtool_libs_with_static_runtimes"; then
              case " $predeps $postdeps " in
              *" $deplib "*)
                if func_lalib_p "$lib"; then
              case " $predeps $postdeps " in
              *" $deplib "*)
                if func_lalib_p "$lib"; then
@@ -6226,19 +7482,19 @@ func_mode_link ()
                  old_library=
                  func_source "$lib"
                  for l in $old_library $library_names; do
                  old_library=
                  func_source "$lib"
                  for l in $old_library $library_names; do
-                   ll="$l"
+                   ll=$l
                  done
                  done
-                 if test "X$ll" = "X$old_library" ; then # only static version available
-                   found=no
+                 if test "X$ll" = "X$old_library"; then # only static version available
+                   found=false
                    func_dirname "$lib" "" "."
                    func_dirname "$lib" "" "."
-                   ladir="$func_dirname_result"
+                   ladir=$func_dirname_result
                    lib=$ladir/$old_library
                    lib=$ladir/$old_library
-                   if test "$linkmode,$pass" = "prog,link"; then
+                   if test prog,link = "$linkmode,$pass"; then
                      compile_deplibs="$deplib $compile_deplibs"
                      finalize_deplibs="$deplib $finalize_deplibs"
                    else
                      deplibs="$deplib $deplibs"
                      compile_deplibs="$deplib $compile_deplibs"
                      finalize_deplibs="$deplib $finalize_deplibs"
                    else
                      deplibs="$deplib $deplibs"
-                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                     test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
                    fi
                    continue
                  fi
                    fi
                    continue
                  fi
@@ -6247,15 +7503,25 @@ func_mode_link ()
              *) ;;
              esac
            fi
              *) ;;
              esac
            fi
+         else
+           # deplib doesn't seem to be a libtool library
+           if test prog,link = "$linkmode,$pass"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
          fi
          ;; # -l
        *.ltframework)
          fi
          ;; # -l
        *.ltframework)
-         if test "$linkmode,$pass" = "prog,link"; then
+         if test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            deplibs="$deplib $deplibs"
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            deplibs="$deplib $deplibs"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6268,18 +7534,18 @@ func_mode_link ()
          case $linkmode in
          lib)
            deplibs="$deplib $deplibs"
          case $linkmode in
          lib)
            deplibs="$deplib $deplibs"
-           test "$pass" = conv && continue
+           test conv = "$pass" && continue
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          prog)
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          prog)
-           if test "$pass" = conv; then
+           if test conv = "$pass"; then
              deplibs="$deplib $deplibs"
              continue
            fi
              deplibs="$deplib $deplibs"
              continue
            fi
-           if test "$pass" = scan; then
+           if test scan = "$pass"; then
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
@@ -6290,13 +7556,13 @@ func_mode_link ()
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          *)
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          *)
-           func_warning "\`-L' is ignored for archives/objects"
+           func_warning "'-L' is ignored for archives/objects"
            ;;
          esac # linkmode
          continue
          ;; # -L
        -R*)
            ;;
          esac # linkmode
          continue
          ;; # -L
        -R*)
-         if test "$pass" = link; then
+         if test link = "$pass"; then
            func_stripname '-R' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            dir=$func_resolve_sysroot_result
            func_stripname '-R' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            dir=$func_resolve_sysroot_result
@@ -6314,7 +7580,7 @@ func_mode_link ()
          lib=$func_resolve_sysroot_result
          ;;
        *.$libext)
          lib=$func_resolve_sysroot_result
          ;;
        *.$libext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            deplibs="$deplib $deplibs"
            continue
          fi
            deplibs="$deplib $deplibs"
            continue
          fi
@@ -6325,21 +7591,26 @@ func_mode_link ()
            case " $dlpreconveniencelibs " in
            *" $deplib "*) ;;
            *)
            case " $dlpreconveniencelibs " in
            *" $deplib "*) ;;
            *)
-             valid_a_lib=no
+             valid_a_lib=false
              case $deplibs_check_method in
                match_pattern*)
                  set dummy $deplibs_check_method; shift
                  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
                  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
                    | $EGREP "$match_pattern_regex" > /dev/null; then
              case $deplibs_check_method in
                match_pattern*)
                  set dummy $deplibs_check_method; shift
                  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
                  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
                    | $EGREP "$match_pattern_regex" > /dev/null; then
-                   valid_a_lib=yes
+                   valid_a_lib=:
                  fi
                ;;
                pass_all)
                  fi
                ;;
                pass_all)
-                 valid_a_lib=yes
+                 valid_a_lib=:
                ;;
              esac
                ;;
              esac
-             if test "$valid_a_lib" != yes; then
+             if $valid_a_lib; then
+               echo
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             else
                echo
                $ECHO "*** Warning: Trying to link with static lib archive $deplib."
                echo "*** I have the capability to make that library automatically link in when"
                echo
                $ECHO "*** Warning: Trying to link with static lib archive $deplib."
                echo "*** I have the capability to make that library automatically link in when"
@@ -6347,18 +7618,13 @@ func_mode_link ()
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because the file extensions .$libext of this argument makes me believe"
                echo "*** that it is just a static archive that I should not use here."
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because the file extensions .$libext of this argument makes me believe"
                echo "*** that it is just a static archive that I should not use here."
-             else
-               echo
-               $ECHO "*** Warning: Linking the shared library $output against the"
-               $ECHO "*** static library $deplib is not portable!"
-               deplibs="$deplib $deplibs"
              fi
              ;;
            esac
            continue
            ;;
          prog)
              fi
              ;;
            esac
            continue
            ;;
          prog)
-           if test "$pass" != link; then
+           if test link != "$pass"; then
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
@@ -6369,10 +7635,10 @@ func_mode_link ()
          esac # linkmode
          ;; # *.$libext
        *.lo | *.$objext)
          esac # linkmode
          ;; # *.$libext
        *.lo | *.$objext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            deplibs="$deplib $deplibs"
            deplibs="$deplib $deplibs"
-         elif test "$linkmode" = prog; then
-           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+         elif test prog = "$linkmode"; then
+           if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
              # If there is no dlopen support or we're linking statically,
              # we need to preload.
              func_append newdlprefiles " $deplib"
              # If there is no dlopen support or we're linking statically,
              # we need to preload.
              func_append newdlprefiles " $deplib"
@@ -6385,22 +7651,20 @@ func_mode_link ()
          continue
          ;;
        %DEPLIBS%)
          continue
          ;;
        %DEPLIBS%)
-         alldeplibs=yes
+         alldeplibs=:
          continue
          ;;
        esac # case $deplib
 
          continue
          ;;
        esac # case $deplib
 
-       if test "$found" = yes || test -f "$lib"; then :
-       else
-         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
-       fi
+       $found || test -f "$lib" \
+         || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$lib" \
 
        # Check to see that this really is a libtool archive.
        func_lalib_unsafe_p "$lib" \
-         || func_fatal_error "\`$lib' is not a valid libtool archive"
+         || func_fatal_error "'$lib' is not a valid libtool archive"
 
        func_dirname "$lib" "" "."
 
        func_dirname "$lib" "" "."
-       ladir="$func_dirname_result"
+       ladir=$func_dirname_result
 
        dlname=
        dlopen=
 
        dlname=
        dlopen=
@@ -6430,36 +7694,36 @@ func_mode_link ()
          done
        fi
        dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
          done
        fi
        dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-       if test "$linkmode,$pass" = "lib,link" ||
-          test "$linkmode,$pass" = "prog,scan" ||
-          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+       if test lib,link = "$linkmode,$pass" ||
+          test prog,scan = "$linkmode,$pass" ||
+          { test prog != "$linkmode" && test lib != "$linkmode"; }; then
          test -n "$dlopen" && func_append dlfiles " $dlopen"
          test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
        fi
 
          test -n "$dlopen" && func_append dlfiles " $dlopen"
          test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
        fi
 
-       if test "$pass" = conv; then
+       if test conv = "$pass"; then
          # Only check for convenience libraries
          deplibs="$lib $deplibs"
          if test -z "$libdir"; then
            if test -z "$old_library"; then
          # Only check for convenience libraries
          deplibs="$lib $deplibs"
          if test -z "$libdir"; then
            if test -z "$old_library"; then
-             func_fatal_error "cannot find name of link library for \`$lib'"
+             func_fatal_error "cannot find name of link library for '$lib'"
            fi
            # It is a libtool convenience library, so add in its objects.
            func_append convenience " $ladir/$objdir/$old_library"
            func_append old_convenience " $ladir/$objdir/$old_library"
            fi
            # It is a libtool convenience library, so add in its objects.
            func_append convenience " $ladir/$objdir/$old_library"
            func_append old_convenience " $ladir/$objdir/$old_library"
-           tmp_libs=
-           for deplib in $dependency_libs; do
-             deplibs="$deplib $deplibs"
-             if $opt_preserve_dup_deps ; then
-               case "$tmp_libs " in
-               *" $deplib "*) func_append specialdeplibs " $deplib" ;;
-               esac
-             fi
-             func_append tmp_libs " $deplib"
-           done
-         elif test "$linkmode" != prog && test "$linkmode" != lib; then
-           func_fatal_error "\`$lib' is not a convenience library"
+         elif test prog != "$linkmode" && test lib != "$linkmode"; then
+           func_fatal_error "'$lib' is not a convenience library"
          fi
          fi
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           deplibs="$deplib $deplibs"
+           if $opt_preserve_dup_deps; then
+             case "$tmp_libs " in
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+             esac
+           fi
+           func_append tmp_libs " $deplib"
+         done
          continue
        fi # $pass = conv
 
          continue
        fi # $pass = conv
 
@@ -6467,26 +7731,26 @@ func_mode_link ()
        # Get the name of the library we link against.
        linklib=
        if test -n "$old_library" &&
        # Get the name of the library we link against.
        linklib=
        if test -n "$old_library" &&
-          { test "$prefer_static_libs" = yes ||
-            test "$prefer_static_libs,$installed" = "built,no"; }; then
+          { test yes = "$prefer_static_libs" ||
+            test built,no = "$prefer_static_libs,$installed"; }; then
          linklib=$old_library
        else
          for l in $old_library $library_names; do
          linklib=$old_library
        else
          for l in $old_library $library_names; do
-           linklib="$l"
+           linklib=$l
          done
        fi
        if test -z "$linklib"; then
          done
        fi
        if test -z "$linklib"; then
-         func_fatal_error "cannot find name of link library for \`$lib'"
+         func_fatal_error "cannot find name of link library for '$lib'"
        fi
 
        # This library was specified with -dlopen.
        fi
 
        # This library was specified with -dlopen.
-       if test "$pass" = dlopen; then
-         if test -z "$libdir"; then
-           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
-         fi
+       if test dlopen = "$pass"; then
+         test -z "$libdir" \
+           && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
          if test -z "$dlname" ||
          if test -z "$dlname" ||
-            test "$dlopen_support" != yes ||
-            test "$build_libtool_libs" = no; then
+            test yes != "$dlopen_support" ||
+            test no = "$build_libtool_libs"
+         then
            # If there is no dlname, no dlopen support or we're linking
            # statically, we need to preload.  We also need to preload any
            # dependent libraries so libltdl's deplib preloader doesn't
            # If there is no dlname, no dlopen support or we're linking
            # statically, we need to preload.  We also need to preload any
            # dependent libraries so libltdl's deplib preloader doesn't
@@ -6500,40 +7764,40 @@ func_mode_link ()
 
        # We need an absolute path.
        case $ladir in
 
        # We need an absolute path.
        case $ladir in
-       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
        *)
          abs_ladir=`cd "$ladir" && pwd`
          if test -z "$abs_ladir"; then
        *)
          abs_ladir=`cd "$ladir" && pwd`
          if test -z "$abs_ladir"; then
-           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "cannot determine absolute directory name of '$ladir'"
            func_warning "passing it literally to the linker, although it might fail"
            func_warning "passing it literally to the linker, although it might fail"
-           abs_ladir="$ladir"
+           abs_ladir=$ladir
          fi
          ;;
        esac
        func_basename "$lib"
          fi
          ;;
        esac
        func_basename "$lib"
-       laname="$func_basename_result"
+       laname=$func_basename_result
 
        # Find the relevant object directory and library name.
 
        # Find the relevant object directory and library name.
-       if test "X$installed" = Xyes; then
+       if test yes = "$installed"; then
          if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
          if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           func_warning "library \`$lib' was moved."
-           dir="$ladir"
-           absdir="$abs_ladir"
-           libdir="$abs_ladir"
+           func_warning "library '$lib' was moved."
+           dir=$ladir
+           absdir=$abs_ladir
+           libdir=$abs_ladir
          else
          else
-           dir="$lt_sysroot$libdir"
-           absdir="$lt_sysroot$libdir"
+           dir=$lt_sysroot$libdir
+           absdir=$lt_sysroot$libdir
          fi
          fi
-         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+         test yes = "$hardcode_automatic" && avoidtemprpath=yes
        else
          if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
        else
          if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           dir="$ladir"
-           absdir="$abs_ladir"
+           dir=$ladir
+           absdir=$abs_ladir
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          else
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          else
-           dir="$ladir/$objdir"
-           absdir="$abs_ladir/$objdir"
+           dir=$ladir/$objdir
+           absdir=$abs_ladir/$objdir
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          fi
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          fi
@@ -6542,11 +7806,11 @@ func_mode_link ()
        name=$func_stripname_result
 
        # This library was specified with -dlpreopen.
        name=$func_stripname_result
 
        # This library was specified with -dlpreopen.
-       if test "$pass" = dlpreopen; then
-         if test -z "$libdir" && test "$linkmode" = prog; then
-           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+       if test dlpreopen = "$pass"; then
+         if test -z "$libdir" && test prog = "$linkmode"; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
          fi
          fi
-         case "$host" in
+         case $host in
            # special handling for platforms with PE-DLLs.
            *cygwin* | *mingw* | *cegcc* )
              # Linker will automatically link against shared library if both
            # special handling for platforms with PE-DLLs.
            *cygwin* | *mingw* | *cegcc* )
              # Linker will automatically link against shared library if both
@@ -6590,9 +7854,9 @@ func_mode_link ()
 
        if test -z "$libdir"; then
          # Link the convenience library
 
        if test -z "$libdir"; then
          # Link the convenience library
-         if test "$linkmode" = lib; then
+         if test lib = "$linkmode"; then
            deplibs="$dir/$old_library $deplibs"
            deplibs="$dir/$old_library $deplibs"
-         elif test "$linkmode,$pass" = "prog,link"; then
+         elif test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$dir/$old_library $compile_deplibs"
            finalize_deplibs="$dir/$old_library $finalize_deplibs"
          else
            compile_deplibs="$dir/$old_library $compile_deplibs"
            finalize_deplibs="$dir/$old_library $finalize_deplibs"
          else
@@ -6602,14 +7866,14 @@ func_mode_link ()
        fi
 
 
        fi
 
 
-       if test "$linkmode" = prog && test "$pass" != link; then
+       if test prog = "$linkmode" && test link != "$pass"; then
          func_append newlib_search_path " $ladir"
          deplibs="$lib $deplibs"
 
          func_append newlib_search_path " $ladir"
          deplibs="$lib $deplibs"
 
-         linkalldeplibs=no
-         if test "$link_all_deplibs" != no || test -z "$library_names" ||
-            test "$build_libtool_libs" = no; then
-           linkalldeplibs=yes
+         linkalldeplibs=false
+         if test no != "$link_all_deplibs" || test -z "$library_names" ||
+            test no = "$build_libtool_libs"; then
+           linkalldeplibs=:
          fi
 
          tmp_libs=
          fi
 
          tmp_libs=
@@ -6621,14 +7885,14 @@ func_mode_link ()
                 ;;
            esac
            # Need to link against all dependency_libs?
                 ;;
            esac
            # Need to link against all dependency_libs?
-           if test "$linkalldeplibs" = yes; then
+           if $linkalldeplibs; then
              deplibs="$deplib $deplibs"
            else
              # Need to hardcode shared library paths
              # or/and link against static libraries
              newdependency_libs="$deplib $newdependency_libs"
            fi
              deplibs="$deplib $deplibs"
            else
              # Need to hardcode shared library paths
              # or/and link against static libraries
              newdependency_libs="$deplib $newdependency_libs"
            fi
-           if $opt_preserve_dup_deps ; then
+           if $opt_preserve_dup_deps; then
              case "$tmp_libs " in
              *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
              case "$tmp_libs " in
              *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
@@ -6638,15 +7902,15 @@ func_mode_link ()
          continue
        fi # $linkmode = prog...
 
          continue
        fi # $linkmode = prog...
 
-       if test "$linkmode,$pass" = "prog,link"; then
+       if test prog,link = "$linkmode,$pass"; then
          if test -n "$library_names" &&
          if test -n "$library_names" &&
-            { { test "$prefer_static_libs" = no ||
-                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+            { { test no = "$prefer_static_libs" ||
+                test built,yes = "$prefer_static_libs,$installed"; } ||
               test -z "$old_library"; }; then
            # We need to hardcode the library path
               test -z "$old_library"; }; then
            # We need to hardcode the library path
-           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
              # Make sure the rpath contains only unique directories.
              # Make sure the rpath contains only unique directories.
-             case "$temp_rpath:" in
+             case $temp_rpath: in
              *"$absdir:"*) ;;
              *) func_append temp_rpath "$absdir:" ;;
              esac
              *"$absdir:"*) ;;
              *) func_append temp_rpath "$absdir:" ;;
              esac
@@ -6675,9 +7939,9 @@ func_mode_link ()
            esac
          fi # $linkmode,$pass = prog,link...
 
            esac
          fi # $linkmode,$pass = prog,link...
 
-         if test "$alldeplibs" = yes &&
-            { test "$deplibs_check_method" = pass_all ||
-              { test "$build_libtool_libs" = yes &&
+         if $alldeplibs &&
+            { test pass_all = "$deplibs_check_method" ||
+              { test yes = "$build_libtool_libs" &&
                 test -n "$library_names"; }; }; then
            # We only need to search for static libraries
            continue
                 test -n "$library_names"; }; }; then
            # We only need to search for static libraries
            continue
@@ -6686,11 +7950,11 @@ func_mode_link ()
 
        link_static=no # Whether the deplib will be linked statically
        use_static_libs=$prefer_static_libs
 
        link_static=no # Whether the deplib will be linked statically
        use_static_libs=$prefer_static_libs
-       if test "$use_static_libs" = built && test "$installed" = yes; then
+       if test built = "$use_static_libs" && test yes = "$installed"; then
          use_static_libs=no
        fi
        if test -n "$library_names" &&
          use_static_libs=no
        fi
        if test -n "$library_names" &&
-          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+          { test no = "$use_static_libs" || test -z "$old_library"; }; then
          case $host in
          *cygwin* | *mingw* | *cegcc*)
              # No point in relinking DLLs because paths are not encoded
          case $host in
          *cygwin* | *mingw* | *cegcc*)
              # No point in relinking DLLs because paths are not encoded
@@ -6698,7 +7962,7 @@ func_mode_link ()
              need_relink=no
            ;;
          *)
              need_relink=no
            ;;
          *)
-           if test "$installed" = no; then
+           if test no = "$installed"; then
              func_append notinst_deplibs " $lib"
              need_relink=yes
            fi
              func_append notinst_deplibs " $lib"
              need_relink=yes
            fi
@@ -6708,24 +7972,24 @@ func_mode_link ()
 
          # Warn about portability, can't link against -module's on some
          # systems (darwin).  Don't bleat about dlopened modules though!
 
          # Warn about portability, can't link against -module's on some
          # systems (darwin).  Don't bleat about dlopened modules though!
-         dlopenmodule=""
+         dlopenmodule=
          for dlpremoduletest in $dlprefiles; do
            if test "X$dlpremoduletest" = "X$lib"; then
          for dlpremoduletest in $dlprefiles; do
            if test "X$dlpremoduletest" = "X$lib"; then
-             dlopenmodule="$dlpremoduletest"
+             dlopenmodule=$dlpremoduletest
              break
            fi
          done
              break
            fi
          done
-         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+         if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
            echo
            echo
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; then
              $ECHO "*** Warning: Linking the executable $output against the loadable module"
            else
              $ECHO "*** Warning: Linking the shared library $output against the loadable module"
            fi
            $ECHO "*** $linklib is not portable!"
          fi
              $ECHO "*** Warning: Linking the executable $output against the loadable module"
            else
              $ECHO "*** Warning: Linking the shared library $output against the loadable module"
            fi
            $ECHO "*** $linklib is not portable!"
          fi
-         if test "$linkmode" = lib &&
-            test "$hardcode_into_libs" = yes; then
+         if test lib = "$linkmode" &&
+            test yes = "$hardcode_into_libs"; then
            # Hardcode the library path.
            # Skip directories that are in the system default run-time
            # search path.
            # Hardcode the library path.
            # Skip directories that are in the system default run-time
            # search path.
@@ -6753,43 +8017,43 @@ func_mode_link ()
            # figure out the soname
            set dummy $library_names
            shift
            # figure out the soname
            set dummy $library_names
            shift
-           realname="$1"
+           realname=$1
            shift
            libname=`eval "\\$ECHO \"$libname_spec\""`
            # use dlname if we got it. it's perfectly good, no?
            if test -n "$dlname"; then
            shift
            libname=`eval "\\$ECHO \"$libname_spec\""`
            # use dlname if we got it. it's perfectly good, no?
            if test -n "$dlname"; then
-             soname="$dlname"
+             soname=$dlname
            elif test -n "$soname_spec"; then
              # bleh windows
              case $host in
              *cygwin* | mingw* | *cegcc*)
                func_arith $current - $age
                major=$func_arith_result
            elif test -n "$soname_spec"; then
              # bleh windows
              case $host in
              *cygwin* | mingw* | *cegcc*)
                func_arith $current - $age
                major=$func_arith_result
-               versuffix="-$major"
+               versuffix=-$major
                ;;
              esac
              eval soname=\"$soname_spec\"
            else
                ;;
              esac
              eval soname=\"$soname_spec\"
            else
-             soname="$realname"
+             soname=$realname
            fi
 
            # Make a new name for the extract_expsyms_cmds to use
            fi
 
            # Make a new name for the extract_expsyms_cmds to use
-           soroot="$soname"
+           soroot=$soname
            func_basename "$soroot"
            func_basename "$soroot"
-           soname="$func_basename_result"
+           soname=$func_basename_result
            func_stripname 'lib' '.dll' "$soname"
            newlib=libimp-$func_stripname_result.a
 
            # If the library has no export list, then create one now
            if test -f "$output_objdir/$soname-def"; then :
            else
            func_stripname 'lib' '.dll' "$soname"
            newlib=libimp-$func_stripname_result.a
 
            # If the library has no export list, then create one now
            if test -f "$output_objdir/$soname-def"; then :
            else
-             func_verbose "extracting exported symbol list from \`$soname'"
+             func_verbose "extracting exported symbol list from '$soname'"
              func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
            fi
 
            # Create $newlib
            if test -f "$output_objdir/$newlib"; then :; else
              func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
            fi
 
            # Create $newlib
            if test -f "$output_objdir/$newlib"; then :; else
-             func_verbose "generating import library for \`$soname'"
+             func_verbose "generating import library for '$soname'"
              func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
            fi
            # make sure the library variables are pointing to the new library
              func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
            fi
            # make sure the library variables are pointing to the new library
@@ -6797,58 +8061,58 @@ func_mode_link ()
            linklib=$newlib
          fi # test -n "$old_archive_from_expsyms_cmds"
 
            linklib=$newlib
          fi # test -n "$old_archive_from_expsyms_cmds"
 
-         if test "$linkmode" = prog || test "$opt_mode" != relink; then
+         if test prog = "$linkmode" || test relink != "$opt_mode"; then
            add_shlibpath=
            add_dir=
            add=
            lib_linked=yes
            case $hardcode_action in
            immediate | unsupported)
            add_shlibpath=
            add_dir=
            add=
            lib_linked=yes
            case $hardcode_action in
            immediate | unsupported)
-             if test "$hardcode_direct" = no; then
-               add="$dir/$linklib"
+             if test no = "$hardcode_direct"; then
+               add=$dir/$linklib
                case $host in
                case $host in
-                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+                 *-*-sysv4*uw2*) add_dir=-L$dir ;;
                  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
                  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-                   *-*-unixware7*) add_dir="-L$dir" ;;
+                   *-*-unixware7*) add_dir=-L$dir ;;
                  *-*-darwin* )
                  *-*-darwin* )
-                   # if the lib is a (non-dlopened) module then we can not
+                   # if the lib is a (non-dlopened) module then we cannot
                    # link against it, someone is ignoring the earlier warnings
                    if /usr/bin/file -L $add 2> /dev/null |
                    # link against it, someone is ignoring the earlier warnings
                    if /usr/bin/file -L $add 2> /dev/null |
-                        $GREP ": [^:]* bundle" >/dev/null ; then
+                        $GREP ": [^:]* bundle" >/dev/null; then
                      if test "X$dlopenmodule" != "X$lib"; then
                        $ECHO "*** Warning: lib $linklib is a module, not a shared library"
                      if test "X$dlopenmodule" != "X$lib"; then
                        $ECHO "*** Warning: lib $linklib is a module, not a shared library"
-                       if test -z "$old_library" ; then
+                       if test -z "$old_library"; then
                          echo
                          echo "*** And there doesn't seem to be a static archive available"
                          echo "*** The link will probably fail, sorry"
                        else
                          echo
                          echo "*** And there doesn't seem to be a static archive available"
                          echo "*** The link will probably fail, sorry"
                        else
-                         add="$dir/$old_library"
+                         add=$dir/$old_library
                        fi
                      elif test -n "$old_library"; then
                        fi
                      elif test -n "$old_library"; then
-                       add="$dir/$old_library"
+                       add=$dir/$old_library
                      fi
                    fi
                esac
                      fi
                    fi
                esac
-             elif test "$hardcode_minus_L" = no; then
+             elif test no = "$hardcode_minus_L"; then
                case $host in
                case $host in
-               *-*-sunos*) add_shlibpath="$dir" ;;
+               *-*-sunos*) add_shlibpath=$dir ;;
                esac
                esac
-               add_dir="-L$dir"
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = no; then
-               add_shlibpath="$dir"
-               add="-l$name"
+               add_dir=-L$dir
+               add=-l$name
+             elif test no = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
              else
                lib_linked=no
              fi
              ;;
            relink)
              else
                lib_linked=no
              fi
              ;;
            relink)
-             if test "$hardcode_direct" = yes &&
-                test "$hardcode_direct_absolute" = no; then
-               add="$dir/$linklib"
-             elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$absdir"
+             if test yes = "$hardcode_direct" &&
+                test no = "$hardcode_direct_absolute"; then
+               add=$dir/$linklib
+             elif test yes = "$hardcode_minus_L"; then
+               add_dir=-L$absdir
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
@@ -6857,10 +8121,10 @@ func_mode_link ()
                      ;;
                  esac
                fi
                      ;;
                  esac
                fi
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = yes; then
-               add_shlibpath="$dir"
-               add="-l$name"
+               add=-l$name
+             elif test yes = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
              else
                lib_linked=no
              fi
              else
                lib_linked=no
              fi
@@ -6868,7 +8132,7 @@ func_mode_link ()
            *) lib_linked=no ;;
            esac
 
            *) lib_linked=no ;;
            esac
 
-           if test "$lib_linked" != yes; then
+           if test yes != "$lib_linked"; then
              func_fatal_configuration "unsupported hardcode properties"
            fi
 
              func_fatal_configuration "unsupported hardcode properties"
            fi
 
@@ -6878,15 +8142,15 @@ func_mode_link ()
              *) func_append compile_shlibpath "$add_shlibpath:" ;;
              esac
            fi
              *) func_append compile_shlibpath "$add_shlibpath:" ;;
              esac
            fi
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; then
              test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
              test -n "$add" && compile_deplibs="$add $compile_deplibs"
            else
              test -n "$add_dir" && deplibs="$add_dir $deplibs"
              test -n "$add" && deplibs="$add $deplibs"
              test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
              test -n "$add" && compile_deplibs="$add $compile_deplibs"
            else
              test -n "$add_dir" && deplibs="$add_dir $deplibs"
              test -n "$add" && deplibs="$add $deplibs"
-             if test "$hardcode_direct" != yes &&
-                test "$hardcode_minus_L" != yes &&
-                test "$hardcode_shlibpath_var" = yes; then
+             if test yes != "$hardcode_direct" &&
+                test yes != "$hardcode_minus_L" &&
+                test yes = "$hardcode_shlibpath_var"; then
                case :$finalize_shlibpath: in
                *":$libdir:"*) ;;
                *) func_append finalize_shlibpath "$libdir:" ;;
                case :$finalize_shlibpath: in
                *":$libdir:"*) ;;
                *) func_append finalize_shlibpath "$libdir:" ;;
@@ -6895,33 +8159,33 @@ func_mode_link ()
            fi
          fi
 
            fi
          fi
 
-         if test "$linkmode" = prog || test "$opt_mode" = relink; then
+         if test prog = "$linkmode" || test relink = "$opt_mode"; then
            add_shlibpath=
            add_dir=
            add=
            # Finalize command for both is simple: just hardcode it.
            add_shlibpath=
            add_dir=
            add=
            # Finalize command for both is simple: just hardcode it.
-           if test "$hardcode_direct" = yes &&
-              test "$hardcode_direct_absolute" = no; then
-             add="$libdir/$linklib"
-           elif test "$hardcode_minus_L" = yes; then
-             add_dir="-L$libdir"
-             add="-l$name"
-           elif test "$hardcode_shlibpath_var" = yes; then
+           if test yes = "$hardcode_direct" &&
+              test no = "$hardcode_direct_absolute"; then
+             add=$libdir/$linklib
+           elif test yes = "$hardcode_minus_L"; then
+             add_dir=-L$libdir
+             add=-l$name
+           elif test yes = "$hardcode_shlibpath_var"; then
              case :$finalize_shlibpath: in
              *":$libdir:"*) ;;
              *) func_append finalize_shlibpath "$libdir:" ;;
              esac
              case :$finalize_shlibpath: in
              *":$libdir:"*) ;;
              *) func_append finalize_shlibpath "$libdir:" ;;
              esac
-             add="-l$name"
-           elif test "$hardcode_automatic" = yes; then
+             add=-l$name
+           elif test yes = "$hardcode_automatic"; then
              if test -n "$inst_prefix_dir" &&
              if test -n "$inst_prefix_dir" &&
-                test -f "$inst_prefix_dir$libdir/$linklib" ; then
-               add="$inst_prefix_dir$libdir/$linklib"
+                test -f "$inst_prefix_dir$libdir/$linklib"; then
+               add=$inst_prefix_dir$libdir/$linklib
              else
              else
-               add="$libdir/$linklib"
+               add=$libdir/$linklib
              fi
            else
              # We cannot seem to hardcode it, guess we'll fake it.
              fi
            else
              # We cannot seem to hardcode it, guess we'll fake it.
-             add_dir="-L$libdir"
+             add_dir=-L$libdir
              # Try looking first in the location we're being installed to.
              if test -n "$inst_prefix_dir"; then
                case $libdir in
              # Try looking first in the location we're being installed to.
              if test -n "$inst_prefix_dir"; then
                case $libdir in
@@ -6930,10 +8194,10 @@ func_mode_link ()
                    ;;
                esac
              fi
                    ;;
                esac
              fi
-             add="-l$name"
+             add=-l$name
            fi
 
            fi
 
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; then
              test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
              test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
            else
              test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
              test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
            else
@@ -6941,43 +8205,43 @@ func_mode_link ()
              test -n "$add" && deplibs="$add $deplibs"
            fi
          fi
              test -n "$add" && deplibs="$add $deplibs"
            fi
          fi
-       elif test "$linkmode" = prog; then
+       elif test prog = "$linkmode"; then
          # Here we assume that one of hardcode_direct or hardcode_minus_L
          # is not unsupported.  This is valid on all known static and
          # shared platforms.
          # Here we assume that one of hardcode_direct or hardcode_minus_L
          # is not unsupported.  This is valid on all known static and
          # shared platforms.
-         if test "$hardcode_direct" != unsupported; then
-           test -n "$old_library" && linklib="$old_library"
+         if test unsupported != "$hardcode_direct"; then
+           test -n "$old_library" && linklib=$old_library
            compile_deplibs="$dir/$linklib $compile_deplibs"
            finalize_deplibs="$dir/$linklib $finalize_deplibs"
          else
            compile_deplibs="-l$name -L$dir $compile_deplibs"
            finalize_deplibs="-l$name -L$dir $finalize_deplibs"
          fi
            compile_deplibs="$dir/$linklib $compile_deplibs"
            finalize_deplibs="$dir/$linklib $finalize_deplibs"
          else
            compile_deplibs="-l$name -L$dir $compile_deplibs"
            finalize_deplibs="-l$name -L$dir $finalize_deplibs"
          fi
-       elif test "$build_libtool_libs" = yes; then
+       elif test yes = "$build_libtool_libs"; then
          # Not a shared library
          # Not a shared library
-         if test "$deplibs_check_method" != pass_all; then
+         if test pass_all != "$deplibs_check_method"; then
            # We're trying link a shared library against a static one
            # but the system doesn't support it.
 
            # Just print a warning and add the library to dependency_libs so
            # that the program can be linked against the static library.
            echo
            # We're trying link a shared library against a static one
            # but the system doesn't support it.
 
            # Just print a warning and add the library to dependency_libs so
            # that the program can be linked against the static library.
            echo
-           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** Warning: This system cannot link to static lib archive $lib."
            echo "*** I have the capability to make that library automatically link in when"
            echo "*** you link to this library.  But I can only do this if you have a"
            echo "*** shared version of the library, which you do not appear to have."
            echo "*** I have the capability to make that library automatically link in when"
            echo "*** you link to this library.  But I can only do this if you have a"
            echo "*** shared version of the library, which you do not appear to have."
-           if test "$module" = yes; then
+           if test yes = "$module"; then
              echo "*** But as you try to build a module library, libtool will still create "
              echo "*** a static module, that should work as long as the dlopening application"
              echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
              if test -z "$global_symbol_pipe"; then
                echo
                echo "*** However, this would only work if libtool was able to extract symbol"
              echo "*** But as you try to build a module library, libtool will still create "
              echo "*** a static module, that should work as long as the dlopening application"
              echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
              if test -z "$global_symbol_pipe"; then
                echo
                echo "*** However, this would only work if libtool was able to extract symbol"
-               echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
                echo "*** not find such a program.  So, this module is probably useless."
                echo "*** not find such a program.  So, this module is probably useless."
-               echo "*** \`nm' from GNU binutils and a full rebuild may help."
+               echo "*** 'nm' from GNU binutils and a full rebuild may help."
              fi
              fi
-             if test "$build_old_libs" = no; then
+             if test no = "$build_old_libs"; then
                build_libtool_libs=module
                build_old_libs=yes
              else
                build_libtool_libs=module
                build_old_libs=yes
              else
@@ -6990,11 +8254,11 @@ func_mode_link ()
          fi
        fi # link shared/static library?
 
          fi
        fi # link shared/static library?
 
-       if test "$linkmode" = lib; then
+       if test lib = "$linkmode"; then
          if test -n "$dependency_libs" &&
          if test -n "$dependency_libs" &&
-            { test "$hardcode_into_libs" != yes ||
-              test "$build_old_libs" = yes ||
-              test "$link_static" = yes; }; then
+            { test yes != "$hardcode_into_libs" ||
+              test yes = "$build_old_libs" ||
+              test yes = "$link_static"; }; then
            # Extract -R from dependency_libs
            temp_deplibs=
            for libdir in $dependency_libs; do
            # Extract -R from dependency_libs
            temp_deplibs=
            for libdir in $dependency_libs; do
@@ -7008,12 +8272,12 @@ func_mode_link ()
              *) func_append temp_deplibs " $libdir";;
              esac
            done
              *) func_append temp_deplibs " $libdir";;
              esac
            done
-           dependency_libs="$temp_deplibs"
+           dependency_libs=$temp_deplibs
          fi
 
          func_append newlib_search_path " $absdir"
          # Link against this library
          fi
 
          func_append newlib_search_path " $absdir"
          # Link against this library
-         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
          # ... and its dependency_libs
          tmp_libs=
          for deplib in $dependency_libs; do
          # ... and its dependency_libs
          tmp_libs=
          for deplib in $dependency_libs; do
@@ -7023,7 +8287,7 @@ func_mode_link ()
                    func_resolve_sysroot "$func_stripname_result";;
               *) func_resolve_sysroot "$deplib" ;;
             esac
                    func_resolve_sysroot "$func_stripname_result";;
               *) func_resolve_sysroot "$deplib" ;;
             esac
-           if $opt_preserve_dup_deps ; then
+           if $opt_preserve_dup_deps; then
              case "$tmp_libs " in
              *" $func_resolve_sysroot_result "*)
                 func_append specialdeplibs " $func_resolve_sysroot_result" ;;
              case "$tmp_libs " in
              *" $func_resolve_sysroot_result "*)
                 func_append specialdeplibs " $func_resolve_sysroot_result" ;;
@@ -7032,12 +8296,12 @@ func_mode_link ()
            func_append tmp_libs " $func_resolve_sysroot_result"
          done
 
            func_append tmp_libs " $func_resolve_sysroot_result"
          done
 
-         if test "$link_all_deplibs" != no; then
+         if test no != "$link_all_deplibs"; then
            # Add the search paths of all dependency libraries
            for deplib in $dependency_libs; do
              path=
              case $deplib in
            # Add the search paths of all dependency libraries
            for deplib in $dependency_libs; do
              path=
              case $deplib in
-             -L*) path="$deplib" ;;
+             -L*) path=$deplib ;;
              *.la)
                func_resolve_sysroot "$deplib"
                deplib=$func_resolve_sysroot_result
              *.la)
                func_resolve_sysroot "$deplib"
                deplib=$func_resolve_sysroot_result
@@ -7045,12 +8309,12 @@ func_mode_link ()
                dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
                dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
-               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
                *)
                  absdir=`cd "$dir" && pwd`
                  if test -z "$absdir"; then
                *)
                  absdir=`cd "$dir" && pwd`
                  if test -z "$absdir"; then
-                   func_warning "cannot determine absolute directory name of \`$dir'"
-                   absdir="$dir"
+                   func_warning "cannot determine absolute directory name of '$dir'"
+                   absdir=$dir
                  fi
                  ;;
                esac
                  fi
                  ;;
                esac
@@ -7058,35 +8322,35 @@ func_mode_link ()
                case $host in
                *-*-darwin*)
                  depdepl=
                case $host in
                *-*-darwin*)
                  depdepl=
-                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-                 if test -n "$deplibrary_names" ; then
-                   for tmp in $deplibrary_names ; do
+                 eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names"; then
+                   for tmp in $deplibrary_names; do
                      depdepl=$tmp
                    done
                      depdepl=$tmp
                    done
-                   if test -f "$absdir/$objdir/$depdepl" ; then
-                     depdepl="$absdir/$objdir/$depdepl"
-                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                   if test -f "$absdir/$objdir/$depdepl"; then
+                     depdepl=$absdir/$objdir/$depdepl
+                     darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
                       if test -z "$darwin_install_name"; then
                       if test -z "$darwin_install_name"; then
-                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
                       fi
-                     func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-                     func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+                     func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+                     func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
                      path=
                    fi
                  fi
                  ;;
                *)
                      path=
                    fi
                  fi
                  ;;
                *)
-                 path="-L$absdir/$objdir"
+                 path=-L$absdir/$objdir
                  ;;
                esac
                else
                  ;;
                esac
                else
-                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
                  test -z "$libdir" && \
                  test -z "$libdir" && \
-                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                   func_fatal_error "'$deplib' is not a valid libtool archive"
                  test "$absdir" != "$libdir" && \
                  test "$absdir" != "$libdir" && \
-                   func_warning "\`$deplib' seems to be moved"
+                   func_warning "'$deplib' seems to be moved"
 
 
-                 path="-L$absdir"
+                 path=-L$absdir
                fi
                ;;
              esac
                fi
                ;;
              esac
@@ -7098,23 +8362,23 @@ func_mode_link ()
          fi # link_all_deplibs != no
        fi # linkmode = lib
       done # for deplib in $libs
          fi # link_all_deplibs != no
        fi # linkmode = lib
       done # for deplib in $libs
-      if test "$pass" = link; then
-       if test "$linkmode" = "prog"; then
+      if test link = "$pass"; then
+       if test prog = "$linkmode"; then
          compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
          finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
        else
          compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        fi
       fi
          compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
          finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
        else
          compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        fi
       fi
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; then
        # Link the dlpreopened libraries before other libraries
        for deplib in $save_deplibs; do
          deplibs="$deplib $deplibs"
        done
       fi
        # Link the dlpreopened libraries before other libraries
        for deplib in $save_deplibs; do
          deplibs="$deplib $deplibs"
        done
       fi
-      if test "$pass" != dlopen; then
-       if test "$pass" != conv; then
+      if test dlopen != "$pass"; then
+       test conv = "$pass" || {
          # Make sure lib_search_path contains only unique directories.
          lib_search_path=
          for dir in $newlib_search_path; do
          # Make sure lib_search_path contains only unique directories.
          lib_search_path=
          for dir in $newlib_search_path; do
@@ -7124,12 +8388,12 @@ func_mode_link ()
            esac
          done
          newlib_search_path=
            esac
          done
          newlib_search_path=
-       fi
+       }
 
 
-       if test "$linkmode,$pass" != "prog,link"; then
-         vars="deplibs"
-       else
+       if test prog,link = "$linkmode,$pass"; then
          vars="compile_deplibs finalize_deplibs"
          vars="compile_deplibs finalize_deplibs"
+       else
+         vars=deplibs
        fi
        for var in $vars dependency_libs; do
          # Add libraries to $var in reverse order
        fi
        for var in $vars dependency_libs; do
          # Add libraries to $var in reverse order
@@ -7190,59 +8454,59 @@ func_mode_link ()
       # Last step: remove runtime libs from dependency_libs
       # (they stay in deplibs)
       tmp_libs=
       # Last step: remove runtime libs from dependency_libs
       # (they stay in deplibs)
       tmp_libs=
-      for i in $dependency_libs ; do
+      for i in $dependency_libs; do
        case " $predeps $postdeps $compiler_lib_search_path " in
        *" $i "*)
        case " $predeps $postdeps $compiler_lib_search_path " in
        *" $i "*)
-         i=""
+         i=
          ;;
        esac
          ;;
        esac
-       if test -n "$i" ; then
+       if test -n "$i"; then
          func_append tmp_libs " $i"
        fi
       done
       dependency_libs=$tmp_libs
     done # for pass
          func_append tmp_libs " $i"
        fi
       done
       dependency_libs=$tmp_libs
     done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
     fi
     fi
-    if test "$linkmode" = prog || test "$linkmode" = lib; then
-      dlprefiles="$newdlprefiles"
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
     fi
 
     case $linkmode in
     oldlib)
     fi
 
     case $linkmode in
     oldlib)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       func_warning "\`-dlopen' is ignored for archives"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for archives"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+       func_warning "'-l' and '-L' are ignored for archives" ;;
       esac
 
       test -n "$rpath" && \
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for archives"
+       func_warning "'-rpath' is ignored for archives"
 
       test -n "$xrpath" && \
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for archives"
+       func_warning "'-R' is ignored for archives"
 
       test -n "$vinfo" && \
 
       test -n "$vinfo" && \
-       func_warning "\`-version-info/-version-number' is ignored for archives"
+       func_warning "'-version-info/-version-number' is ignored for archives"
 
       test -n "$release" && \
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for archives"
+       func_warning "'-release' is ignored for archives"
 
       test -n "$export_symbols$export_symbols_regex" && \
 
       test -n "$export_symbols$export_symbols_regex" && \
-       func_warning "\`-export-symbols' is ignored for archives"
+       func_warning "'-export-symbols' is ignored for archives"
 
       # Now set the variables for building old libraries.
       build_libtool_libs=no
 
       # Now set the variables for building old libraries.
       build_libtool_libs=no
-      oldlibs="$output"
+      oldlibs=$output
       func_append objs "$old_deplibs"
       ;;
 
     lib)
       func_append objs "$old_deplibs"
       ;;
 
     lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
+      # Make sure we only generate libraries of the form 'libNAME.la'.
       case $outputname in
       lib*)
        func_stripname 'lib' '.la' "$outputname"
       case $outputname in
       lib*)
        func_stripname 'lib' '.la' "$outputname"
@@ -7251,10 +8515,10 @@ func_mode_link ()
        eval libname=\"$libname_spec\"
        ;;
       *)
        eval libname=\"$libname_spec\"
        ;;
       *)
-       test "$module" = no && \
-         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+       test no = "$module" \
+         && func_fatal_help "libtool library '$output' must begin with 'lib'"
 
 
-       if test "$need_lib_prefix" != no; then
+       if test no != "$need_lib_prefix"; then
          # Add the "lib" prefix for modules if required
          func_stripname '' '.la' "$outputname"
          name=$func_stripname_result
          # Add the "lib" prefix for modules if required
          func_stripname '' '.la' "$outputname"
          name=$func_stripname_result
@@ -7268,8 +8532,8 @@ func_mode_link ()
       esac
 
       if test -n "$objs"; then
       esac
 
       if test -n "$objs"; then
-       if test "$deplibs_check_method" != pass_all; then
-         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       if test pass_all != "$deplibs_check_method"; then
+         func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
        else
          echo
          $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
        else
          echo
          $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
@@ -7278,21 +8542,21 @@ func_mode_link ()
        fi
       fi
 
        fi
       fi
 
-      test "$dlself" != no && \
-       func_warning "\`-dlopen self' is ignored for libtool libraries"
+      test no = "$dlself" \
+       || func_warning "'-dlopen self' is ignored for libtool libraries"
 
       set dummy $rpath
       shift
 
       set dummy $rpath
       shift
-      test "$#" -gt 1 && \
-       func_warning "ignoring multiple \`-rpath's for a libtool library"
+      test 1 -lt "$#" \
+       && func_warning "ignoring multiple '-rpath's for a libtool library"
 
 
-      install_libdir="$1"
+      install_libdir=$1
 
       oldlibs=
       if test -z "$rpath"; then
 
       oldlibs=
       if test -z "$rpath"; then
-       if test "$build_libtool_libs" = yes; then
+       if test yes = "$build_libtool_libs"; then
          # Building a libtool convenience library.
          # Building a libtool convenience library.
-         # Some compilers have problems with a `.al' extension so
+         # Some compilers have problems with a '.al' extension so
          # convenience libraries should have the same extension an
          # archive normally would.
          oldlibs="$output_objdir/$libname.$libext $oldlibs"
          # convenience libraries should have the same extension an
          # archive normally would.
          oldlibs="$output_objdir/$libname.$libext $oldlibs"
@@ -7301,20 +8565,20 @@ func_mode_link ()
        fi
 
        test -n "$vinfo" && \
        fi
 
        test -n "$vinfo" && \
-         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+         func_warning "'-version-info/-version-number' is ignored for convenience libraries"
 
        test -n "$release" && \
 
        test -n "$release" && \
-         func_warning "\`-release' is ignored for convenience libraries"
+         func_warning "'-release' is ignored for convenience libraries"
       else
 
        # Parse the version information argument.
       else
 
        # Parse the version information argument.
-       save_ifs="$IFS"; IFS=':'
+       save_ifs=$IFS; IFS=:
        set dummy $vinfo 0 0 0
        shift
        set dummy $vinfo 0 0 0
        shift
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        test -n "$7" && \
 
        test -n "$7" && \
-         func_fatal_help "too many parameters to \`-version-info'"
+         func_fatal_help "too many parameters to '-version-info'"
 
        # convert absolute version numbers to libtool ages
        # this retains compatibility with .la files and attempts
 
        # convert absolute version numbers to libtool ages
        # this retains compatibility with .la files and attempts
@@ -7322,45 +8586,42 @@ func_mode_link ()
 
        case $vinfo_number in
        yes)
 
        case $vinfo_number in
        yes)
-         number_major="$1"
-         number_minor="$2"
-         number_revision="$3"
+         number_major=$1
+         number_minor=$2
+         number_revision=$3
          #
          # There are really only two kinds -- those that
          # use the current revision as the major version
          # and those that subtract age and use age as
          # a minor version.  But, then there is irix
          #
          # There are really only two kinds -- those that
          # use the current revision as the major version
          # and those that subtract age and use age as
          # a minor version.  But, then there is irix
-         # which has an extra 1 added just for fun
+         # that has an extra 1 added just for fun
          #
          case $version_type in
          # correct linux to gnu/linux during the next big refactor
          darwin|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
          #
          case $version_type in
          # correct linux to gnu/linux during the next big refactor
          darwin|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
-           age="$number_minor"
-           revision="$number_revision"
+           age=$number_minor
+           revision=$number_revision
            ;;
          freebsd-aout|freebsd-elf|qnx|sunos)
            ;;
          freebsd-aout|freebsd-elf|qnx|sunos)
-           current="$number_major"
-           revision="$number_minor"
-           age="0"
+           current=$number_major
+           revision=$number_minor
+           age=0
            ;;
          irix|nonstopux)
            func_arith $number_major + $number_minor
            current=$func_arith_result
            ;;
          irix|nonstopux)
            func_arith $number_major + $number_minor
            current=$func_arith_result
-           age="$number_minor"
-           revision="$number_minor"
+           age=$number_minor
+           revision=$number_minor
            lt_irix_increment=no
            ;;
            lt_irix_increment=no
            ;;
-         *)
-           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
-           ;;
          esac
          ;;
        no)
          esac
          ;;
        no)
-         current="$1"
-         revision="$2"
-         age="$3"
+         current=$1
+         revision=$2
+         age=$3
          ;;
        esac
 
          ;;
        esac
 
@@ -7368,30 +8629,30 @@ func_mode_link ()
        case $current in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
        case $current in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
-         func_error "CURRENT \`$current' must be a nonnegative integer"
-         func_fatal_error "\`$vinfo' is not valid version information"
+         func_error "CURRENT '$current' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
          ;;
        esac
 
        case $revision in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
          ;;
        esac
 
        case $revision in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
-         func_error "REVISION \`$revision' must be a nonnegative integer"
-         func_fatal_error "\`$vinfo' is not valid version information"
+         func_error "REVISION '$revision' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
          ;;
        esac
 
        case $age in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
          ;;
        esac
 
        case $age in
        0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
        *)
-         func_error "AGE \`$age' must be a nonnegative integer"
-         func_fatal_error "\`$vinfo' is not valid version information"
+         func_error "AGE '$age' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
          ;;
        esac
 
        if test "$age" -gt "$current"; then
          ;;
        esac
 
        if test "$age" -gt "$current"; then
-         func_error "AGE \`$age' is greater than the current interface number \`$current'"
-         func_fatal_error "\`$vinfo' is not valid version information"
+         func_error "AGE '$age' is greater than the current interface number '$current'"
+         func_fatal_error "'$vinfo' is not valid version information"
        fi
 
        # Calculate the version variables.
        fi
 
        # Calculate the version variables.
@@ -7406,26 +8667,35 @@ func_mode_link ()
          # verstring for coding it into the library header
          func_arith $current - $age
          major=.$func_arith_result
          # verstring for coding it into the library header
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix="$major.$age.$revision"
+         versuffix=$major.$age.$revision
          # Darwin ld doesn't like 0 for these options...
          func_arith $current + 1
          minor_current=$func_arith_result
          # Darwin ld doesn't like 0 for these options...
          func_arith $current + 1
          minor_current=$func_arith_result
-         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
          verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
          verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
          ;;
 
        freebsd-aout)
          ;;
 
        freebsd-aout)
-         major=".$current"
-         versuffix=".$current.$revision";
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        freebsd-elf)
          ;;
 
        freebsd-elf)
-         major=".$current"
-         versuffix=".$current"
+         major=.$current
+         versuffix=.$current
          ;;
 
        irix | nonstopux)
          ;;
 
        irix | nonstopux)
-         if test "X$lt_irix_increment" = "Xno"; then
+         if test no = "$lt_irix_increment"; then
            func_arith $current - $age
          else
            func_arith $current - $age + 1
            func_arith $current - $age
          else
            func_arith $current - $age + 1
@@ -7436,69 +8706,69 @@ func_mode_link ()
            nonstopux) verstring_prefix=nonstopux ;;
            *)         verstring_prefix=sgi ;;
          esac
            nonstopux) verstring_prefix=nonstopux ;;
            *)         verstring_prefix=sgi ;;
          esac
-         verstring="$verstring_prefix$major.$revision"
+         verstring=$verstring_prefix$major.$revision
 
          # Add in all the interfaces that we are compatible with.
          loop=$revision
 
          # Add in all the interfaces that we are compatible with.
          loop=$revision
-         while test "$loop" -ne 0; do
+         while test 0 -ne "$loop"; do
            func_arith $revision - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
            func_arith $revision - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
-           verstring="$verstring_prefix$major.$iface:$verstring"
+           verstring=$verstring_prefix$major.$iface:$verstring
          done
 
          done
 
-         # Before this point, $major must not contain `.'.
+         # Before this point, $major must not contain '.'.
          major=.$major
          major=.$major
-         versuffix="$major.$revision"
+         versuffix=$major.$revision
          ;;
 
        linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
          ;;
 
        linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix="$major.$age.$revision"
+         versuffix=$major.$age.$revision
          ;;
 
        osf)
          func_arith $current - $age
          major=.$func_arith_result
          ;;
 
        osf)
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix=".$current.$age.$revision"
-         verstring="$current.$age.$revision"
+         versuffix=.$current.$age.$revision
+         verstring=$current.$age.$revision
 
          # Add in all the interfaces that we are compatible with.
          loop=$age
 
          # Add in all the interfaces that we are compatible with.
          loop=$age
-         while test "$loop" -ne 0; do
+         while test 0 -ne "$loop"; do
            func_arith $current - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
            func_arith $current - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
-           verstring="$verstring:${iface}.0"
+           verstring=$verstring:$iface.0
          done
 
          # Make executables depend on our current version.
          done
 
          # Make executables depend on our current version.
-         func_append verstring ":${current}.0"
+         func_append verstring ":$current.0"
          ;;
 
        qnx)
          ;;
 
        qnx)
-         major=".$current"
-         versuffix=".$current"
+         major=.$current
+         versuffix=.$current
          ;;
 
        sunos)
          ;;
 
        sunos)
-         major=".$current"
-         versuffix=".$current.$revision"
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        windows)
          # Use '-' rather than '.', since we only want one
          ;;
 
        windows)
          # Use '-' rather than '.', since we only want one
-         # extension on DOS 8.3 filesystems.
+         # extension on DOS 8.3 file systems.
          func_arith $current - $age
          major=$func_arith_result
          func_arith $current - $age
          major=$func_arith_result
-         versuffix="-$major"
+         versuffix=-$major
          ;;
 
        *)
          ;;
 
        *)
-         func_fatal_configuration "unknown library version type \`$version_type'"
+         func_fatal_configuration "unknown library version type '$version_type'"
          ;;
        esac
 
          ;;
        esac
 
@@ -7512,42 +8782,45 @@ func_mode_link ()
            verstring=
            ;;
          *)
            verstring=
            ;;
          *)
-           verstring="0.0"
+           verstring=0.0
            ;;
          esac
            ;;
          esac
-         if test "$need_version" = no; then
+         if test no = "$need_version"; then
            versuffix=
          else
            versuffix=
          else
-           versuffix=".0.0"
+           versuffix=.0.0
          fi
        fi
 
        # Remove version info from name if versioning should be avoided
          fi
        fi
 
        # Remove version info from name if versioning should be avoided
-       if test "$avoid_version" = yes && test "$need_version" = no; then
+       if test yes,no = "$avoid_version,$need_version"; then
          major=
          versuffix=
          major=
          versuffix=
-         verstring=""
+         verstring=
        fi
 
        # Check to see if the archive will have undefined symbols.
        fi
 
        # Check to see if the archive will have undefined symbols.
-       if test "$allow_undefined" = yes; then
-         if test "$allow_undefined_flag" = unsupported; then
-           func_warning "undefined symbols not allowed in $host shared libraries"
-           build_libtool_libs=no
-           build_old_libs=yes
+       if test yes = "$allow_undefined"; then
+         if test unsupported = "$allow_undefined_flag"; then
+           if test yes = "$build_old_libs"; then
+             func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+             build_libtool_libs=no
+           else
+             func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+           fi
          fi
        else
          # Don't allow undefined symbols.
          fi
        else
          # Don't allow undefined symbols.
-         allow_undefined_flag="$no_undefined_flag"
+         allow_undefined_flag=$no_undefined_flag
        fi
 
       fi
 
        fi
 
       fi
 
-      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_generate_dlsyms "$libname" "$libname" :
       func_append libobjs " $symfileobj"
       func_append libobjs " $symfileobj"
-      test "X$libobjs" = "X " && libobjs=
+      test " " = "$libobjs" && libobjs=
 
 
-      if test "$opt_mode" != relink; then
+      if test relink != "$opt_mode"; then
        # Remove our outputs, but don't remove object files since they
        # may have been created when compiling PIC objects.
        removelist=
        # Remove our outputs, but don't remove object files since they
        # may have been created when compiling PIC objects.
        removelist=
@@ -7556,8 +8829,8 @@ func_mode_link ()
          case $p in
            *.$objext | *.gcno)
               ;;
          case $p in
            *.$objext | *.gcno)
               ;;
-           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-              if test "X$precious_files_regex" != "X"; then
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+              if test -n "$precious_files_regex"; then
                 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
                 then
                   continue
                 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
                 then
                   continue
@@ -7573,11 +8846,11 @@ func_mode_link ()
       fi
 
       # Now set the variables for building old libraries.
       fi
 
       # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
        func_append oldlibs " $output_objdir/$libname.$libext"
 
        # Transform .lo files to .o files.
        func_append oldlibs " $output_objdir/$libname.$libext"
 
        # Transform .lo files to .o files.
-       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       fi
 
       # Eliminate all temporary directories.
@@ -7598,13 +8871,13 @@ func_mode_link ()
          *) func_append finalize_rpath " $libdir" ;;
          esac
        done
          *) func_append finalize_rpath " $libdir" ;;
          esac
        done
-       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+       if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
          dependency_libs="$temp_xrpath $dependency_libs"
        fi
       fi
 
       # Make sure dlfiles contains only unique files that won't be dlpreopened
          dependency_libs="$temp_xrpath $dependency_libs"
        fi
       fi
 
       # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
+      old_dlfiles=$dlfiles
       dlfiles=
       for lib in $old_dlfiles; do
        case " $dlprefiles $dlfiles " in
       dlfiles=
       for lib in $old_dlfiles; do
        case " $dlprefiles $dlfiles " in
@@ -7614,7 +8887,7 @@ func_mode_link ()
       done
 
       # Make sure dlprefiles contains only unique files
       done
 
       # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
+      old_dlprefiles=$dlprefiles
       dlprefiles=
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
       dlprefiles=
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
@@ -7623,7 +8896,7 @@ func_mode_link ()
        esac
       done
 
        esac
       done
 
-      if test "$build_libtool_libs" = yes; then
+      if test yes = "$build_libtool_libs"; then
        if test -n "$rpath"; then
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
        if test -n "$rpath"; then
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
@@ -7647,7 +8920,7 @@ func_mode_link ()
            ;;
          *)
            # Add libc to deplibs on all other systems if necessary.
            ;;
          *)
            # Add libc to deplibs on all other systems if necessary.
-           if test "$build_libtool_need_lc" = "yes"; then
+           if test yes = "$build_libtool_need_lc"; then
              func_append deplibs " -lc"
            fi
            ;;
              func_append deplibs " -lc"
            fi
            ;;
@@ -7663,9 +8936,9 @@ func_mode_link ()
        # I'm not sure if I'm treating the release correctly.  I think
        # release should show up in the -l (ie -lgmp5) so we don't want to
        # add it in twice.  Is that correct?
        # I'm not sure if I'm treating the release correctly.  I think
        # release should show up in the -l (ie -lgmp5) so we don't want to
        # add it in twice.  Is that correct?
-       release=""
-       versuffix=""
-       major=""
+       release=
+       versuffix=
+       major=
        newdeplibs=
        droppeddeps=no
        case $deplibs_check_method in
        newdeplibs=
        droppeddeps=no
        case $deplibs_check_method in
@@ -7694,20 +8967,20 @@ EOF
              -l*)
                func_stripname -l '' "$i"
                name=$func_stripname_result
              -l*)
                func_stripname -l '' "$i"
                name=$func_stripname_result
-               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                  case " $predeps $postdeps " in
                  *" $i "*)
                    func_append newdeplibs " $i"
                  case " $predeps $postdeps " in
                  *" $i "*)
                    func_append newdeplibs " $i"
-                   i=""
+                   i=
                    ;;
                  esac
                fi
                    ;;
                  esac
                fi
-               if test -n "$i" ; then
+               if test -n "$i"; then
                  libname=`eval "\\$ECHO \"$libname_spec\""`
                  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
                  set dummy $deplib_matches; shift
                  deplib_match=$1
                  libname=`eval "\\$ECHO \"$libname_spec\""`
                  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
                  set dummy $deplib_matches; shift
                  deplib_match=$1
-                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
                    func_append newdeplibs " $i"
                  else
                    droppeddeps=yes
                    func_append newdeplibs " $i"
                  else
                    droppeddeps=yes
@@ -7737,20 +9010,20 @@ EOF
                $opt_dry_run || $RM conftest
                if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
                  ldd_output=`ldd conftest`
                $opt_dry_run || $RM conftest
                if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
                  ldd_output=`ldd conftest`
-                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                    case " $predeps $postdeps " in
                    *" $i "*)
                      func_append newdeplibs " $i"
                    case " $predeps $postdeps " in
                    *" $i "*)
                      func_append newdeplibs " $i"
-                     i=""
+                     i=
                      ;;
                    esac
                  fi
                      ;;
                    esac
                  fi
-                 if test -n "$i" ; then
+                 if test -n "$i"; then
                    libname=`eval "\\$ECHO \"$libname_spec\""`
                    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
                    set dummy $deplib_matches; shift
                    deplib_match=$1
                    libname=`eval "\\$ECHO \"$libname_spec\""`
                    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
                    set dummy $deplib_matches; shift
                    deplib_match=$1
-                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
                      func_append newdeplibs " $i"
                    else
                      droppeddeps=yes
                      func_append newdeplibs " $i"
                    else
                      droppeddeps=yes
@@ -7787,24 +9060,24 @@ EOF
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                esac
              fi
                  ;;
                esac
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                libname=`eval "\\$ECHO \"$libname_spec\""`
                if test -n "$file_magic_glob"; then
                  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
                else
                  libnameglob=$libname
                fi
                libname=`eval "\\$ECHO \"$libname_spec\""`
                if test -n "$file_magic_glob"; then
                  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
                else
                  libnameglob=$libname
                fi
-               test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+               test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 if test "$want_nocaseglob" = yes; then
+                 if test yes = "$want_nocaseglob"; then
                    shopt -s nocaseglob
                    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
                    $nocaseglob
                    shopt -s nocaseglob
                    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
                    $nocaseglob
@@ -7822,25 +9095,25 @@ EOF
                      # We might still enter an endless loop, since a link
                      # loop can be closed while we follow links,
                      # but so what?
                      # We might still enter an endless loop, since a link
                      # loop can be closed while we follow links,
                      # but so what?
-                     potlib="$potent_lib"
+                     potlib=$potent_lib
                      while test -h "$potlib" 2>/dev/null; do
                      while test -h "$potlib" 2>/dev/null; do
-                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
                        case $potliblink in
                        case $potliblink in
-                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-                       *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+                       *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
                         $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
                        func_append newdeplibs " $a_deplib"
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
                         $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
                        func_append newdeplibs " $a_deplib"
-                       a_deplib=""
+                       a_deplib=
                        break 2
                      fi
                  done
                done
              fi
                        break 2
                      fi
                  done
                done
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7848,7 +9121,7 @@ EOF
                echo "*** you link to this library.  But I can only do this if you have a"
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because I did check the linker path looking for a file starting"
                echo "*** you link to this library.  But I can only do this if you have a"
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because I did check the linker path looking for a file starting"
-               if test -z "$potlib" ; then
+               if test -z "$potlib"; then
                  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
                else
                  $ECHO "*** with $libname and none of the candidates passed a file format test"
                  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
                else
                  $ECHO "*** with $libname and none of the candidates passed a file format test"
@@ -7871,30 +9144,30 @@ EOF
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                esac
              fi
                  ;;
                esac
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                libname=`eval "\\$ECHO \"$libname_spec\""`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
                  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
                  for potent_lib in $potential_libs; do
                libname=`eval "\\$ECHO \"$libname_spec\""`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
                  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
                  for potent_lib in $potential_libs; do
-                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   potlib=$potent_lib # see symlink-check above in file_magic test
                    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
                       $EGREP "$match_pattern_regex" > /dev/null; then
                      func_append newdeplibs " $a_deplib"
                    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
                       $EGREP "$match_pattern_regex" > /dev/null; then
                      func_append newdeplibs " $a_deplib"
-                     a_deplib=""
+                     a_deplib=
                      break 2
                    fi
                  done
                done
              fi
                      break 2
                    fi
                  done
                done
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7902,7 +9175,7 @@ EOF
                echo "*** you link to this library.  But I can only do this if you have a"
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because I did check the linker path looking for a file starting"
                echo "*** you link to this library.  But I can only do this if you have a"
                echo "*** shared version of the library, which you do not appear to have"
                echo "*** because I did check the linker path looking for a file starting"
-               if test -z "$potlib" ; then
+               if test -z "$potlib"; then
                  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
                else
                  $ECHO "*** with $libname and none of the candidates passed a file format test"
                  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
                else
                  $ECHO "*** with $libname and none of the candidates passed a file format test"
@@ -7918,18 +9191,18 @@ EOF
          done # Gone through all deplibs.
          ;;
        none | unknown | *)
          done # Gone through all deplibs.
          ;;
        none | unknown | *)
-         newdeplibs=""
+         newdeplibs=
          tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
          tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
-         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-           for i in $predeps $postdeps ; do
+         if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+           for i in $predeps $postdeps; do
              # can't use Xsed below, because $i might contain '/'
              # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
            done
          fi
          case $tmp_deplibs in
          *[!\  \ ]*)
            echo
            done
          fi
          case $tmp_deplibs in
          *[!\  \ ]*)
            echo
-           if test "X$deplibs_check_method" = "Xnone"; then
+           if test none = "$deplibs_check_method"; then
              echo "*** Warning: inter-library dependencies are not supported in this platform."
            else
              echo "*** Warning: inter-library dependencies are not known to be supported."
              echo "*** Warning: inter-library dependencies are not supported in this platform."
            else
              echo "*** Warning: inter-library dependencies are not known to be supported."
@@ -7953,8 +9226,8 @@ EOF
          ;;
        esac
 
          ;;
        esac
 
-       if test "$droppeddeps" = yes; then
-         if test "$module" = yes; then
+       if test yes = "$droppeddeps"; then
+         if test yes = "$module"; then
            echo
            echo "*** Warning: libtool could not satisfy all declared inter-library"
            $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
            echo
            echo "*** Warning: libtool could not satisfy all declared inter-library"
            $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
@@ -7963,12 +9236,12 @@ EOF
            if test -z "$global_symbol_pipe"; then
              echo
              echo "*** However, this would only work if libtool was able to extract symbol"
            if test -z "$global_symbol_pipe"; then
              echo
              echo "*** However, this would only work if libtool was able to extract symbol"
-             echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
              echo "*** not find such a program.  So, this module is probably useless."
              echo "*** not find such a program.  So, this module is probably useless."
-             echo "*** \`nm' from GNU binutils and a full rebuild may help."
+             echo "*** 'nm' from GNU binutils and a full rebuild may help."
            fi
            fi
-           if test "$build_old_libs" = no; then
-             oldlibs="$output_objdir/$libname.$libext"
+           if test no = "$build_old_libs"; then
+             oldlibs=$output_objdir/$libname.$libext
              build_libtool_libs=module
              build_old_libs=yes
            else
              build_libtool_libs=module
              build_old_libs=yes
            else
@@ -7979,14 +9252,14 @@ EOF
            echo "*** automatically added whenever a program is linked with this library"
            echo "*** or is declared to -dlopen it."
 
            echo "*** automatically added whenever a program is linked with this library"
            echo "*** or is declared to -dlopen it."
 
-           if test "$allow_undefined" = no; then
+           if test no = "$allow_undefined"; then
              echo
              echo "*** Since this library must not contain undefined symbols,"
              echo "*** because either the platform does not support them or"
              echo "*** it was explicitly requested with -no-undefined,"
              echo "*** libtool will only create a static version of it."
              echo
              echo "*** Since this library must not contain undefined symbols,"
              echo "*** because either the platform does not support them or"
              echo "*** it was explicitly requested with -no-undefined,"
              echo "*** libtool will only create a static version of it."
-             if test "$build_old_libs" = no; then
-               oldlibs="$output_objdir/$libname.$libext"
+             if test no = "$build_old_libs"; then
+               oldlibs=$output_objdir/$libname.$libext
                build_libtool_libs=module
                build_old_libs=yes
              else
                build_libtool_libs=module
                build_old_libs=yes
              else
@@ -8032,7 +9305,7 @@ EOF
        *) func_append new_libs " $deplib" ;;
        esac
       done
        *) func_append new_libs " $deplib" ;;
        esac
       done
-      deplibs="$new_libs"
+      deplibs=$new_libs
 
       # All the library-specific variables (install_libdir is set above).
       library_names=
 
       # All the library-specific variables (install_libdir is set above).
       library_names=
@@ -8040,25 +9313,25 @@ EOF
       dlname=
 
       # Test again, we may have decided not to build it any more
       dlname=
 
       # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-       # Remove ${wl} instances when linking with ld.
+      if test yes = "$build_libtool_libs"; then
+       # Remove $wl instances when linking with ld.
        # FIXME: should test the right _cmds variable.
        case $archive_cmds in
          *\$LD\ *) wl= ;;
         esac
        # FIXME: should test the right _cmds variable.
        case $archive_cmds in
          *\$LD\ *) wl= ;;
         esac
-       if test "$hardcode_into_libs" = yes; then
+       if test yes = "$hardcode_into_libs"; then
          # Hardcode the library paths
          hardcode_libdirs=
          dep_rpath=
          # Hardcode the library paths
          hardcode_libdirs=
          dep_rpath=
-         rpath="$finalize_rpath"
-         test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+         rpath=$finalize_rpath
+         test relink = "$opt_mode" || rpath=$compile_rpath$rpath
          for libdir in $rpath; do
            if test -n "$hardcode_libdir_flag_spec"; then
              if test -n "$hardcode_libdir_separator"; then
                func_replace_sysroot "$libdir"
                libdir=$func_replace_sysroot_result
                if test -z "$hardcode_libdirs"; then
          for libdir in $rpath; do
            if test -n "$hardcode_libdir_flag_spec"; then
              if test -n "$hardcode_libdir_separator"; then
                func_replace_sysroot "$libdir"
                libdir=$func_replace_sysroot_result
                if test -z "$hardcode_libdirs"; then
-                 hardcode_libdirs="$libdir"
+                 hardcode_libdirs=$libdir
                else
                  # Just accumulate the unique libdirs.
                  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
                else
                  # Just accumulate the unique libdirs.
                  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8083,7 +9356,7 @@ EOF
          # Substitute the hardcoded libdirs into the rpath.
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
          # Substitute the hardcoded libdirs into the rpath.
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
-           libdir="$hardcode_libdirs"
+           libdir=$hardcode_libdirs
            eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
            eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
@@ -8097,8 +9370,8 @@ EOF
          test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
        fi
 
          test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
        fi
 
-       shlibpath="$finalize_shlibpath"
-       test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       shlibpath=$finalize_shlibpath
+       test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
        if test -n "$shlibpath"; then
          eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
        fi
        if test -n "$shlibpath"; then
          eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
        fi
@@ -8108,19 +9381,19 @@ EOF
        eval library_names=\"$library_names_spec\"
        set dummy $library_names
        shift
        eval library_names=\"$library_names_spec\"
        set dummy $library_names
        shift
-       realname="$1"
+       realname=$1
        shift
 
        if test -n "$soname_spec"; then
          eval soname=\"$soname_spec\"
        else
        shift
 
        if test -n "$soname_spec"; then
          eval soname=\"$soname_spec\"
        else
-         soname="$realname"
+         soname=$realname
        fi
        if test -z "$dlname"; then
          dlname=$soname
        fi
 
        fi
        if test -z "$dlname"; then
          dlname=$soname
        fi
 
-       lib="$output_objdir/$realname"
+       lib=$output_objdir/$realname
        linknames=
        for link
        do
        linknames=
        for link
        do
@@ -8134,7 +9407,7 @@ EOF
        delfiles=
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
          $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
        delfiles=
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
          $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
-         export_symbols="$output_objdir/$libname.uexp"
+         export_symbols=$output_objdir/$libname.uexp
          func_append delfiles " $export_symbols"
        fi
 
          func_append delfiles " $export_symbols"
        fi
 
@@ -8143,31 +9416,31 @@ EOF
        cygwin* | mingw* | cegcc*)
          if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
            # exporting using user supplied symfile
        cygwin* | mingw* | cegcc*)
          if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
            # exporting using user supplied symfile
-           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+           func_dll_def_p "$export_symbols" || {
              # and it's NOT already a .def file. Must figure out
              # which of the given symbols are data symbols and tag
              # them as such. So, trigger use of export_symbols_cmds.
              # export_symbols gets reassigned inside the "prepare
              # the list of exported symbols" if statement, so the
              # include_expsyms logic still works.
              # and it's NOT already a .def file. Must figure out
              # which of the given symbols are data symbols and tag
              # them as such. So, trigger use of export_symbols_cmds.
              # export_symbols gets reassigned inside the "prepare
              # the list of exported symbols" if statement, so the
              # include_expsyms logic still works.
-             orig_export_symbols="$export_symbols"
+             orig_export_symbols=$export_symbols
              export_symbols=
              always_export_symbols=yes
              export_symbols=
              always_export_symbols=yes
-           fi
+           }
          fi
          ;;
        esac
 
        # Prepare the list of exported symbols
        if test -z "$export_symbols"; then
          fi
          ;;
        esac
 
        # Prepare the list of exported symbols
        if test -z "$export_symbols"; then
-         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-           func_verbose "generating symbol list for \`$libname.la'"
-           export_symbols="$output_objdir/$libname.exp"
+         if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for '$libname.la'"
+           export_symbols=$output_objdir/$libname.exp
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
-           save_ifs="$IFS"; IFS='~'
+           save_ifs=$IFS; IFS='~'
            for cmd1 in $cmds; do
            for cmd1 in $cmds; do
-             IFS="$save_ifs"
+             IFS=$save_ifs
              # Take the normal branch if the nm_file_list_spec branch
              # doesn't work or if tool conversion is not needed.
              case $nm_file_list_spec~$to_tool_file_cmd in
              # Take the normal branch if the nm_file_list_spec branch
              # doesn't work or if tool conversion is not needed.
              case $nm_file_list_spec~$to_tool_file_cmd in
@@ -8181,7 +9454,7 @@ EOF
                  try_normal_branch=no
                  ;;
              esac
                  try_normal_branch=no
                  ;;
              esac
-             if test "$try_normal_branch" = yes \
+             if test yes = "$try_normal_branch" \
                 && { test "$len" -lt "$max_cmd_len" \
                      || test "$max_cmd_len" -le -1; }
              then
                 && { test "$len" -lt "$max_cmd_len" \
                      || test "$max_cmd_len" -le -1; }
              then
@@ -8192,7 +9465,7 @@ EOF
                output_la=$func_basename_result
                save_libobjs=$libobjs
                save_output=$output
                output_la=$func_basename_result
                save_libobjs=$libobjs
                save_output=$output
-               output=${output_objdir}/${output_la}.nm
+               output=$output_objdir/$output_la.nm
                func_to_tool_file "$output"
                libobjs=$nm_file_list_spec$func_to_tool_file_result
                func_append delfiles " $output"
                func_to_tool_file "$output"
                libobjs=$nm_file_list_spec$func_to_tool_file_result
                func_append delfiles " $output"
@@ -8215,8 +9488,8 @@ EOF
                break
              fi
            done
                break
              fi
            done
-           IFS="$save_ifs"
-           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+           IFS=$save_ifs
+           if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
              func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
              func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
            fi
              func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
              func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
            fi
@@ -8224,16 +9497,16 @@ EOF
        fi
 
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
        fi
 
        if test -n "$export_symbols" && test -n "$include_expsyms"; then
-         tmp_export_symbols="$export_symbols"
-         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         tmp_export_symbols=$export_symbols
+         test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
          $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
        fi
 
          $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
        fi
 
-       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+       if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
          # The given exports_symbols file has to be filtered, so filter it.
          # The given exports_symbols file has to be filtered, so filter it.
-         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
          # FIXME: $output_objdir/$libname.filter potentially contains lots of
          # FIXME: $output_objdir/$libname.filter potentially contains lots of
-         # 's' commands which not all seds can handle. GNU sed should be fine
+         # 's' commands, which not all seds can handle. GNU sed should be fine
          # though. Also, the filter scales superlinearly with the number of
          # global variables. join(1) would be nice here, but unfortunately
          # isn't a blessed tool.
          # though. Also, the filter scales superlinearly with the number of
          # global variables. join(1) would be nice here, but unfortunately
          # isn't a blessed tool.
@@ -8252,11 +9525,11 @@ EOF
            ;;
          esac
        done
            ;;
          esac
        done
-       deplibs="$tmp_deplibs"
+       deplibs=$tmp_deplibs
 
        if test -n "$convenience"; then
          if test -n "$whole_archive_flag_spec" &&
 
        if test -n "$convenience"; then
          if test -n "$whole_archive_flag_spec" &&
-           test "$compiler_needs_object" = yes &&
+           test yes = "$compiler_needs_object" &&
            test -z "$libobjs"; then
            # extract the archives, so we have objects to list.
            # TODO: could optimize this to just extract one archive.
            test -z "$libobjs"; then
            # extract the archives, so we have objects to list.
            # TODO: could optimize this to just extract one archive.
@@ -8267,7 +9540,7 @@ EOF
            eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
            test "X$libobjs" = "X " && libobjs=
          else
            eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
            test "X$libobjs" = "X " && libobjs=
          else
-           gentop="$output_objdir/${outputname}x"
+           gentop=$output_objdir/${outputname}x
            func_append generated " $gentop"
 
            func_extract_archives $gentop $convenience
            func_append generated " $gentop"
 
            func_extract_archives $gentop $convenience
@@ -8276,18 +9549,18 @@ EOF
          fi
        fi
 
          fi
        fi
 
-       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+       if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
          eval flag=\"$thread_safe_flag_spec\"
          func_append linker_flags " $flag"
        fi
 
        # Make a backup of the uninstalled library when relinking
          eval flag=\"$thread_safe_flag_spec\"
          func_append linker_flags " $flag"
        fi
 
        # Make a backup of the uninstalled library when relinking
-       if test "$opt_mode" = relink; then
+       if test relink = "$opt_mode"; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
        fi
 
        # Do each of the archive commands.
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
        fi
 
        # Do each of the archive commands.
-       if test "$module" = yes && test -n "$module_cmds" ; then
+       if test yes = "$module" && test -n "$module_cmds"; then
          if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
            eval test_cmds=\"$module_expsym_cmds\"
            cmds=$module_expsym_cmds
          if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
            eval test_cmds=\"$module_expsym_cmds\"
            cmds=$module_expsym_cmds
@@ -8305,7 +9578,7 @@ EOF
          fi
        fi
 
          fi
        fi
 
-       if test "X$skipped_export" != "X:" &&
+       if test : != "$skipped_export" &&
           func_len " $test_cmds" &&
           len=$func_len_result &&
           test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
           func_len " $test_cmds" &&
           len=$func_len_result &&
           test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
@@ -8338,8 +9611,8 @@ EOF
          last_robj=
          k=1
 
          last_robj=
          k=1
 
-         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
-           output=${output_objdir}/${output_la}.lnkscript
+         if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+           output=$output_objdir/$output_la.lnkscript
            func_verbose "creating GNU ld script: $output"
            echo 'INPUT (' > $output
            for obj in $save_libobjs
            func_verbose "creating GNU ld script: $output"
            echo 'INPUT (' > $output
            for obj in $save_libobjs
@@ -8351,14 +9624,14 @@ EOF
            func_append delfiles " $output"
            func_to_tool_file "$output"
            output=$func_to_tool_file_result
            func_append delfiles " $output"
            func_to_tool_file "$output"
            output=$func_to_tool_file_result
-         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
-           output=${output_objdir}/${output_la}.lnk
+         elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+           output=$output_objdir/$output_la.lnk
            func_verbose "creating linker input file list: $output"
            : > $output
            set x $save_libobjs
            shift
            firstobj=
            func_verbose "creating linker input file list: $output"
            : > $output
            set x $save_libobjs
            shift
            firstobj=
-           if test "$compiler_needs_object" = yes; then
+           if test yes = "$compiler_needs_object"; then
              firstobj="$1 "
              shift
            fi
              firstobj="$1 "
              shift
            fi
@@ -8373,7 +9646,7 @@ EOF
          else
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
          else
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
-             output=$output_objdir/$output_la-${k}.$objext
+             output=$output_objdir/$output_la-$k.$objext
              eval test_cmds=\"$reload_cmds\"
              func_len " $test_cmds"
              len0=$func_len_result
              eval test_cmds=\"$reload_cmds\"
              func_len " $test_cmds"
              len0=$func_len_result
@@ -8385,13 +9658,13 @@ EOF
                func_len " $obj"
                func_arith $len + $func_len_result
                len=$func_arith_result
                func_len " $obj"
                func_arith $len + $func_len_result
                len=$func_arith_result
-               if test "X$objlist" = X ||
+               if test -z "$objlist" ||
                   test "$len" -lt "$max_cmd_len"; then
                  func_append objlist " $obj"
                else
                  # The command $test_cmds is almost too long, add a
                  # command to the queue.
                   test "$len" -lt "$max_cmd_len"; then
                  func_append objlist " $obj"
                else
                  # The command $test_cmds is almost too long, add a
                  # command to the queue.
-                 if test "$k" -eq 1 ; then
+                 if test 1 -eq "$k"; then
                    # The first file doesn't have a previous command to add.
                    reload_objs=$objlist
                    eval concat_cmds=\"$reload_cmds\"
                    # The first file doesn't have a previous command to add.
                    reload_objs=$objlist
                    eval concat_cmds=\"$reload_cmds\"
@@ -8401,10 +9674,10 @@ EOF
                    reload_objs="$objlist $last_robj"
                    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
                  fi
                    reload_objs="$objlist $last_robj"
                    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
                  fi
-                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 last_robj=$output_objdir/$output_la-$k.$objext
                  func_arith $k + 1
                  k=$func_arith_result
                  func_arith $k + 1
                  k=$func_arith_result
-                 output=$output_objdir/$output_la-${k}.$objext
+                 output=$output_objdir/$output_la-$k.$objext
                  objlist=" $obj"
                  func_len " $last_robj"
                  func_arith $len0 + $func_len_result
                  objlist=" $obj"
                  func_len " $last_robj"
                  func_arith $len0 + $func_len_result
@@ -8416,9 +9689,9 @@ EOF
              # files will link in the last one created.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
              reload_objs="$objlist $last_robj"
              # files will link in the last one created.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
              reload_objs="$objlist $last_robj"
-             eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+             eval concat_cmds=\"\$concat_cmds$reload_cmds\"
              if test -n "$last_robj"; then
              if test -n "$last_robj"; then
-               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
              fi
              func_append delfiles " $output"
 
              fi
              func_append delfiles " $output"
 
@@ -8426,9 +9699,9 @@ EOF
              output=
            fi
 
              output=
            fi
 
-           if ${skipped_export-false}; then
-             func_verbose "generating symbol list for \`$libname.la'"
-             export_symbols="$output_objdir/$libname.exp"
+           ${skipped_export-false} && {
+             func_verbose "generating symbol list for '$libname.la'"
+             export_symbols=$output_objdir/$libname.exp
              $opt_dry_run || $RM $export_symbols
              libobjs=$output
              # Append the command to create the export file.
              $opt_dry_run || $RM $export_symbols
              libobjs=$output
              # Append the command to create the export file.
@@ -8437,16 +9710,16 @@ EOF
              if test -n "$last_robj"; then
                eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
              fi
              if test -n "$last_robj"; then
                eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
              fi
-           fi
+           }
 
            test -n "$save_libobjs" &&
              func_verbose "creating a temporary reloadable object file: $output"
 
            # Loop through the commands generated above and execute them.
 
            test -n "$save_libobjs" &&
              func_verbose "creating a temporary reloadable object file: $output"
 
            # Loop through the commands generated above and execute them.
-           save_ifs="$IFS"; IFS='~'
+           save_ifs=$IFS; IFS='~'
            for cmd in $concat_cmds; do
            for cmd in $concat_cmds; do
-             IFS="$save_ifs"
-             $opt_silent || {
+             IFS=$save_ifs
+             $opt_quiet || {
                  func_quote_for_expand "$cmd"
                  eval "func_echo $func_quote_for_expand_result"
              }
                  func_quote_for_expand "$cmd"
                  eval "func_echo $func_quote_for_expand_result"
              }
@@ -8454,7 +9727,7 @@ EOF
                lt_exit=$?
 
                # Restore the uninstalled library and exit
                lt_exit=$?
 
                # Restore the uninstalled library and exit
-               if test "$opt_mode" = relink; then
+               if test relink = "$opt_mode"; then
                  ( cd "$output_objdir" && \
                    $RM "${realname}T" && \
                    $MV "${realname}U" "$realname" )
                  ( cd "$output_objdir" && \
                    $RM "${realname}T" && \
                    $MV "${realname}U" "$realname" )
@@ -8463,7 +9736,7 @@ EOF
                exit $lt_exit
              }
            done
                exit $lt_exit
              }
            done
-           IFS="$save_ifs"
+           IFS=$save_ifs
 
            if test -n "$export_symbols_regex" && ${skipped_export-false}; then
              func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
 
            if test -n "$export_symbols_regex" && ${skipped_export-false}; then
              func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
@@ -8471,18 +9744,18 @@ EOF
            fi
          fi
 
            fi
          fi
 
-          if ${skipped_export-false}; then
+          ${skipped_export-false} && {
            if test -n "$export_symbols" && test -n "$include_expsyms"; then
            if test -n "$export_symbols" && test -n "$include_expsyms"; then
-             tmp_export_symbols="$export_symbols"
-             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             tmp_export_symbols=$export_symbols
+             test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
              $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
            fi
 
            if test -n "$orig_export_symbols"; then
              # The given exports_symbols file has to be filtered, so filter it.
              $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
            fi
 
            if test -n "$orig_export_symbols"; then
              # The given exports_symbols file has to be filtered, so filter it.
-             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
              # FIXME: $output_objdir/$libname.filter potentially contains lots of
              # FIXME: $output_objdir/$libname.filter potentially contains lots of
-             # 's' commands which not all seds can handle. GNU sed should be fine
+             # 's' commands, which not all seds can handle. GNU sed should be fine
              # though. Also, the filter scales superlinearly with the number of
              # global variables. join(1) would be nice here, but unfortunately
              # isn't a blessed tool.
              # though. Also, the filter scales superlinearly with the number of
              # global variables. join(1) would be nice here, but unfortunately
              # isn't a blessed tool.
@@ -8491,7 +9764,7 @@ EOF
              export_symbols=$output_objdir/$libname.def
              $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
            fi
              export_symbols=$output_objdir/$libname.def
              $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
            fi
-         fi
+         }
 
          libobjs=$output
          # Restore the value of output.
 
          libobjs=$output
          # Restore the value of output.
@@ -8505,7 +9778,7 @@ EOF
          # value of $libobjs for piecewise linking.
 
          # Do each of the archive commands.
          # value of $libobjs for piecewise linking.
 
          # Do each of the archive commands.
-         if test "$module" = yes && test -n "$module_cmds" ; then
+         if test yes = "$module" && test -n "$module_cmds"; then
            if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
              cmds=$module_expsym_cmds
            else
            if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
              cmds=$module_expsym_cmds
            else
@@ -8527,7 +9800,7 @@ EOF
 
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
 
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
@@ -8535,11 +9808,12 @@ EOF
          test "X$libobjs" = "X " && libobjs=
        fi
 
          test "X$libobjs" = "X " && libobjs=
        fi
 
-       save_ifs="$IFS"; IFS='~'
+       save_ifs=$IFS; IFS='~'
        for cmd in $cmds; do
        for cmd in $cmds; do
-         IFS="$save_ifs"
+         IFS=$sp$nl
          eval cmd=\"$cmd\"
          eval cmd=\"$cmd\"
-         $opt_silent || {
+         IFS=$save_ifs
+         $opt_quiet || {
            func_quote_for_expand "$cmd"
            eval "func_echo $func_quote_for_expand_result"
          }
            func_quote_for_expand "$cmd"
            eval "func_echo $func_quote_for_expand_result"
          }
@@ -8547,7 +9821,7 @@ EOF
            lt_exit=$?
 
            # Restore the uninstalled library and exit
            lt_exit=$?
 
            # Restore the uninstalled library and exit
-           if test "$opt_mode" = relink; then
+           if test relink = "$opt_mode"; then
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
@@ -8556,10 +9830,10 @@ EOF
            exit $lt_exit
          }
        done
            exit $lt_exit
          }
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        # Restore the uninstalled library and exit
 
        # Restore the uninstalled library and exit
-       if test "$opt_mode" = relink; then
+       if test relink = "$opt_mode"; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
          if test -n "$convenience"; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
          if test -n "$convenience"; then
@@ -8579,39 +9853,39 @@ EOF
        done
 
        # If -module or -export-dynamic was specified, set the dlname.
        done
 
        # If -module or -export-dynamic was specified, set the dlname.
-       if test "$module" = yes || test "$export_dynamic" = yes; then
+       if test yes = "$module" || test yes = "$export_dynamic"; then
          # On all known operating systems, these are identical.
          # On all known operating systems, these are identical.
-         dlname="$soname"
+         dlname=$soname
        fi
       fi
       ;;
 
     obj)
        fi
       fi
       ;;
 
     obj)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       func_warning "\`-dlopen' is ignored for objects"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for objects"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+       func_warning "'-l' and '-L' are ignored for objects" ;;
       esac
 
       test -n "$rpath" && \
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for objects"
+       func_warning "'-rpath' is ignored for objects"
 
       test -n "$xrpath" && \
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for objects"
+       func_warning "'-R' is ignored for objects"
 
       test -n "$vinfo" && \
 
       test -n "$vinfo" && \
-       func_warning "\`-version-info' is ignored for objects"
+       func_warning "'-version-info' is ignored for objects"
 
       test -n "$release" && \
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for objects"
+       func_warning "'-release' is ignored for objects"
 
       case $output in
       *.lo)
        test -n "$objs$old_deplibs" && \
 
       case $output in
       *.lo)
        test -n "$objs$old_deplibs" && \
-         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+         func_fatal_error "cannot build library object '$output' from non-libtool objects"
 
        libobj=$output
        func_lo2o "$libobj"
 
        libobj=$output
        func_lo2o "$libobj"
@@ -8619,7 +9893,7 @@ EOF
        ;;
       *)
        libobj=
        ;;
       *)
        libobj=
-       obj="$output"
+       obj=$output
        ;;
       esac
 
        ;;
       esac
 
@@ -8642,7 +9916,7 @@ EOF
          eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
          reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
        else
          eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
          reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
        else
-         gentop="$output_objdir/${obj}x"
+         gentop=$output_objdir/${obj}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $convenience
          func_append generated " $gentop"
 
          func_extract_archives $gentop $convenience
@@ -8651,12 +9925,12 @@ EOF
       fi
 
       # If we're not building shared, we need to use non_pic_objs
       fi
 
       # If we're not building shared, we need to use non_pic_objs
-      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
 
       # Create the old-style object.
 
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
 
 
-      output="$obj"
+      output=$obj
       func_execute_cmds "$reload_cmds" 'exit $?'
 
       # Exit if we aren't doing a library object file.
       func_execute_cmds "$reload_cmds" 'exit $?'
 
       # Exit if we aren't doing a library object file.
@@ -8668,7 +9942,7 @@ EOF
        exit $EXIT_SUCCESS
       fi
 
        exit $EXIT_SUCCESS
       fi
 
-      if test "$build_libtool_libs" != yes; then
+      test yes = "$build_libtool_libs" || {
        if test -n "$gentop"; then
          func_show_eval '${RM}r "$gentop"'
        fi
        if test -n "$gentop"; then
          func_show_eval '${RM}r "$gentop"'
        fi
@@ -8678,12 +9952,12 @@ EOF
        # $show "echo timestamp > $libobj"
        # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
        exit $EXIT_SUCCESS
        # $show "echo timestamp > $libobj"
        # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
        exit $EXIT_SUCCESS
-      fi
+      }
 
 
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
        # Only do commands if we really have different PIC objects.
        reload_objs="$libobjs $reload_conv_objs"
        # Only do commands if we really have different PIC objects.
        reload_objs="$libobjs $reload_conv_objs"
-       output="$libobj"
+       output=$libobj
        func_execute_cmds "$reload_cmds" 'exit $?'
       fi
 
        func_execute_cmds "$reload_cmds" 'exit $?'
       fi
 
@@ -8700,16 +9974,14 @@ EOF
                  output=$func_stripname_result.exe;;
       esac
       test -n "$vinfo" && \
                  output=$func_stripname_result.exe;;
       esac
       test -n "$vinfo" && \
-       func_warning "\`-version-info' is ignored for programs"
+       func_warning "'-version-info' is ignored for programs"
 
       test -n "$release" && \
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for programs"
+       func_warning "'-release' is ignored for programs"
 
 
-      test "$preload" = yes \
-        && test "$dlopen_support" = unknown \
-       && test "$dlopen_self" = unknown \
-       && test "$dlopen_self_static" = unknown && \
-         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+      $preload \
+       && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+       && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
 
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
 
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
@@ -8723,11 +9995,11 @@ EOF
       *-*-darwin*)
        # Don't allow lazy linking, it breaks C++ global constructors
        # But is supposedly fixed on 10.4 or later (yay!).
       *-*-darwin*)
        # Don't allow lazy linking, it breaks C++ global constructors
        # But is supposedly fixed on 10.4 or later (yay!).
-       if test "$tagname" = CXX ; then
+       if test CXX = "$tagname"; then
          case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
            10.[0123])
          case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
            10.[0123])
-             func_append compile_command " ${wl}-bind_at_load"
-             func_append finalize_command " ${wl}-bind_at_load"
+             func_append compile_command " $wl-bind_at_load"
+             func_append finalize_command " $wl-bind_at_load"
            ;;
          esac
        fi
            ;;
          esac
        fi
@@ -8763,7 +10035,7 @@ EOF
        *) func_append new_libs " $deplib" ;;
        esac
       done
        *) func_append new_libs " $deplib" ;;
        esac
       done
-      compile_deplibs="$new_libs"
+      compile_deplibs=$new_libs
 
 
       func_append compile_command " $compile_deplibs"
 
 
       func_append compile_command " $compile_deplibs"
@@ -8787,7 +10059,7 @@ EOF
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8810,7 +10082,7 @@ EOF
        fi
        case $host in
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
        fi
        case $host in
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
          case :$dllsearchpath: in
          *":$libdir:"*) ;;
          ::) dllsearchpath=$libdir;;
          case :$dllsearchpath: in
          *":$libdir:"*) ;;
          ::) dllsearchpath=$libdir;;
@@ -8827,10 +10099,10 @@ EOF
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      compile_rpath="$rpath"
+      compile_rpath=$rpath
 
       rpath=
       hardcode_libdirs=
 
       rpath=
       hardcode_libdirs=
@@ -8838,7 +10110,7 @@ EOF
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8863,45 +10135,43 @@ EOF
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      finalize_rpath="$rpath"
+      finalize_rpath=$rpath
 
 
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
        # Transform all the library objects into standard objects.
        compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
        finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
        # Transform all the library objects into standard objects.
        compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
        finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
-      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
 
       # template prelinking step
       if test -n "$prelink_cmds"; then
        func_execute_cmds "$prelink_cmds" 'exit $?'
       fi
 
 
       # template prelinking step
       if test -n "$prelink_cmds"; then
        func_execute_cmds "$prelink_cmds" 'exit $?'
       fi
 
-      wrappers_required=yes
+      wrappers_required=:
       case $host in
       *cegcc* | *mingw32ce*)
         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
       case $host in
       *cegcc* | *mingw32ce*)
         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-        wrappers_required=no
+        wrappers_required=false
         ;;
       *cygwin* | *mingw* )
         ;;
       *cygwin* | *mingw* )
-        if test "$build_libtool_libs" != yes; then
-          wrappers_required=no
-        fi
+        test yes = "$build_libtool_libs" || wrappers_required=false
         ;;
       *)
         ;;
       *)
-        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-          wrappers_required=no
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
         fi
         ;;
       esac
         fi
         ;;
       esac
-      if test "$wrappers_required" = no; then
+      $wrappers_required || {
        # Replace the output file specification.
        compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        # Replace the output file specification.
        compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
-       link_command="$compile_command$compile_rpath"
+       link_command=$compile_command$compile_rpath
 
        # We have no uninstalled library dependencies, so finalize right now.
        exit_status=0
 
        # We have no uninstalled library dependencies, so finalize right now.
        exit_status=0
@@ -8914,12 +10184,12 @@ EOF
        fi
 
        # Delete the generated files.
        fi
 
        # Delete the generated files.
-       if test -f "$output_objdir/${outputname}S.${objext}"; then
-         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       if test -f "$output_objdir/${outputname}S.$objext"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
        fi
 
        exit $exit_status
        fi
 
        exit $exit_status
-      fi
+      }
 
       if test -n "$compile_shlibpath$finalize_shlibpath"; then
        compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
 
       if test -n "$compile_shlibpath$finalize_shlibpath"; then
        compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
@@ -8949,9 +10219,9 @@ EOF
        fi
       fi
 
        fi
       fi
 
-      if test "$no_install" = yes; then
+      if test yes = "$no_install"; then
        # We don't need to create a wrapper script.
        # We don't need to create a wrapper script.
-       link_command="$compile_var$compile_command$compile_rpath"
+       link_command=$compile_var$compile_command$compile_rpath
        # Replace the output file specification.
        link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        # Delete the old output file.
        # Replace the output file specification.
        link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        # Delete the old output file.
@@ -8968,27 +10238,28 @@ EOF
        exit $EXIT_SUCCESS
       fi
 
        exit $EXIT_SUCCESS
       fi
 
-      if test "$hardcode_action" = relink; then
-       # Fast installation is not supported
-       link_command="$compile_var$compile_command$compile_rpath"
-       relink_command="$finalize_var$finalize_command$finalize_rpath"
+      case $hardcode_action,$fast_install in
+        relink,*)
+         # Fast installation is not supported
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
 
 
-       func_warning "this platform does not like uninstalled shared libraries"
-       func_warning "\`$output' will be relinked during installation"
-      else
-       if test "$fast_install" != no; then
-         link_command="$finalize_var$compile_command$finalize_rpath"
-         if test "$fast_install" = yes; then
-           relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
-         else
-           # fast_install is set to needless
-           relink_command=
-         fi
-       else
-         link_command="$compile_var$compile_command$compile_rpath"
-         relink_command="$finalize_var$finalize_command$finalize_rpath"
-       fi
-      fi
+         func_warning "this platform does not like uninstalled shared libraries"
+         func_warning "'$output' will be relinked during installation"
+         ;;
+        *,yes)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+       *,no)
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+       *,needless)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=
+          ;;
+      esac
 
       # Replace the output file specification.
       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Replace the output file specification.
       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
@@ -9045,8 +10316,8 @@ EOF
            func_dirname_and_basename "$output" "" "."
            output_name=$func_basename_result
            output_path=$func_dirname_result
            func_dirname_and_basename "$output" "" "."
            output_name=$func_basename_result
            output_path=$func_dirname_result
-           cwrappersource="$output_path/$objdir/lt-$output_name.c"
-           cwrapper="$output_path/$output_name.exe"
+           cwrappersource=$output_path/$objdir/lt-$output_name.c
+           cwrapper=$output_path/$output_name.exe
            $RM $cwrappersource $cwrapper
            trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
 
            $RM $cwrappersource $cwrapper
            trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
 
@@ -9067,7 +10338,7 @@ EOF
            trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
            $opt_dry_run || {
              # note: this script will not be executed, so do not chmod.
            trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
            $opt_dry_run || {
              # note: this script will not be executed, so do not chmod.
-             if test "x$build" = "x$host" ; then
+             if test "x$build" = "x$host"; then
                $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
              else
                func_emit_wrapper no > $func_ltwrapper_scriptname_result
                $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
              else
                func_emit_wrapper no > $func_ltwrapper_scriptname_result
@@ -9090,25 +10361,27 @@ EOF
     # See if we need to build an old-fashioned archive.
     for oldlib in $oldlibs; do
 
     # See if we need to build an old-fashioned archive.
     for oldlib in $oldlibs; do
 
-      if test "$build_libtool_libs" = convenience; then
-       oldobjs="$libobjs_save $symfileobj"
-       addlibs="$convenience"
-       build_libtool_libs=no
-      else
-       if test "$build_libtool_libs" = module; then
-         oldobjs="$libobjs_save"
+      case $build_libtool_libs in
+        convenience)
+         oldobjs="$libobjs_save $symfileobj"
+         addlibs=$convenience
          build_libtool_libs=no
          build_libtool_libs=no
-       else
+         ;;
+       module)
+         oldobjs=$libobjs_save
+         addlibs=$old_convenience
+         build_libtool_libs=no
+          ;;
+       *)
          oldobjs="$old_deplibs $non_pic_objects"
          oldobjs="$old_deplibs $non_pic_objects"
-         if test "$preload" = yes && test -f "$symfileobj"; then
-           func_append oldobjs " $symfileobj"
-         fi
-       fi
-       addlibs="$old_convenience"
-      fi
+         $preload && test -f "$symfileobj" \
+           && func_append oldobjs " $symfileobj"
+         addlibs=$old_convenience
+         ;;
+      esac
 
       if test -n "$addlibs"; then
 
       if test -n "$addlibs"; then
-       gentop="$output_objdir/${outputname}x"
+       gentop=$output_objdir/${outputname}x
        func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
        func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
@@ -9116,13 +10389,13 @@ EOF
       fi
 
       # Do each command in the archive commands.
       fi
 
       # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
        cmds=$old_archive_from_new_cmds
       else
 
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
        cmds=$old_archive_from_new_cmds
       else
 
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
@@ -9143,7 +10416,7 @@ EOF
          :
        else
          echo "copying selected object files to avoid basename conflicts..."
          :
        else
          echo "copying selected object files to avoid basename conflicts..."
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
          func_mkdir_p "$gentop"
          save_oldobjs=$oldobjs
          func_append generated " $gentop"
          func_mkdir_p "$gentop"
          save_oldobjs=$oldobjs
@@ -9152,7 +10425,7 @@ EOF
          for obj in $save_oldobjs
          do
            func_basename "$obj"
          for obj in $save_oldobjs
          do
            func_basename "$obj"
-           objbase="$func_basename_result"
+           objbase=$func_basename_result
            case " $oldobjs " in
            " ") oldobjs=$obj ;;
            *[\ /]"$objbase "*)
            case " $oldobjs " in
            " ") oldobjs=$obj ;;
            *[\ /]"$objbase "*)
@@ -9221,18 +10494,18 @@ EOF
            else
              # the above command should be used before it gets too long
              oldobjs=$objlist
            else
              # the above command should be used before it gets too long
              oldobjs=$objlist
-             if test "$obj" = "$last_oldobj" ; then
+             if test "$obj" = "$last_oldobj"; then
                RANLIB=$save_RANLIB
              fi
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
                RANLIB=$save_RANLIB
              fi
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
              objlist=
              len=$len0
            fi
          done
          RANLIB=$save_RANLIB
          oldobjs=$objlist
              objlist=
              len=$len0
            fi
          done
          RANLIB=$save_RANLIB
          oldobjs=$objlist
-         if test "X$oldobjs" = "X" ; then
+         if test -z "$oldobjs"; then
            eval cmds=\"\$concat_cmds\"
          else
            eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
            eval cmds=\"\$concat_cmds\"
          else
            eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
@@ -9249,7 +10522,7 @@ EOF
     case $output in
     *.la)
       old_library=
     case $output in
     *.la)
       old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      test yes = "$build_old_libs" && old_library=$libname.$libext
       func_verbose "creating $output"
 
       # Preserve any variables that may affect compiler behavior
       func_verbose "creating $output"
 
       # Preserve any variables that may affect compiler behavior
@@ -9264,31 +10537,31 @@ EOF
        fi
       done
       # Quote the link command for shipping.
        fi
       done
       # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
+      if test yes = "$hardcode_automatic"; then
        relink_command=
       fi
 
       # Only create the output if not a dry run.
       $opt_dry_run || {
        for installed in no yes; do
        relink_command=
       fi
 
       # Only create the output if not a dry run.
       $opt_dry_run || {
        for installed in no yes; do
-         if test "$installed" = yes; then
+         if test yes = "$installed"; then
            if test -z "$install_libdir"; then
              break
            fi
            if test -z "$install_libdir"; then
              break
            fi
-           output="$output_objdir/$outputname"i
+           output=$output_objdir/${outputname}i
            # Replace all uninstalled libtool libraries with the installed ones
            newdependency_libs=
            for deplib in $dependency_libs; do
              case $deplib in
              *.la)
                func_basename "$deplib"
            # Replace all uninstalled libtool libraries with the installed ones
            newdependency_libs=
            for deplib in $dependency_libs; do
              case $deplib in
              *.la)
                func_basename "$deplib"
-               name="$func_basename_result"
+               name=$func_basename_result
                func_resolve_sysroot "$deplib"
                func_resolve_sysroot "$deplib"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
                test -z "$libdir" && \
                test -z "$libdir" && \
-                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 func_fatal_error "'$deplib' is not a valid libtool archive"
                func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
                ;;
              -L*)
                func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
                ;;
              -L*)
@@ -9304,23 +10577,23 @@ EOF
              *) func_append newdependency_libs " $deplib" ;;
              esac
            done
              *) func_append newdependency_libs " $deplib" ;;
              esac
            done
-           dependency_libs="$newdependency_libs"
+           dependency_libs=$newdependency_libs
            newdlfiles=
 
            for lib in $dlfiles; do
              case $lib in
              *.la)
                func_basename "$lib"
            newdlfiles=
 
            for lib in $dlfiles; do
              case $lib in
              *.la)
                func_basename "$lib"
-               name="$func_basename_result"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                test -z "$libdir" && \
-                 func_fatal_error "\`$lib' is not a valid libtool archive"
+                 func_fatal_error "'$lib' is not a valid libtool archive"
                func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              *) func_append newdlfiles " $lib" ;;
              esac
            done
                func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              *) func_append newdlfiles " $lib" ;;
              esac
            done
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
@@ -9330,34 +10603,34 @@ EOF
                # didn't already link the preopened objects directly into
                # the library:
                func_basename "$lib"
                # didn't already link the preopened objects directly into
                # the library:
                func_basename "$lib"
-               name="$func_basename_result"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                test -z "$libdir" && \
-                 func_fatal_error "\`$lib' is not a valid libtool archive"
+                 func_fatal_error "'$lib' is not a valid libtool archive"
                func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              esac
            done
                func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              esac
            done
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          else
            newdlfiles=
            for lib in $dlfiles; do
              case $lib in
          else
            newdlfiles=
            for lib in $dlfiles; do
              case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlfiles " $abs"
            done
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlfiles " $abs"
            done
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlprefiles " $abs"
            done
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlprefiles " $abs"
            done
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          fi
          $RM $output
          # place dlname in correct position for cygwin
          fi
          $RM $output
          # place dlname in correct position for cygwin
@@ -9373,10 +10646,9 @@ EOF
          case $host,$output,$installed,$module,$dlname in
            *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
              # If a -bindir argument was supplied, place the dll there.
          case $host,$output,$installed,$module,$dlname in
            *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
              # If a -bindir argument was supplied, place the dll there.
-             if test "x$bindir" != x ;
-             then
+             if test -n "$bindir"; then
                func_relative_path "$install_libdir" "$bindir"
                func_relative_path "$install_libdir" "$bindir"
-               tdlname=$func_relative_path_result$dlname
+               tdlname=$func_relative_path_result/$dlname
              else
                # Otherwise fall back on heuristic.
                tdlname=../bin/$dlname
              else
                # Otherwise fall back on heuristic.
                tdlname=../bin/$dlname
@@ -9385,7 +10657,7 @@ EOF
          esac
          $ECHO > $output "\
 # $outputname - a libtool library file
          esac
          $ECHO > $output "\
 # $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -9399,7 +10671,7 @@ library_names='$library_names'
 # The name of the static archive.
 old_library='$old_library'
 
 # The name of the static archive.
 old_library='$old_library'
 
-# Linker flags that can not go in dependency_libs.
+# Linker flags that cannot go in dependency_libs.
 inherited_linker_flags='$new_inherited_linker_flags'
 
 # Libraries that this one depends upon.
 inherited_linker_flags='$new_inherited_linker_flags'
 
 # Libraries that this one depends upon.
@@ -9425,7 +10697,7 @@ dlpreopen='$dlprefiles'
 
 # Directory that this library needs to be installed in:
 libdir='$install_libdir'"
 
 # Directory that this library needs to be installed in:
 libdir='$install_libdir'"
-         if test "$installed" = no && test "$need_relink" = yes; then
+         if test no,yes = "$installed,$need_relink"; then
            $ECHO >> $output "\
 relink_command=\"$relink_command\""
          fi
            $ECHO >> $output "\
 relink_command=\"$relink_command\""
          fi
@@ -9440,27 +10712,29 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
     exit $EXIT_SUCCESS
 }
 
-{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-    func_mode_link ${1+"$@"}
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
 
 
 # func_mode_uninstall arg...
 func_mode_uninstall ()
 {
 
 
 # func_mode_uninstall arg...
 func_mode_uninstall ()
 {
-    $opt_debug
-    RM="$nonopt"
+    $debug_cmd
+
+    RM=$nonopt
     files=
     files=
-    rmforce=
+    rmforce=false
     exit_status=0
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
     exit_status=0
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     for arg
     do
       case $arg in
 
     for arg
     do
       case $arg in
-      -f) func_append RM " $arg"; rmforce=yes ;;
+      -f) func_append RM " $arg"; rmforce=: ;;
       -*) func_append RM " $arg" ;;
       *) func_append files " $arg" ;;
       esac
       -*) func_append RM " $arg" ;;
       *) func_append files " $arg" ;;
       esac
@@ -9473,18 +10747,18 @@ func_mode_uninstall ()
 
     for file in $files; do
       func_dirname "$file" "" "."
 
     for file in $files; do
       func_dirname "$file" "" "."
-      dir="$func_dirname_result"
-      if test "X$dir" = X.; then
-       odir="$objdir"
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+       odir=$objdir
       else
       else
-       odir="$dir/$objdir"
+       odir=$dir/$objdir
       fi
       func_basename "$file"
       fi
       func_basename "$file"
-      name="$func_basename_result"
-      test "$opt_mode" = uninstall && odir="$dir"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
 
       # Remember odir for removal later, being careful to avoid duplicates
 
       # Remember odir for removal later, being careful to avoid duplicates
-      if test "$opt_mode" = clean; then
+      if test clean = "$opt_mode"; then
        case " $rmdirs " in
          *" $odir "*) ;;
          *) func_append rmdirs " $odir" ;;
        case " $rmdirs " in
          *" $odir "*) ;;
          *) func_append rmdirs " $odir" ;;
@@ -9499,11 +10773,11 @@ func_mode_uninstall ()
       elif test -d "$file"; then
        exit_status=1
        continue
       elif test -d "$file"; then
        exit_status=1
        continue
-      elif test "$rmforce" = yes; then
+      elif $rmforce; then
        continue
       fi
 
        continue
       fi
 
-      rmfiles="$file"
+      rmfiles=$file
 
       case $name in
       *.la)
 
       case $name in
       *.la)
@@ -9517,7 +10791,7 @@ func_mode_uninstall ()
          done
          test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
          done
          test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-         case "$opt_mode" in
+         case $opt_mode in
          clean)
            case " $library_names " in
            *" $dlname "*) ;;
          clean)
            case " $library_names " in
            *" $dlname "*) ;;
@@ -9528,12 +10802,12 @@ func_mode_uninstall ()
          uninstall)
            if test -n "$library_names"; then
              # Do each command in the postuninstall commands.
          uninstall)
            if test -n "$library_names"; then
              # Do each command in the postuninstall commands.
-             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+             func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
            fi
 
            if test -n "$old_library"; then
              # Do each command in the old_postuninstall commands.
            fi
 
            if test -n "$old_library"; then
              # Do each command in the old_postuninstall commands.
-             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+             func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
            fi
            # FIXME: should reinstall the best remaining shared library.
            ;;
            fi
            # FIXME: should reinstall the best remaining shared library.
            ;;
@@ -9549,21 +10823,19 @@ func_mode_uninstall ()
          func_source $dir/$name
 
          # Add PIC object to the list of files to remove.
          func_source $dir/$name
 
          # Add PIC object to the list of files to remove.
-         if test -n "$pic_object" &&
-            test "$pic_object" != none; then
+         if test -n "$pic_object" && test none != "$pic_object"; then
            func_append rmfiles " $dir/$pic_object"
          fi
 
          # Add non-PIC object to the list of files to remove.
            func_append rmfiles " $dir/$pic_object"
          fi
 
          # Add non-PIC object to the list of files to remove.
-         if test -n "$non_pic_object" &&
-            test "$non_pic_object" != none; then
+         if test -n "$non_pic_object" && test none != "$non_pic_object"; then
            func_append rmfiles " $dir/$non_pic_object"
          fi
        fi
        ;;
 
       *)
            func_append rmfiles " $dir/$non_pic_object"
          fi
        fi
        ;;
 
       *)
-       if test "$opt_mode" = clean ; then
+       if test clean = "$opt_mode"; then
          noexename=$name
          case $file in
          *.exe)
          noexename=$name
          case $file in
          *.exe)
@@ -9590,12 +10862,12 @@ func_mode_uninstall ()
 
            # note $name still contains .exe if it was in $file originally
            # as does the version of $file that was added into $rmfiles
 
            # note $name still contains .exe if it was in $file originally
            # as does the version of $file that was added into $rmfiles
-           func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
-           if test "$fast_install" = yes && test -n "$relink_command"; then
+           func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+           if test yes = "$fast_install" && test -n "$relink_command"; then
              func_append rmfiles " $odir/lt-$name"
            fi
              func_append rmfiles " $odir/lt-$name"
            fi
-           if test "X$noexename" != "X$name" ; then
-             func_append rmfiles " $odir/lt-${noexename}.c"
+           if test "X$noexename" != "X$name"; then
+             func_append rmfiles " $odir/lt-$noexename.c"
            fi
          fi
        fi
            fi
          fi
        fi
@@ -9604,7 +10876,7 @@ func_mode_uninstall ()
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
 
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
 
-    # Try to remove the ${objdir}s in the directories where we deleted files
+    # Try to remove the $objdir's in the directories where we deleted files
     for dir in $rmdirs; do
       if test -d "$dir"; then
        func_show_eval "rmdir $dir >/dev/null 2>&1"
     for dir in $rmdirs; do
       if test -d "$dir"; then
        func_show_eval "rmdir $dir >/dev/null 2>&1"
@@ -9614,16 +10886,17 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
     exit $exit_status
 }
 
-{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
-    func_mode_uninstall ${1+"$@"}
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
 
 test -z "$opt_mode" && {
 
 test -z "$opt_mode" && {
-  help="$generic_help"
+  help=$generic_help
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$opt_mode'"
+  func_fatal_help "invalid operation mode '$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
@@ -9634,7 +10907,7 @@ exit $exit_status
 
 
 # The TAGs below are defined such that we never get into a situation
 
 
 # The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
+# where we disable both kinds of libraries.  Given conflicting
 # choices, we go for a static library, that is the most portable,
 # since we can't tell whether shared libraries were disabled because
 # the user asked for that or because the platform doesn't support
 # choices, we go for a static library, that is the most portable,
 # since we can't tell whether shared libraries were disabled because
 # the user asked for that or because the platform doesn't support
@@ -9657,5 +10930,3 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
 # mode:shell-script
 # sh-indentation:2
 # End:
 # mode:shell-script
 # sh-indentation:2
 # End:
-# vi:sw=2
-
diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4
new file mode 100644 (file)
index 0000000..3675543
--- /dev/null
@@ -0,0 +1,88 @@
+dnl -*- mode: autoconf -*-
+
+# serial 2
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+
+  ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"])
+  AC_MSG_CHECKING([for gtk-doc])
+  PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no])
+  AC_MSG_RESULT($have_gtk_doc)
+
+  if test "$have_gtk_doc" = "no"; then
+      AC_MSG_WARN([
+  You will not be able to create source packages with 'make dist'
+  because $gtk_doc_requires is not found.])
+  fi
+
+  dnl check for tools we added during development
+  dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that
+  dnl may not be writable by the user. Currently, automake requires that the
+  dnl test name must end in '.test'.
+  dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638
+  AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test])
+  AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check])
+  AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
+  AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
+
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
+    AC_MSG_ERROR([
+  You must have $gtk_doc_requires installed to build documentation for
+  $PACKAGE_NAME. Please install gtk-doc or disable building the
+  documentation by adding '--disable-gtk-doc' to '[$]0'.])
+  fi
+
+  dnl don't check for glib if we build glib
+  if test "x$PACKAGE_NAME" != "xglib"; then
+    dnl don't fail if someone does not have glib
+    PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0,,[:])
+  fi
+
+  dnl enable/disable output formats
+  AC_ARG_ENABLE([gtk-doc-html],
+    AS_HELP_STRING([--enable-gtk-doc-html],
+                   [build documentation in html format [[default=yes]]]),,
+    [enable_gtk_doc_html=yes])
+    AC_ARG_ENABLE([gtk-doc-pdf],
+      AS_HELP_STRING([--enable-gtk-doc-pdf],
+                     [build documentation in pdf format [[default=no]]]),,
+      [enable_gtk_doc_pdf=no])
+
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
+
+  if test -z "$AM_DEFAULT_VERBOSITY"; then
+    AM_DEFAULT_VERBOSITY=1
+  fi
+  AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+  AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes])
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+  AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
+])
index 828104c..4bc6b22 100644 (file)
@@ -1,8 +1,6 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
+#   Copyright (C) 1996-2001, 2003-2013 Free Software Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -39,7 +37,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 57 LT_INIT
+# serial 58 LT_INIT
 
 
 # LT_PREREQ(VERSION)
 
 
 # LT_PREREQ(VERSION)
@@ -91,7 +89,7 @@ dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
 # This can be used to rebuild libtool when needed
 _LT_SET_OPTIONS([$0], [$1])
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -130,7 +128,7 @@ cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 # _LT_FILEUTILS_DEFAULTS
 # ----------------------
 # It is okay to use these file commands and assume they have been set
 # _LT_FILEUTILS_DEFAULTS
 # ----------------------
 # It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
 m4_defun([_LT_FILEUTILS_DEFAULTS],
 [: ${CP="cp -f"}
 : ${MV="mv -f"}
 m4_defun([_LT_FILEUTILS_DEFAULTS],
 [: ${CP="cp -f"}
 : ${MV="mv -f"}
@@ -179,13 +177,13 @@ m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
 m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
 m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 ])
    setopt NO_GLOB_SUBST
 fi
 ])
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
    setopt NO_GLOB_SUBST
 fi
 
@@ -198,7 +196,7 @@ aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -209,14 +207,14 @@ esac
 ofile=libtool
 can_build_shared=yes
 
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 
 # which needs '.lib').
 libext=a
 
-with_gnu_ld="$lt_cv_prog_gnu_ld"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -269,14 +267,14 @@ no_glob_subst='s/\*/\\\*/g'
 
 # _LT_PROG_LTMAIN
 # ---------------
 
 # _LT_PROG_LTMAIN
 # ---------------
-# Note that this code is called both from `configure', and `config.status'
+# Note that this code is called both from 'configure', and 'config.status'
 # now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
 # now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
 # so we pass a copy along to make sure it has a sensible value anyway.
 m4_defun([_LT_PROG_LTMAIN],
 [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
 _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
 # so we pass a copy along to make sure it has a sensible value anyway.
 m4_defun([_LT_PROG_LTMAIN],
 [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
 _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 ])# _LT_PROG_LTMAIN
 
 
 ])# _LT_PROG_LTMAIN
 
 
@@ -286,7 +284,7 @@ ltmain="$ac_aux_dir/ltmain.sh"
 
 # So that we can recreate a full libtool script including additional
 # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
 
 # So that we can recreate a full libtool script including additional
 # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
+# in macros and then make a single call at the end using the 'libtool'
 # label.
 
 
 # label.
 
 
@@ -421,8 +419,8 @@ m4_define([_lt_decl_all_varnames],
 
 # _LT_CONFIG_STATUS_DECLARE([VARNAME])
 # ------------------------------------
 
 # _LT_CONFIG_STATUS_DECLARE([VARNAME])
 # ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
 [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
 [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
@@ -446,7 +444,7 @@ m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 # Output comment and list of tags supported by the script
 m4_defun([_LT_LIBTOOL_TAGS],
 [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
 # Output comment and list of tags supported by the script
 m4_defun([_LT_LIBTOOL_TAGS],
 [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
+available_tags='_LT_TAGS'dnl
 ])
 
 
 ])
 
 
@@ -474,7 +472,7 @@ m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
 # _LT_LIBTOOL_CONFIG_VARS
 # -----------------------
 # Produce commented declarations of non-tagged libtool config variables
 # _LT_LIBTOOL_CONFIG_VARS
 # -----------------------
 # Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
 # script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
 # section) are produced by _LT_LIBTOOL_TAG_VARS.
 m4_defun([_LT_LIBTOOL_CONFIG_VARS],
 # script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
 # section) are produced by _LT_LIBTOOL_TAG_VARS.
 m4_defun([_LT_LIBTOOL_CONFIG_VARS],
@@ -500,8 +498,8 @@ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
 # Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
 # variables for single and double quote escaping we saved from calls
 # to _LT_DECL, we can put quote escaped variables declarations
 # Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
 # variables for single and double quote escaping we saved from calls
 # to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'.  Finally, any additional code accumulated
 # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
 m4_defun([_LT_CONFIG_COMMANDS],
 [AC_PROVIDE_IFELSE([LT_OUTPUT],
 # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
 m4_defun([_LT_CONFIG_COMMANDS],
 [AC_PROVIDE_IFELSE([LT_OUTPUT],
@@ -547,7 +545,7 @@ for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
 ]], lt_decl_quote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -560,7 +558,7 @@ for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
 ]], lt_decl_dquote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -576,7 +574,7 @@ _LT_OUTPUT_LIBTOOL_INIT
 # Generate a child script FILE with all initialization necessary to
 # reuse the environment learned by the parent script, and make the
 # file executable.  If COMMENT is supplied, it is inserted after the
 # Generate a child script FILE with all initialization necessary to
 # reuse the environment learned by the parent script, and make the
 # file executable.  If COMMENT is supplied, it is inserted after the
-# `#!' sequence but before initialization text begins.  After this
+# '#!' sequence but before initialization text begins.  After this
 # macro, additional text can be appended to FILE to form the body of
 # the child script.  The macro ends with non-zero status if the
 # file could not be fully written (such as if the disk is full).
 # macro, additional text can be appended to FILE to form the body of
 # the child script.  The macro ends with non-zero status if the
 # file could not be fully written (such as if the disk is full).
@@ -598,7 +596,7 @@ AS_SHELL_SANITIZE
 _AS_PREPARE
 exec AS_MESSAGE_FD>&1
 _ASEOF
 _AS_PREPARE
 exec AS_MESSAGE_FD>&1
 _ASEOF
-test $lt_write_fail = 0 && chmod +x $1[]dnl
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
 m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
 m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
@@ -621,7 +619,7 @@ exec AS_MESSAGE_LOG_FD>>config.log
 } >&AS_MESSAGE_LOG_FD
 
 lt_cl_help="\
 } >&AS_MESSAGE_LOG_FD
 
 lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
+'$as_me' creates a local libtool stub from the current configuration,
 for use in further configure time tests before the real libtool is
 generated.
 
 for use in further configure time tests before the real libtool is
 generated.
 
@@ -643,7 +641,7 @@ Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
-while test $[#] != 0
+while test 0 != $[#]
 do
   case $[1] in
     --version | --v* | -V )
 do
   case $[1] in
     --version | --v* | -V )
@@ -656,10 +654,10 @@ do
       lt_cl_silent=: ;;
 
     -*) AC_MSG_ERROR([unrecognized option: $[1]
       lt_cl_silent=: ;;
 
     -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
 
     *) AC_MSG_ERROR([unrecognized argument: $[1]
 
     *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
   esac
   shift
 done
   esac
   shift
 done
@@ -685,7 +683,7 @@ chmod +x "$CONFIG_LT"
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
 lt_cl_success=:
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
 lt_cl_success=:
-test "$silent" = yes &&
+test yes = "$silent" &&
   lt_config_lt_args="$lt_config_lt_args --quiet"
 exec AS_MESSAGE_LOG_FD>/dev/null
 $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
   lt_config_lt_args="$lt_config_lt_args --quiet"
 exec AS_MESSAGE_LOG_FD>/dev/null
 $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
@@ -705,13 +703,13 @@ m4_defun([_LT_CONFIG],
 _LT_CONFIG_SAVE_COMMANDS([
   m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
   m4_if(_LT_TAG, [C], [
 _LT_CONFIG_SAVE_COMMANDS([
   m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
   m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
@@ -719,7 +717,7 @@ _LT_CONFIG_SAVE_COMMANDS([
 #! $SHELL
 
 # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
 #! $SHELL
 
 # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Generated automatically by $as_me ($PACKAGE) $VERSION
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
@@ -739,7 +737,7 @@ _LT_EOF
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -756,8 +754,6 @@ _LT_EOF
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_REPLACE_SHELLFNS
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -775,7 +771,6 @@ _LT_EOF
 [m4_if([$1], [], [
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
 [m4_if([$1], [], [
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'], [])
 ])dnl /_LT_CONFIG_SAVE_COMMANDS
     RM='$RM'
     ofile='$ofile'], [])
 ])dnl /_LT_CONFIG_SAVE_COMMANDS
@@ -974,7 +969,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 
     AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
       [lt_cv_apple_cc_single_mod=no
 
     AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
       [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
+      if test -z "$LT_MULTI_MODULE"; then
        # By default we will add the -single_module flag. You can override
        # by either setting the environment variable LT_MULTI_MODULE
        # non-empty at configure time, or by adding -multi_module to the
        # By default we will add the -single_module flag. You can override
        # by either setting the environment variable LT_MULTI_MODULE
        # non-empty at configure time, or by adding -multi_module to the
@@ -992,7 +987,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
          cat conftest.err >&AS_MESSAGE_LOG_FD
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
          cat conftest.err >&AS_MESSAGE_LOG_FD
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
-       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&AS_MESSAGE_LOG_FD
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1010,7 +1005,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
       AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
        [lt_cv_ld_exported_symbols_list=yes],
        [lt_cv_ld_exported_symbols_list=no])
       AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
        [lt_cv_ld_exported_symbols_list=yes],
        [lt_cv_ld_exported_symbols_list=no])
-       LDFLAGS="$save_LDFLAGS"
+       LDFLAGS=$save_LDFLAGS
     ])
 
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
     ])
 
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
@@ -1032,7 +1027,7 @@ _LT_EOF
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&AS_MESSAGE_LOG_FD
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&AS_MESSAGE_LOG_FD
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&AS_MESSAGE_LOG_FD
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1042,32 +1037,32 @@ _LT_EOF
     ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
     ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
        10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
        10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[[012]]*)
        10.[[012]]*)
-         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
        10.*)
        10.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
       _lt_dar_single_mod='$single_module'
     fi
       _lt_dar_single_mod='$single_module'
     fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
     else
     else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -1087,29 +1082,29 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
     m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
                   [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
     m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
                   [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
   case $cc_basename in
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
     output_verbose_link_cmd=func_echo_all
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
     m4_if([$1], [CXX],
     m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+[   if test yes != "$lt_cv_apple_cc_single_mod"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
 ],[])
   else
     fi
 ],[])
   else
@@ -1129,7 +1124,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
 # Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
 # Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-if test "${lt_cv_aix_libpath+set}" = set; then
+if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
   aix_libpath=$lt_cv_aix_libpath
 else
   AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
@@ -1147,7 +1142,7 @@ else
     _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi],[])
   if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
     _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi],[])
   if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
   fi
   ])
   aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
   fi
   ])
   aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
@@ -1167,8 +1162,8 @@ m4_define([_LT_SHELL_INIT],
 # -----------------------
 # Find how we can fake an echo command that does not interpret backslash.
 # In particular, with Autoconf 2.60 or later we add some code to the start
 # -----------------------
 # Find how we can fake an echo command that does not interpret backslash.
 # In particular, with Autoconf 2.60 or later we add some code to the start
-# of the generated configure script which will find a shell with a builtin
-# printf (which we can use as an echo command).
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
 [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
 [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
@@ -1196,10 +1191,10 @@ fi
 # Invoke $ECHO with all args, space-separated.
 func_echo_all ()
 {
 # Invoke $ECHO with all args, space-separated.
 func_echo_all ()
 {
-    $ECHO "$*" 
+    $ECHO "$*"
 }
 
 }
 
-case "$ECHO" in
+case $ECHO in
   printf*) AC_MSG_RESULT([printf]) ;;
   print*) AC_MSG_RESULT([print -r]) ;;
   *) AC_MSG_RESULT([cat]) ;;
   printf*) AC_MSG_RESULT([printf]) ;;
   print*) AC_MSG_RESULT([print -r]) ;;
   *) AC_MSG_RESULT([cat]) ;;
@@ -1225,16 +1220,17 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 AC_DEFUN([_LT_WITH_SYSROOT],
 [AC_MSG_CHECKING([for sysroot])
 AC_ARG_WITH([sysroot],
 AC_DEFUN([_LT_WITH_SYSROOT],
 [AC_MSG_CHECKING([for sysroot])
 AC_ARG_WITH([sysroot],
-[  --with-sysroot[=DIR] Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
 [], [with_sysroot=no])
 
 dnl lt_sysroot will always be passed unquoted.  We quote it here
 dnl in case the user passed a directory name.
 lt_sysroot=
 [], [with_sysroot=no])
 
 dnl lt_sysroot will always be passed unquoted.  We quote it here
 dnl in case the user passed a directory name.
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -1244,14 +1240,14 @@ case ${with_sysroot} in #(
  no|'')
    ;; #(
  *)
  no|'')
    ;; #(
  *)
-   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_RESULT([$with_sysroot])
    AC_MSG_ERROR([The sysroot must be an absolute path.])
    ;;
 esac
 
  AC_MSG_RESULT([${lt_sysroot:-no}])
 _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
    AC_MSG_ERROR([The sysroot must be an absolute path.])
    ;;
 esac
 
  AC_MSG_RESULT([${lt_sysroot:-no}])
 _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
-[dependent libraries, and in which our libraries should be installed.])])
+[dependent libraries, and where our libraries should be installed.])])
 
 # _LT_ENABLE_LOCK
 # ---------------
 
 # _LT_ENABLE_LOCK
 # ---------------
@@ -1259,31 +1255,33 @@ m4_defun([_LT_ENABLE_LOCK],
 [AC_ARG_ENABLE([libtool-lock],
   [AS_HELP_STRING([--disable-libtool-lock],
     [avoid locking (might break parallel builds)])])
 [AC_ARG_ENABLE([libtool-lock],
   [AS_HELP_STRING([--disable-libtool-lock],
     [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
-       HPUX_IA64_MODE="32"
+       HPUX_IA64_MODE=32
        ;;
       *ELF-64*)
        ;;
       *ELF-64*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
@@ -1312,9 +1310,46 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1324,9 +1359,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
-           LD="${LD-ld} -m elf_i386"
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
            ;;
            ;;
-         ppc64-*linux*|powerpc64-*linux*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -1345,7 +1390,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         ppc*-*linux*|powerpc*-*linux*)
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -1363,19 +1411,20 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
     [AC_LANG_PUSH(C)
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
      AC_LANG_POP])
   CFLAGS="$CFLAGS -belf"
   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
     [AC_LANG_PUSH(C)
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
      AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1383,7 +1432,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -1392,7 +1441,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
         fi
         ;;
       *)
@@ -1408,7 +1457,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   ;;
 esac
 
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 ])# _LT_ENABLE_LOCK
 
 
 ])# _LT_ENABLE_LOCK
 
 
@@ -1427,11 +1476,11 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
      [echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
       AC_TRY_EVAL([lt_ar_try])
      [echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
       AC_TRY_EVAL([lt_ar_try])
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        AC_TRY_EVAL([lt_ar_try])
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        AC_TRY_EVAL([lt_ar_try])
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
           lt_cv_ar_at_file=@
         fi
       fi
@@ -1439,7 +1488,7 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
      ])
   ])
 
      ])
   ])
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -1470,7 +1519,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -1506,7 +1555,7 @@ AC_CACHE_CHECK([$1], [$2],
   [$2=no
    m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
   [$2=no
    m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -1533,7 +1582,7 @@ AC_CACHE_CHECK([$1], [$2],
    $RM conftest*
 ])
 
    $RM conftest*
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$5], , :, [$5])
 else
     m4_if([$6], , :, [$6])
     m4_if([$5], , :, [$5])
 else
     m4_if([$6], , :, [$6])
@@ -1555,7 +1604,7 @@ AC_DEFUN([_LT_LINKER_OPTION],
 m4_require([_LT_DECL_SED])dnl
 AC_CACHE_CHECK([$1], [$2],
   [$2=no
 m4_require([_LT_DECL_SED])dnl
 AC_CACHE_CHECK([$1], [$2],
   [$2=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $3"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
    LDFLAGS="$LDFLAGS $3"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -1574,10 +1623,10 @@ AC_CACHE_CHECK([$1], [$2],
      fi
    fi
    $RM -r conftest*
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 ])
 
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$4], , :, [$4])
 else
     m4_if([$5], , :, [$5])
     m4_if([$4], , :, [$4])
 else
     m4_if([$5], , :, [$5])
@@ -1598,7 +1647,7 @@ AC_DEFUN([LT_CMD_MAX_LEN],
 AC_MSG_CHECKING([the maximum length of command line arguments])
 AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   i=0
 AC_MSG_CHECKING([the maximum length of command line arguments])
 AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
 
   case $build_os in
   msdosdjgpp*)
@@ -1638,7 +1687,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -1688,22 +1737,23 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     ;;
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     ;;
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
+      for i in 1 2 3 4 5 6 7 8; do
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
+             test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -1719,7 +1769,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     ;;
   esac
 ])
     ;;
   esac
 ])
-if test -n $lt_cv_sys_max_cmd_len ; then
+if test -n "$lt_cv_sys_max_cmd_len"; then
   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 else
   AC_MSG_RESULT(none)
   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 else
   AC_MSG_RESULT(none)
@@ -1747,7 +1797,7 @@ m4_defun([_LT_HEADER_DLFCN],
 # ----------------------------------------------------------------
 m4_defun([_LT_TRY_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
 # ----------------------------------------------------------------
 m4_defun([_LT_TRY_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
+if test yes = "$cross_compiling"; then :
   [$4]
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   [$4]
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -1796,7 +1846,7 @@ else
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -1822,7 +1872,7 @@ int main ()
   return status;
 }]
 _LT_EOF
   return status;
 }]
 _LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+  if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
     lt_status=$?
     case x$lt_status in
     (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -1843,7 +1893,7 @@ rm -fr conftest*
 # ------------------
 AC_DEFUN([LT_SYS_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
 # ------------------
 AC_DEFUN([LT_SYS_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
+if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -1853,44 +1903,52 @@ else
 
   case $host_os in
   beos*)
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen=load_add_on
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # if libdl is installed we need to link against it
     AC_CHECK_LIB([dl], [dlopen],
     AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ])
     ;;
 
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ])
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     AC_CHECK_FUNC([shl_load],
   *)
     AC_CHECK_FUNC([shl_load],
-         [lt_cv_dlopen="shl_load"],
+         [lt_cv_dlopen=shl_load],
       [AC_CHECK_LIB([dld], [shl_load],
       [AC_CHECK_LIB([dld], [shl_load],
-           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+           [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
        [AC_CHECK_FUNC([dlopen],
        [AC_CHECK_FUNC([dlopen],
-             [lt_cv_dlopen="dlopen"],
+             [lt_cv_dlopen=dlopen],
          [AC_CHECK_LIB([dl], [dlopen],
          [AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
            [AC_CHECK_LIB([svld], [dlopen],
            [AC_CHECK_LIB([svld], [dlopen],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+                 [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
              [AC_CHECK_LIB([dld], [dld_link],
              [AC_CHECK_LIB([dld], [dld_link],
-                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+                   [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
              ])
            ])
          ])
              ])
            ])
          ])
@@ -1899,21 +1957,21 @@ else
     ;;
   esac
 
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     AC_CACHE_CHECK([whether a program can dlopen itself],
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     AC_CACHE_CHECK([whether a program can dlopen itself],
@@ -1923,7 +1981,7 @@ else
            lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
     ])
 
            lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
     ])
 
-    if test "x$lt_cv_dlopen_self" = xyes; then
+    if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
          lt_cv_dlopen_self_static, [dnl
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
          lt_cv_dlopen_self_static, [dnl
@@ -1933,9 +1991,9 @@ else
       ])
     fi
 
       ])
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
     ;;
   esac
 
@@ -2027,8 +2085,8 @@ m4_defun([_LT_COMPILER_FILE_LOCKS],
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 _LT_COMPILER_C_O([$1])
 
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 _LT_COMPILER_C_O([$1])
 
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   AC_MSG_CHECKING([if we can lock with hard links])
   hard_links=yes
   # do not overwrite the value of need_locks provided by the user
   AC_MSG_CHECKING([if we can lock with hard links])
   hard_links=yes
@@ -2038,8 +2096,8 @@ if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" !=
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   AC_MSG_RESULT([$hard_links])
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+  if test no = "$hard_links"; then
+    AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
     need_locks=warn
   fi
 else
     need_locks=warn
   fi
 else
@@ -2066,8 +2124,8 @@ objdir=$lt_cv_objdir
 _LT_DECL([], [objdir], [0],
          [The name of the directory that contains temporary libtool files])dnl
 m4_pattern_allow([LT_OBJDIR])dnl
 _LT_DECL([], [objdir], [0],
          [The name of the directory that contains temporary libtool files])dnl
 m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+  [Define to the sub-directory where libtool stores uninstalled libraries.])
 ])# _LT_CHECK_OBJDIR
 
 
 ])# _LT_CHECK_OBJDIR
 
 
@@ -2079,15 +2137,15 @@ m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
 _LT_TAGVAR(hardcode_action, $1)=
 if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
    test -n "$_LT_TAGVAR(runpath_var, $1)" ||
 _LT_TAGVAR(hardcode_action, $1)=
 if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
    test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
 
   # We can hardcode non-existent directories.
 
   # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+  if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+     test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
     # Linking always hardcodes the temporary library directory.
     _LT_TAGVAR(hardcode_action, $1)=relink
   else
     # Linking always hardcodes the temporary library directory.
     _LT_TAGVAR(hardcode_action, $1)=relink
   else
@@ -2101,12 +2159,12 @@ else
 fi
 AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
 
 fi
 AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
 
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+   test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
   # Fast installation is not supported
   enable_fast_install=no
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -2130,7 +2188,7 @@ else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       AC_MSG_RESULT([yes])
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       AC_MSG_RESULT([yes])
@@ -2161,14 +2219,14 @@ m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
        [], [
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
        [], [
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $host_os in
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -2184,28 +2242,35 @@ if test "$GCC" = yes; then
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # and add multilib dir if necessary...
   lt_tmp_lt_search_path_spec=
   lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   for lt_sys_path in $lt_search_path_spec; do
   for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
       test -d "$lt_sys_path" && \
        lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
       test -d "$lt_sys_path" && \
        lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
         } else {
           lt_count--;
         }
@@ -2219,7 +2284,7 @@ BEGIN {RS=" "; FS="/|\n";} {
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+      $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -2228,7 +2293,7 @@ fi])
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -2248,11 +2313,11 @@ need_version=unknown
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[[4-9]]*)
   ;;
 
 aix[[4-9]]*)
@@ -2260,40 +2325,40 @@ aix[[4-9]]*)
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[[01]] | aix4.[[01]].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[[01]] | aix4.[[01]].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
           echo ' yes '
-          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
        :
       else
        can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    if test yes = "$aix_use_runtimelinking"; then
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
     else
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
     fi
     shlibpath_var=LIBPATH
   fi
     fi
     shlibpath_var=LIBPATH
   fi
@@ -2304,18 +2369,18 @@ amigaos*)
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -2323,8 +2388,8 @@ beos*)
 bsdi[[45]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
 bsdi[[45]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -2336,7 +2401,7 @@ bsdi[[45]]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
   need_version=no
   need_lib_prefix=no
 
@@ -2345,8 +2410,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -2362,17 +2427,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
 m4_if([$1], [],[
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
 m4_if([$1], [],[
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -2381,8 +2446,8 @@ m4_if([$1], [],[
   *,cl*)
     # Native MSVC
     libname_spec='$name'
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
 
     case $build_os in
     mingw*)
@@ -2409,7 +2474,7 @@ m4_if([$1], [],[
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
       if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -2422,8 +2487,8 @@ m4_if([$1], [],[
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -2436,7 +2501,7 @@ m4_if([$1], [],[
 
   *)
     # Assume MSVC wrapper
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -2449,8 +2514,8 @@ darwin* | rhapsody*)
   version_type=darwin
   need_lib_prefix=no
   need_version=no
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -2463,8 +2528,8 @@ dgux*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -2482,12 +2547,12 @@ freebsd* | dragonfly*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
       need_version=yes
       ;;
   esac
@@ -2512,26 +2577,15 @@ freebsd* | dragonfly*)
   esac
   ;;
 
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -2549,9 +2603,9 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
@@ -2564,8 +2618,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -2574,8 +2628,8 @@ hpux9* | hpux10* | hpux11*)
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -2588,8 +2642,8 @@ interix[[3-9]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -2600,7 +2654,7 @@ irix5* | irix6* | nonstopux*)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
+       if test yes = "$lt_cv_prog_gnu_ld"; then
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
@@ -2608,8 +2662,8 @@ irix5* | irix6* | nonstopux*)
   esac
   need_lib_prefix=no
   need_version=no
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -2628,8 +2682,8 @@ irix5* | irix6* | nonstopux*)
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
   hardcode_into_libs=yes
   ;;
 
@@ -2638,13 +2692,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -2684,29 +2758,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -2716,7 +2778,7 @@ netbsd*)
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -2725,45 +2787,34 @@ newsos6)
   version_type=qnx
   need_lib_prefix=no
   need_version=no
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
   else
   else
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   fi
   fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_lib_prefix=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  library_names_spec='$libname$shared_ext $libname.a'
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
   dynamic_linker='OS/2 ld.exe'
   shlibpath_var=LIBPATH
   ;;
@@ -2772,11 +2823,11 @@ osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
   ;;
 
 rdos*)
@@ -2787,8 +2838,8 @@ solaris*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -2798,11 +2849,11 @@ solaris*)
 
 sunos4*)
   version_type=sunos
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
     need_lib_prefix=no
   fi
   need_version=yes
@@ -2810,8 +2861,8 @@ sunos4*)
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -2832,10 +2883,10 @@ sysv4 | sysv4.3*)
   ;;
 
 sysv4*MP*)
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/necthen
     version_type=linux # correct to gnu/linux during the next big refactor
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
@@ -2844,12 +2895,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
   version_type=freebsd-elf
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -2867,7 +2918,7 @@ tpf*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -2875,8 +2926,8 @@ tpf*)
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -2885,18 +2936,18 @@ uts4*)
   ;;
 esac
 AC_MSG_RESULT([$dynamic_linker])
   ;;
 esac
 AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
 _LT_DECL([], [variables_saved_for_relink], [1],
 fi
 
 _LT_DECL([], [variables_saved_for_relink], [1],
@@ -2938,32 +2989,32 @@ _LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
 
 # _LT_PATH_TOOL_PREFIX(TOOL)
 # --------------------------
 
 # _LT_PATH_TOOL_PREFIX(TOOL)
 # --------------------------
-# find a file program which can recognize shared library
+# find a file program that can recognize shared library
 AC_DEFUN([_LT_PATH_TOOL_PREFIX],
 [m4_require([_LT_DECL_EGREP])dnl
 AC_MSG_CHECKING([for $1])
 AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
 [case $MAGIC_CMD in
 [[\\/*] |  ?:[\\/]*])
 AC_DEFUN([_LT_PATH_TOOL_PREFIX],
 [m4_require([_LT_DECL_EGREP])dnl
 AC_MSG_CHECKING([for $1])
 AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
 [case $MAGIC_CMD in
 [[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
 dnl $ac_dummy forces splitting on constant user-supplied paths.
 dnl POSIX.2 word splitting is done only on the output of word expansions,
 dnl not every word.  This closes a longstanding sh security hole.
   ac_dummy="m4_if([$2], , $PATH, [$2])"
   for ac_dir in $ac_dummy; do
 dnl $ac_dummy forces splitting on constant user-supplied paths.
 dnl POSIX.2 word splitting is done only on the output of word expansions,
 dnl not every word.  This closes a longstanding sh security hole.
   ac_dummy="m4_if([$2], , $PATH, [$2])"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
       if test -n "$file_magic_test_file"; then
        case $deplibs_check_method in
        "file_magic "*)
          file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
          if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
            $EGREP "$file_magic_regex" > /dev/null; then
            :
@@ -2986,11 +3037,11 @@ _LT_EOF
       break
     fi
   done
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac])
   ;;
 esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   AC_MSG_RESULT($MAGIC_CMD)
 else
 if test -n "$MAGIC_CMD"; then
   AC_MSG_RESULT($MAGIC_CMD)
 else
@@ -3008,7 +3059,7 @@ dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
 
 # _LT_PATH_MAGIC
 # --------------
 
 # _LT_PATH_MAGIC
 # --------------
-# find a file program which can recognize a shared library
+# find a file program that can recognize a shared library
 m4_defun([_LT_PATH_MAGIC],
 [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
 if test -z "$lt_cv_path_MAGIC_CMD"; then
 m4_defun([_LT_PATH_MAGIC],
 [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
 if test -z "$lt_cv_path_MAGIC_CMD"; then
@@ -3035,16 +3086,16 @@ m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
        [assume the C compiler uses GNU ld @<:@default=no@:>@])],
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
        [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
+    [test no = "$withval" || with_gnu_ld=yes],
     [with_gnu_ld=no])dnl
 
 ac_prog=ld
     [with_gnu_ld=no])dnl
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   AC_MSG_CHECKING([for ld used by $CC])
   case $host in
   *-*-mingw*)
   # Check if gcc -print-prog-name=ld gives a path.
   AC_MSG_CHECKING([for ld used by $CC])
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -3058,7 +3109,7 @@ if test "$GCC" = yes; then
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
        ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -3069,37 +3120,37 @@ if test "$GCC" = yes; then
     with_gnu_ld=unknown
     ;;
   esac
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   AC_MSG_CHECKING([for GNU ld])
 else
   AC_MSG_CHECKING([for non-GNU ld])
 fi
 AC_CACHE_VAL(lt_cv_path_LD,
 [if test -z "$LD"; then
   AC_MSG_CHECKING([for GNU ld])
 else
   AC_MSG_CHECKING([for non-GNU ld])
 fi
 AC_CACHE_VAL(lt_cv_path_LD,
 [if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
+       test no != "$with_gnu_ld" && break
        ;;
       *)
        ;;
       *)
-       test "$with_gnu_ld" != yes && break
+       test yes != "$with_gnu_ld" && break
        ;;
       esac
     fi
   done
        ;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi])
 fi])
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   AC_MSG_RESULT($LD)
 else
 if test -n "$LD"; then
   AC_MSG_RESULT($LD)
 else
@@ -3153,13 +3204,13 @@ esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -3185,13 +3236,13 @@ lt_cv_deplibs_check_method='unknown'
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
+# 'unknown' -- same as none, but documents that we really don't know.
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
 
 case $host_os in
 aix[[4-9]]*)
 
 case $host_os in
 aix[[4-9]]*)
@@ -3218,8 +3269,7 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  if ( file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
@@ -3255,10 +3305,6 @@ freebsd* | dragonfly*)
   fi
   ;;
 
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3297,11 +3343,11 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be glibc/ELF.
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
@@ -3319,8 +3365,8 @@ newos6*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
@@ -3413,33 +3459,33 @@ AC_DEFUN([LT_PATH_NM],
 AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
 [if test -n "$NM"; then
   # Let the user override the test.
 AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
 [if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 else
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  lt_nm_to_check=${ac_tool_prefix}nm
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       test -z "$ac_dir" && ac_dir=.
       test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Check to see if the nm accepts a BSD-compat flag.
-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
        */dev/null* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
        */dev/null* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
-         break
+         break 2
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
-           break
+           break 2
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -3450,21 +3496,21 @@ else
        esac
       fi
     done
        esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   done
   : ${lt_cv_path_NM=no}
 fi])
   done
   : ${lt_cv_path_NM=no}
 fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
     # Let the user override the test.
   else
     AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
     # Let the user override the test.
   else
     AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
       ;;
     *)
       DUMPBIN=:
@@ -3472,8 +3518,8 @@ else
     esac
   fi
   AC_SUBST([DUMPBIN])
     esac
   fi
   AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
   fi
 fi
 test -z "$NM" && NM=nm
@@ -3519,8 +3565,8 @@ lt_cv_sharedlib_from_linklib_cmd,
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -3532,7 +3578,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 ])
   ;;
 esac
 ])
@@ -3559,13 +3605,28 @@ AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool
     lt_cv_path_mainfest_tool=yes
   fi
   rm -f conftest*])
     lt_cv_path_mainfest_tool=yes
   fi
   rm -f conftest*])
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
 ])# _LT_PATH_MANIFEST_TOOL
 
 
   MANIFEST_TOOL=:
 fi
 _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
 ])# _LT_PATH_MANIFEST_TOOL
 
 
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[        ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[  ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])# _LT_DLL_DEF_P
+
+
 # LT_LIB_M
 # --------
 # check for math library
 # LT_LIB_M
 # --------
 # check for math library
@@ -3577,11 +3638,11 @@ case $host in
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
   ;;
 *)
   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
   ;;
 *)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
   ;;
 esac
 AC_SUBST([LIBM])
   ;;
 esac
 AC_SUBST([LIBM])
@@ -3600,7 +3661,7 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
 
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
   case $cc_basename in
   nvcc*)
     _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
@@ -3652,7 +3713,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[[ABCDGISTW]]'
   ;;
 hpux*)
   symcode='[[ABCDGISTW]]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[[ABCDEGRST]]'
   fi
   ;;
     symcode='[[ABCDEGRST]]'
   fi
   ;;
@@ -3685,14 +3746,44 @@ case `$NM -V 2>&1` in
   symcode='[[ABCDGIRSTW]]' ;;
 esac
 
   symcode='[[ABCDGIRSTW]]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3710,21 +3801,24 @@ for ac_symprfx in "" "_"; do
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx]"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
 "     ' prfx=^$ac_symprfx]"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
@@ -3764,11 +3858,11 @@ _LT_EOF
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT@&t@_DLSYM_CONST
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT@&t@_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT@&t@_DLSYM_CONST
 #else
 /* This system does not cope well with relocations in const data.  */
 # define LT@&t@_DLSYM_CONST
 #else
@@ -3794,7 +3888,7 @@ lt__PROGRAM__LTX_preloaded_symbols[[]] =
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -3814,9 +3908,9 @@ _LT_EOF
          mv conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
          mv conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
-         LIBS="conftstm.$ac_objext"
+         LIBS=conftstm.$ac_objext
          CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
          CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+         if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
@@ -3837,7 +3931,7 @@ _LT_EOF
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -3864,12 +3958,16 @@ _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
     [Transform the output of nm in a proper C declaration])
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
     [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+    [Transform the output of nm into a list of symbols to manually relocate])
 _LT_DECL([global_symbol_to_c_name_address],
     [lt_cv_sys_global_symbol_to_c_name_address], [1],
     [Transform the output of nm in a C name address pair])
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
 _LT_DECL([global_symbol_to_c_name_address],
     [lt_cv_sys_global_symbol_to_c_name_address], [1],
     [Transform the output of nm in a C name address pair])
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+    [The name lister interface])
 _LT_DECL([], [nm_file_list_spec], [1],
     [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 _LT_DECL([], [nm_file_list_spec], [1],
     [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
@@ -3885,17 +3983,18 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
 
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
+  if test yes = "$GXX"; then
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
       ;;
 
     amigaos*)
@@ -3906,8 +4005,8 @@ m4_if([$1], [CXX], [
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -3972,7 +4071,7 @@ m4_if([$1], [CXX], [
     case $host_os in
       aix[[4-9]]*)
        # All AIX code is PIC.
     case $host_os in
       aix[[4-9]]*)
        # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; then
          # AIX 5 now supports IA64 processor
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        else
          # AIX 5 now supports IA64 processor
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        else
@@ -4013,14 +4112,14 @@ m4_if([$1], [CXX], [
        case $cc_basename in
          CC*)
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
        case $cc_basename in
          CC*)
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           if test "$host_cpu" != ia64; then
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
              _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
            fi
            ;;
          aCC*)
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
              _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
            fi
            ;;
          aCC*)
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
            case $host_cpu in
            hppa*64*|ia64*)
              # +Z the default
            case $host_cpu in
            hppa*64*|ia64*)
              # +Z the default
@@ -4049,7 +4148,7 @@ m4_if([$1], [CXX], [
            ;;
        esac
        ;;
            ;;
        esac
        ;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
        case $cc_basename in
          KCC*)
            # KAI C++ Compiler
        case $cc_basename in
          KCC*)
            # KAI C++ Compiler
@@ -4057,7 +4156,7 @@ m4_if([$1], [CXX], [
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
            ;;
          ecpc* )
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
            ;;
          ecpc* )
-           # old Intel C++ for x86_64 which still supported -KPIC.
+           # old Intel C++ for x86_64, which still supported -KPIC.
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
            _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
            _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
            _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
@@ -4113,7 +4212,7 @@ m4_if([$1], [CXX], [
            ;;
        esac
        ;;
            ;;
        esac
        ;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4202,17 +4301,18 @@ m4_if([$1], [CXX], [
   fi
 ],
 [
   fi
 ],
 [
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; then
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
       ;;
 
     amigaos*)
@@ -4223,8 +4323,8 @@ m4_if([$1], [CXX], [
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -4311,7 +4411,7 @@ m4_if([$1], [CXX], [
     case $host_os in
     aix*)
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     case $host_os in
     aix*)
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       else
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       else
@@ -4319,6 +4419,20 @@ m4_if([$1], [CXX], [
       fi
       ;;
 
       fi
       ;;
 
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      esac
+      ;;
+
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
@@ -4339,7 +4453,7 @@ m4_if([$1], [CXX], [
        ;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
        ;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -4348,9 +4462,9 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # old Intel for x86_64, which still supported -KPIC.
       ecc*)
        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       ecc*)
        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4375,6 +4489,12 @@ m4_if([$1], [CXX], [
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        ;;
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -4472,7 +4592,7 @@ m4_if([$1], [CXX], [
       ;;
 
     sysv4*MP*)
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/necthen
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
@@ -4501,7 +4621,7 @@ m4_if([$1], [CXX], [
   fi
 ])
 case $host_os in
   fi
 ])
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     _LT_TAGVAR(lt_prog_compiler_pic, $1)=
     ;;
   *djgpp*)
     _LT_TAGVAR(lt_prog_compiler_pic, $1)=
     ;;
@@ -4577,7 +4697,7 @@ m4_if([$1], [CXX], [
     fi
     ;;
   pw32*)
     fi
     ;;
   pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -4590,9 +4710,6 @@ m4_if([$1], [CXX], [
       ;;
     esac
     ;;
       ;;
     esac
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
@@ -4626,9 +4743,9 @@ m4_if([$1], [CXX], [
   # included in the symbol list
   _LT_TAGVAR(include_expsyms, $1)=
   # exclude_expsyms can be an extended regexp of symbols to exclude
   # included in the symbol list
   _LT_TAGVAR(include_expsyms, $1)=
   # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
   _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
   _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
@@ -4644,7 +4761,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
       with_gnu_ld=no
     fi
     ;;
@@ -4652,12 +4769,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
@@ -4665,7 +4779,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
@@ -4687,24 +4801,24 @@ dnl Note also adjust exclude_expsyms for C++ above.
     esac
   fi
 
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    wlarc='$wl'
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
     else
       _LT_TAGVAR(whole_archive_flag_spec, $1)=
     fi
     supports_anon_versioning=no
     else
       _LT_TAGVAR(whole_archive_flag_spec, $1)=
     fi
     supports_anon_versioning=no
-    case `$LD -v 2>&1` in
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -4717,7 +4831,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     case $host_os in
     aix[[3-9]]*)
       # On AIX/PPC, the GNU linker is very broken
     case $host_os in
     aix[[3-9]]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
@@ -4736,7 +4850,7 @@ _LT_EOF
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -4752,7 +4866,7 @@ _LT_EOF
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
-       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4762,7 +4876,7 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -4770,61 +4884,61 @@ _LT_EOF
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     haiku*)
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     haiku*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
+      if test linux-dietlibc = "$host_os"; then
        case $cc_basename in
          diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
        esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
        case $cc_basename in
          diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
        esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-        && test "$tmp_diet" = no
+        && test no = "$tmp_diet"
       then
        tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
       then
        tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # Portland Group f77 and f90 compilers
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # Portland Group f77 and f90 compilers
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
@@ -4835,42 +4949,44 @@ _LT_EOF
        lf95*)                          # Lahey Fortran 8.1
          _LT_TAGVAR(whole_archive_flag_spec, $1)=
          tmp_sharedflag='--shared' ;;
        lf95*)                          # Lahey Fortran 8.1
          _LT_TAGVAR(whole_archive_flag_spec, $1)=
          tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
        xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
        xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          ;;
        esac
        case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          ;;
        esac
        case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          tmp_sharedflag='-G' ;;
        *Sun\ F*)                       # Sun Fortran 8.3
          tmp_sharedflag='-G' ;;
        esac
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          tmp_sharedflag='-G' ;;
        *Sun\ F*)                       # Sun Fortran 8.3
          tmp_sharedflag='-G' ;;
        esac
-       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 
 
-        if test "x$supports_anon_versioning" = xyes; then
+        if test yes = "$supports_anon_versioning"; then
           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-           echo "local: *; };" >> $output_objdir/$libname.ver~
-           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
 
        case $cc_basename in
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
         fi
 
        case $cc_basename in
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
          _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
+         if test yes = "$supports_anon_versioning"; then
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-             echo "local: *; };" >> $output_objdir/$libname.ver~
-             $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
          ;;
        esac
          fi
          ;;
        esac
@@ -4879,13 +4995,13 @@ _LT_EOF
       fi
       ;;
 
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
       fi
       ;;
 
@@ -4903,8 +5019,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4916,7 +5032,7 @@ _LT_EOF
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
@@ -4931,9 +5047,9 @@ _LT_EOF
          # DT_RUNPATH tag from executables and libraries.  But doing so
          # requires that you compile everything twice, which is a pain.
          if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
          # DT_RUNPATH tag from executables and libraries.  But doing so
          # requires that you compile everything twice, which is a pain.
          if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
          else
            _LT_TAGVAR(ld_shlibs, $1)=no
          fi
          else
            _LT_TAGVAR(ld_shlibs, $1)=no
          fi
@@ -4950,15 +5066,15 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
     esac
 
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
     esac
 
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+    if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
       runpath_var=
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
       _LT_TAGVAR(export_dynamic_flag_spec, $1)=
       runpath_var=
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
       _LT_TAGVAR(export_dynamic_flag_spec, $1)=
@@ -4974,7 +5090,7 @@ _LT_EOF
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        _LT_TAGVAR(hardcode_direct, $1)=unsupported
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        _LT_TAGVAR(hardcode_direct, $1)=unsupported
@@ -4982,12 +5098,12 @@ _LT_EOF
       ;;
 
     aix[[4-9]]*)
       ;;
 
     aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
-       no_entry_flag=""
+       no_entry_flag=
       else
        # If we're using GNU nm, then we don't want the "-C" option.
        # -C means demangle to AIX nm, but means don't demangle with GNU nm
       else
        # If we're using GNU nm, then we don't want the "-C" option.
        # -C means demangle to AIX nm, but means don't demangle with GNU nm
@@ -5005,7 +5121,7 @@ _LT_EOF
        # need to do runtime linking.
        case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
          for ld_flag in $LDFLAGS; do
        # need to do runtime linking.
        case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
          for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
            aix_use_runtimelinking=yes
            break
          fi
            aix_use_runtimelinking=yes
            break
          fi
@@ -5028,13 +5144,13 @@ _LT_EOF
       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+      _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
 
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; then
        case $host_os in aix4.[[012]]|aix4.[[012]].*)
        # We only want to do this on AIX 4.2 and lower, the check
        # below for broken collect2 doesn't work under 4.3+
        case $host_os in aix4.[[012]]|aix4.[[012]].*)
        # We only want to do this on AIX 4.2 and lower, the check
        # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -5053,62 +5169,61 @@ _LT_EOF
          ;;
        esac
        shared_flag='-shared'
          ;;
        esac
        shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
        fi
        fi
-       _LT_TAGVAR(link_all_deplibs, $1)=no
       else
        # not using gcc
       else
        # not using gcc
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; then
        # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
        # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
        else
        # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
        # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
        else
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          fi
        fi
       fi
 
          fi
        fi
       fi
 
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       _LT_TAGVAR(always_export_symbols, $1)=yes
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
+      if test yes = "$aix_use_runtimelinking"; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
        _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
         _LT_SYS_MODULE_PATH_AIX([$1])
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
        _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
         _LT_SYS_MODULE_PATH_AIX([$1])
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
       else
       else
-       if test "$host_cpu" = ia64; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+       if test ia64 = "$host_cpu"; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
          _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
          _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
         _LT_SYS_MODULE_PATH_AIX([$1])
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
         _LT_SYS_MODULE_PATH_AIX([$1])
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
-         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-         if test "$with_gnu_ld" = yes; then
+         _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
            # We only use this code for GNU lds that support --whole-archive.
            # We only use this code for GNU lds that support --whole-archive.
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
          else
            # Exported symbols can be pulled into shared objects from archives
            _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
          fi
          _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
          # This is similar to how AIX traditionally builds its shared libraries.
          else
            # Exported symbols can be pulled into shared objects from archives
            _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
          fi
          _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
          # This is similar to how AIX traditionally builds its shared libraries.
-         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
        fi
       fi
       ;;
        fi
       fi
       ;;
@@ -5117,7 +5232,7 @@ _LT_EOF
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -5147,16 +5262,17 @@ _LT_EOF
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        # FIXME: Setting linknames here is a bad hack.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-         else
-           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-         fi~
-         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-         linknames='
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -5165,18 +5281,18 @@ _LT_EOF
        # Don't use ranlib
        _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
        _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
        # Don't use ranlib
        _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
        _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-         lt_tool_outputfile="@TOOL_OUTPUT@"~
-         case $lt_outputfile in
-           *.exe|*.EXE) ;;
-           *)
-             lt_outputfile="$lt_outputfile.exe"
-             lt_tool_outputfile="$lt_tool_outputfile.exe"
-             ;;
-         esac~
-         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-           $RM "$lt_outputfile.manifest";
-         fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
        ;;
       *)
        # Assume MSVC wrapper
        ;;
       *)
        # Assume MSVC wrapper
@@ -5185,7 +5301,7 @@ _LT_EOF
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
        # FIXME: Setting linknames here is a bad hack.
        _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
@@ -5235,33 +5351,33 @@ _LT_EOF
       ;;
 
     hpux9*)
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       else
       else
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       fi
       fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_direct, $1)=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_direct, $1)=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       ;;
 
     hpux10*)
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
        _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       else
        _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
        # hardcode_minus_L: Not really in the search PATH,
        # but as the default location of the library.
        _LT_TAGVAR(hardcode_minus_L, $1)=yes
        # hardcode_minus_L: Not really in the search PATH,
        # but as the default location of the library.
        _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -5269,25 +5385,25 @@ _LT_EOF
       ;;
 
     hpux11*)
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
        case $host_cpu in
        hppa*64*)
        case $host_cpu in
        hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
          ;;
        ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
          ;;
        *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        esac
       else
        case $host_cpu in
        hppa*64*)
          ;;
        esac
       else
        case $host_cpu in
        hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
          ;;
        ia64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
        m4_if($1, [], [
          ;;
        *)
        m4_if($1, [], [
@@ -5295,14 +5411,14 @@ _LT_EOF
          # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
          _LT_LINKER_OPTION([if $CC understands -b],
            _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
          # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
          _LT_LINKER_OPTION([if $CC understands -b],
            _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
-           [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+           [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
            [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
            [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
-         [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+         [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
          ;;
        esac
       fi
          ;;
        esac
       fi
-      if test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
        case $host_cpu in
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
        case $host_cpu in
@@ -5313,7 +5429,7 @@ _LT_EOF
        *)
          _LT_TAGVAR(hardcode_direct, $1)=yes
          _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
        *)
          _LT_TAGVAR(hardcode_direct, $1)=yes
          _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
 
          # hardcode_minus_L: Not really in the search PATH,
          # but as the default location of the library.
 
          # hardcode_minus_L: Not really in the search PATH,
          # but as the default location of the library.
@@ -5324,16 +5440,16 @@ _LT_EOF
       ;;
 
     irix5* | irix6* | nonstopux*)
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
        # Try to use the -exported_symbol ld option, if it does not
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
        # This should be the same for all languages, so no per-tag cache variable.
        AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
          [lt_cv_irix_exported_symbol],
        # Try to use the -exported_symbol ld option, if it does not
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
        # This should be the same for all languages, so no per-tag cache variable.
        AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
          [lt_cv_irix_exported_symbol],
-         [save_LDFLAGS="$LDFLAGS"
-          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+         [save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
           AC_LINK_IFELSE(
             [AC_LANG_SOURCE(
                [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
           AC_LINK_IFELSE(
             [AC_LANG_SOURCE(
                [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
@@ -5346,22 +5462,22 @@ _LT_EOF
       end]])])],
              [lt_cv_irix_exported_symbol=yes],
              [lt_cv_irix_exported_symbol=no])
       end]])])],
              [lt_cv_irix_exported_symbol=yes],
              [lt_cv_irix_exported_symbol=no])
-           LDFLAGS="$save_LDFLAGS"])
-       if test "$lt_cv_irix_exported_symbol" = yes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+           LDFLAGS=$save_LDFLAGS])
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
       else
        fi
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(inherit_rpath, $1)=yes
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(inherit_rpath, $1)=yes
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -5375,7 +5491,7 @@ _LT_EOF
     newsos6)
       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
     newsos6)
       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
@@ -5383,27 +5499,19 @@ _LT_EOF
     *nto* | *qnx*)
       ;;
 
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       if test -f /usr/libexec/ld.so; then
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
       if test -f /usr/libexec/ld.so; then
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
        else
        else
-         case $host_os in
-          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-            ;;
-          *)
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-            ;;
-         esac
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
        fi
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
        fi
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5419,28 +5527,28 @@ _LT_EOF
       ;;
 
     osf3*)
       ;;
 
     osf3*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
       else
        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
       else
        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       ;;
 
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       ;;
 
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       else
        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
       else
        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
 
        # Both c and cxx compiler support -rpath directly
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 
        # Both c and cxx compiler support -rpath directly
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -5451,24 +5559,24 @@ _LT_EOF
 
     solaris*)
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
 
     solaris*)
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
          wlarc=''
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
          wlarc=''
-         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
          ;;
        *)
          ;;
        *)
-         wlarc='${wl}'
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         wlarc='$wl'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
          ;;
        esac
       fi
          ;;
        esac
       fi
@@ -5478,11 +5586,11 @@ _LT_EOF
       solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
       *)
        # The compiler driver will combine and reorder linker options,
       solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
       *)
        # The compiler driver will combine and reorder linker options,
-       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
        # but is careful enough not to reorder.
        # Supported since Solaris 2.6 (maybe 2.5.1?)
        # but is careful enough not to reorder.
        # Supported since Solaris 2.6 (maybe 2.5.1?)
-       if test "$GCC" = yes; then
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       if test yes = "$GCC"; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
        else
          _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
        fi
        else
          _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
        fi
@@ -5492,10 +5600,10 @@ _LT_EOF
       ;;
 
     sunos4*)
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
       else
        _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
       else
        _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -5544,43 +5652,43 @@ _LT_EOF
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
+      # Note: We CANNOT use -z defs as we might desire, because we do not
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
       runpath_var='LD_RUN_PATH'
 
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
       fi
       ;;
 
@@ -5595,17 +5703,17 @@ _LT_EOF
       ;;
     esac
 
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
        ;;
       esac
     fi
   fi
 ])
 AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
        ;;
       esac
     fi
   fi
 ])
 AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
 _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
 
 
 _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
 
@@ -5622,7 +5730,7 @@ x|xyes)
   # Assume -lc should be added
   _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 
   # Assume -lc should be added
   _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $_LT_TAGVAR(archive_cmds, $1) in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
     case $_LT_TAGVAR(archive_cmds, $1) in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -5702,12 +5810,12 @@ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
     DIR into the resulting binary])
 _LT_TAGDECL([], [hardcode_direct_absolute], [0],
     DIR into the resulting binary])
 _LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
     DIR into the resulting binary and the resulting library dependency is
     DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    "absolute", i.e impossible to change by setting $shlibpath_var if the
     library is relocated])
 _LT_TAGDECL([], [hardcode_minus_L], [0],
     [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
     library is relocated])
 _LT_TAGDECL([], [hardcode_minus_L], [0],
     [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
@@ -5748,10 +5856,10 @@ dnl    [Compiler flag to generate thread safe objects])
 # ------------------------
 # Ensure that the configuration variables for a C compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # ------------------------
 # Ensure that the configuration variables for a C compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_C_CONFIG],
 [m4_require([_LT_DECL_EGREP])dnl
 m4_defun([_LT_LANG_C_CONFIG],
 [m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
+lt_save_CC=$CC
 AC_LANG_PUSH(C)
 
 # Source file extension for C test sources.
 AC_LANG_PUSH(C)
 
 # Source file extension for C test sources.
@@ -5791,18 +5899,18 @@ if test -n "$compiler"; then
   LT_SYS_DLOPEN_SELF
   _LT_CMD_STRIPLIB
 
   LT_SYS_DLOPEN_SELF
   _LT_CMD_STRIPLIB
 
-  # Report which library types will actually be built
+  # Report what library types will actually be built
   AC_MSG_CHECKING([if libtool supports shared libraries])
   AC_MSG_RESULT([$can_build_shared])
 
   AC_MSG_CHECKING([whether to build shared libraries])
   AC_MSG_CHECKING([if libtool supports shared libraries])
   AC_MSG_RESULT([$can_build_shared])
 
   AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
+  test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
-    test "$enable_shared" = yes && enable_static=no
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -5810,8 +5918,8 @@ if test -n "$compiler"; then
     ;;
 
   aix[[4-9]]*)
     ;;
 
   aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
+      test yes = "$enable_shared" && enable_static=no
     fi
     ;;
   esac
     fi
     ;;
   esac
@@ -5819,13 +5927,13 @@ if test -n "$compiler"; then
 
   AC_MSG_CHECKING([whether to build static libraries])
   # Make sure either enable_shared or enable_static is yes.
 
   AC_MSG_CHECKING([whether to build static libraries])
   # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
+  test yes = "$enable_shared" || enable_static=yes
   AC_MSG_RESULT([$enable_static])
 
   _LT_CONFIG($1)
 fi
 AC_LANG_POP
   AC_MSG_RESULT([$enable_static])
 
   _LT_CONFIG($1)
 fi
 AC_LANG_POP
-CC="$lt_save_CC"
+CC=$lt_save_CC
 ])# _LT_LANG_C_CONFIG
 
 
 ])# _LT_LANG_C_CONFIG
 
 
@@ -5833,14 +5941,14 @@ CC="$lt_save_CC"
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_PATH_MANIFEST_TOOL])dnl
 m4_defun([_LT_LANG_CXX_CONFIG],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_PATH_MANIFEST_TOOL])dnl
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
+if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
   AC_PROG_CXXCPP
 else
   _lt_caught_CXX_error=yes
   AC_PROG_CXXCPP
 else
   _lt_caught_CXX_error=yes
@@ -5882,7 +5990,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
+if test yes != "$_lt_caught_CXX_error"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
@@ -5924,35 +6032,35 @@ if test "$_lt_caught_CXX_error" != yes; then
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
     else
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
     fi
 
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
     else
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
     fi
 
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       # Set up default GNU C++ configuration
 
       LT_PATH_LD
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       # Set up default GNU C++ configuration
 
       LT_PATH_LD
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      if test yes = "$with_gnu_ld"; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 
 
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
+        wlarc='$wl'
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
          $GREP 'no-whole-archive' > /dev/null; then
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
          $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
         else
           _LT_TAGVAR(whole_archive_flag_spec, $1)=
         fi
         else
           _LT_TAGVAR(whole_archive_flag_spec, $1)=
         fi
@@ -5988,12 +6096,12 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=no
         ;;
       aix[[4-9]]*)
         _LT_TAGVAR(ld_shlibs, $1)=no
         ;;
       aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
+        if test ia64 = "$host_cpu"; then
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
         else
           aix_use_runtimelinking=no
 
@@ -6027,13 +6135,13 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
         _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
         _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+        _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
 
 
-        if test "$GXX" = yes; then
+        if test yes = "$GXX"; then
           case $host_os in aix4.[[012]]|aix4.[[012]].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
           case $host_os in aix4.[[012]]|aix4.[[012]].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
             strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
          if test -f "$collect2name" &&
             strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -6051,56 +6159,56 @@ if test "$_lt_caught_CXX_error" != yes; then
          fi
           esac
           shared_flag='-shared'
          fi
           esac
           shared_flag='-shared'
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag="$shared_flag "'${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
          fi
         else
           # not using gcc
          fi
         else
           # not using gcc
-          if test "$host_cpu" = ia64; then
+          if test ia64 = "$host_cpu"; then
          # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
          # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
           else
          # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
          # chokes on -Wl,-G. The following line is correct:
          shared_flag='-G'
           else
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
            else
            else
-             shared_flag='${wl}-bM:SRE'
+             shared_flag='$wl-bM:SRE'
            fi
           fi
         fi
 
            fi
           fi
         fi
 
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
        # export.
         _LT_TAGVAR(always_export_symbols, $1)=yes
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
        # export.
         _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
+        if test yes = "$aix_use_runtimelinking"; then
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
           _LT_SYS_MODULE_PATH_AIX([$1])
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
           _LT_SYS_MODULE_PATH_AIX([$1])
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
 
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
         else
         else
-          if test "$host_cpu" = ia64; then
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+          if test ia64 = "$host_cpu"; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
            _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
            _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
            _LT_SYS_MODULE_PATH_AIX([$1])
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
            _LT_SYS_MODULE_PATH_AIX([$1])
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
-           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-           if test "$with_gnu_ld" = yes; then
+           _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
              # We only use this code for GNU lds that support --whole-archive.
              # We only use this code for GNU lds that support --whole-archive.
-             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
            else
              # Exported symbols can be pulled into shared objects from archives
              _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
            else
              # Exported symbols can be pulled into shared objects from archives
              _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
@@ -6108,7 +6216,7 @@ if test "$_lt_caught_CXX_error" != yes; then
            _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
            # This is similar to how AIX traditionally builds its shared
            # libraries.
            _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
            # This is similar to how AIX traditionally builds its shared
            # libraries.
-           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
           fi
         fi
         ;;
           fi
         fi
         ;;
@@ -6118,7 +6226,7 @@ if test "$_lt_caught_CXX_error" != yes; then
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
          # support --undefined.  This deserves some investigation.  FIXME
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
          # support --undefined.  This deserves some investigation.  FIXME
-         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
        else
          _LT_TAGVAR(ld_shlibs, $1)=no
        fi
        else
          _LT_TAGVAR(ld_shlibs, $1)=no
        fi
@@ -6146,57 +6254,58 @@ if test "$_lt_caught_CXX_error" != yes; then
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.
-         shrext_cmds=".dll"
+         shrext_cmds=.dll
          # FIXME: Setting linknames here is a bad hack.
          # FIXME: Setting linknames here is a bad hack.
-         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-         _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-           else
-             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-           fi~
-           $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-           linknames='
+         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
          # The linker will not automatically build a static lib if we build a DLL.
          # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
          # Don't use ranlib
          _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
          _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
          # The linker will not automatically build a static lib if we build a DLL.
          # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
          # Don't use ranlib
          _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
          _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-           lt_tool_outputfile="@TOOL_OUTPUT@"~
-           case $lt_outputfile in
-             *.exe|*.EXE) ;;
-             *)
-               lt_outputfile="$lt_outputfile.exe"
-               lt_tool_outputfile="$lt_tool_outputfile.exe"
-               ;;
-           esac~
-           func_to_tool_file "$lt_outputfile"~
-           if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-             $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-             $RM "$lt_outputfile.manifest";
-           fi'
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
          ;;
        *)
          # g++
          # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
          # as there is no search path for DLLs.
          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
          ;;
        *)
          # g++
          # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
          # as there is no search path for DLLs.
          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          _LT_TAGVAR(always_export_symbols, $1)=no
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 
          if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          _LT_TAGVAR(always_export_symbols, $1)=no
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 
          if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-           # If the export-symbols file already is a .def file (1st line
-           # is EXPORTS), use it as is; otherwise, prepend...
-           _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-             cp $export_symbols $output_objdir/$soname.def;
-           else
-             echo EXPORTS > $output_objdir/$soname.def;
-             cat $export_symbols >> $output_objdir/$soname.def;
-           fi~
-           $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
          else
            _LT_TAGVAR(ld_shlibs, $1)=no
          fi
          else
            _LT_TAGVAR(ld_shlibs, $1)=no
          fi
@@ -6241,18 +6350,15 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=yes
         ;;
 
         _LT_TAGVAR(ld_shlibs, $1)=yes
         ;;
 
-      gnu*)
-        ;;
-
       haiku*)
       haiku*)
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
         ;;
 
       hpux9*)
         _LT_TAGVAR(link_all_deplibs, $1)=yes
         ;;
 
       hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
         _LT_TAGVAR(hardcode_direct, $1)=yes
         _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
                                             # but as the default
         _LT_TAGVAR(hardcode_direct, $1)=yes
         _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
                                             # but as the default
@@ -6264,7 +6370,7 @@ if test "$_lt_caught_CXX_error" != yes; then
             _LT_TAGVAR(ld_shlibs, $1)=no
             ;;
           aCC*)
             _LT_TAGVAR(ld_shlibs, $1)=no
             ;;
           aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
@@ -6273,11 +6379,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             ;;
           *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            if test yes = "$GXX"; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6287,15 +6393,15 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       hpux10*|hpux11*)
         ;;
 
       hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        if test no = "$with_gnu_ld"; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
          _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
          _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
-             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
               ;;
           esac
         fi
               ;;
           esac
         fi
@@ -6321,13 +6427,13 @@ if test "$_lt_caught_CXX_error" != yes; then
           aCC*)
            case $host_cpu in
              hppa*64*)
           aCC*)
            case $host_cpu in
              hppa*64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
              ia64*)
                ;;
              ia64*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
              *)
                ;;
              *)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                ;;
            esac
            # Commands to make compiler produce verbose output that lists
                ;;
            esac
            # Commands to make compiler produce verbose output that lists
@@ -6338,20 +6444,20 @@ if test "$_lt_caught_CXX_error" != yes; then
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
           *)
            ;;
           *)
-           if test "$GXX" = yes; then
-             if test $with_gnu_ld = no; then
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
                case $host_cpu in
                  hppa*64*)
                case $host_cpu in
                  hppa*64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  ia64*)
                    ;;
                  ia64*)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  *)
                    ;;
                  *)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                esac
              fi
                    ;;
                esac
              fi
@@ -6366,22 +6472,22 @@ if test "$_lt_caught_CXX_error" != yes; then
       interix[[3-9]]*)
        _LT_TAGVAR(hardcode_direct, $1)=no
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       interix[[3-9]]*)
        _LT_TAGVAR(hardcode_direct, $1)=no
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
        # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
        # Instead, shared libraries are loaded at an image base (0x10000000 by
        # default) and relocated if they conflict, which is a slow very memory
        # consuming and fragmenting process.  To avoid this, we pick a random,
        # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
        # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
        # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
        # Instead, shared libraries are loaded at an image base (0x10000000 by
        # default) and relocated if they conflict, which is a slow very memory
        # consuming and fragmenting process.  To avoid this, we pick a random,
        # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
        # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
        ;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
            # SGI C++
        ;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
            # SGI C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 
            # Archives containing C++ object files must be created using
            # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
 
            # Archives containing C++ object files must be created using
            # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -6390,22 +6496,22 @@ if test "$_lt_caught_CXX_error" != yes; then
            _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
            ;;
           *)
            _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
            ;;
           *)
-           if test "$GXX" = yes; then
-             if test "$with_gnu_ld" = no; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
              else
              else
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
              fi
            fi
            _LT_TAGVAR(link_all_deplibs, $1)=yes
            ;;
         esac
              fi
            fi
            _LT_TAGVAR(link_all_deplibs, $1)=yes
            ;;
         esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
         case $cc_basename in
           KCC*)
            # Kuck and Associates, Inc. (KAI) C++ Compiler
         case $cc_basename in
           KCC*)
            # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -6413,8 +6519,8 @@ if test "$_lt_caught_CXX_error" != yes; then
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
            # Commands to make compiler produce verbose output that lists
            # what "hidden" libraries, object files and flags are used when
            # linking a shared library.
            # Commands to make compiler produce verbose output that lists
            # what "hidden" libraries, object files and flags are used when
            # linking a shared library.
@@ -6423,10 +6529,10 @@ if test "$_lt_caught_CXX_error" != yes; then
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
 
            # Archives containing C++ object files must be created using
            # "CC -Bstatic", where "CC" is the KAI C++ compiler.
 
            # Archives containing C++ object files must be created using
            # "CC -Bstatic", where "CC" is the KAI C++ compiler.
@@ -6440,59 +6546,59 @@ if test "$_lt_caught_CXX_error" != yes; then
            # earlier do not add the objects themselves.
            case `$CC -V 2>&1` in
              *"Version 7."*)
            # earlier do not add the objects themselves.
            case `$CC -V 2>&1` in
              *"Version 7."*)
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
                ;;
              *)  # Version 8.0 or newer
                tmp_idyn=
                case $host_cpu in
                  ia64*) tmp_idyn=' -i_dynamic';;
                esac
                ;;
              *)  # Version 8.0 or newer
                tmp_idyn=
                case $host_cpu in
                  ia64*) tmp_idyn=' -i_dynamic';;
                esac
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
                ;;
            esac
            _LT_TAGVAR(archive_cmds_need_lc, $1)=no
                ;;
            esac
            _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
            ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
            case `$CC -V` in
            *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
              _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
            ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
            case `$CC -V` in
            *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
              _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
              _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
              _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
-               $RANLIB $oldlib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
              _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
              _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
              _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
              _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-               rm -rf $tpldir~
-               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
              ;;
            *) # Version 6 and above use weak symbols
              ;;
            *) # Version 6 and above use weak symbols
-             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
              ;;
            esac
 
              ;;
            esac
 
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
             ;;
          cxx*)
            # Compaq C++
             ;;
          cxx*)
            # Compaq C++
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
 
            runpath_var=LD_RUN_PATH
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 
            runpath_var=LD_RUN_PATH
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -6506,18 +6612,18 @@ if test "$_lt_caught_CXX_error" != yes; then
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
            ;;
          xl* | mpixl* | bgxl*)
            # IBM XL 8.0 on PPC, with GNU ld
            ;;
          xl* | mpixl* | bgxl*)
            # IBM XL 8.0 on PPC, with GNU ld
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-           if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
              _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
              _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-               echo "local: *; };" >> $output_objdir/$libname.ver~
-               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
            fi
            ;;
          *)
            fi
            ;;
          *)
@@ -6525,10 +6631,10 @@ if test "$_lt_caught_CXX_error" != yes; then
            *Sun\ C*)
              # Sun C++ 5.9
              _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
            *Sun\ C*)
              # Sun C++ 5.9
              _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
              _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
              _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
              _LT_TAGVAR(compiler_needs_object, $1)=yes
 
              # Not sure whether something based on
              _LT_TAGVAR(compiler_needs_object, $1)=yes
 
              # Not sure whether something based on
@@ -6586,22 +6692,17 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=yes
        ;;
 
         _LT_TAGVAR(ld_shlibs, $1)=yes
        ;;
 
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      openbsd*)
+      openbsd* | bitrig*)
        if test -f /usr/libexec/ld.so; then
          _LT_TAGVAR(hardcode_direct, $1)=yes
          _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
          _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
        if test -f /usr/libexec/ld.so; then
          _LT_TAGVAR(hardcode_direct, $1)=yes
          _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
          _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
          fi
          output_verbose_link_cmd=func_echo_all
        else
          fi
          output_verbose_link_cmd=func_echo_all
        else
@@ -6617,9 +6718,9 @@ if test "$_lt_caught_CXX_error" != yes; then
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
            # KCC will only create a shared library if the output file
            # ends with ".so" (or ".sl" for HP-UX), so rename the library
            # to its proper name (with version) after linking.
-           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
 
 
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
            _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
            # Archives containing C++ object files must be created using
            _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
            # Archives containing C++ object files must be created using
@@ -6637,17 +6738,17 @@ if test "$_lt_caught_CXX_error" != yes; then
           cxx*)
            case $host in
              osf3*)
           cxx*)
            case $host in
              osf3*)
-               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
                ;;
              *)
                _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
                ;;
              *)
                _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
                _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
                _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-                 echo "-hidden">> $lib.exp~
-                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-                 $RM $lib.exp'
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
                _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
                ;;
            esac
                _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
                ;;
            esac
@@ -6662,21 +6763,21 @@ if test "$_lt_caught_CXX_error" != yes; then
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
-           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
          *)
            ;;
          *)
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
              case $host in
                osf3*)
              case $host in
                osf3*)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
                  ;;
                *)
                  ;;
                *)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
                  ;;
              esac
 
                  ;;
              esac
 
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
              _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
              # Commands to make compiler produce verbose output that lists
              _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
              # Commands to make compiler produce verbose output that lists
@@ -6722,9 +6823,9 @@ if test "$_lt_caught_CXX_error" != yes; then
            # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
            _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
            # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
            _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
 
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -6732,7 +6833,7 @@ if test "$_lt_caught_CXX_error" != yes; then
              solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
              *)
                # The compiler driver will combine and reorder linker options,
              solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
              *)
                # The compiler driver will combine and reorder linker options,
-               # but understands `-z linker_flag'.
+               # but understands '-z linker_flag'.
                # Supported since Solaris 2.6 (maybe 2.5.1?)
                _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
                ;;
                # Supported since Solaris 2.6 (maybe 2.5.1?)
                _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
                ;;
@@ -6749,30 +6850,30 @@ if test "$_lt_caught_CXX_error" != yes; then
            ;;
           gcx*)
            # Green Hills C++ Compiler
            ;;
           gcx*)
            # Green Hills C++ Compiler
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 
            # The C++ compiler must be used to create the archive.
            _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
            ;;
           *)
            # GNU C++ compiler with Solaris linker
 
            # The C++ compiler must be used to create the archive.
            _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
            ;;
           *)
            # GNU C++ compiler with Solaris linker
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
                output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
                # linking a shared library.
                output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
                # platform.
                # platform.
-               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
@@ -6780,11 +6881,11 @@ if test "$_lt_caught_CXX_error" != yes; then
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
              case $host_os in
                solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
                *)
              case $host_os in
                solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
                *)
-                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
                  ;;
              esac
            fi
                  ;;
              esac
            fi
@@ -6793,52 +6894,52 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
          ;;
        *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
          ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
-       # Note: We can NOT use -z defs as we might desire, because we do not
+       # Note: We CANNOT use -z defs as we might desire, because we do not
        # link with -lc, and that would cause any symbols used from libc to
        # always be unresolved, which means just about no library would
        # ever link correctly.  If we're not using GNU ld we use -z text
        # though, which does catch some bad symbols but isn't as heavy-handed
        # as -z defs.
        # link with -lc, and that would cause any symbols used from libc to
        # always be unresolved, which means just about no library would
        # ever link correctly.  If we're not using GNU ld we use -z text
        # though, which does catch some bad symbols but isn't as heavy-handed
        # as -z defs.
-       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
        _LT_TAGVAR(link_all_deplibs, $1)=yes
        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
        _LT_TAGVAR(link_all_deplibs, $1)=yes
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
        runpath_var='LD_RUN_PATH'
 
        case $cc_basename in
           CC*)
        runpath_var='LD_RUN_PATH'
 
        case $cc_basename in
           CC*)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
            _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
            _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
-             '"$_LT_TAGVAR(old_archive_cmds, $1)"
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
            _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
            _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
-             '"$_LT_TAGVAR(reload_cmds, $1)"
+              '"$_LT_TAGVAR(reload_cmds, $1)"
            ;;
          *)
            ;;
          *)
-           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
            ;;
        esac
       ;;
            ;;
        esac
       ;;
@@ -6869,10 +6970,10 @@ if test "$_lt_caught_CXX_error" != yes; then
     esac
 
     AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
     esac
 
     AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+    test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
 
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$GXX
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -6899,7 +7000,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
 
 AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
@@ -6921,9 +7022,9 @@ AC_REQUIRE([_LT_DECL_SED])
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
 func_stripname_cnf ()
 {
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
 func_stripname_cnf ()
 {
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
   esac
 } # func_stripname_cnf
 ])# _LT_FUNC_STRIPNAME_CNF
   esac
 } # func_stripname_cnf
 ])# _LT_FUNC_STRIPNAME_CNF
@@ -7011,13 +7112,13 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
+    case $prev$p in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
         prev=$p
         continue
        fi
         prev=$p
         continue
        fi
@@ -7033,16 +7134,16 @@ if AC_TRY_EVAL(ac_compile); then
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
-       if test "$pre_test_object_deps_done" = no; then
-        case ${prev} in
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
         -L | -R)
           # Internal compiler library paths should come after those
           # provided the user.  The postdeps already come after the
           # user supplied libs so there is no need to process them.
           if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
         -L | -R)
           # Internal compiler library paths should come after those
           # provided the user.  The postdeps already come after the
           # user supplied libs so there is no need to process them.
           if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+            _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
           else
           else
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
           fi
           ;;
         # The "-l" case would never come before the object being
           fi
           ;;
         # The "-l" case would never come before the object being
@@ -7050,9 +7151,9 @@ if AC_TRY_EVAL(ac_compile); then
         esac
        else
         if test -z "$_LT_TAGVAR(postdeps, $1)"; then
         esac
        else
         if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)=$prev$p
         else
         else
-          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
         fi
        fi
        prev=
         fi
        fi
        prev=
@@ -7067,15 +7168,15 @@ if AC_TRY_EVAL(ac_compile); then
         continue
        fi
 
         continue
        fi
 
-       if test "$pre_test_object_deps_done" = no; then
+       if test no = "$pre_test_object_deps_done"; then
         if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
         if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-          _LT_TAGVAR(predep_objects, $1)="$p"
+          _LT_TAGVAR(predep_objects, $1)=$p
         else
           _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
         fi
        else
         if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
         else
           _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
         fi
        else
         if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-          _LT_TAGVAR(postdep_objects, $1)="$p"
+          _LT_TAGVAR(postdep_objects, $1)=$p
         else
           _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
         fi
         else
           _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
         fi
@@ -7122,7 +7223,7 @@ linux*)
       ;;
     esac
 
       ;;
     esac
 
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
@@ -7145,7 +7246,7 @@ solaris*)
     # Adding this requires a known-good setup of shared libraries for
     # Sun compiler versions before 5.6, else PIC objects from an old
     # archive will be linked into the output, leading to subtle bugs.
     # Adding this requires a known-good setup of shared libraries for
     # Sun compiler versions before 5.6, else PIC objects from an old
     # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
@@ -7159,7 +7260,7 @@ case " $_LT_TAGVAR(postdeps, $1) " in
 esac
  _LT_TAGVAR(compiler_lib_search_dirs, $1)=
 if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
 esac
  _LT_TAGVAR(compiler_lib_search_dirs, $1)=
 if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
 fi
 _LT_TAGDECL([], [compiler_lib_search_dirs], [1],
     [The directories searched by this compiler when creating a shared library])
 fi
 _LT_TAGDECL([], [compiler_lib_search_dirs], [1],
     [The directories searched by this compiler when creating a shared library])
@@ -7179,10 +7280,10 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
 [AC_LANG_PUSH(Fortran 77)
 m4_defun([_LT_LANG_F77_CONFIG],
 [AC_LANG_PUSH(Fortran 77)
-if test -z "$F77" || test "X$F77" = "Xno"; then
+if test -z "$F77" || test no = "$F77"; then
   _lt_disable_F77=yes
 fi
 
   _lt_disable_F77=yes
 fi
 
@@ -7219,7 +7320,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # the F77 compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
 # the F77 compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
+if test yes != "$_lt_disable_F77"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7241,7 +7342,7 @@ if test "$_lt_disable_F77" != yes; then
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
@@ -7255,21 +7356,21 @@ if test "$_lt_disable_F77" != yes; then
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && enable_shared=no
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
-        test "$enable_shared" = yes && enable_static=no
+        test yes = "$enable_shared" && enable_static=no
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
+       if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
+         test yes = "$enable_shared" && enable_static=no
        fi
         ;;
     esac
        fi
         ;;
     esac
@@ -7277,11 +7378,11 @@ if test "$_lt_disable_F77" != yes; then
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$G77
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -7298,9 +7399,9 @@ if test "$_lt_disable_F77" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-  CFLAGS="$lt_save_CFLAGS"
-fi # test "$_lt_disable_F77" != yes
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
@@ -7310,11 +7411,11 @@ AC_LANG_POP
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
 [AC_LANG_PUSH(Fortran)
 
 m4_defun([_LT_LANG_FC_CONFIG],
 [AC_LANG_PUSH(Fortran)
 
-if test -z "$FC" || test "X$FC" = "Xno"; then
+if test -z "$FC" || test no = "$FC"; then
   _lt_disable_FC=yes
 fi
 
   _lt_disable_FC=yes
 fi
 
@@ -7351,7 +7452,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # the FC compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
 # the FC compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
+if test yes != "$_lt_disable_FC"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7373,7 +7474,7 @@ if test "$_lt_disable_FC" != yes; then
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
@@ -7389,21 +7490,21 @@ if test "$_lt_disable_FC" != yes; then
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && enable_shared=no
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
-        test "$enable_shared" = yes && enable_static=no
+        test yes = "$enable_shared" && enable_static=no
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
-       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-         test "$enable_shared" = yes && enable_static=no
+       if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
+         test yes = "$enable_shared" && enable_static=no
        fi
         ;;
     esac
        fi
         ;;
     esac
@@ -7411,11 +7512,11 @@ if test "$_lt_disable_FC" != yes; then
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -7435,7 +7536,7 @@ if test "$_lt_disable_FC" != yes; then
   GCC=$lt_save_GCC
   CC=$lt_save_CC
   CFLAGS=$lt_save_CFLAGS
   GCC=$lt_save_GCC
   CC=$lt_save_CC
   CFLAGS=$lt_save_CFLAGS
-fi # test "$_lt_disable_FC" != yes
+fi # test yes != "$_lt_disable_FC"
 
 AC_LANG_POP
 ])# _LT_LANG_FC_CONFIG
 
 AC_LANG_POP
 ])# _LT_LANG_FC_CONFIG
@@ -7445,7 +7546,7 @@ AC_LANG_POP
 # --------------------------
 # Ensure that the configuration variables for the GNU Java Compiler compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
 # --------------------------
 # Ensure that the configuration variables for the GNU Java Compiler compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GCJ_CONFIG],
 [AC_REQUIRE([LT_PROG_GCJ])dnl
 AC_LANG_SAVE
 m4_defun([_LT_LANG_GCJ_CONFIG],
 [AC_REQUIRE([LT_PROG_GCJ])dnl
 AC_LANG_SAVE
@@ -7479,7 +7580,7 @@ CC=${GCJ-"gcj"}
 CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # GCJ did not exist at the time GCC didn't implicitly link libc in.
 _LT_CC_BASENAME([$compiler])
 
 # GCJ did not exist at the time GCC didn't implicitly link libc in.
@@ -7516,7 +7617,7 @@ CFLAGS=$lt_save_CFLAGS
 # --------------------------
 # Ensure that the configuration variables for the GNU Go compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
 # --------------------------
 # Ensure that the configuration variables for the GNU Go compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GO_CONFIG],
 [AC_REQUIRE([LT_PROG_GO])dnl
 AC_LANG_SAVE
 m4_defun([_LT_LANG_GO_CONFIG],
 [AC_REQUIRE([LT_PROG_GO])dnl
 AC_LANG_SAVE
@@ -7550,7 +7651,7 @@ CC=${GOC-"gccgo"}
 CFLAGS=$GOFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 CFLAGS=$GOFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # Go did not exist at the time GCC didn't implicitly link libc in.
 _LT_CC_BASENAME([$compiler])
 
 # Go did not exist at the time GCC didn't implicitly link libc in.
@@ -7587,7 +7688,7 @@ CFLAGS=$lt_save_CFLAGS
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_RC_CONFIG],
 [AC_REQUIRE([LT_PROG_RC])dnl
 AC_LANG_SAVE
 m4_defun([_LT_LANG_RC_CONFIG],
 [AC_REQUIRE([LT_PROG_RC])dnl
 AC_LANG_SAVE
@@ -7603,7 +7704,7 @@ _LT_TAGVAR(objext, $1)=$objext
 lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
 
 # Code to be used in simple link tests
 lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
 
 # Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
+lt_simple_link_test_code=$lt_simple_compile_test_code
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_TAG_COMPILER
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_TAG_COMPILER
@@ -7613,7 +7714,7 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
 lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
 lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
@@ -7642,7 +7743,7 @@ AC_DEFUN([LT_PROG_GCJ],
 [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
   [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
     [AC_CHECK_TOOL(GCJ, gcj,)
 [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
   [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
     [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
       AC_SUBST(GCJFLAGS)])])[]dnl
 ])
 
       AC_SUBST(GCJFLAGS)])])[]dnl
 ])
 
@@ -7753,7 +7854,7 @@ lt_ac_count=0
 # Add /usr/xpg4/bin/sed as it is typically found on Solaris
 # along with /bin/sed that truncates output.
 for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
 # Add /usr/xpg4/bin/sed as it is typically found on Solaris
 # along with /bin/sed that truncates output.
 for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
+  test ! -f "$lt_ac_sed" && continue
   cat /dev/null > conftest.in
   lt_ac_count=0
   echo $ECHO_N "0123456789$ECHO_C" >conftest.in
   cat /dev/null > conftest.in
   lt_ac_count=0
   echo $ECHO_N "0123456789$ECHO_C" >conftest.in
@@ -7770,9 +7871,9 @@ for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
     $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
     cmp -s conftest.out conftest.nl || break
     # 10000 chars as input seems more than enough
     $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
     cmp -s conftest.out conftest.nl || break
     # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
+    test 10 -lt "$lt_ac_count" && break
     lt_ac_count=`expr $lt_ac_count + 1`
     lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
+    if test "$lt_ac_count" -gt "$lt_ac_max"; then
       lt_ac_max=$lt_ac_count
       lt_cv_path_SED=$lt_ac_sed
     fi
       lt_ac_max=$lt_ac_count
       lt_cv_path_SED=$lt_ac_sed
     fi
@@ -7796,27 +7897,7 @@ dnl AC_DEFUN([LT_AC_PROG_SED], [])
 # Find out whether the shell is Bourne or XSI compatible,
 # or has some other useful features.
 m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Find out whether the shell is Bourne or XSI compatible,
 # or has some other useful features.
 m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
   lt_unset=false
   lt_unset=unset
 else
   lt_unset=false
@@ -7840,102 +7921,9 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
-# ------------------------------------------------------
-# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
-# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
-m4_defun([_LT_PROG_FUNCTION_REPLACE],
-[dnl {
-sed -e '/^$1 ()$/,/^} # $1 /c\
-$1 ()\
-{\
-m4_bpatsubsts([$2], [$], [\\], [^\([    ]\)], [\\\1])
-} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-])
-
-
-# _LT_PROG_REPLACE_SHELLFNS
-# -------------------------
-# Replace existing portable implementations of several shell functions with
-# equivalent extended shell implementations where those features are available..
-m4_defun([_LT_PROG_REPLACE_SHELLFNS],
-[if test x"$xsi_shell" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
-    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-    # positional parameters, so assign one to ordinary parameter first.
-    func_stripname_result=${3}
-    func_stripname_result=${func_stripname_result#"${1}"}
-    func_stripname_result=${func_stripname_result%"${2}"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
-    func_split_long_opt_name=${1%%=*}
-    func_split_long_opt_arg=${1#*=}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
-    func_split_short_opt_arg=${1#??}
-    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
-    case ${1} in
-      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-      *)    func_lo2o_result=${1} ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
-
-  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
-
-  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
-    func_quote_for_eval "${2}"
-dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
-    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
-fi
-])
-
 # _LT_PATH_CONVERSION_FUNCTIONS
 # -----------------------------
 # _LT_PATH_CONVERSION_FUNCTIONS
 # -----------------------------
-# Determine which file name conversion functions should be used by
+# Determine what file name conversion functions should be used by
 # func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
 # for certain cross-compile configurations and native mingw.
 m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
 # func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
 # for certain cross-compile configurations and native mingw.
 m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
index 5d9acd8..50c7723 100644 (file)
@@ -1,14 +1,14 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
-#   Inc.
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2013 Free Software
+#   Foundation, Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 7 ltoptions.m4
+# serial 8 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -29,7 +29,7 @@ m4_define([_LT_SET_OPTION],
 [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
 m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
         _LT_MANGLE_DEFUN([$1], [$2]),
 [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
 m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
         _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
+    [m4_warning([Unknown $1 option '$2'])])[]dnl
 ])
 
 
 ])
 
 
@@ -75,13 +75,13 @@ m4_if([$1],[LT_INIT],[
   dnl
   dnl If no reference was made to various pairs of opposing options, then
   dnl we run the default mode handler for the pair.  For example, if neither
   dnl
   dnl If no reference was made to various pairs of opposing options, then
   dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
   dnl archives by default:
   _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
   _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
   dnl archives by default:
   _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
   _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-                  [_LT_ENABLE_FAST_INSTALL])
+                  [_LT_ENABLE_FAST_INSTALL])
   ])
 ])# _LT_SET_OPTIONS
 
   ])
 ])# _LT_SET_OPTIONS
 
@@ -112,7 +112,7 @@ AU_DEFUN([AC_LIBTOOL_DLOPEN],
 [_LT_SET_OPTION([LT_INIT], [dlopen])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
 [_LT_SET_OPTION([LT_INIT], [dlopen])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
+put the 'dlopen' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -148,7 +148,7 @@ AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
 _LT_SET_OPTION([LT_INIT], [win32-dll])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
 _LT_SET_OPTION([LT_INIT], [win32-dll])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
+put the 'win32-dll' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -157,9 +157,9 @@ dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
 
 # _LT_ENABLE_SHARED([DEFAULT])
 # ----------------------------
 
 # _LT_ENABLE_SHARED([DEFAULT])
 # ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_SHARED],
 [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([shared],
 m4_define([_LT_ENABLE_SHARED],
 [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([shared],
@@ -172,14 +172,14 @@ AC_ARG_ENABLE([shared],
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
       ;;
     esac],
     [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
@@ -211,9 +211,9 @@ dnl AC_DEFUN([AM_DISABLE_SHARED], [])
 
 # _LT_ENABLE_STATIC([DEFAULT])
 # ----------------------------
 
 # _LT_ENABLE_STATIC([DEFAULT])
 # ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_STATIC],
 [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([static],
 m4_define([_LT_ENABLE_STATIC],
 [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([static],
@@ -226,14 +226,14 @@ AC_ARG_ENABLE([static],
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
       ;;
     esac],
     [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
@@ -265,9 +265,9 @@ dnl AC_DEFUN([AM_DISABLE_STATIC], [])
 
 # _LT_ENABLE_FAST_INSTALL([DEFAULT])
 # ----------------------------------
 
 # _LT_ENABLE_FAST_INSTALL([DEFAULT])
 # ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_FAST_INSTALL],
 [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([fast-install],
 m4_define([_LT_ENABLE_FAST_INSTALL],
 [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([fast-install],
@@ -280,14 +280,14 @@ AC_ARG_ENABLE([fast-install],
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
       ;;
     esac],
     [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
@@ -304,14 +304,14 @@ AU_DEFUN([AC_ENABLE_FAST_INSTALL],
 [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
 [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
+the 'fast-install' option into LT_INIT's first parameter.])
 ])
 
 AU_DEFUN([AC_DISABLE_FAST_INSTALL],
 [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
 ])
 
 AU_DEFUN([AC_DISABLE_FAST_INSTALL],
 [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
+the 'disable-fast-install' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -321,9 +321,9 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 
 # _LT_WITH_PIC([MODE])
 # --------------------
 
 # _LT_WITH_PIC([MODE])
 # --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
 # LT_INIT options.
 # LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+# MODE is either 'yes' or 'no'.  If omitted, it defaults to 'both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
     [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
     [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
@@ -334,19 +334,17 @@ m4_define([_LT_WITH_PIC],
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
       for lt_pkg in $withval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
       ;;
     esac],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+    [pic_mode=m4_default([$1], [default])])
 
 _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
 ])# _LT_WITH_PIC
 
 _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
 ])# _LT_WITH_PIC
@@ -359,7 +357,7 @@ AU_DEFUN([AC_LIBTOOL_PICMODE],
 [_LT_SET_OPTION([LT_INIT], [pic-only])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
 [_LT_SET_OPTION([LT_INIT], [pic-only])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
+put the 'pic-only' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
 ])
 
 dnl aclocal-1.4 backwards compatibility:
index 9000a05..7cbc638 100644 (file)
@@ -1,6 +1,7 @@
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2004-2005, 2007-2008, 2011-2013 Free Software
+# Foundation, Inc.
 # Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -33,7 +34,7 @@ m4_define([_lt_join],
 # ------------
 # Manipulate m4 lists.
 # These macros are necessary as long as will still need to support
 # ------------
 # Manipulate m4 lists.
 # These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
+# Autoconf-2.59, which quotes differently.
 m4_define([lt_car], [[$1]])
 m4_define([lt_cdr],
 [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
 m4_define([lt_car], [[$1]])
 m4_define([lt_cdr],
 [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
@@ -44,7 +45,7 @@ m4_define([lt_unquote], $1)
 
 # lt_append(MACRO-NAME, STRING, [SEPARATOR])
 # ------------------------------------------
 
 # lt_append(MACRO-NAME, STRING, [SEPARATOR])
 # ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
 # Note that neither SEPARATOR nor STRING are expanded; they are appended
 # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
 # No SEPARATOR is output if MACRO-NAME was previously undefined (different
 # Note that neither SEPARATOR nor STRING are expanded; they are appended
 # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
 # No SEPARATOR is output if MACRO-NAME was previously undefined (different
index 07a8602..daeb0af 100644 (file)
@@ -1,6 +1,6 @@
 # ltversion.m4 -- version numbers                      -*- Autoconf -*-
 #
 # ltversion.m4 -- version numbers                      -*- Autoconf -*-
 #
-#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2011-2013 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004
 #
 # This file is free software; the Free Software Foundation gives
 #   Written by Scott James Remnant, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
 
 # @configure_input@
 
-# serial 3337 ltversion.m4
+# serial 4038 ltversion.m4
 # This file is part of GNU Libtool
 
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4.2])
-m4_define([LT_PACKAGE_REVISION], [1.3337])
+m4_define([LT_PACKAGE_VERSION], [2.4.2.418])
+m4_define([LT_PACKAGE_REVISION], [2.4.2.418])
 
 AC_DEFUN([LTVERSION_VERSION],
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.2'
-macro_revision='1.3337'
+[macro_version='2.4.2.418'
+macro_revision='2.4.2.418'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
index c573da9..59461e4 100644 (file)
@@ -1,6 +1,7 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2013 Free Software
+#   Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,7 +12,7 @@
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
 # which have later been changed to m4_define as they aren't part of the
 # exported API, or moved to Autoconf or Automake where they belong.
 #
 # which have later been changed to m4_define as they aren't part of the
 # exported API, or moved to Autoconf or Automake where they belong.
 #
@@ -25,7 +26,7 @@
 # included after everything else.  This provides aclocal with the
 # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
 # because those macros already exist, or will be overwritten later.
 # included after everything else.  This provides aclocal with the
 # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
 # because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
 #
 # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
 # Yes, that means every name once taken will need to remain here until
 #
 # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
 # Yes, that means every name once taken will need to remain here until
diff --git a/missing b/missing
index 86a8fc3..cdea514 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,11 +1,10 @@
 #! /bin/sh
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
 
-scriptversion=2012-01-06.13; # UTC
+scriptversion=2012-06-26.16; # UTC
 
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -26,68 +25,40 @@ scriptversion=2012-01-06.13; # UTC
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
+case $1 in
 
 
-msg="missing on your system"
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
 
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
 
 
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake@gnu.org>."
     exit $?
 
 Send bug reports to <bug-automake@gnu.org>."
     exit $?
@@ -99,228 +70,141 @@ Send bug reports to <bug-automake@gnu.org>."
     ;;
 
   -*)
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
     exit 1
     ;;
 
 esac
 
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-          sed 's/\.am$/.in/' |
-          while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo "#! /bin/sh"
-       echo "# Created by GNU Automake missing as a replacement of"
-       echo "#  $ $@"
-       echo "exit 0"
-       chmod +x $file
-       exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.y)
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.c
-           fi
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.h
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f y.tab.h; then
-       echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-       echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.l)
-           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" lex.yy.c
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f lex.yy.c; then
-       echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-        you modified a dependency of a manual page.  You may need the
-        \`Help2man' package in order for those modifications to take
-        effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo ".ab help2man is required to generate this page"
-       exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-       /^@setfilename/{
-         s/.* \([^ ]*\) *$/\1/
-         p
-         q
-       }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
 
 
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'automa4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
     ;;
     ;;
-esac
-
-exit 0
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
index d72aa07..ba07ac5 100644 (file)
@@ -20,17 +20,22 @@ HBLIBS =
 HBSOURCES =  \
        hb-atomic-private.hh \
        hb-blob.cc \
 HBSOURCES =  \
        hb-atomic-private.hh \
        hb-blob.cc \
+       hb-buffer-deserialize-json.hh \
+       hb-buffer-deserialize-text.hh \
        hb-buffer-private.hh \
        hb-buffer-private.hh \
+       hb-buffer-serialize.cc \
        hb-buffer.cc \
        hb-cache-private.hh \
        hb-common.cc \
        hb-buffer.cc \
        hb-cache-private.hh \
        hb-common.cc \
-       hb-fallback-shape.cc \
+       hb-face-private.hh \
+       hb-face.cc \
        hb-font-private.hh \
        hb-font.cc \
        hb-mutex-private.hh \
        hb-object-private.hh \
        hb-open-file-private.hh \
        hb-open-type-private.hh \
        hb-font-private.hh \
        hb-font.cc \
        hb-mutex-private.hh \
        hb-object-private.hh \
        hb-open-file-private.hh \
        hb-open-type-private.hh \
+       hb-ot-cmap-table.hh \
        hb-ot-head-table.hh \
        hb-ot-hhea-table.hh \
        hb-ot-hmtx-table.hh \
        hb-ot-head-table.hh \
        hb-ot-hhea-table.hh \
        hb-ot-hmtx-table.hh \
@@ -47,7 +52,6 @@ HBSOURCES =  \
        hb-shaper-impl-private.hh \
        hb-shaper-private.hh \
        hb-shaper.cc \
        hb-shaper-impl-private.hh \
        hb-shaper-private.hh \
        hb-shaper.cc \
-       hb-tt-font.cc \
        hb-unicode-private.hh \
        hb-unicode.cc \
        hb-utf-private.hh \
        hb-unicode-private.hh \
        hb-unicode.cc \
        hb-utf-private.hh \
@@ -58,22 +62,28 @@ HBHEADERS = \
        hb-blob.h \
        hb-buffer.h \
        hb-common.h \
        hb-blob.h \
        hb-buffer.h \
        hb-common.h \
+       hb-deprecated.h \
+       hb-face.h \
        hb-font.h \
        hb-set.h \
        hb-shape.h \
        hb-shape-plan.h \
        hb-unicode.h \
        hb-font.h \
        hb-set.h \
        hb-shape.h \
        hb-shape-plan.h \
        hb-unicode.h \
+       $(NULL)
+HBNODISTHEADERS = \
        hb-version.h \
        $(NULL)
 
 if HAVE_OT
 HBSOURCES += \
        hb-version.h \
        $(NULL)
 
 if HAVE_OT
 HBSOURCES += \
+       hb-ot-font.cc \
        hb-ot-layout.cc \
        hb-ot-layout-common-private.hh \
        hb-ot-layout-gdef-table.hh \
        hb-ot-layout-gpos-table.hh \
        hb-ot-layout-gsubgpos-private.hh \
        hb-ot-layout-gsub-table.hh \
        hb-ot-layout.cc \
        hb-ot-layout-common-private.hh \
        hb-ot-layout-gdef-table.hh \
        hb-ot-layout-gpos-table.hh \
        hb-ot-layout-gsubgpos-private.hh \
        hb-ot-layout-gsub-table.hh \
+       hb-ot-layout-jstf-table.hh \
        hb-ot-layout-private.hh \
        hb-ot-map.cc \
        hb-ot-map-private.hh \
        hb-ot-layout-private.hh \
        hb-ot-map.cc \
        hb-ot-map-private.hh \
@@ -81,12 +91,20 @@ HBSOURCES += \
        hb-ot-shape-complex-arabic.cc \
        hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
        hb-ot-shape-complex-arabic.cc \
        hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
+       hb-ot-shape-complex-arabic-win1256.hh \
        hb-ot-shape-complex-default.cc \
        hb-ot-shape-complex-default.cc \
+       hb-ot-shape-complex-hangul.cc \
+       hb-ot-shape-complex-hebrew.cc \
        hb-ot-shape-complex-indic.cc \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
        hb-ot-shape-complex-indic.cc \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
-       hb-ot-shape-complex-indic-table.hh \
+       hb-ot-shape-complex-indic-table.cc \
+       hb-ot-shape-complex-myanmar.cc \
+       hb-ot-shape-complex-myanmar-machine.hh \
+       hb-ot-shape-complex-sea.cc \
+       hb-ot-shape-complex-sea-machine.hh \
        hb-ot-shape-complex-thai.cc \
        hb-ot-shape-complex-thai.cc \
+       hb-ot-shape-complex-tibetan.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh \
        hb-ot-shape-normalize.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh \
        hb-ot-shape-normalize.cc \
@@ -96,11 +114,17 @@ HBSOURCES += \
        $(NULL)
 HBHEADERS += \
        hb-ot.h \
        $(NULL)
 HBHEADERS += \
        hb-ot.h \
+       hb-ot-font.h \
        hb-ot-layout.h \
        hb-ot-layout.h \
+       hb-ot-shape.h \
        hb-ot-tag.h \
        $(NULL)
 endif
 
        hb-ot-tag.h \
        $(NULL)
 endif
 
+if HAVE_FALLBACK
+HBSOURCES += hb-fallback-shape.cc
+endif
+
 if HAVE_PTHREAD
 HBCFLAGS += $(PTHREAD_CFLAGS)
 HBLIBS   += $(PTHREAD_LIBS)
 if HAVE_PTHREAD
 HBCFLAGS += $(PTHREAD_CFLAGS)
 HBLIBS   += $(PTHREAD_LIBS)
@@ -113,28 +137,6 @@ HBSOURCES += hb-glib.cc
 HBHEADERS += hb-glib.h
 endif
 
 HBHEADERS += hb-glib.h
 endif
 
-if HAVE_GOBJECT
-HBCFLAGS += $(GOBJECT_CFLAGS)
-HBLIBS   += $(GOBJECT_LIBS)
-HBSOURCES += hb-gobject-structs.cc
-nodist_HBSOURCES = hb-gobject-enums.cc
-HBHEADERS += hb-gobject.h
-BUILT_SOURCES += hb-gobject-enums.cc
-EXTRA_DIST += hb-gobject-enums.cc.tmpl
-DISTCLEANFILES += hb-gobject-enums.cc
-
-hb-gobject-enums.cc: hb-gobject-enums.cc.tmpl $(HBHEADERS)
-       $(AM_V_GEN) $(GLIB_MKENUMS) --template $^ > "$@.tmp" && \
-       mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
-endif
-
-if HAVE_ICU
-HBCFLAGS += $(ICU_CFLAGS)
-HBLIBS   += $(ICU_LIBS)
-HBSOURCES += hb-icu.cc
-HBHEADERS += hb-icu.h
-endif
-
 if HAVE_FREETYPE
 HBCFLAGS += $(FREETYPE_CFLAGS)
 HBLIBS   += $(FREETYPE_LIBS)
 if HAVE_FREETYPE
 HBCFLAGS += $(FREETYPE_CFLAGS)
 HBLIBS   += $(FREETYPE_LIBS)
@@ -163,22 +165,6 @@ HBSOURCES += hb-coretext.cc
 HBHEADERS += hb-coretext.h
 endif
 
 HBHEADERS += hb-coretext.h
 endif
 
-if HAVE_HB_OLD
-SUBDIRS += hb-old
-HBCFLAGS += -I$(srcdir)/hb-old
-HBLIBS   += hb-old/libhb-old.la
-HBSOURCES += hb-old.cc
-endif
-DIST_SUBDIRS += hb-old
-
-if HAVE_ICU_LE
-SUBDIRS += hb-icu-le
-HBCFLAGS += -I$(srcdir)/hb-icu-le
-HBLIBS   += hb-icu-le/libhb-icu-le.la
-HBSOURCES += hb-icu-le.cc
-endif
-DIST_SUBDIRS += hb-icu-le
-
 if HAVE_UCDN
 SUBDIRS += hb-ucdn
 HBCFLAGS += -I$(srcdir)/hb-ucdn
 if HAVE_UCDN
 SUBDIRS += hb-ucdn
 HBCFLAGS += -I$(srcdir)/hb-ucdn
@@ -195,9 +181,6 @@ export_symbols = -export-symbols harfbuzz.def
 harfbuzz_def_dependency = harfbuzz.def
 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 else
 harfbuzz_def_dependency = harfbuzz.def
 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 else
-if HAVE_ICU
-libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
-else
 # Use a C linker for GCC, not C++; Don't link to libstdc++
 if HAVE_GCC
 libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
 # Use a C linker for GCC, not C++; Don't link to libstdc++
 if HAVE_GCC
 libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
@@ -205,19 +188,77 @@ else
 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 endif
 endif
 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 endif
 endif
-endif
 
 
-libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
-nodist_libharfbuzz_la_SOURCES = $(nodist_HBSOURCES)
+libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 pkginclude_HEADERS = $(HBHEADERS)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 pkginclude_HEADERS = $(HBHEADERS)
-nodist_pkginclude_HEADERS = hb-version.h
+nodist_pkginclude_HEADERS = $(HBNODISTHEADERS)
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = harfbuzz.pc
+EXTRA_DIST += harfbuzz.pc.in
+
+if HAVE_ICU
+lib_LTLIBRARIES += libharfbuzz-icu.la
+libharfbuzz_icu_la_SOURCES = hb-icu.cc
+libharfbuzz_icu_la_CPPFLAGS = $(ICU_CFLAGS)
+libharfbuzz_icu_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+libharfbuzz_icu_la_LIBADD = $(ICU_LIBS) libharfbuzz.la
+pkginclude_HEADERS += hb-icu.h
+pkgconfig_DATA += harfbuzz-icu.pc
+endif
+EXTRA_DIST += harfbuzz-icu.pc.in
+
+if HAVE_GOBJECT
+lib_LTLIBRARIES += libharfbuzz-gobject.la
+libharfbuzz_gobject_la_SOURCES = hb-gobject-structs.cc
+nodist_libharfbuzz_gobject_la_SOURCES = hb-gobject-enums.cc
+libharfbuzz_gobject_la_CPPFLAGS = $(GOBJECT_CFLAGS)
+libharfbuzz_gobject_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+libharfbuzz_gobject_la_LIBADD = $(GOBJECT_LIBS) libharfbuzz.la
+pkginclude_HEADERS += hb-gobject.h hb-gobject-structs.h
+nodist_pkginclude_HEADERS += hb-gobject-enums.h
+pkgconfig_DATA += harfbuzz-gobject.pc
+
+BUILT_SOURCES += \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
+       $(NULL)
+DISTCLEANFILES += \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
+       $(NULL)
+hb-gobject-enums.%: hb-gobject-enums.%.tmpl $(HBHEADERS)
+       $(AM_V_GEN) $(GLIB_MKENUMS) \
+               --identifier-prefix hb_ --symbol-prefix hb_gobject \
+               --template $^ | \
+       sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@.tmp" && \
+       mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
+endif
+EXTRA_DIST += \
+       harfbuzz-gobject.pc.in \
+       hb-gobject-enums.cc.tmpl \
+       hb-gobject-enums.h.tmpl \
+       $(NULL)
+
+
+%.pc: %.pc.in $(top_builddir)/config.status
+       $(AM_V_GEN) \
+       $(SED)  -e 's@%prefix%@$(prefix)@g' \
+               -e 's@%exec_prefix%@$(exec_prefix)@g' \
+               -e 's@%libdir%@$(libdir)@g' \
+               -e 's@%includedir%@$(includedir)@g' \
+               -e 's@%VERSION%@$(VERSION)@g' \
+       "$<" \
+       > "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "$@.tmp"; false )
+
+CLEANFILES += $(pkgconfig_DATA)
+
 
 CLEANFILES += harfbuzz.def
 
 CLEANFILES += harfbuzz.def
-harfbuzz.def: $(HBHEADERS)
+harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
        $(AM_V_GEN) (echo EXPORTS; \
        (cat $^ || echo 'hb_ERROR ()' ) | \
        $(EGREP) '^hb_.* \(' | \
        $(AM_V_GEN) (echo EXPORTS; \
        (cat $^ || echo 'hb_ERROR ()' ) | \
        $(EGREP) '^hb_.* \(' | \
@@ -232,30 +273,49 @@ GENERATORS = \
        gen-arabic-table.py \
        gen-indic-table.py \
        $(NULL)
        gen-arabic-table.py \
        gen-indic-table.py \
        $(NULL)
-
 EXTRA_DIST += $(GENERATORS)
 
 unicode-tables: arabic-table indic-table
 
 indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
 EXTRA_DIST += $(GENERATORS)
 
 unicode-tables: arabic-table indic-table
 
 indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.hh.tmp && \
-       mv hb-ot-shape-complex-indic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-indic-table.hh || \
-       ($(RM) hb-ot-shape-complex-indic-table.hh.tmp; false)
+       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc.tmp && \
+       mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \
+       ($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false)
 
 
-arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
+arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \
        mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
        ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
 
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \
        mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
        ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
 
+built-sources: $(BUILT_SOURCES)
 
 
-.PHONY: unicode-tables arabic-table indic-table
+.PHONY: unicode-tables arabic-table indic-table built-sources
 
 
-EXTRA_DIST += hb-ot-shape-complex-indic-machine.rl
-$(srcdir)/hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
-       $(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \
+BUILT_SOURCES += \
+       hb-buffer-deserialize-json.hh \
+       hb-buffer-deserialize-text.hh \
+       hb-ot-shape-complex-indic-machine.hh \
+       hb-ot-shape-complex-myanmar-machine.hh \
+       hb-ot-shape-complex-sea-machine.hh \
+       $(NULL)
+EXTRA_DIST += \
+       hb-buffer-deserialize-json.rl \
+       hb-buffer-deserialize-text.rl \
+       hb-ot-shape-complex-indic-machine.rl \
+       hb-ot-shape-complex-myanmar-machine.rl \
+       hb-ot-shape-complex-sea-machine.rl \
+       $(NULL)
+.rl.hh:
+       $(AM_V_GEN)$(RAGEL) -e -F1 -o "$@.tmp" "$<" && \
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
-noinst_PROGRAMS = main test test-would-substitute test-size-params
+noinst_PROGRAMS = \
+       main \
+       test \
+       test-buffer-serialize \
+       test-size-params \
+       test-would-substitute \
+       $(NULL)
 bin_PROGRAMS =
 
 main_SOURCES = main.cc
 bin_PROGRAMS =
 
 main_SOURCES = main.cc
@@ -274,52 +334,70 @@ test_size_params_SOURCES = test-size-params.cc
 test_size_params_CPPFLAGS = $(HBCFLAGS)
 test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
 
 test_size_params_CPPFLAGS = $(HBCFLAGS)
 test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
 
+test_buffer_serialize_SOURCES = test-buffer-serialize.cc
+test_buffer_serialize_CPPFLAGS = $(HBCFLAGS)
+test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
+
 dist_check_SCRIPTS = \
        check-c-linkage-decls.sh \
 dist_check_SCRIPTS = \
        check-c-linkage-decls.sh \
+       check-defs.sh \
        check-header-guards.sh \
        check-header-guards.sh \
-       check-exported-symbols.sh \
        check-includes.sh \
        check-includes.sh \
-       check-internal-symbols.sh \
+       check-libstdc++.sh \
+       check-static-inits.sh \
+       check-symbols.sh \
        $(NULL)
 
        $(NULL)
 
-if HAVE_ICU
-else
-dist_check_SCRIPTS += check-libstdc++.sh
-endif
-
-if HAVE_ICU_LE
-else
-dist_check_SCRIPTS += check-static-inits.sh
-endif
-
 TESTS = $(dist_check_SCRIPTS)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
        HBSOURCES="$(HBSOURCES)" \
 TESTS = $(dist_check_SCRIPTS)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
        HBSOURCES="$(HBSOURCES)" \
-       HBHEADERS="$(HBHEADERS)" \
+       HBHEADERS="$(HBHEADERS) $(HBNODISTHEADERS)" \
        $(NULL)
 
        $(NULL)
 
-#-include $(INTROSPECTION_MAKEFILE)
-#INTROSPECTION_GIRS = hb-1.0.gir
-#INTROSPECTION_SCANNER_ARGS = -I$(srcdir) -n hb --identifier-prefix=hb_
-#INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
-#
-#if HAVE_INTROSPECTION
-#
-#hb-1.0.gir: libharfbuzz.la
-#hb_1_0_gir_INCLUDES = GObject-2.0
-#hb_1_0_gir_CFLAGS = $(INCLUDES) $(HBCFLAGS) -DHB_H -DHB_H_IN -DHB_OT_H -DHB_OT_H_IN
-#hb_1_0_gir_LIBS = libharfbuzz.la
-#hb_1_0_gir_FILES = $(HBHEADERS)
-#
-#girdir = $(datadir)/gir-1.0
-#gir_DATA = $(INTROSPECTION_GIRS)
-#
-#typelibdir = $(libdir)/girepository-1.0
-#typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
-#
-#CLEANFILES += $(gir_DATA) $(typelib_DATA)
-#endif
+if HAVE_INTROSPECTION
+
+-include $(INTROSPECTION_MAKEFILE)
+INTROSPECTION_GIRS = HarfBuzz-$(HB_VERSION_MAJOR).0.gir # What does the 0 mean anyway?!
+INTROSPECTION_SCANNER_ARGS = -I$(srcdir) -n hb --identifier-prefix=hb_ --warn-all
+INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+INTROSPECTION_SCANNER_ENV = CC="$(CC)"
+
+HarfBuzz-0.0.gir: libharfbuzz.la libharfbuzz-gobject.la
+HarfBuzz_0_0_gir_INCLUDES = GObject-2.0
+HarfBuzz_0_0_gir_CFLAGS = \
+       $(INCLUDES) \
+       $(HBCFLAGS) \
+       -DHB_H \
+       -DHB_H_IN \
+       -DHB_OT_H \
+       -DHB_OT_H_IN \
+       -DHB_GOBJECT_H \
+       -DHB_GOBJECT_H_IN \
+       $(NULL)
+HarfBuzz_0_0_gir_LIBS = \
+       libharfbuzz.la \
+       libharfbuzz-gobject.la \
+       $(NULL)
+HarfBuzz_0_0_gir_FILES = \
+       $(HBHEADERS) \
+       $(HBNODISTHEADERS) \
+       $(HBSOURCES) \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
+       hb-gobject-structs.cc \
+       hb-gobject-structs.h \
+       $(NULL)
+
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(INTROSPECTION_GIRS)
+
+typelibdir = $(libdir)/girepository-1.0
+typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
+
+CLEANFILES += $(gir_DATA) $(typelib_DATA)
+
+endif
 
 -include $(top_srcdir)/git.mk
 
 -include $(top_srcdir)/git.mk
index b52630a..703d994 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 
 
 
 
 
+
 VPATH = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -39,12 +84,14 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 @HAVE_OT_TRUE@am__append_1 = \
 build_triplet = @build@
 host_triplet = @host@
 @HAVE_OT_TRUE@am__append_1 = \
+@HAVE_OT_TRUE@ hb-ot-font.cc \
 @HAVE_OT_TRUE@ hb-ot-layout.cc \
 @HAVE_OT_TRUE@ hb-ot-layout-common-private.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gdef-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gpos-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gsubgpos-private.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gsub-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout.cc \
 @HAVE_OT_TRUE@ hb-ot-layout-common-private.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gdef-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gpos-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gsubgpos-private.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-gsub-table.hh \
+@HAVE_OT_TRUE@ hb-ot-layout-jstf-table.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-private.hh \
 @HAVE_OT_TRUE@ hb-ot-map.cc \
 @HAVE_OT_TRUE@ hb-ot-map-private.hh \
 @HAVE_OT_TRUE@ hb-ot-layout-private.hh \
 @HAVE_OT_TRUE@ hb-ot-map.cc \
 @HAVE_OT_TRUE@ hb-ot-map-private.hh \
@@ -52,12 +99,20 @@ host_triplet = @host@
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-fallback.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-table.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-fallback.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-table.hh \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-arabic-win1256.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-default.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-default.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-hangul.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-hebrew.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-machine.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-machine.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-indic-private.hh \
-@HAVE_OT_TRUE@ hb-ot-shape-complex-indic-table.hh \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-indic-table.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-myanmar.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-myanmar-machine.hh \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-sea.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-sea-machine.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-thai.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-thai.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-complex-tibetan.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize.cc \
 @HAVE_OT_TRUE@ hb-ot-shape-complex-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize-private.hh \
 @HAVE_OT_TRUE@ hb-ot-shape-normalize.cc \
@@ -68,71 +123,73 @@ host_triplet = @host@
 
 @HAVE_OT_TRUE@am__append_2 = \
 @HAVE_OT_TRUE@ hb-ot.h \
 
 @HAVE_OT_TRUE@am__append_2 = \
 @HAVE_OT_TRUE@ hb-ot.h \
+@HAVE_OT_TRUE@ hb-ot-font.h \
 @HAVE_OT_TRUE@ hb-ot-layout.h \
 @HAVE_OT_TRUE@ hb-ot-layout.h \
+@HAVE_OT_TRUE@ hb-ot-shape.h \
 @HAVE_OT_TRUE@ hb-ot-tag.h \
 @HAVE_OT_TRUE@ $(NULL)
 
 @HAVE_OT_TRUE@ hb-ot-tag.h \
 @HAVE_OT_TRUE@ $(NULL)
 
-@HAVE_PTHREAD_TRUE@am__append_3 = $(PTHREAD_CFLAGS)
-@HAVE_PTHREAD_TRUE@am__append_4 = $(PTHREAD_LIBS)
-@HAVE_GLIB_TRUE@am__append_5 = $(GLIB_CFLAGS)
-@HAVE_GLIB_TRUE@am__append_6 = $(GLIB_LIBS)
-@HAVE_GLIB_TRUE@am__append_7 = hb-glib.cc
-@HAVE_GLIB_TRUE@am__append_8 = hb-glib.h
-@HAVE_GOBJECT_TRUE@am__append_9 = $(GOBJECT_CFLAGS)
-@HAVE_GOBJECT_TRUE@am__append_10 = $(GOBJECT_LIBS)
-@HAVE_GOBJECT_TRUE@am__append_11 = hb-gobject-structs.cc
-@HAVE_GOBJECT_TRUE@am__append_12 = hb-gobject.h
-@HAVE_GOBJECT_TRUE@am__append_13 = hb-gobject-enums.cc
-@HAVE_GOBJECT_TRUE@am__append_14 = hb-gobject-enums.cc.tmpl
-@HAVE_GOBJECT_TRUE@am__append_15 = hb-gobject-enums.cc
-@HAVE_ICU_TRUE@am__append_16 = $(ICU_CFLAGS)
-@HAVE_ICU_TRUE@am__append_17 = $(ICU_LIBS)
-@HAVE_ICU_TRUE@am__append_18 = hb-icu.cc
-@HAVE_ICU_TRUE@am__append_19 = hb-icu.h
-@HAVE_FREETYPE_TRUE@am__append_20 = $(FREETYPE_CFLAGS)
-@HAVE_FREETYPE_TRUE@am__append_21 = $(FREETYPE_LIBS)
-@HAVE_FREETYPE_TRUE@am__append_22 = hb-ft.cc
-@HAVE_FREETYPE_TRUE@am__append_23 = hb-ft.h
-@HAVE_GRAPHITE2_TRUE@am__append_24 = $(GRAPHITE2_CFLAGS)
-@HAVE_GRAPHITE2_TRUE@am__append_25 = $(GRAPHITE2_LIBS)
-@HAVE_GRAPHITE2_TRUE@am__append_26 = hb-graphite2.cc
-@HAVE_GRAPHITE2_TRUE@am__append_27 = hb-graphite2.h
-@HAVE_UNISCRIBE_TRUE@am__append_28 = $(UNISCRIBE_CFLAGS)
-@HAVE_UNISCRIBE_TRUE@am__append_29 = $(UNISCRIBE_LIBS)
-@HAVE_UNISCRIBE_TRUE@am__append_30 = hb-uniscribe.cc
-@HAVE_UNISCRIBE_TRUE@am__append_31 = hb-uniscribe.h
-@HAVE_CORETEXT_TRUE@am__append_32 = $(CORETEXT_CFLAGS)
-@HAVE_CORETEXT_TRUE@am__append_33 = $(CORETEXT_LIBS)
-@HAVE_CORETEXT_TRUE@am__append_34 = hb-coretext.cc
-@HAVE_CORETEXT_TRUE@am__append_35 = hb-coretext.h
-@HAVE_HB_OLD_TRUE@am__append_36 = hb-old
-@HAVE_HB_OLD_TRUE@am__append_37 = -I$(srcdir)/hb-old
-@HAVE_HB_OLD_TRUE@am__append_38 = hb-old/libhb-old.la
-@HAVE_HB_OLD_TRUE@am__append_39 = hb-old.cc
-@HAVE_ICU_LE_TRUE@am__append_40 = hb-icu-le
-@HAVE_ICU_LE_TRUE@am__append_41 = -I$(srcdir)/hb-icu-le
-@HAVE_ICU_LE_TRUE@am__append_42 = hb-icu-le/libhb-icu-le.la
-@HAVE_ICU_LE_TRUE@am__append_43 = hb-icu-le.cc
-@HAVE_UCDN_TRUE@am__append_44 = hb-ucdn
-@HAVE_UCDN_TRUE@am__append_45 = -I$(srcdir)/hb-ucdn
-@HAVE_UCDN_TRUE@am__append_46 = hb-ucdn/libhb-ucdn.la
-@HAVE_UCDN_TRUE@am__append_47 = hb-ucdn.cc
+@HAVE_FALLBACK_TRUE@am__append_3 = hb-fallback-shape.cc
+@HAVE_PTHREAD_TRUE@am__append_4 = $(PTHREAD_CFLAGS)
+@HAVE_PTHREAD_TRUE@am__append_5 = $(PTHREAD_LIBS)
+@HAVE_GLIB_TRUE@am__append_6 = $(GLIB_CFLAGS)
+@HAVE_GLIB_TRUE@am__append_7 = $(GLIB_LIBS)
+@HAVE_GLIB_TRUE@am__append_8 = hb-glib.cc
+@HAVE_GLIB_TRUE@am__append_9 = hb-glib.h
+@HAVE_FREETYPE_TRUE@am__append_10 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@am__append_11 = $(FREETYPE_LIBS)
+@HAVE_FREETYPE_TRUE@am__append_12 = hb-ft.cc
+@HAVE_FREETYPE_TRUE@am__append_13 = hb-ft.h
+@HAVE_GRAPHITE2_TRUE@am__append_14 = $(GRAPHITE2_CFLAGS)
+@HAVE_GRAPHITE2_TRUE@am__append_15 = $(GRAPHITE2_LIBS)
+@HAVE_GRAPHITE2_TRUE@am__append_16 = hb-graphite2.cc
+@HAVE_GRAPHITE2_TRUE@am__append_17 = hb-graphite2.h
+@HAVE_UNISCRIBE_TRUE@am__append_18 = $(UNISCRIBE_CFLAGS)
+@HAVE_UNISCRIBE_TRUE@am__append_19 = $(UNISCRIBE_LIBS)
+@HAVE_UNISCRIBE_TRUE@am__append_20 = hb-uniscribe.cc
+@HAVE_UNISCRIBE_TRUE@am__append_21 = hb-uniscribe.h
+@HAVE_CORETEXT_TRUE@am__append_22 = $(CORETEXT_CFLAGS)
+@HAVE_CORETEXT_TRUE@am__append_23 = $(CORETEXT_LIBS)
+@HAVE_CORETEXT_TRUE@am__append_24 = hb-coretext.cc
+@HAVE_CORETEXT_TRUE@am__append_25 = hb-coretext.h
+@HAVE_UCDN_TRUE@am__append_26 = hb-ucdn
+@HAVE_UCDN_TRUE@am__append_27 = -I$(srcdir)/hb-ucdn
+@HAVE_UCDN_TRUE@am__append_28 = hb-ucdn/libhb-ucdn.la
+@HAVE_UCDN_TRUE@am__append_29 = hb-ucdn.cc
+@HAVE_ICU_TRUE@am__append_30 = libharfbuzz-icu.la
+@HAVE_ICU_TRUE@am__append_31 = hb-icu.h
+@HAVE_ICU_TRUE@am__append_32 = harfbuzz-icu.pc
+@HAVE_GOBJECT_TRUE@am__append_33 = libharfbuzz-gobject.la
+@HAVE_GOBJECT_TRUE@am__append_34 = hb-gobject.h hb-gobject-structs.h
+@HAVE_GOBJECT_TRUE@am__append_35 = hb-gobject-enums.h
+@HAVE_GOBJECT_TRUE@am__append_36 = harfbuzz-gobject.pc
+@HAVE_GOBJECT_TRUE@am__append_37 = \
+@HAVE_GOBJECT_TRUE@    hb-gobject-enums.cc \
+@HAVE_GOBJECT_TRUE@    hb-gobject-enums.h \
+@HAVE_GOBJECT_TRUE@    $(NULL)
+
+@HAVE_GOBJECT_TRUE@am__append_38 = \
+@HAVE_GOBJECT_TRUE@    hb-gobject-enums.cc \
+@HAVE_GOBJECT_TRUE@    hb-gobject-enums.h \
+@HAVE_GOBJECT_TRUE@    $(NULL)
+
 noinst_PROGRAMS = main$(EXEEXT) test$(EXEEXT) \
 noinst_PROGRAMS = main$(EXEEXT) test$(EXEEXT) \
-       test-would-substitute$(EXEEXT) test-size-params$(EXEEXT)
+       test-buffer-serialize$(EXEEXT) test-size-params$(EXEEXT) \
+       test-would-substitute$(EXEEXT) $(am__EXEEXT_1)
 bin_PROGRAMS =
 bin_PROGRAMS =
-@HAVE_ICU_FALSE@am__append_48 = check-libstdc++.sh
-@HAVE_ICU_LE_FALSE@am__append_49 = check-static-inits.sh
 TESTS = $(am__EXEEXT_2)
 TESTS = $(am__EXEEXT_2)
+@HAVE_INTROSPECTION_TRUE@am__append_39 = $(gir_DATA) $(typelib_DATA)
 subdir = src
 subdir = src
-DIST_COMMON = $(am__dist_check_SCRIPTS_DIST) \
-       $(am__pkginclude_HEADERS_DIST) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/hb-version.h.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(srcdir)/hb-version.h.in $(dist_check_SCRIPTS) \
+       $(top_srcdir)/depcomp $(am__pkginclude_HEADERS_DIST) \
+       $(top_srcdir)/test-driver
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -167,123 +224,170 @@ am__uninstall_files_from_dir = { \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
-       "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"
+       "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" \
+       "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgincludedir)" \
+       "$(DESTDIR)$(pkgincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
+@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_DEPENDENCIES =  \
+@HAVE_GOBJECT_TRUE@    $(am__DEPENDENCIES_1) libharfbuzz.la
+am__libharfbuzz_gobject_la_SOURCES_DIST = hb-gobject-structs.cc
+@HAVE_GOBJECT_TRUE@am_libharfbuzz_gobject_la_OBJECTS = libharfbuzz_gobject_la-hb-gobject-structs.lo
+@HAVE_GOBJECT_TRUE@nodist_libharfbuzz_gobject_la_OBJECTS =  \
+@HAVE_GOBJECT_TRUE@    libharfbuzz_gobject_la-hb-gobject-enums.lo
+libharfbuzz_gobject_la_OBJECTS = $(am_libharfbuzz_gobject_la_OBJECTS) \
+       $(nodist_libharfbuzz_gobject_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libharfbuzz_gobject_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+       $(AM_CXXFLAGS) $(CXXFLAGS) $(libharfbuzz_gobject_la_LDFLAGS) \
+       $(LDFLAGS) -o $@
+@HAVE_GOBJECT_TRUE@am_libharfbuzz_gobject_la_rpath = -rpath $(libdir)
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_DEPENDENCIES =  \
+@HAVE_ICU_TRUE@        $(am__DEPENDENCIES_1) libharfbuzz.la
+am__libharfbuzz_icu_la_SOURCES_DIST = hb-icu.cc
+@HAVE_ICU_TRUE@am_libharfbuzz_icu_la_OBJECTS =  \
+@HAVE_ICU_TRUE@        libharfbuzz_icu_la-hb-icu.lo
+libharfbuzz_icu_la_OBJECTS = $(am_libharfbuzz_icu_la_OBJECTS)
+libharfbuzz_icu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+       $(AM_CXXFLAGS) $(CXXFLAGS) $(libharfbuzz_icu_la_LDFLAGS) \
+       $(LDFLAGS) -o $@
+@HAVE_ICU_TRUE@am_libharfbuzz_icu_la_rpath = -rpath $(libdir)
 @HAVE_PTHREAD_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 @HAVE_GLIB_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
 @HAVE_PTHREAD_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 @HAVE_GLIB_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
-@HAVE_GOBJECT_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
-@HAVE_ICU_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
-@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
-@HAVE_GRAPHITE2_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
-@HAVE_UNISCRIBE_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1)
-@HAVE_CORETEXT_TRUE@am__DEPENDENCIES_9 = $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_10 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+@HAVE_GRAPHITE2_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+@HAVE_UNISCRIBE_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+@HAVE_CORETEXT_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_8 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
        $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
        $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
-       $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7) \
-       $(am__DEPENDENCIES_8) $(am__DEPENDENCIES_9) $(am__append_38) \
-       $(am__append_42) $(am__append_46)
-libharfbuzz_la_DEPENDENCIES = $(am__DEPENDENCIES_10)
+       $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7) $(am__append_28)
+libharfbuzz_la_DEPENDENCIES = $(am__DEPENDENCIES_8)
 am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.cc \
 am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.cc \
-       hb-buffer-private.hh hb-buffer.cc hb-cache-private.hh \
-       hb-common.cc hb-fallback-shape.cc hb-font-private.hh \
-       hb-font.cc hb-mutex-private.hh hb-object-private.hh \
-       hb-open-file-private.hh hb-open-type-private.hh \
+       hb-buffer-deserialize-json.hh hb-buffer-deserialize-text.hh \
+       hb-buffer-private.hh hb-buffer-serialize.cc hb-buffer.cc \
+       hb-cache-private.hh hb-common.cc hb-face-private.hh hb-face.cc \
+       hb-font-private.hh hb-font.cc hb-mutex-private.hh \
+       hb-object-private.hh hb-open-file-private.hh \
+       hb-open-type-private.hh hb-ot-cmap-table.hh \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
        hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
        hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
        hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
        hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
-       hb-tt-font.cc hb-unicode-private.hh hb-unicode.cc \
-       hb-utf-private.hh hb-warning.cc hb-ot-layout.cc \
+       hb-unicode-private.hh hb-unicode.cc hb-utf-private.hh \
+       hb-warning.cc hb-ot-font.cc hb-ot-layout.cc \
        hb-ot-layout-common-private.hh hb-ot-layout-gdef-table.hh \
        hb-ot-layout-gpos-table.hh hb-ot-layout-gsubgpos-private.hh \
        hb-ot-layout-common-private.hh hb-ot-layout-gdef-table.hh \
        hb-ot-layout-gpos-table.hh hb-ot-layout-gsubgpos-private.hh \
-       hb-ot-layout-gsub-table.hh hb-ot-layout-private.hh \
-       hb-ot-map.cc hb-ot-map-private.hh hb-ot-shape.cc \
-       hb-ot-shape-complex-arabic.cc \
+       hb-ot-layout-gsub-table.hh hb-ot-layout-jstf-table.hh \
+       hb-ot-layout-private.hh hb-ot-map.cc hb-ot-map-private.hh \
+       hb-ot-shape.cc hb-ot-shape-complex-arabic.cc \
        hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
        hb-ot-shape-complex-arabic-fallback.hh \
        hb-ot-shape-complex-arabic-table.hh \
-       hb-ot-shape-complex-default.cc hb-ot-shape-complex-indic.cc \
+       hb-ot-shape-complex-arabic-win1256.hh \
+       hb-ot-shape-complex-default.cc hb-ot-shape-complex-hangul.cc \
+       hb-ot-shape-complex-hebrew.cc hb-ot-shape-complex-indic.cc \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
        hb-ot-shape-complex-indic-machine.hh \
        hb-ot-shape-complex-indic-private.hh \
-       hb-ot-shape-complex-indic-table.hh hb-ot-shape-complex-thai.cc \
+       hb-ot-shape-complex-indic-table.cc \
+       hb-ot-shape-complex-myanmar.cc \
+       hb-ot-shape-complex-myanmar-machine.hh \
+       hb-ot-shape-complex-sea.cc hb-ot-shape-complex-sea-machine.hh \
+       hb-ot-shape-complex-thai.cc hb-ot-shape-complex-tibetan.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh hb-ot-shape-normalize.cc \
        hb-ot-shape-fallback-private.hh hb-ot-shape-fallback.cc \
        hb-ot-shape-complex-private.hh \
        hb-ot-shape-normalize-private.hh hb-ot-shape-normalize.cc \
        hb-ot-shape-fallback-private.hh hb-ot-shape-fallback.cc \
-       hb-ot-shape-private.hh hb-glib.cc hb-gobject-structs.cc \
-       hb-icu.cc hb-ft.cc hb-graphite2.cc hb-uniscribe.cc \
-       hb-coretext.cc hb-old.cc hb-icu-le.cc hb-ucdn.cc hb.h \
-       hb-blob.h hb-buffer.h hb-common.h hb-font.h hb-set.h \
-       hb-shape.h hb-shape-plan.h hb-unicode.h hb-version.h hb-ot.h \
-       hb-ot-layout.h hb-ot-tag.h hb-glib.h hb-gobject.h hb-icu.h \
-       hb-ft.h hb-graphite2.h hb-uniscribe.h hb-coretext.h
+       hb-ot-shape-private.hh hb-fallback-shape.cc hb-glib.cc \
+       hb-ft.cc hb-graphite2.cc hb-uniscribe.cc hb-coretext.cc \
+       hb-ucdn.cc hb.h hb-blob.h hb-buffer.h hb-common.h \
+       hb-deprecated.h hb-face.h hb-font.h hb-set.h hb-shape.h \
+       hb-shape-plan.h hb-unicode.h hb-ot.h hb-ot-font.h \
+       hb-ot-layout.h hb-ot-shape.h hb-ot-tag.h hb-glib.h hb-ft.h \
+       hb-graphite2.h hb-uniscribe.h hb-coretext.h hb-version.h
 am__objects_1 =
 am__objects_1 =
-@HAVE_OT_TRUE@am__objects_2 = libharfbuzz_la-hb-ot-layout.lo \
+@HAVE_OT_TRUE@am__objects_2 = libharfbuzz_la-hb-ot-font.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-layout.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-map.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-arabic.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-default.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-map.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-arabic.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-default.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-hangul.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-hebrew.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-indic.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-indic.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-indic-table.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-myanmar.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-sea.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-thai.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-thai.lo \
+@HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-complex-tibetan.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-normalize.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-fallback.lo \
 @HAVE_OT_TRUE@ $(am__objects_1)
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-normalize.lo \
 @HAVE_OT_TRUE@ libharfbuzz_la-hb-ot-shape-fallback.lo \
 @HAVE_OT_TRUE@ $(am__objects_1)
-@HAVE_GLIB_TRUE@am__objects_3 = libharfbuzz_la-hb-glib.lo
-@HAVE_GOBJECT_TRUE@am__objects_4 =  \
-@HAVE_GOBJECT_TRUE@    libharfbuzz_la-hb-gobject-structs.lo
-@HAVE_ICU_TRUE@am__objects_5 = libharfbuzz_la-hb-icu.lo
-@HAVE_FREETYPE_TRUE@am__objects_6 = libharfbuzz_la-hb-ft.lo
-@HAVE_GRAPHITE2_TRUE@am__objects_7 = libharfbuzz_la-hb-graphite2.lo
-@HAVE_UNISCRIBE_TRUE@am__objects_8 = libharfbuzz_la-hb-uniscribe.lo
-@HAVE_CORETEXT_TRUE@am__objects_9 = libharfbuzz_la-hb-coretext.lo
-@HAVE_HB_OLD_TRUE@am__objects_10 = libharfbuzz_la-hb-old.lo
-@HAVE_ICU_LE_TRUE@am__objects_11 = libharfbuzz_la-hb-icu-le.lo
-@HAVE_UCDN_TRUE@am__objects_12 = libharfbuzz_la-hb-ucdn.lo
-am__objects_13 = libharfbuzz_la-hb-blob.lo libharfbuzz_la-hb-buffer.lo \
-       libharfbuzz_la-hb-common.lo \
-       libharfbuzz_la-hb-fallback-shape.lo libharfbuzz_la-hb-font.lo \
+@HAVE_FALLBACK_TRUE@am__objects_3 =  \
+@HAVE_FALLBACK_TRUE@   libharfbuzz_la-hb-fallback-shape.lo
+@HAVE_GLIB_TRUE@am__objects_4 = libharfbuzz_la-hb-glib.lo
+@HAVE_FREETYPE_TRUE@am__objects_5 = libharfbuzz_la-hb-ft.lo
+@HAVE_GRAPHITE2_TRUE@am__objects_6 = libharfbuzz_la-hb-graphite2.lo
+@HAVE_UNISCRIBE_TRUE@am__objects_7 = libharfbuzz_la-hb-uniscribe.lo
+@HAVE_CORETEXT_TRUE@am__objects_8 = libharfbuzz_la-hb-coretext.lo
+@HAVE_UCDN_TRUE@am__objects_9 = libharfbuzz_la-hb-ucdn.lo
+am__objects_10 = libharfbuzz_la-hb-blob.lo \
+       libharfbuzz_la-hb-buffer-serialize.lo \
+       libharfbuzz_la-hb-buffer.lo libharfbuzz_la-hb-common.lo \
+       libharfbuzz_la-hb-face.lo libharfbuzz_la-hb-font.lo \
        libharfbuzz_la-hb-ot-tag.lo libharfbuzz_la-hb-set.lo \
        libharfbuzz_la-hb-shape.lo libharfbuzz_la-hb-shape-plan.lo \
        libharfbuzz_la-hb-ot-tag.lo libharfbuzz_la-hb-set.lo \
        libharfbuzz_la-hb-shape.lo libharfbuzz_la-hb-shape-plan.lo \
-       libharfbuzz_la-hb-shaper.lo libharfbuzz_la-hb-tt-font.lo \
-       libharfbuzz_la-hb-unicode.lo libharfbuzz_la-hb-warning.lo \
-       $(am__objects_1) $(am__objects_2) $(am__objects_3) \
-       $(am__objects_4) $(am__objects_5) $(am__objects_6) \
-       $(am__objects_7) $(am__objects_8) $(am__objects_9) \
-       $(am__objects_10) $(am__objects_11) $(am__objects_12)
-@HAVE_OT_TRUE@am__objects_14 = $(am__objects_1)
-am__objects_15 = $(am__objects_1) $(am__objects_14) $(am__objects_1) \
+       libharfbuzz_la-hb-shaper.lo libharfbuzz_la-hb-unicode.lo \
+       libharfbuzz_la-hb-warning.lo $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+       $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+       $(am__objects_9)
+@HAVE_OT_TRUE@am__objects_11 = $(am__objects_1)
+am__objects_12 = $(am__objects_1) $(am__objects_11) $(am__objects_1) \
        $(am__objects_1) $(am__objects_1) $(am__objects_1) \
        $(am__objects_1) $(am__objects_1) $(am__objects_1) \
-       $(am__objects_1) $(am__objects_1) $(am__objects_1)
-am_libharfbuzz_la_OBJECTS = $(am__objects_13) $(am__objects_15)
-@HAVE_GOBJECT_TRUE@am__objects_16 =  \
-@HAVE_GOBJECT_TRUE@    libharfbuzz_la-hb-gobject-enums.lo
-nodist_libharfbuzz_la_OBJECTS = $(am__objects_16)
-libharfbuzz_la_OBJECTS = $(am_libharfbuzz_la_OBJECTS) \
-       $(nodist_libharfbuzz_la_OBJECTS)
+       $(am__objects_1)
+am__objects_13 = $(am__objects_1)
+am_libharfbuzz_la_OBJECTS = $(am__objects_10) $(am__objects_12) \
+       $(am__objects_13)
+libharfbuzz_la_OBJECTS = $(am_libharfbuzz_la_OBJECTS)
+am__EXEEXT_1 =
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_main_OBJECTS = main-main.$(OBJEXT)
 main_OBJECTS = $(am_main_OBJECTS)
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_main_OBJECTS = main-main.$(OBJEXT)
 main_OBJECTS = $(am_main_OBJECTS)
-main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
+main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_8)
 am_test_OBJECTS = test-test.$(OBJEXT)
 test_OBJECTS = $(am_test_OBJECTS)
 am_test_OBJECTS = test-test.$(OBJEXT)
 test_OBJECTS = $(am_test_OBJECTS)
-test_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10) \
+test_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_8) \
        $(am__DEPENDENCIES_1)
        $(am__DEPENDENCIES_1)
+am_test_buffer_serialize_OBJECTS =  \
+       test_buffer_serialize-test-buffer-serialize.$(OBJEXT)
+test_buffer_serialize_OBJECTS = $(am_test_buffer_serialize_OBJECTS)
+test_buffer_serialize_DEPENDENCIES = libharfbuzz.la \
+       $(am__DEPENDENCIES_8)
 am_test_size_params_OBJECTS =  \
        test_size_params-test-size-params.$(OBJEXT)
 test_size_params_OBJECTS = $(am_test_size_params_OBJECTS)
 am_test_size_params_OBJECTS =  \
        test_size_params-test-size-params.$(OBJEXT)
 test_size_params_OBJECTS = $(am_test_size_params_OBJECTS)
-test_size_params_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_10)
+test_size_params_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_8)
 am_test_would_substitute_OBJECTS =  \
        test_would_substitute-test-would-substitute.$(OBJEXT)
 test_would_substitute_OBJECTS = $(am_test_would_substitute_OBJECTS)
 test_would_substitute_DEPENDENCIES = libharfbuzz.la \
 am_test_would_substitute_OBJECTS =  \
        test_would_substitute-test-would-substitute.$(OBJEXT)
 test_would_substitute_OBJECTS = $(am_test_would_substitute_OBJECTS)
 test_would_substitute_DEPENDENCIES = libharfbuzz.la \
-       $(am__DEPENDENCIES_10) $(am__DEPENDENCIES_1)
-am__dist_check_SCRIPTS_DIST = check-c-linkage-decls.sh \
-       check-header-guards.sh check-exported-symbols.sh \
-       check-includes.sh check-internal-symbols.sh check-libstdc++.sh \
-       check-static-inits.sh
+       $(am__DEPENDENCIES_8) $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -296,17 +400,16 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD " $@;
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -315,50 +418,254 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(libharfbuzz_la_SOURCES) $(nodist_libharfbuzz_la_SOURCES) \
-       $(main_SOURCES) $(test_SOURCES) $(test_size_params_SOURCES) \
-       $(test_would_substitute_SOURCES)
-DIST_SOURCES = $(am__libharfbuzz_la_SOURCES_DIST) $(main_SOURCES) \
-       $(test_SOURCES) $(test_size_params_SOURCES) \
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libharfbuzz_gobject_la_SOURCES) \
+       $(nodist_libharfbuzz_gobject_la_SOURCES) \
+       $(libharfbuzz_icu_la_SOURCES) $(libharfbuzz_la_SOURCES) \
+       $(main_SOURCES) $(test_SOURCES) \
+       $(test_buffer_serialize_SOURCES) $(test_size_params_SOURCES) \
        $(test_would_substitute_SOURCES)
        $(test_would_substitute_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+DIST_SOURCES = $(am__libharfbuzz_gobject_la_SOURCES_DIST) \
+       $(am__libharfbuzz_icu_la_SOURCES_DIST) \
+       $(am__libharfbuzz_la_SOURCES_DIST) $(main_SOURCES) \
+       $(test_SOURCES) $(test_buffer_serialize_SOURCES) \
+       $(test_size_params_SOURCES) $(test_would_substitute_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(gir_DATA) $(pkgconfig_DATA) $(typelib_DATA)
 am__pkginclude_HEADERS_DIST = hb.h hb-blob.h hb-buffer.h hb-common.h \
 am__pkginclude_HEADERS_DIST = hb.h hb-blob.h hb-buffer.h hb-common.h \
-       hb-font.h hb-set.h hb-shape.h hb-shape-plan.h hb-unicode.h \
-       hb-version.h hb-ot.h hb-ot-layout.h hb-ot-tag.h hb-glib.h \
-       hb-gobject.h hb-icu.h hb-ft.h hb-graphite2.h hb-uniscribe.h \
-       hb-coretext.h
+       hb-deprecated.h hb-face.h hb-font.h hb-set.h hb-shape.h \
+       hb-shape-plan.h hb-unicode.h hb-ot.h hb-ot-font.h \
+       hb-ot-layout.h hb-ot-shape.h hb-ot-tag.h hb-glib.h hb-ft.h \
+       hb-graphite2.h hb-uniscribe.h hb-coretext.h hb-icu.h \
+       hb-gobject.h hb-gobject-structs.h
 HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
 HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-       distdir
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 ETAGS = etags
 CTAGS = ctags
-am__tty_colors = \
-red=; grn=; lgn=; blu=; std=
-am__EXEEXT_1 =
-am__EXEEXT_2 = check-c-linkage-decls.sh check-header-guards.sh \
-       check-exported-symbols.sh check-includes.sh \
-       check-internal-symbols.sh $(am__EXEEXT_1) $(am__append_48) \
-       $(am__append_49)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+am__EXEEXT_2 = check-c-linkage-decls.sh check-defs.sh \
+       check-header-guards.sh check-includes.sh check-libstdc++.sh \
+       check-static-inits.sh check-symbols.sh $(am__EXEEXT_1)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -422,6 +729,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -430,22 +738,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -475,6 +795,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -538,66 +859,85 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
-SUBDIRS = $(am__append_36) $(am__append_40) $(am__append_44)
-DIST_SUBDIRS = hb-old hb-icu-le hb-ucdn
-BUILT_SOURCES = $(am__append_13)
-EXTRA_DIST = $(am__append_14) $(GENERATORS) \
-       hb-ot-shape-complex-indic-machine.rl
-CLEANFILES = harfbuzz.def
-DISTCLEANFILES = $(am__append_15)
+SUBDIRS = $(am__append_26)
+DIST_SUBDIRS = hb-ucdn
+BUILT_SOURCES = $(am__append_37) hb-buffer-deserialize-json.hh \
+       hb-buffer-deserialize-text.hh \
+       hb-ot-shape-complex-indic-machine.hh \
+       hb-ot-shape-complex-myanmar-machine.hh \
+       hb-ot-shape-complex-sea-machine.hh $(NULL)
+EXTRA_DIST = harfbuzz.pc.in harfbuzz-icu.pc.in harfbuzz-gobject.pc.in \
+       hb-gobject-enums.cc.tmpl hb-gobject-enums.h.tmpl $(NULL) \
+       $(GENERATORS) hb-buffer-deserialize-json.rl \
+       hb-buffer-deserialize-text.rl \
+       hb-ot-shape-complex-indic-machine.rl \
+       hb-ot-shape-complex-myanmar-machine.rl \
+       hb-ot-shape-complex-sea-machine.rl $(NULL)
+CLEANFILES = $(pkgconfig_DATA) harfbuzz.def $(am__append_39)
+DISTCLEANFILES = $(am__append_38)
 MAINTAINERCLEANFILES = 
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
 
 # The following warning options are useful for debugging: -Wpadded
 #AM_CXXFLAGS =
 MAINTAINERCLEANFILES = 
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
 
 # The following warning options are useful for debugging: -Wpadded
 #AM_CXXFLAGS =
-lib_LTLIBRARIES = libharfbuzz.la
-HBCFLAGS = $(am__append_3) $(am__append_5) $(am__append_9) \
-       $(am__append_16) $(am__append_20) $(am__append_24) \
-       $(am__append_28) $(am__append_32) $(am__append_37) \
-       $(am__append_41) $(am__append_45)
-HBLIBS = $(am__append_4) $(am__append_6) $(am__append_10) \
-       $(am__append_17) $(am__append_21) $(am__append_25) \
-       $(am__append_29) $(am__append_33) $(am__append_38) \
-       $(am__append_42) $(am__append_46)
-HBSOURCES = hb-atomic-private.hh hb-blob.cc hb-buffer-private.hh \
-       hb-buffer.cc hb-cache-private.hh hb-common.cc \
-       hb-fallback-shape.cc hb-font-private.hh hb-font.cc \
-       hb-mutex-private.hh hb-object-private.hh \
-       hb-open-file-private.hh hb-open-type-private.hh \
+lib_LTLIBRARIES = libharfbuzz.la $(am__append_30) $(am__append_33)
+HBCFLAGS = $(am__append_4) $(am__append_6) $(am__append_10) \
+       $(am__append_14) $(am__append_18) $(am__append_22) \
+       $(am__append_27)
+HBLIBS = $(am__append_5) $(am__append_7) $(am__append_11) \
+       $(am__append_15) $(am__append_19) $(am__append_23) \
+       $(am__append_28)
+HBSOURCES = hb-atomic-private.hh hb-blob.cc \
+       hb-buffer-deserialize-json.hh hb-buffer-deserialize-text.hh \
+       hb-buffer-private.hh hb-buffer-serialize.cc hb-buffer.cc \
+       hb-cache-private.hh hb-common.cc hb-face-private.hh hb-face.cc \
+       hb-font-private.hh hb-font.cc hb-mutex-private.hh \
+       hb-object-private.hh hb-open-file-private.hh \
+       hb-open-type-private.hh hb-ot-cmap-table.hh \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
        hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
        hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
        hb-ot-head-table.hh hb-ot-hhea-table.hh hb-ot-hmtx-table.hh \
        hb-ot-maxp-table.hh hb-ot-name-table.hh hb-ot-tag.cc \
        hb-private.hh hb-set-private.hh hb-set.cc hb-shape.cc \
        hb-shape-plan-private.hh hb-shape-plan.cc hb-shaper-list.hh \
        hb-shaper-impl-private.hh hb-shaper-private.hh hb-shaper.cc \
-       hb-tt-font.cc hb-unicode-private.hh hb-unicode.cc \
-       hb-utf-private.hh hb-warning.cc $(NULL) $(am__append_1) \
-       $(am__append_7) $(am__append_11) $(am__append_18) \
-       $(am__append_22) $(am__append_26) $(am__append_30) \
-       $(am__append_34) $(am__append_39) $(am__append_43) \
-       $(am__append_47)
-HBHEADERS = hb.h hb-blob.h hb-buffer.h hb-common.h hb-font.h hb-set.h \
-       hb-shape.h hb-shape-plan.h hb-unicode.h hb-version.h $(NULL) \
-       $(am__append_2) $(am__append_8) $(am__append_12) \
-       $(am__append_19) $(am__append_23) $(am__append_27) \
-       $(am__append_31) $(am__append_35)
-@HAVE_GOBJECT_TRUE@nodist_HBSOURCES = hb-gobject-enums.cc
+       hb-unicode-private.hh hb-unicode.cc hb-utf-private.hh \
+       hb-warning.cc $(NULL) $(am__append_1) $(am__append_3) \
+       $(am__append_8) $(am__append_12) $(am__append_16) \
+       $(am__append_20) $(am__append_24) $(am__append_29)
+HBHEADERS = hb.h hb-blob.h hb-buffer.h hb-common.h hb-deprecated.h \
+       hb-face.h hb-font.h hb-set.h hb-shape.h hb-shape-plan.h \
+       hb-unicode.h $(NULL) $(am__append_2) $(am__append_9) \
+       $(am__append_13) $(am__append_17) $(am__append_21) \
+       $(am__append_25)
+HBNODISTHEADERS = \
+       hb-version.h \
+       $(NULL)
+
 
 # Put the library together
 @OS_WIN32_TRUE@export_symbols = -export-symbols harfbuzz.def
 @OS_WIN32_TRUE@harfbuzz_def_dependency = harfbuzz.def
 
 # Put the library together
 @OS_WIN32_TRUE@export_symbols = -export-symbols harfbuzz.def
 @OS_WIN32_TRUE@harfbuzz_def_dependency = harfbuzz.def
-@HAVE_GCC_FALSE@@HAVE_ICU_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+@HAVE_GCC_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 # Use a C linker for GCC, not C++; Don't link to libstdc++
 # Use a C linker for GCC, not C++; Don't link to libstdc++
-@HAVE_GCC_TRUE@@HAVE_ICU_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
-@HAVE_ICU_TRUE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+@HAVE_GCC_TRUE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
 @OS_WIN32_TRUE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
 @OS_WIN32_TRUE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
-libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
-nodist_libharfbuzz_la_SOURCES = $(nodist_HBSOURCES)
+libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
-pkginclude_HEADERS = $(HBHEADERS)
-nodist_pkginclude_HEADERS = hb-version.h
+pkginclude_HEADERS = $(HBHEADERS) $(am__append_31) $(am__append_34)
+nodist_pkginclude_HEADERS = $(HBNODISTHEADERS) $(am__append_35)
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = harfbuzz.pc $(am__append_32) $(am__append_36)
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_SOURCES = hb-icu.cc
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_CPPFLAGS = $(ICU_CFLAGS)
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_LIBADD = $(ICU_LIBS) libharfbuzz.la
+@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_SOURCES = hb-gobject-structs.cc
+@HAVE_GOBJECT_TRUE@nodist_libharfbuzz_gobject_la_SOURCES = hb-gobject-enums.cc
+@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_CPPFLAGS = $(GOBJECT_CFLAGS)
+@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_LIBADD = $(GOBJECT_LIBS) libharfbuzz.la
 GENERATORS = \
        gen-arabic-table.py \
        gen-indic-table.py \
 GENERATORS = \
        gen-arabic-table.py \
        gen-indic-table.py \
@@ -615,22 +955,66 @@ test_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
 test_size_params_SOURCES = test-size-params.cc
 test_size_params_CPPFLAGS = $(HBCFLAGS)
 test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
 test_size_params_SOURCES = test-size-params.cc
 test_size_params_CPPFLAGS = $(HBCFLAGS)
 test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
-dist_check_SCRIPTS = check-c-linkage-decls.sh check-header-guards.sh \
-       check-exported-symbols.sh check-includes.sh \
-       check-internal-symbols.sh $(NULL) $(am__append_48) \
-       $(am__append_49)
+test_buffer_serialize_SOURCES = test-buffer-serialize.cc
+test_buffer_serialize_CPPFLAGS = $(HBCFLAGS)
+test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
+dist_check_SCRIPTS = \
+       check-c-linkage-decls.sh \
+       check-defs.sh \
+       check-header-guards.sh \
+       check-includes.sh \
+       check-libstdc++.sh \
+       check-static-inits.sh \
+       check-symbols.sh \
+       $(NULL)
+
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
        HBSOURCES="$(HBSOURCES)" \
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
        HBSOURCES="$(HBSOURCES)" \
-       HBHEADERS="$(HBHEADERS)" \
+       HBHEADERS="$(HBHEADERS) $(HBNODISTHEADERS)" \
        $(NULL)
 
        $(NULL)
 
+@HAVE_INTROSPECTION_TRUE@INTROSPECTION_GIRS = HarfBuzz-$(HB_VERSION_MAJOR).0.gir # What does the 0 mean anyway?!
+@HAVE_INTROSPECTION_TRUE@INTROSPECTION_SCANNER_ARGS = -I$(srcdir) -n hb --identifier-prefix=hb_ --warn-all
+@HAVE_INTROSPECTION_TRUE@INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+@HAVE_INTROSPECTION_TRUE@INTROSPECTION_SCANNER_ENV = CC="$(CC)"
+@HAVE_INTROSPECTION_TRUE@HarfBuzz_0_0_gir_INCLUDES = GObject-2.0
+@HAVE_INTROSPECTION_TRUE@HarfBuzz_0_0_gir_CFLAGS = \
+@HAVE_INTROSPECTION_TRUE@      $(INCLUDES) \
+@HAVE_INTROSPECTION_TRUE@      $(HBCFLAGS) \
+@HAVE_INTROSPECTION_TRUE@      -DHB_H \
+@HAVE_INTROSPECTION_TRUE@      -DHB_H_IN \
+@HAVE_INTROSPECTION_TRUE@      -DHB_OT_H \
+@HAVE_INTROSPECTION_TRUE@      -DHB_OT_H_IN \
+@HAVE_INTROSPECTION_TRUE@      -DHB_GOBJECT_H \
+@HAVE_INTROSPECTION_TRUE@      -DHB_GOBJECT_H_IN \
+@HAVE_INTROSPECTION_TRUE@      $(NULL)
+
+@HAVE_INTROSPECTION_TRUE@HarfBuzz_0_0_gir_LIBS = \
+@HAVE_INTROSPECTION_TRUE@      libharfbuzz.la \
+@HAVE_INTROSPECTION_TRUE@      libharfbuzz-gobject.la \
+@HAVE_INTROSPECTION_TRUE@      $(NULL)
+
+@HAVE_INTROSPECTION_TRUE@HarfBuzz_0_0_gir_FILES = \
+@HAVE_INTROSPECTION_TRUE@      $(HBHEADERS) \
+@HAVE_INTROSPECTION_TRUE@      $(HBNODISTHEADERS) \
+@HAVE_INTROSPECTION_TRUE@      $(HBSOURCES) \
+@HAVE_INTROSPECTION_TRUE@      hb-gobject-enums.cc \
+@HAVE_INTROSPECTION_TRUE@      hb-gobject-enums.h \
+@HAVE_INTROSPECTION_TRUE@      hb-gobject-structs.cc \
+@HAVE_INTROSPECTION_TRUE@      hb-gobject-structs.h \
+@HAVE_INTROSPECTION_TRUE@      $(NULL)
+
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(INTROSPECTION_GIRS)
+@HAVE_INTROSPECTION_TRUE@typelibdir = $(libdir)/girepository-1.0
+@HAVE_INTROSPECTION_TRUE@typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
 all: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 all: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .cc .lo .o .obj
+.SUFFIXES: .cc .hh .lo .log .o .obj .rl .test .test$(EXEEXT) .trs
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -663,9 +1047,9 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 hb-version.h: $(top_builddir)/config.status $(srcdir)/hb-version.h.in
        cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 $(am__aclocal_m4_deps):
 hb-version.h: $(top_builddir)/config.status $(srcdir)/hb-version.h.in
        cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
-       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
        @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
        list2=; for p in $$list; do \
          if test -f $$p; then \
        @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
        list2=; for p in $$list; do \
          if test -f $$p; then \
@@ -673,6 +1057,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
          else :; fi; \
        done; \
        test -z "$$list2" || { \
          else :; fi; \
        done; \
        test -z "$$list2" || { \
+         echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
          echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
        }
          echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
        }
@@ -688,24 +1074,38 @@ uninstall-libLTLIBRARIES:
 
 clean-libLTLIBRARIES:
        -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
 
 clean-libLTLIBRARIES:
        -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
+       @list='$(lib_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libharfbuzz-gobject.la: $(libharfbuzz_gobject_la_OBJECTS) $(libharfbuzz_gobject_la_DEPENDENCIES) $(EXTRA_libharfbuzz_gobject_la_DEPENDENCIES) 
+       $(AM_V_CXXLD)$(libharfbuzz_gobject_la_LINK) $(am_libharfbuzz_gobject_la_rpath) $(libharfbuzz_gobject_la_OBJECTS) $(libharfbuzz_gobject_la_LIBADD) $(LIBS)
+
+libharfbuzz-icu.la: $(libharfbuzz_icu_la_OBJECTS) $(libharfbuzz_icu_la_DEPENDENCIES) $(EXTRA_libharfbuzz_icu_la_DEPENDENCIES) 
+       $(AM_V_CXXLD)$(libharfbuzz_icu_la_LINK) $(am_libharfbuzz_icu_la_rpath) $(libharfbuzz_icu_la_OBJECTS) $(libharfbuzz_icu_la_LIBADD) $(LIBS)
+
 libharfbuzz.la: $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_DEPENDENCIES) $(EXTRA_libharfbuzz_la_DEPENDENCIES) 
        $(AM_V_GEN)$(libharfbuzz_la_LINK) -rpath $(libdir) $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
 libharfbuzz.la: $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_DEPENDENCIES) $(EXTRA_libharfbuzz_la_DEPENDENCIES) 
        $(AM_V_GEN)$(libharfbuzz_la_LINK) -rpath $(libdir) $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
        for p in $$list; do echo "$$p $$p"; done | \
        sed 's/$(EXEEXT)$$//' | \
        for p in $$list; do echo "$$p $$p"; done | \
        sed 's/$(EXEEXT)$$//' | \
-       while read p p1; do if test -f $$p || test -f $$p1; \
-         then echo "$$p"; echo "$$p"; else :; fi; \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
        done | \
        done | \
-       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
        $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
        $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -726,7 +1126,8 @@ uninstall-binPROGRAMS:
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        files=`for p in $$list; do echo "$$p"; done | \
          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        files=`for p in $$list; do echo "$$p"; done | \
          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-             -e 's/$$/$(EXEEXT)/' `; \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
        test -n "$$list" || exit 0; \
        echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(bindir)" && rm -f $$files
        test -n "$$list" || exit 0; \
        echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(bindir)" && rm -f $$files
@@ -764,15 +1165,23 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
+
 main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES) $(EXTRA_main_DEPENDENCIES) 
        @rm -f main$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(main_OBJECTS) $(main_LDADD) $(LIBS)
 main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES) $(EXTRA_main_DEPENDENCIES) 
        @rm -f main$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(main_OBJECTS) $(main_LDADD) $(LIBS)
+
 test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) 
        @rm -f test$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
 test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) 
        @rm -f test$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+
+test-buffer-serialize$(EXEEXT): $(test_buffer_serialize_OBJECTS) $(test_buffer_serialize_DEPENDENCIES) $(EXTRA_test_buffer_serialize_DEPENDENCIES) 
+       @rm -f test-buffer-serialize$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(test_buffer_serialize_OBJECTS) $(test_buffer_serialize_LDADD) $(LIBS)
+
 test-size-params$(EXEEXT): $(test_size_params_OBJECTS) $(test_size_params_DEPENDENCIES) $(EXTRA_test_size_params_DEPENDENCIES) 
        @rm -f test-size-params$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_size_params_OBJECTS) $(test_size_params_LDADD) $(LIBS)
 test-size-params$(EXEEXT): $(test_size_params_OBJECTS) $(test_size_params_DEPENDENCIES) $(EXTRA_test_size_params_DEPENDENCIES) 
        @rm -f test-size-params$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_size_params_OBJECTS) $(test_size_params_LDADD) $(LIBS)
+
 test-would-substitute$(EXEEXT): $(test_would_substitute_OBJECTS) $(test_would_substitute_DEPENDENCIES) $(EXTRA_test_would_substitute_DEPENDENCIES) 
        @rm -f test-would-substitute$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_would_substitute_OBJECTS) $(test_would_substitute_LDADD) $(LIBS)
 test-would-substitute$(EXEEXT): $(test_would_substitute_OBJECTS) $(test_would_substitute_DEPENDENCIES) $(EXTRA_test_would_substitute_DEPENDENCIES) 
        @rm -f test-would-substitute$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_would_substitute_OBJECTS) $(test_would_substitute_LDADD) $(LIBS)
@@ -783,26 +1192,33 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-enums.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-structs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_icu_la-hb-icu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-blob.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-blob.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-buffer-serialize.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-buffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-common.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-coretext.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-buffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-common.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-coretext.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-face.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-font.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ft.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-glib.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-font.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ft.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-glib.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-graphite2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-graphite2.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-icu-le.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-icu.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-old.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-font.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-map.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-map.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-arabic.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-default.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hangul.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hebrew.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic-table.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-myanmar.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-sea.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-tibetan.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-fallback.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape.Plo@am__quote@
@@ -811,13 +1227,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape-plan.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shaper.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape-plan.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shaper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-tt-font.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-unicode.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-uniscribe.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-warning.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-unicode.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-uniscribe.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-warning.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_size_params-test-size-params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_would_substitute-test-would-substitute.Po@am__quote@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_size_params-test-size-params.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_would_substitute-test-would-substitute.Po@am__quote@
 
@@ -842,6 +1258,27 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
+libharfbuzz_gobject_la-hb-gobject-structs.lo: hb-gobject-structs.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_gobject_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_gobject_la-hb-gobject-structs.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-structs.Tpo -c -o libharfbuzz_gobject_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-structs.Tpo $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-structs.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-structs.cc' object='libharfbuzz_gobject_la-hb-gobject-structs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_gobject_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_gobject_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
+
+libharfbuzz_gobject_la-hb-gobject-enums.lo: hb-gobject-enums.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_gobject_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_gobject_la-hb-gobject-enums.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-enums.Tpo -c -o libharfbuzz_gobject_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-enums.Tpo $(DEPDIR)/libharfbuzz_gobject_la-hb-gobject-enums.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-enums.cc' object='libharfbuzz_gobject_la-hb-gobject-enums.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_gobject_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_gobject_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
+
+libharfbuzz_icu_la-hb-icu.lo: hb-icu.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_icu_la-hb-icu.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_icu_la-hb-icu.Tpo -c -o libharfbuzz_icu_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_icu_la-hb-icu.Tpo $(DEPDIR)/libharfbuzz_icu_la-hb-icu.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu.cc' object='libharfbuzz_icu_la-hb-icu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_icu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_icu_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
+
 libharfbuzz_la-hb-blob.lo: hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-blob.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo $(DEPDIR)/libharfbuzz_la-hb-blob.Plo
 libharfbuzz_la-hb-blob.lo: hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-blob.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-blob.Tpo $(DEPDIR)/libharfbuzz_la-hb-blob.Plo
@@ -849,6 +1286,13 @@ libharfbuzz_la-hb-blob.lo: hb-blob.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
 
+libharfbuzz_la-hb-buffer-serialize.lo: hb-buffer-serialize.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-buffer-serialize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-buffer-serialize.Tpo -c -o libharfbuzz_la-hb-buffer-serialize.lo `test -f 'hb-buffer-serialize.cc' || echo '$(srcdir)/'`hb-buffer-serialize.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-buffer-serialize.Tpo $(DEPDIR)/libharfbuzz_la-hb-buffer-serialize.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-buffer-serialize.cc' object='libharfbuzz_la-hb-buffer-serialize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-buffer-serialize.lo `test -f 'hb-buffer-serialize.cc' || echo '$(srcdir)/'`hb-buffer-serialize.cc
+
 libharfbuzz_la-hb-buffer.lo: hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-buffer.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo $(DEPDIR)/libharfbuzz_la-hb-buffer.Plo
 libharfbuzz_la-hb-buffer.lo: hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-buffer.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo $(DEPDIR)/libharfbuzz_la-hb-buffer.Plo
@@ -863,12 +1307,12 @@ libharfbuzz_la-hb-common.lo: hb-common.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
 
-libharfbuzz_la-hb-fallback-shape.lo: hb-fallback-shape.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-fallback-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fallback-shape.cc' object='libharfbuzz_la-hb-fallback-shape.lo' libtool=yes @AMDEPBACKSLASH@
+libharfbuzz_la-hb-face.lo: hb-face.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-face.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-face.Tpo -c -o libharfbuzz_la-hb-face.lo `test -f 'hb-face.cc' || echo '$(srcdir)/'`hb-face.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-face.Tpo $(DEPDIR)/libharfbuzz_la-hb-face.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-face.cc' object='libharfbuzz_la-hb-face.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-face.lo `test -f 'hb-face.cc' || echo '$(srcdir)/'`hb-face.cc
 
 libharfbuzz_la-hb-font.lo: hb-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-font.Tpo -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
 
 libharfbuzz_la-hb-font.lo: hb-font.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-font.Tpo -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
@@ -912,13 +1356,6 @@ libharfbuzz_la-hb-shaper.lo: hb-shaper.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
 
-libharfbuzz_la-hb-tt-font.lo: hb-tt-font.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-tt-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-tt-font.Tpo -c -o libharfbuzz_la-hb-tt-font.lo `test -f 'hb-tt-font.cc' || echo '$(srcdir)/'`hb-tt-font.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-tt-font.Tpo $(DEPDIR)/libharfbuzz_la-hb-tt-font.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-tt-font.cc' object='libharfbuzz_la-hb-tt-font.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-tt-font.lo `test -f 'hb-tt-font.cc' || echo '$(srcdir)/'`hb-tt-font.cc
-
 libharfbuzz_la-hb-unicode.lo: hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-unicode.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo $(DEPDIR)/libharfbuzz_la-hb-unicode.Plo
 libharfbuzz_la-hb-unicode.lo: hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-unicode.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo $(DEPDIR)/libharfbuzz_la-hb-unicode.Plo
@@ -933,6 +1370,13 @@ libharfbuzz_la-hb-warning.lo: hb-warning.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
 
+libharfbuzz_la-hb-ot-font.lo: hb-ot-font.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-font.Tpo -c -o libharfbuzz_la-hb-ot-font.lo `test -f 'hb-ot-font.cc' || echo '$(srcdir)/'`hb-ot-font.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-font.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-font.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-font.cc' object='libharfbuzz_la-hb-ot-font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-font.lo `test -f 'hb-ot-font.cc' || echo '$(srcdir)/'`hb-ot-font.cc
+
 libharfbuzz_la-hb-ot-layout.lo: hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-layout.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo
 libharfbuzz_la-hb-ot-layout.lo: hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-layout.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo
@@ -968,6 +1412,20 @@ libharfbuzz_la-hb-ot-shape-complex-default.lo: hb-ot-shape-complex-default.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
 
+libharfbuzz_la-hb-ot-shape-complex-hangul.lo: hb-ot-shape-complex-hangul.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-hangul.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hangul.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-hangul.lo `test -f 'hb-ot-shape-complex-hangul.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hangul.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hangul.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hangul.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-hangul.cc' object='libharfbuzz_la-hb-ot-shape-complex-hangul.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-hangul.lo `test -f 'hb-ot-shape-complex-hangul.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hangul.cc
+
+libharfbuzz_la-hb-ot-shape-complex-hebrew.lo: hb-ot-shape-complex-hebrew.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-hebrew.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hebrew.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-hebrew.lo `test -f 'hb-ot-shape-complex-hebrew.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hebrew.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hebrew.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-hebrew.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-hebrew.cc' object='libharfbuzz_la-hb-ot-shape-complex-hebrew.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-hebrew.lo `test -f 'hb-ot-shape-complex-hebrew.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hebrew.cc
+
 libharfbuzz_la-hb-ot-shape-complex-indic.lo: hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-indic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo
 libharfbuzz_la-hb-ot-shape-complex-indic.lo: hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-indic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic.Plo
@@ -975,6 +1433,27 @@ libharfbuzz_la-hb-ot-shape-complex-indic.lo: hb-ot-shape-complex-indic.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
 
+libharfbuzz_la-hb-ot-shape-complex-indic-table.lo: hb-ot-shape-complex-indic-table.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-indic-table.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic-table.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-indic-table.lo `test -f 'hb-ot-shape-complex-indic-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic-table.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic-table.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-indic-table.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-indic-table.cc' object='libharfbuzz_la-hb-ot-shape-complex-indic-table.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-indic-table.lo `test -f 'hb-ot-shape-complex-indic-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic-table.cc
+
+libharfbuzz_la-hb-ot-shape-complex-myanmar.lo: hb-ot-shape-complex-myanmar.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-myanmar.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-myanmar.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-myanmar.lo `test -f 'hb-ot-shape-complex-myanmar.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-myanmar.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-myanmar.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-myanmar.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-myanmar.cc' object='libharfbuzz_la-hb-ot-shape-complex-myanmar.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-myanmar.lo `test -f 'hb-ot-shape-complex-myanmar.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-myanmar.cc
+
+libharfbuzz_la-hb-ot-shape-complex-sea.lo: hb-ot-shape-complex-sea.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-sea.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-sea.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-sea.lo `test -f 'hb-ot-shape-complex-sea.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-sea.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-sea.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-sea.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-sea.cc' object='libharfbuzz_la-hb-ot-shape-complex-sea.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-sea.lo `test -f 'hb-ot-shape-complex-sea.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-sea.cc
+
 libharfbuzz_la-hb-ot-shape-complex-thai.lo: hb-ot-shape-complex-thai.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-thai.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo
 libharfbuzz_la-hb-ot-shape-complex-thai.lo: hb-ot-shape-complex-thai.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-thai.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-thai.Plo
@@ -982,6 +1461,13 @@ libharfbuzz_la-hb-ot-shape-complex-thai.lo: hb-ot-shape-complex-thai.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
 
+libharfbuzz_la-hb-ot-shape-complex-tibetan.lo: hb-ot-shape-complex-tibetan.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-complex-tibetan.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-tibetan.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-tibetan.lo `test -f 'hb-ot-shape-complex-tibetan.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-tibetan.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-tibetan.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-tibetan.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-tibetan.cc' object='libharfbuzz_la-hb-ot-shape-complex-tibetan.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-complex-tibetan.lo `test -f 'hb-ot-shape-complex-tibetan.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-tibetan.cc
+
 libharfbuzz_la-hb-ot-shape-normalize.lo: hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-normalize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo -c -o libharfbuzz_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo
 libharfbuzz_la-hb-ot-shape-normalize.lo: hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-shape-normalize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo -c -o libharfbuzz_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-normalize.Plo
@@ -996,6 +1482,13 @@ libharfbuzz_la-hb-ot-shape-fallback.lo: hb-ot-shape-fallback.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
 
+libharfbuzz_la-hb-fallback-shape.lo: hb-fallback-shape.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-fallback-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Tpo $(DEPDIR)/libharfbuzz_la-hb-fallback-shape.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fallback-shape.cc' object='libharfbuzz_la-hb-fallback-shape.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
+
 libharfbuzz_la-hb-glib.lo: hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-glib.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo $(DEPDIR)/libharfbuzz_la-hb-glib.Plo
 libharfbuzz_la-hb-glib.lo: hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-glib.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-glib.Tpo $(DEPDIR)/libharfbuzz_la-hb-glib.Plo
@@ -1003,20 +1496,6 @@ libharfbuzz_la-hb-glib.lo: hb-glib.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
 
-libharfbuzz_la-hb-gobject-structs.lo: hb-gobject-structs.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-gobject-structs.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Tpo -c -o libharfbuzz_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Tpo $(DEPDIR)/libharfbuzz_la-hb-gobject-structs.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-structs.cc' object='libharfbuzz_la-hb-gobject-structs.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-structs.lo `test -f 'hb-gobject-structs.cc' || echo '$(srcdir)/'`hb-gobject-structs.cc
-
-libharfbuzz_la-hb-icu.lo: hb-icu.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-icu.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-icu.Tpo -c -o libharfbuzz_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-icu.Tpo $(DEPDIR)/libharfbuzz_la-hb-icu.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu.cc' object='libharfbuzz_la-hb-icu.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
-
 libharfbuzz_la-hb-ft.lo: hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ft.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo -c -o libharfbuzz_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo $(DEPDIR)/libharfbuzz_la-hb-ft.Plo
 libharfbuzz_la-hb-ft.lo: hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ft.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo -c -o libharfbuzz_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ft.Tpo $(DEPDIR)/libharfbuzz_la-hb-ft.Plo
@@ -1045,20 +1524,6 @@ libharfbuzz_la-hb-coretext.lo: hb-coretext.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
 
-libharfbuzz_la-hb-old.lo: hb-old.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-old.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-old.Tpo -c -o libharfbuzz_la-hb-old.lo `test -f 'hb-old.cc' || echo '$(srcdir)/'`hb-old.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-old.Tpo $(DEPDIR)/libharfbuzz_la-hb-old.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-old.cc' object='libharfbuzz_la-hb-old.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-old.lo `test -f 'hb-old.cc' || echo '$(srcdir)/'`hb-old.cc
-
-libharfbuzz_la-hb-icu-le.lo: hb-icu-le.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-icu-le.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-icu-le.Tpo -c -o libharfbuzz_la-hb-icu-le.lo `test -f 'hb-icu-le.cc' || echo '$(srcdir)/'`hb-icu-le.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-icu-le.Tpo $(DEPDIR)/libharfbuzz_la-hb-icu-le.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu-le.cc' object='libharfbuzz_la-hb-icu-le.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-icu-le.lo `test -f 'hb-icu-le.cc' || echo '$(srcdir)/'`hb-icu-le.cc
-
 libharfbuzz_la-hb-ucdn.lo: hb-ucdn.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ucdn.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo $(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo
 libharfbuzz_la-hb-ucdn.lo: hb-ucdn.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ucdn.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ucdn.Tpo $(DEPDIR)/libharfbuzz_la-hb-ucdn.Plo
@@ -1066,13 +1531,6 @@ libharfbuzz_la-hb-ucdn.lo: hb-ucdn.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
 
-libharfbuzz_la-hb-gobject-enums.lo: hb-gobject-enums.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-gobject-enums.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Tpo $(DEPDIR)/libharfbuzz_la-hb-gobject-enums.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-gobject-enums.cc' object='libharfbuzz_la-hb-gobject-enums.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-gobject-enums.lo `test -f 'hb-gobject-enums.cc' || echo '$(srcdir)/'`hb-gobject-enums.cc
-
 main-main.o: main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.o -MD -MP -MF $(DEPDIR)/main-main.Tpo -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/main-main.Tpo $(DEPDIR)/main-main.Po
 main-main.o: main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.o -MD -MP -MF $(DEPDIR)/main-main.Tpo -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/main-main.Tpo $(DEPDIR)/main-main.Po
@@ -1101,6 +1559,20 @@ test-test.obj: test.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.obj `if test -f 'test.cc'; then $(CYGPATH_W) 'test.cc'; else $(CYGPATH_W) '$(srcdir)/test.cc'; fi`
 
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.obj `if test -f 'test.cc'; then $(CYGPATH_W) 'test.cc'; else $(CYGPATH_W) '$(srcdir)/test.cc'; fi`
 
+test_buffer_serialize-test-buffer-serialize.o: test-buffer-serialize.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_buffer_serialize_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_buffer_serialize-test-buffer-serialize.o -MD -MP -MF $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Tpo -c -o test_buffer_serialize-test-buffer-serialize.o `test -f 'test-buffer-serialize.cc' || echo '$(srcdir)/'`test-buffer-serialize.cc
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Tpo $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-buffer-serialize.cc' object='test_buffer_serialize-test-buffer-serialize.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_buffer_serialize_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_buffer_serialize-test-buffer-serialize.o `test -f 'test-buffer-serialize.cc' || echo '$(srcdir)/'`test-buffer-serialize.cc
+
+test_buffer_serialize-test-buffer-serialize.obj: test-buffer-serialize.cc
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_buffer_serialize_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_buffer_serialize-test-buffer-serialize.obj -MD -MP -MF $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Tpo -c -o test_buffer_serialize-test-buffer-serialize.obj `if test -f 'test-buffer-serialize.cc'; then $(CYGPATH_W) 'test-buffer-serialize.cc'; else $(CYGPATH_W) '$(srcdir)/test-buffer-serialize.cc'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Tpo $(DEPDIR)/test_buffer_serialize-test-buffer-serialize.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='test-buffer-serialize.cc' object='test_buffer_serialize-test-buffer-serialize.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_buffer_serialize_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_buffer_serialize-test-buffer-serialize.obj `if test -f 'test-buffer-serialize.cc'; then $(CYGPATH_W) 'test-buffer-serialize.cc'; else $(CYGPATH_W) '$(srcdir)/test-buffer-serialize.cc'; fi`
+
 test_size_params-test-size-params.o: test-size-params.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_size_params-test-size-params.o -MD -MP -MF $(DEPDIR)/test_size_params-test-size-params.Tpo -c -o test_size_params-test-size-params.o `test -f 'test-size-params.cc' || echo '$(srcdir)/'`test-size-params.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_size_params-test-size-params.Tpo $(DEPDIR)/test_size_params-test-size-params.Po
 test_size_params-test-size-params.o: test-size-params.cc
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_size_params_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_size_params-test-size-params.o -MD -MP -MF $(DEPDIR)/test_size_params-test-size-params.Tpo -c -o test_size_params-test-size-params.o `test -f 'test-size-params.cc' || echo '$(srcdir)/'`test-size-params.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_size_params-test-size-params.Tpo $(DEPDIR)/test_size_params-test-size-params.Po
@@ -1134,10 +1606,76 @@ mostlyclean-libtool:
 
 clean-libtool:
        -rm -rf .libs _libs
 
 clean-libtool:
        -rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+       done
+
+uninstall-girDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+       done
+
+uninstall-pkgconfigDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+install-typelibDATA: $(typelib_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(typelibdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(typelibdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibdir)" || exit $$?; \
+       done
+
+uninstall-typelibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(typelibdir)'; $(am__uninstall_files_from_dir)
 install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
        @$(NORMAL_INSTALL)
 install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
        @$(NORMAL_INSTALL)
-       test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
        @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
        @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -1154,8 +1692,11 @@ uninstall-nodist_pkgincludeHEADERS:
        dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
        @$(NORMAL_INSTALL)
        dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
        @$(NORMAL_INSTALL)
-       test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
        @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
        @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -1172,22 +1713,25 @@ uninstall-pkgincludeHEADERS:
        dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
        dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -1202,57 +1746,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -1268,12 +1767,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -1285,15 +1779,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -1302,102 +1792,229 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-check-TESTS: $(TESTS)
-       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-       srcdir=$(srcdir); export srcdir; \
-       list=' $(TESTS) '; \
-       $(am__tty_colors); \
-       if test -n "$$list"; then \
-         for tst in $$list; do \
-           if test -f ./$$tst; then dir=./; \
-           elif test -f $$tst; then dir=; \
-           else dir="$(srcdir)/"; fi; \
-           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-             all=`expr $$all + 1`; \
-             case " $(XFAIL_TESTS) " in \
-             *[\ \     ]$$tst[\ \      ]*) \
-               xpass=`expr $$xpass + 1`; \
-               failed=`expr $$failed + 1`; \
-               col=$$red; res=XPASS; \
-             ;; \
-             *) \
-               col=$$grn; res=PASS; \
-             ;; \
-             esac; \
-           elif test $$? -ne 77; then \
-             all=`expr $$all + 1`; \
-             case " $(XFAIL_TESTS) " in \
-             *[\ \     ]$$tst[\ \      ]*) \
-               xfail=`expr $$xfail + 1`; \
-               col=$$lgn; res=XFAIL; \
-             ;; \
-             *) \
-               failed=`expr $$failed + 1`; \
-               col=$$red; res=FAIL; \
-             ;; \
-             esac; \
-           else \
-             skip=`expr $$skip + 1`; \
-             col=$$blu; res=SKIP; \
-           fi; \
-           echo "$${col}$$res$${std}: $$tst"; \
-         done; \
-         if test "$$all" -eq 1; then \
-           tests="test"; \
-           All=""; \
-         else \
-           tests="tests"; \
-           All="All "; \
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
          fi; \
          fi; \
-         if test "$$failed" -eq 0; then \
-           if test "$$xfail" -eq 0; then \
-             banner="$$All$$all $$tests passed"; \
-           else \
-             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
-             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
-           fi; \
-         else \
-           if test "$$xpass" -eq 0; then \
-             banner="$$failed of $$all $$tests failed"; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       else \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
            else \
            else \
-             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
-             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
            fi; \
            fi; \
-         fi; \
-         dashes="$$banner"; \
-         skipped=""; \
-         if test "$$skip" -ne 0; then \
-           if test "$$skip" -eq 1; then \
-             skipped="($$skip test was not run)"; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
            else \
            else \
-             skipped="($$skip tests were not run)"; \
+             color_start= color_end=; \
            fi; \
            fi; \
-           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-             dashes="$$skipped"; \
-         fi; \
-         report=""; \
-         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-           report="Please report to $(PACKAGE_BUGREPORT)"; \
-           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-             dashes="$$report"; \
-         fi; \
-         dashes=`echo "$$dashes" | sed s/./=/g`; \
-         if test "$$failed" -eq 0; then \
-           col="$$grn"; \
-         else \
-           col="$$red"; \
-         fi; \
-         echo "$${col}$$dashes$${std}"; \
-         echo "$${col}$$banner$${std}"; \
-         test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
-         test -z "$$report" || echo "$${col}$$report$${std}"; \
-         echo "$${col}$$dashes$${std}"; \
-         test "$$failed" -eq 0; \
-       else :; fi
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-c-linkage-decls.sh.log: check-c-linkage-decls.sh
+       @p='check-c-linkage-decls.sh'; \
+       b='check-c-linkage-decls.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-defs.sh.log: check-defs.sh
+       @p='check-defs.sh'; \
+       b='check-defs.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-header-guards.sh.log: check-header-guards.sh
+       @p='check-header-guards.sh'; \
+       b='check-header-guards.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-includes.sh.log: check-includes.sh
+       @p='check-includes.sh'; \
+       b='check-includes.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-libstdc++.sh.log: check-libstdc++.sh
+       @p='check-libstdc++.sh'; \
+       b='check-libstdc++.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-static-inits.sh.log: check-static-inits.sh
+       @p='check-static-inits.sh'; \
+       b='check-static-inits.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-symbols.sh.log: check-symbols.sh
+       @p='check-symbols.sh'; \
+       b='check-symbols.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1431,13 +2048,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -1462,12 +2076,12 @@ check-am: all-am
        $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) check-recursive
        $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS)
 install-binPROGRAMS: install-libLTLIBRARIES
 
 installdirs: installdirs-recursive
 installdirs-am:
 install-binPROGRAMS: install-libLTLIBRARIES
 
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: $(BUILT_SOURCES)
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: $(BUILT_SOURCES)
@@ -1491,6 +2105,9 @@ install-strip:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
@@ -1528,8 +2145,9 @@ info: info-recursive
 
 info-am:
 
 
 info-am:
 
-install-data-am: install-nodist_pkgincludeHEADERS \
-       install-pkgincludeHEADERS
+install-data-am: install-girDATA install-nodist_pkgincludeHEADERS \
+       install-pkgconfigDATA install-pkgincludeHEADERS \
+       install-typelibDATA
 
 install-dvi: install-dvi-recursive
 
 
 install-dvi: install-dvi-recursive
 
@@ -1575,38 +2193,53 @@ ps: ps-recursive
 
 ps-am:
 
 
 ps-am:
 
-uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
-       uninstall-nodist_pkgincludeHEADERS uninstall-pkgincludeHEADERS
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-       check-am ctags-recursive install install-am install-strip \
-       tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am check check-TESTS check-am clean clean-binPROGRAMS \
-       clean-generic clean-libLTLIBRARIES clean-libtool \
-       clean-noinstPROGRAMS ctags ctags-recursive distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-binPROGRAMS install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-libLTLIBRARIES install-man \
+uninstall-am: uninstall-binPROGRAMS uninstall-girDATA \
+       uninstall-libLTLIBRARIES uninstall-nodist_pkgincludeHEADERS \
+       uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS \
+       uninstall-typelibDATA
+
+.MAKE: $(am__recursive_targets) all check check-am install install-am \
+       install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-TESTS check-am clean clean-binPROGRAMS clean-generic \
+       clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
+       cscopelist-am ctags ctags-am distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-girDATA \
+       install-html install-html-am install-info install-info-am \
+       install-libLTLIBRARIES install-man \
        install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
        install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
-       install-pkgincludeHEADERS install-ps install-ps-am \
-       install-strip installcheck installcheck-am \
-       installcheck-binPROGRAMS installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-       uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
-       uninstall-nodist_pkgincludeHEADERS uninstall-pkgincludeHEADERS
-
-
-@HAVE_GOBJECT_TRUE@hb-gobject-enums.cc: hb-gobject-enums.cc.tmpl $(HBHEADERS)
-@HAVE_GOBJECT_TRUE@    $(AM_V_GEN) $(GLIB_MKENUMS) --template $^ > "$@.tmp" && \
+       install-pkgconfigDATA install-pkgincludeHEADERS install-ps \
+       install-ps-am install-strip install-typelibDATA installcheck \
+       installcheck-am installcheck-binPROGRAMS installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+       uninstall uninstall-am uninstall-binPROGRAMS uninstall-girDATA \
+       uninstall-libLTLIBRARIES uninstall-nodist_pkgincludeHEADERS \
+       uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS \
+       uninstall-typelibDATA
+
+@HAVE_GOBJECT_TRUE@hb-gobject-enums.%: hb-gobject-enums.%.tmpl $(HBHEADERS)
+@HAVE_GOBJECT_TRUE@    $(AM_V_GEN) $(GLIB_MKENUMS) \
+@HAVE_GOBJECT_TRUE@            --identifier-prefix hb_ --symbol-prefix hb_gobject \
+@HAVE_GOBJECT_TRUE@            --template $^ | \
+@HAVE_GOBJECT_TRUE@    sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@.tmp" && \
 @HAVE_GOBJECT_TRUE@    mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
 @HAVE_GOBJECT_TRUE@    mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
-harfbuzz.def: $(HBHEADERS)
+
+%.pc: %.pc.in $(top_builddir)/config.status
+       $(AM_V_GEN) \
+       $(SED)  -e 's@%prefix%@$(prefix)@g' \
+               -e 's@%exec_prefix%@$(exec_prefix)@g' \
+               -e 's@%libdir%@$(libdir)@g' \
+               -e 's@%includedir%@$(includedir)@g' \
+               -e 's@%VERSION%@$(VERSION)@g' \
+       "$<" \
+       > "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "$@.tmp"; false )
+harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
        $(AM_V_GEN) (echo EXPORTS; \
        (cat $^ || echo 'hb_ERROR ()' ) | \
        $(EGREP) '^hb_.* \(' | \
        $(AM_V_GEN) (echo EXPORTS; \
        (cat $^ || echo 'hb_ERROR ()' ) | \
        $(EGREP) '^hb_.* \(' | \
@@ -1619,41 +2252,25 @@ harfbuzz.def: $(HBHEADERS)
 unicode-tables: arabic-table indic-table
 
 indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
 unicode-tables: arabic-table indic-table
 
 indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.hh.tmp && \
-       mv hb-ot-shape-complex-indic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-indic-table.hh || \
-       ($(RM) hb-ot-shape-complex-indic-table.hh.tmp; false)
+       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc.tmp && \
+       mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \
+       ($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false)
 
 
-arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
+arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \
        mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
        ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
 
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \
        mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
        ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
 
-.PHONY: unicode-tables arabic-table indic-table
-$(srcdir)/hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl
-       $(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \
+built-sources: $(BUILT_SOURCES)
+
+.PHONY: unicode-tables arabic-table indic-table built-sources
+.rl.hh:
+       $(AM_V_GEN)$(RAGEL) -e -F1 -o "$@.tmp" "$<" && \
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
        mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
 
-#-include $(INTROSPECTION_MAKEFILE)
-#INTROSPECTION_GIRS = hb-1.0.gir
-#INTROSPECTION_SCANNER_ARGS = -I$(srcdir) -n hb --identifier-prefix=hb_
-#INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
-#
-#if HAVE_INTROSPECTION
-#
-#hb-1.0.gir: libharfbuzz.la
-#hb_1_0_gir_INCLUDES = GObject-2.0
-#hb_1_0_gir_CFLAGS = $(INCLUDES) $(HBCFLAGS) -DHB_H -DHB_H_IN -DHB_OT_H -DHB_OT_H_IN
-#hb_1_0_gir_LIBS = libharfbuzz.la
-#hb_1_0_gir_FILES = $(HBHEADERS)
-#
-#girdir = $(datadir)/gir-1.0
-#gir_DATA = $(INTROSPECTION_GIRS)
-#
-#typelibdir = $(libdir)/girepository-1.0
-#typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
-#
-#CLEANFILES += $(gir_DATA) $(typelib_DATA)
-#endif
+@HAVE_INTROSPECTION_TRUE@-include $(INTROSPECTION_MAKEFILE)
+
+@HAVE_INTROSPECTION_TRUE@HarfBuzz-0.0.gir: libharfbuzz.la libharfbuzz-gobject.la
 
 -include $(top_srcdir)/git.mk
 
 
 -include $(top_srcdir)/git.mk
 
index 44cdfa0..b10310f 100755 (executable)
@@ -6,8 +6,8 @@ export LC_ALL
 test -z "$srcdir" && srcdir=.
 stat=0
 
 test -z "$srcdir" && srcdir=.
 stat=0
 
-test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
-test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'`
 
 
 for x in $HBHEADERS; do
 
 
 for x in $HBHEADERS; do
similarity index 59%
rename from src/check-exported-symbols.sh
rename to src/check-defs.sh
index 6f0bf7f..357347f 100755 (executable)
@@ -10,7 +10,7 @@ stat=0
 if which nm 2>/dev/null >/dev/null; then
        :
 else
 if which nm 2>/dev/null >/dev/null; then
        :
 else
-       echo "check-exported-symbols.sh: 'nm' not found; skipping test"
+       echo "check-defs.sh: 'nm' not found; skipping test"
        exit 77
 fi
 
        exit 77
 fi
 
@@ -20,20 +20,24 @@ tested=false
 for def in $defs; do
        lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
        so=.libs/lib${lib}.so
 for def in $defs; do
        lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
        so=.libs/lib${lib}.so
+
+       EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+
        if test -f "$so"; then
        if test -f "$so"; then
+
                echo "Checking that $so has the same symbol list as $def"
                {
                        echo EXPORTS
                echo "Checking that $so has the same symbol list as $def"
                {
                        echo EXPORTS
-                       nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3
-                       stat=1
+                       echo "$EXPORTED_SYMBOLS"
                        # cheat: copy the last line from the def file!
                        tail -n1 "$def"
                } | diff "$def" - >&2 || stat=1
                        # cheat: copy the last line from the def file!
                        tail -n1 "$def"
                } | diff "$def" - >&2 || stat=1
+
                tested=true
        fi
 done
 if ! $tested; then
                tested=true
        fi
 done
 if ! $tested; then
-       echo "check-exported-symbols.sh: libharfbuzz shared library not found; skipping test"
+       echo "check-defs.sh: libharfbuzz shared library not found; skipping test"
        exit 77
 fi
 
        exit 77
 fi
 
index af9fa7f..9a3302c 100755 (executable)
@@ -6,8 +6,8 @@ export LC_ALL
 test -z "$srcdir" && srcdir=.
 stat=0
 
 test -z "$srcdir" && srcdir=.
 stat=0
 
-test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
-test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
+test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
 
 
 for x in $HBHEADERS $HBSOURCES; do
 
 
 for x in $HBHEADERS $HBSOURCES; do
index 79323a7..902f235 100755 (executable)
@@ -6,16 +6,14 @@ export LC_ALL
 test -z "$srcdir" && srcdir=.
 stat=0
 
 test -z "$srcdir" && srcdir=.
 stat=0
 
-test "x$HBHEADERS" = x && HBHEADERS=`find . -maxdepth 1 -name 'hb*.h'`
-test "x$HBSOURCES" = x && HBSOURCES=`find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
-
-
-cd "$srcdir"
+test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'`
+test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'`
 
 
 echo 'Checking that public header files #include "hb-common.h" or "hb.h" first (or none)'
 
 for x in $HBHEADERS; do
 
 
 echo 'Checking that public header files #include "hb-common.h" or "hb.h" first (or none)'
 
 for x in $HBHEADERS; do
+       test -f "$srcdir/$x" && x="$srcdir/$x"
        grep '#.*\<include\>' "$x" /dev/null | head -n 1
 done |
 grep -v '"hb-common[.]h"' |
        grep '#.*\<include\>' "$x" /dev/null | head -n 1
 done |
 grep -v '"hb-common[.]h"' |
@@ -28,7 +26,8 @@ grep . >&2 && stat=1
 echo 'Checking that source files #include "hb-*private.hh" first (or none)'
 
 for x in $HBSOURCES; do
 echo 'Checking that source files #include "hb-*private.hh" first (or none)'
 
 for x in $HBSOURCES; do
-       grep '#.*\<include\>' "$x" /dev/null | head -n 1
+       test -f "$srcdir/$x" && x="$srcdir/$x"
+       grep '#.*\<include\>' "$x" /dev/null | grep -v 'include _' | head -n 1
 done |
 grep -v '"hb-.*private[.]hh"' |
 grep -v 'hb-private[.]hh:' |
 done |
 grep -v '"hb-.*private[.]hh"' |
 grep -v 'hb-private[.]hh:' |
@@ -36,7 +35,10 @@ grep . >&2 && stat=1
 
 
 echo 'Checking that there is no #include <hb.*.h>'
 
 
 echo 'Checking that there is no #include <hb.*.h>'
-grep '#.*\<include\>.*<.*hb' $HBHEADERS $HBSOURCES >&2 && stat=1
+for x in $HBHEADERS $HBSOURCES; do
+       test -f "$srcdir/$x" && x="$srcdir/$x"
+       grep '#.*\<include\>.*<.*hb' "$x" /dev/null >&2 && stat=1
+done
 
 
 exit $stat
 
 
 exit $stat
diff --git a/src/check-internal-symbols.sh b/src/check-internal-symbols.sh
deleted file mode 100755 (executable)
index a8fdc53..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-
-LC_ALL=C
-export LC_ALL
-
-test -z "$srcdir" && srcdir=.
-stat=0
-
-
-if which nm 2>/dev/null >/dev/null; then
-       :
-else
-       echo "check-internal-symbols.sh: 'nm' not found; skipping test"
-       exit 77
-fi
-
-tested=false
-for suffix in .so; do
-       so=`echo .libs/libharfbuzz$suffix`
-       if test -f "$so"; then
-               echo "Checking that we are not exposing internal symbols"
-               if nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' T _fini\>\| T _init\>\| T hb_\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>'; then
-                       echo "Ouch, internal symbols exposed"
-                       stat=1
-               fi
-               tested=true
-       fi
-done
-if ! $tested; then
-       echo "check-internal-symbols.sh: libharfbuzz shared library not found; skipping test"
-       exit 77
-fi
-
-exit $stat
index bb0a7ff..83d02c8 100755 (executable)
@@ -30,7 +30,7 @@ done
 
 echo "Checking that no object file has lazy static C++ constructors/destructors or other such stuff"
 for obj in $OBJS; do
 
 echo "Checking that no object file has lazy static C++ constructors/destructors or other such stuff"
 for obj in $OBJS; do
-       if objdump -t "$obj" | grep '__c'; then
+       if objdump -t "$obj" | grep '__cxa_'; then
                echo "Ouch, $obj has lazy static C++ constructors/destructors or other such stuff"
                stat=1
        fi
                echo "Ouch, $obj has lazy static C++ constructors/destructors or other such stuff"
                stat=1
        fi
diff --git a/src/check-symbols.sh b/src/check-symbols.sh
new file mode 100755 (executable)
index 0000000..e000b01
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+test -z "$srcdir" && srcdir=.
+stat=0
+
+
+if which nm 2>/dev/null >/dev/null; then
+       :
+else
+       echo "check-symbols.sh: 'nm' not found; skipping test"
+       exit 77
+fi
+
+echo "Checking that we are not exposing internal symbols"
+tested=false
+for so in `ls .libs/lib*.so .libs/lib*.dylib 2>/dev/null` ; do
+       
+       EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+       prefix=`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'`
+
+       echo "Processing $so"
+       if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}_"; then
+               echo "Ouch, internal symbols exposed"
+               stat=1
+       fi
+
+       tested=true
+done
+if ! $tested; then
+       echo "check-symbols.sh: no shared library found; skipping test"
+       exit 77
+fi
+
+exit $stat
index da5a4fc..308435f 100755 (executable)
@@ -3,34 +3,48 @@
 import sys
 import os.path
 
 import sys
 import os.path
 
-if len (sys.argv) != 3:
-       print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt"
+if len (sys.argv) != 4:
+       print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt"
        sys.exit (1)
 
 files = [file (x) for x in sys.argv[1:]]
 
        sys.exit (1)
 
 files = [file (x) for x in sys.argv[1:]]
 
-headers = [[files[0].readline (), files[0].readline ()]]
+headers = [[files[0].readline (), files[0].readline ()], [files[2].readline (), files[2].readline ()]]
 headers.append (["UnicodeData.txt does not have a header."])
 while files[0].readline ().find ('##################') < 0:
        pass
 
 headers.append (["UnicodeData.txt does not have a header."])
 while files[0].readline ().find ('##################') < 0:
        pass
 
+blocks = {}
+def read_blocks(f):
+       global blocks
+       for line in f:
 
 
-def print_joining_table(f):
+               j = line.find ('#')
+               if j >= 0:
+                       line = line[:j]
 
 
-       print
-       print "static const uint8_t joining_table[] ="
-       print "{"
+               fields = [x.strip () for x in line.split (';')]
+               if len (fields) == 1:
+                       continue
+
+               uu = fields[0].split ('..')
+               start = int (uu[0], 16)
+               if len (uu) == 1:
+                       end = start
+               else:
+                       end = int (uu[1], 16)
+
+               t = fields[1]
+
+               for u in range (start, end + 1):
+                       blocks[u] = t
+
+def print_joining_table(f):
 
 
-       min_u = 0x110000
-       max_u = 0
-       num = 0
-       last = -1
-       block = ''
+       values = {}
        for line in f:
 
                if line[0] == '#':
        for line in f:
 
                if line[0] == '#':
-                       if line.find (" characters"):
-                               block = line[2:].strip ()
                        continue
 
                fields = [x.strip () for x in line.split (';')]
                        continue
 
                fields = [x.strip () for x in line.split (';')]
@@ -38,43 +52,100 @@ def print_joining_table(f):
                        continue
 
                u = int (fields[0], 16)
                        continue
 
                u = int (fields[0], 16)
-               if u == 0x200C or u == 0x200D:
-                       continue
-               if u < last:
-                       raise Exception ("Input data character not sorted", u)
-               min_u = min (min_u, u)
-               max_u = max (max_u, u)
-               num += 1
-
-               if block:
-                       print "\n  /* %s */\n" % block
-                       block = ''
-
-               if last != -1:
-                       last += 1
-                       while last < u:
-                               print "  JOINING_TYPE_X, /* %04X */" % last
-                               last += 1
-               else:
-                       last = u
 
                if fields[3] in ["ALAPH", "DALATH RISH"]:
                        value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
                else:
                        value = "JOINING_TYPE_" + fields[2]
 
                if fields[3] in ["ALAPH", "DALATH RISH"]:
                        value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
                else:
                        value = "JOINING_TYPE_" + fields[2]
-               print "  %s, /* %s */" % (value, '; '.join(fields))
+               values[u] = value
+
+       short_value = {}
+       for value in set([v for v in values.values()] + ['JOINING_TYPE_X']):
+               short = ''.join(x[0] for x in value.split('_')[2:])
+               assert short not in short_value.values()
+               short_value[value] = short
 
        print
 
        print
-       print "};"
+       for value,short in short_value.items():
+               print "#define %s       %s" % (short, value)
+
+       uu = sorted(values.keys())
+       num = len(values)
+       all_blocks = set([blocks[u] for u in uu])
+
+       last = -100000
+       ranges = []
+       for u in uu:
+               if u - last <= 1+16*5:
+                       ranges[-1][-1] = u
+               else:
+                       ranges.append([u,u])
+               last = u
+
        print
        print
-       print "#define JOINING_TABLE_FIRST      0x%04X" % min_u
-       print "#define JOINING_TABLE_LAST       0x%04X" % max_u
+       print "static const uint8_t joining_table[] ="
+       print "{"
+       last_block = None
+       offset = 0
+       for start,end in ranges:
+
+               print
+               print "#define joining_offset_0x%04xu %d" % (start, offset)
+
+               for u in range(start, end+1):
+
+                       block = blocks.get(u, last_block)
+                       value = values.get(u, "JOINING_TYPE_X")
+
+                       if block != last_block or u == start:
+                               if u != start:
+                                       print
+                               if block in all_blocks:
+                                       print "\n  /* %s */" % block
+                               else:
+                                       print "\n  /* FILLER */"
+                               last_block = block
+                               if u % 32 != 0:
+                                       print
+                                       print "  /* %04X */" % (u//32*32), "  " * (u % 32),
+
+                       if u % 32 == 0:
+                               print
+                               print "  /* %04X */ " % u,
+                       sys.stdout.write("%s," % short_value[value])
+               print
+
+               offset += end - start + 1
+       print
+       occupancy = num * 100. / offset
+       print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
        print
 
        print
 
-       occupancy = num * 100 / (max_u - min_u + 1)
-       # Maintain at least 40% occupancy in the table */
-       if occupancy < 40:
-               raise Exception ("Table too sparse, please investigate: ", occupancy)
+       page_bits = 12;
+       print
+       print "static unsigned int"
+       print "joining_type (hb_codepoint_t u)"
+       print "{"
+       print "  switch (u >> %d)" % page_bits
+       print "  {"
+       pages = set([u>>page_bits for u in [s for s,e in ranges]+[e for s,e in ranges]])
+       for p in sorted(pages):
+               print "    case 0x%0Xu:" % p
+               for (start,end) in ranges:
+                       if p not in [start>>page_bits, end>>page_bits]: continue
+                       offset = "joining_offset_0x%04xu" % start
+                       print "      if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return joining_table[u - 0x%04Xu + %s];" % (start, end, start, offset)
+               print "      break;"
+               print ""
+       print "    default:"
+       print "      break;"
+       print "  }"
+       print "  return X;"
+       print "}"
+       print
+       for value,short in short_value.items():
+               print "#undef %s" % (short)
+       print
 
 def print_shaping_table(f):
 
 
 def print_shaping_table(f):
 
@@ -124,13 +195,13 @@ def print_shaping_table(f):
        for u in range (min_u, max_u + 1):
                s = [shapes[u][shape] if u in shapes and shape in shapes[u] else 0
                     for shape in  ['initial', 'medial', 'final', 'isolated']]
        for u in range (min_u, max_u + 1):
                s = [shapes[u][shape] if u in shapes and shape in shapes[u] else 0
                     for shape in  ['initial', 'medial', 'final', 'isolated']]
-               value = ', '.join ("0x%04X" % c for c in s)
+               value = ', '.join ("0x%04Xu" % c for c in s)
                print "  {%s}, /* U+%04X %s */" % (value, u, names[u] if u in names else "")
 
        print "};"
        print
                print "  {%s}, /* U+%04X %s */" % (value, u, names[u] if u in names else "")
 
        print "};"
        print
-       print "#define SHAPING_TABLE_FIRST      0x%04X" % min_u
-       print "#define SHAPING_TABLE_LAST       0x%04X" % max_u
+       print "#define SHAPING_TABLE_FIRST      0x%04Xu" % min_u
+       print "#define SHAPING_TABLE_LAST       0x%04Xu" % max_u
        print
 
        ligas = {}
        print
 
        ligas = {}
@@ -160,9 +231,9 @@ def print_shaping_table(f):
        keys.sort ()
        for first in keys:
 
        keys.sort ()
        for first in keys:
 
-               print "  { 0x%04X, {" % (first)
+               print "  { 0x%04Xu, {" % (first)
                for liga in ligas[first]:
                for liga in ligas[first]:
-                       print "    { 0x%04X, 0x%04X }, /* %s */" % (liga[0], liga[1], names[liga[1]])
+                       print "    { 0x%04Xu, 0x%04Xu }, /* %s */" % (liga[0], liga[1], names[liga[1]])
                print "  }},"
 
        print "};"
                print "  }},"
 
        print "};"
@@ -174,7 +245,7 @@ print "/* == Start of generated table == */"
 print "/*"
 print " * The following table is generated by running:"
 print " *"
 print "/*"
 print " * The following table is generated by running:"
 print " *"
-print " *   ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt"
+print " *   ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt"
 print " *"
 print " * on files with these headers:"
 print " *"
 print " *"
 print " * on files with these headers:"
 print " *"
@@ -187,6 +258,7 @@ print "#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
 print "#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
 print
 
 print "#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
 print
 
+read_blocks (files[2])
 print_joining_table (files[0])
 print_shaping_table (files[1])
 
 print_joining_table (files[0])
 print_shaping_table (files[1])
 
index 94aa2ab..4fb76f4 100755 (executable)
@@ -6,11 +6,12 @@ if len (sys.argv) != 4:
        print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
        sys.exit (1)
 
        print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
        sys.exit (1)
 
+BLACKLISTED_BLOCKS = ["Thai", "Lao", "Tibetan"]
+
 files = [file (x) for x in sys.argv[1:]]
 
 headers = [[f.readline () for i in range (2)] for f in files]
 
 files = [file (x) for x in sys.argv[1:]]
 
 headers = [[f.readline () for i in range (2)] for f in files]
 
-blocks = {}
 data = [{} for f in files]
 values = [{} for f in files]
 for i, f in enumerate (files):
 data = [{} for f in files]
 values = [{} for f in files]
 for i, f in enumerate (files):
@@ -35,10 +36,7 @@ for i, f in enumerate (files):
 
                for u in range (start, end + 1):
                        data[i][u] = t
 
                for u in range (start, end + 1):
                        data[i][u] = t
-               values[i][t] = values[i].get (t, 0) + 1
-
-               if i == 2:
-                       blocks[t] = (start, end)
+               values[i][t] = values[i].get (t, 0) + end - start + 1
 
 # Merge data into one dict:
 defaults = ('Other', 'Not_Applicable', 'No_Block')
 
 # Merge data into one dict:
 defaults = ('Other', 'Not_Applicable', 'No_Block')
@@ -52,10 +50,15 @@ for i,d in enumerate (data):
                if not u in combined:
                        combined[u] = list (defaults)
                combined[u][i] = v
                if not u in combined:
                        combined[u] = list (defaults)
                combined[u][i] = v
+combined = {k:v for k,v in combined.items() if v[2] not in BLACKLISTED_BLOCKS}
 data = combined
 del combined
 num = len (data)
 
 data = combined
 del combined
 num = len (data)
 
+for u in [0x17CD, 0x17CE, 0x17CF, 0x17D0, 0x17D3]:
+       if data[u][0] == 'Other':
+               data[u][0] = "Vowel_Dependent"
+
 # Move the outliers NO-BREAK SPACE and DOTTED CIRCLE out
 singles = {}
 for u in [0x00A0, 0x25CC]:
 # Move the outliers NO-BREAK SPACE and DOTTED CIRCLE out
 singles = {}
 for u in [0x00A0, 0x25CC]:
@@ -75,13 +78,16 @@ for h in headers:
                print " * %s" % (l.strip())
 print " */"
 print
                print " * %s" % (l.strip())
 print " */"
 print
-print "#ifndef HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH"
-print "#define HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH"
+print '#include "hb-ot-shape-complex-indic-private.hh"'
 print
 
 # Shorten values
 short = [{
        "Bindu":                'Bi',
 print
 
 # Shorten values
 short = [{
        "Bindu":                'Bi',
+       "Cantillation_Mark":    'Ca',
+       "Joiner":               'ZWJ',
+       "Non_Joiner":           'ZWNJ',
+       "Number":               'Nd',
        "Visarga":              'Vs',
        "Vowel":                'Vo',
        "Vowel_Dependent":      'M',
        "Visarga":              'Vs',
        "Vowel":                'Vo',
        "Vowel_Dependent":      'M',
@@ -89,14 +95,14 @@ short = [{
 },{
        "Not_Applicable":       'x',
 }]
 },{
        "Not_Applicable":       'x',
 }]
-all_shorts = [[],[]]
+all_shorts = [{},{}]
 
 # Add some of the values, to make them more readable, and to avoid duplicates
 
 
 for i in range (2):
        for v,s in short[i].items ():
 
 # Add some of the values, to make them more readable, and to avoid duplicates
 
 
 for i in range (2):
        for v,s in short[i].items ():
-               all_shorts[i].append (s)
+               all_shorts[i][s] = v
 
 what = ["INDIC_SYLLABIC_CATEGORY", "INDIC_MATRA_CATEGORY"]
 what_short = ["ISC", "IMC"]
 
 what = ["INDIC_SYLLABIC_CATEGORY", "INDIC_MATRA_CATEGORY"]
 what_short = ["ISC", "IMC"]
@@ -111,8 +117,8 @@ for i in range (2):
                else:
                        s = ''.join ([c for c in v_no_and if ord ('A') <= ord (c) <= ord ('Z')])
                        if s in all_shorts[i]:
                else:
                        s = ''.join ([c for c in v_no_and if ord ('A') <= ord (c) <= ord ('Z')])
                        if s in all_shorts[i]:
-                               raise Exception ("Duplicate short value alias", v, s)
-                       all_shorts[i].append (s)
+                               raise Exception ("Duplicate short value alias", v, all_shorts[i][s])
+                       all_shorts[i][s] = v
                        short[i][v] = s
                print "#define %s_%s    %s_%s   %s/* %3d chars; %s */" % \
                        (what_short[i], s, what[i], v.upper (), \
                        short[i][v] = s
                print "#define %s_%s    %s_%s   %s/* %3d chars; %s */" % \
                        (what_short[i], s, what[i], v.upper (), \
@@ -125,11 +131,16 @@ print
 
 total = 0
 used = 0
 
 total = 0
 used = 0
+last_block = None
 def print_block (block, start, end, data):
 def print_block (block, start, end, data):
-       print
-       print
-       print "  /* %s  (%04X..%04X) */" % (block, start, end)
+       global total, used, last_block
+       if block and block != last_block:
+               print
+               print
+               print "  /* %s */" % block
        num = 0
        num = 0
+       assert start % 8 == 0
+       assert (end+1) % 8 == 0
        for u in range (start, end+1):
                if u % 8 == 0:
                        print
        for u in range (start, end+1):
                if u % 8 == 0:
                        print
@@ -139,14 +150,15 @@ def print_block (block, start, end, data):
                d = data.get (u, defaults)
                sys.stdout.write ("%9s" % ("_(%s,%s)," % (short[0][d[0]], short[1][d[1]])))
 
                d = data.get (u, defaults)
                sys.stdout.write ("%9s" % ("_(%s,%s)," % (short[0][d[0]], short[1][d[1]])))
 
-       global total, used
        total += end - start + 1
        used += num
        total += end - start + 1
        used += num
+       if block:
+               last_block = block
 
 uu = data.keys ()
 uu.sort ()
 
 
 uu = data.keys ()
 uu.sort ()
 
-last = -1
+last = -100000
 num = 0
 offset = 0
 starts = []
 num = 0
 offset = 0
 starts = []
@@ -156,11 +168,16 @@ for u in uu:
        if u <= last:
                continue
        block = data[u][2]
        if u <= last:
                continue
        block = data[u][2]
-       (start, end) = blocks[block]
+
+       start = u//8*8
+       end = start+1
+       while end in uu and block == data[end][2]:
+               end += 1
+       end = (end-1)//8*8 + 7
 
        if start != last + 1:
 
        if start != last + 1:
-               if start - last <= 33:
-                       print_block ("FILLER", last+1, start-1, data)
+               if start - last <= 1+16*3:
+                       print_block (None, last+1, start-1, data)
                        last = start-1
                else:
                        if last >= 0:
                        last = start-1
                else:
                        if last >= 0:
@@ -168,7 +185,7 @@ for u in uu:
                                offset += ends[-1] - starts[-1]
                        print
                        print
                                offset += ends[-1] - starts[-1]
                        print
                        print
-                       print "#define indic_offset_0x%04x %d" % (start, offset)
+                       print "#define indic_offset_0x%04xu %d" % (start, offset)
                        starts.append (start)
 
        print_block (block, start, end, data)
                        starts.append (start)
 
        print_block (block, start, end, data)
@@ -177,19 +194,30 @@ ends.append (last + 1)
 offset += ends[-1] - starts[-1]
 print
 print
 offset += ends[-1] - starts[-1]
 print
 print
-print "#define indic_offset_total %d" % offset
-print
 occupancy = used * 100. / total
 occupancy = used * 100. / total
-print "}; /* Table occupancy: %d%% */" % occupancy
+page_bits = 12
+print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
 print
 print
-print "static INDIC_TABLE_ELEMENT_TYPE"
-print "get_indic_categories (hb_codepoint_t u)"
+print "INDIC_TABLE_ELEMENT_TYPE"
+print "hb_indic_get_categories (hb_codepoint_t u)"
 print "{"
 print "{"
-for (start,end) in zip (starts, ends):
-       offset = "indic_offset_0x%04x" % start
-       print "  if (0x%04X <= u && u <= 0x%04X) return indic_table[u - 0x%04X + %s];" % (start, end, start, offset)
-for u,d in singles.items ():
-       print "  if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+print "  switch (u >> %d)" % page_bits
+print "  {"
+pages = set([u>>page_bits for u in starts+ends+singles.keys()])
+for p in sorted(pages):
+       print "    case 0x%0Xu:" % p
+       for (start,end) in zip (starts, ends):
+               if p not in [start>>page_bits, end>>page_bits]: continue
+               offset = "indic_offset_0x%04xu" % start
+               print "      if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return indic_table[u - 0x%04Xu + %s];" % (start, end, start, offset)
+       for u,d in singles.items ():
+               if p != u>>page_bits: continue
+               print "      if (unlikely (u == 0x%04Xu)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+       print "      break;"
+       print ""
+print "    default:"
+print "      break;"
+print "  }"
 print "  return _(x,x);"
 print "}"
 print
 print "  return _(x,x);"
 print "}"
 print
@@ -202,8 +230,6 @@ for i in range (2):
                print "#undef %s_%s" % \
                        (what_short[i], short[i][v])
 print
                print "#undef %s_%s" % \
                        (what_short[i], short[i][v])
 print
-print "#endif /* HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH */"
-print
 print "/* == End of generated table == */"
 
 # Maintain at least 30% occupancy in the table */
 print "/* == End of generated table == */"
 
 # Maintain at least 30% occupancy in the table */
diff --git a/src/harfbuzz-gobject.pc.in b/src/harfbuzz-gobject.pc.in
new file mode 100644 (file)
index 0000000..7008360
--- /dev/null
@@ -0,0 +1,12 @@
+prefix=%prefix%
+exec_prefix=%exec_prefix%
+libdir=%libdir%
+includedir=%includedir%
+
+Name: harfbuzz
+Description: HarfBuzz text shaping library GObject integration
+Version: %VERSION%
+
+Requires: harfbuzz gobject-2.0 glib-2.0
+Libs: -L${libdir} -lharfbuzz-gobject
+Cflags: -I${includedir}/harfbuzz
diff --git a/src/harfbuzz-icu.pc.in b/src/harfbuzz-icu.pc.in
new file mode 100644 (file)
index 0000000..949869a
--- /dev/null
@@ -0,0 +1,13 @@
+prefix=%prefix%
+exec_prefix=%exec_prefix%
+libdir=%libdir%
+includedir=%includedir%
+
+Name: harfbuzz
+Description: HarfBuzz text shaping library ICU integration
+Version: %VERSION%
+
+Requires: harfbuzz
+Requires.private: icu-uc
+Libs: -L${libdir} -lharfbuzz-icu
+Cflags: -I${includedir}/harfbuzz
diff --git a/src/harfbuzz.pc.in b/src/harfbuzz.pc.in
new file mode 100644 (file)
index 0000000..7f27bbb
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=%prefix%
+exec_prefix=%exec_prefix%
+libdir=%libdir%
+includedir=%includedir%
+
+Name: harfbuzz
+Description: HarfBuzz text shaping library
+Version: %VERSION%
+
+Libs: -L${libdir} -lharfbuzz
+Cflags: -I${includedir}/harfbuzz
index b909bc8..e6738b7 100644 (file)
 #if 0
 
 
 #if 0
 
 
-#elif !defined(HB_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
+#elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
 
 
-#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
 #include <windows.h>
 
-/* mingw32 does not have MemoryBarrier.
- * MemoryBarrier may be defined as a macro or a function.
- * Just make a failsafe version for ourselves. */
-#ifdef MemoryBarrier
-#define HBMemoryBarrier MemoryBarrier
-#else
-static inline void HBMemoryBarrier (void) {
+/* MinGW has a convoluted history of supporting MemoryBarrier
+ * properly.  As such, define a function to wrap the whole
+ * thing. */
+static inline void _HBMemoryBarrier (void) {
+#if !defined(MemoryBarrier)
   long dummy = 0;
   InterlockedExchange (&dummy, 1);
   long dummy = 0;
   InterlockedExchange (&dummy, 1);
-}
+#else
+  MemoryBarrier ();
 #endif
 #endif
+}
 
 typedef LONG hb_atomic_int_t;
 #define hb_atomic_int_add(AI, V)       InterlockedExchangeAdd (&(AI), (V))
 
 
 typedef LONG hb_atomic_int_t;
 #define hb_atomic_int_add(AI, V)       InterlockedExchangeAdd (&(AI), (V))
 
-#define hb_atomic_ptr_get(P)           (HBMemoryBarrier (), (void *) *(P))
+#define hb_atomic_ptr_get(P)           (_HBMemoryBarrier (), (void *) *(P))
 #define hb_atomic_ptr_cmpexch(P,O,N)   (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
 
 
 #define hb_atomic_ptr_cmpexch(P,O,N)   (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
 
 
@@ -82,7 +81,7 @@ typedef int32_t hb_atomic_int_t;
 #if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
 #define hb_atomic_ptr_cmpexch(P,O,N)   OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
 #else
 #if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
 #define hb_atomic_ptr_cmpexch(P,O,N)   OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
 #else
-#if __ppc64__ || __x86_64__
+#if __ppc64__ || __x86_64__ || __aarch64__
 #define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
 #else
 #define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
 #define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
 #else
 #define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
index 3ca50fb..b82b4b2 100644 (file)
  */
 
 /* http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html */
  */
 
 /* http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html */
+#ifndef _POSIX_C_SOURCE
 #define _POSIX_C_SOURCE 199309L
 #define _POSIX_C_SOURCE 199309L
+#endif
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-blob.h"
 #include "hb-object-private.hh"
 
 #ifdef HAVE_SYS_MMAN_H
 #include "hb-object-private.hh"
 
 #ifdef HAVE_SYS_MMAN_H
@@ -76,6 +77,22 @@ _hb_blob_destroy_user_data (hb_blob_t *blob)
   }
 }
 
   }
 }
 
+/**
+ * hb_blob_create: (Xconstructor)
+ * @data: (array length=length) (closure user_data) (destroy destroy) (scope notified) (transfer none): Pointer to blob data.
+ * @length: Length of @data in bytes.
+ * @mode: Memory mode for @data.
+ * @user_data: Data parameter to pass to @destroy.
+ * @destroy: Callback to call when @data is not needed anymore.
+ *
+ * Creates a new "blob" object wrapping @data.  The @mode parameter is used
+ * to negotiate ownership and lifecycle of @data.
+ *
+ * Return value: New blob, or the empty blob if something failed or if @length is
+ * zero.  Destroy with hb_blob_destroy().
+ *
+ * Since: 1.0
+ **/
 hb_blob_t *
 hb_blob_create (const char        *data,
                unsigned int       length,
 hb_blob_t *
 hb_blob_create (const char        *data,
                unsigned int       length,
@@ -109,6 +126,26 @@ hb_blob_create (const char        *data,
   return blob;
 }
 
   return blob;
 }
 
+/**
+ * hb_blob_create_sub_blob:
+ * @parent: Parent blob.
+ * @offset: Start offset of sub-blob within @parent, in bytes.
+ * @length: Length of sub-blob.
+ *
+ * Returns a blob that represents a range of bytes in @parent.  The new
+ * blob is always created with %HB_MEMORY_MODE_READONLY, meaning that it
+ * will never modify data in the parent blob.  The parent data is not
+ * expected to be modified, and will result in undefined behavior if it
+ * is.
+ *
+ * Makes @parent immutable.
+ *
+ * Return value: New blob, or the empty blob if something failed or if
+ * @length is zero or @offset is beyond the end of @parent's data.  Destroy
+ * with hb_blob_destroy().
+ *
+ * Since: 1.0
+ **/
 hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
                         unsigned int  offset,
 hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
                         unsigned int  offset,
@@ -123,13 +160,24 @@ hb_blob_create_sub_blob (hb_blob_t    *parent,
 
   blob = hb_blob_create (parent->data + offset,
                         MIN (length, parent->length - offset),
 
   blob = hb_blob_create (parent->data + offset,
                         MIN (length, parent->length - offset),
-                        parent->mode,
+                        HB_MEMORY_MODE_READONLY,
                         hb_blob_reference (parent),
                         (hb_destroy_func_t) hb_blob_destroy);
 
   return blob;
 }
 
                         hb_blob_reference (parent),
                         (hb_destroy_func_t) hb_blob_destroy);
 
   return blob;
 }
 
+/**
+ * hb_blob_get_empty:
+ *
+ * Returns the singleton empty blob.
+ *
+ * See TODO:link object types for more information.
+ *
+ * Return value: (transfer full): the empty blob.
+ *
+ * Since: 1.0
+ **/
 hb_blob_t *
 hb_blob_get_empty (void)
 {
 hb_blob_t *
 hb_blob_get_empty (void)
 {
@@ -149,12 +197,36 @@ hb_blob_get_empty (void)
   return const_cast<hb_blob_t *> (&_hb_blob_nil);
 }
 
   return const_cast<hb_blob_t *> (&_hb_blob_nil);
 }
 
+/**
+ * hb_blob_reference: (skip)
+ * @blob: a blob.
+ *
+ * Increases the reference count on @blob.
+ *
+ * See TODO:link object types for more information.
+ *
+ * Return value: @blob.
+ *
+ * Since: 1.0
+ **/
 hb_blob_t *
 hb_blob_reference (hb_blob_t *blob)
 {
   return hb_object_reference (blob);
 }
 
 hb_blob_t *
 hb_blob_reference (hb_blob_t *blob)
 {
   return hb_object_reference (blob);
 }
 
+/**
+ * hb_blob_destroy: (skip)
+ * @blob: a blob.
+ *
+ * Descreases the reference count on @blob, and if it reaches zero, destroys
+ * @blob, freeing all memory, possibly calling the destroy-callback the blob
+ * was created for if it has not been called already.
+ *
+ * See TODO:link object types for more information.
+ *
+ * Since: 1.0
+ **/
 void
 hb_blob_destroy (hb_blob_t *blob)
 {
 void
 hb_blob_destroy (hb_blob_t *blob)
 {
@@ -165,6 +237,18 @@ hb_blob_destroy (hb_blob_t *blob)
   free (blob);
 }
 
   free (blob);
 }
 
+/**
+ * hb_blob_set_user_data: (skip)
+ * @blob: a blob.
+ * @key: key for data to set.
+ * @data: data to set.
+ * @destroy: callback to call when @data is not needed anymore.
+ * @replace: whether to replace an existing data with the same key.
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_blob_set_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key,
 hb_bool_t
 hb_blob_set_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key,
@@ -175,6 +259,17 @@ hb_blob_set_user_data (hb_blob_t          *blob,
   return hb_object_set_user_data (blob, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (blob, key, data, destroy, replace);
 }
 
+/**
+ * hb_blob_get_user_data: (skip)
+ * @blob: a blob.
+ * @key: key for data to get.
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 void *
 hb_blob_get_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key)
 void *
 hb_blob_get_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key)
@@ -183,6 +278,14 @@ hb_blob_get_user_data (hb_blob_t          *blob,
 }
 
 
 }
 
 
+/**
+ * hb_blob_make_immutable:
+ * @blob: a blob.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_blob_make_immutable (hb_blob_t *blob)
 {
 void
 hb_blob_make_immutable (hb_blob_t *blob)
 {
@@ -192,6 +295,16 @@ hb_blob_make_immutable (hb_blob_t *blob)
   blob->immutable = true;
 }
 
   blob->immutable = true;
 }
 
+/**
+ * hb_blob_is_immutable:
+ * @blob: a blob.
+ *
+ * 
+ *
+ * Return value: TODO
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_blob_is_immutable (hb_blob_t *blob)
 {
 hb_bool_t
 hb_blob_is_immutable (hb_blob_t *blob)
 {
@@ -199,12 +312,33 @@ hb_blob_is_immutable (hb_blob_t *blob)
 }
 
 
 }
 
 
+/**
+ * hb_blob_get_length:
+ * @blob: a blob.
+ *
+ * 
+ *
+ * Return value: the length of blob data in bytes.
+ *
+ * Since: 1.0
+ **/
 unsigned int
 hb_blob_get_length (hb_blob_t *blob)
 {
   return blob->length;
 }
 
 unsigned int
 hb_blob_get_length (hb_blob_t *blob)
 {
   return blob->length;
 }
 
+/**
+ * hb_blob_get_data:
+ * @blob: a blob.
+ * @length: (out):
+ *
+ * 
+ *
+ * Returns: (transfer none) (array length=length): 
+ *
+ * Since: 1.0
+ **/
 const char *
 hb_blob_get_data (hb_blob_t *blob, unsigned int *length)
 {
 const char *
 hb_blob_get_data (hb_blob_t *blob, unsigned int *length)
 {
@@ -214,6 +348,22 @@ hb_blob_get_data (hb_blob_t *blob, unsigned int *length)
   return blob->data;
 }
 
   return blob->data;
 }
 
+/**
+ * hb_blob_get_data_writable:
+ * @blob: a blob.
+ * @length: (out): output length of the writable data.
+ *
+ * Tries to make blob data writable (possibly copying it) and
+ * return pointer to data.
+ *
+ * Fails if blob has been made immutable, or if memory allocation
+ * fails.
+ *
+ * Returns: (transfer none) (array length=length): Writable blob data,
+ * or %NULL if failed.
+ *
+ * Since: 1.0
+ **/
 char *
 hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length)
 {
 char *
 hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length)
 {
@@ -324,5 +474,3 @@ _try_writable (hb_blob_t *blob)
 
   return true;
 }
 
   return true;
 }
-
-
index 1a93baa..b2419ab 100644 (file)
 HB_BEGIN_DECLS
 
 
 HB_BEGIN_DECLS
 
 
+/*
+ * Note re various memory-modes:
+ *
+ * - In no case shall the HarfBuzz client modify memory
+ *   that is passed to HarfBuzz in a blob.  If there is
+ *   any such possibility, MODE_DUPLICATE should be used
+ *   such that HarfBuzz makes a copy immediately,
+ *
+ * - Use MODE_READONLY otherse, unless you really really
+ *   really know what you are doing,
+ *
+ * - MODE_WRITABLE is appropriate if you really made a
+ *   copy of data solely for the purpose of passing to
+ *   HarfBuzz and doing that just once (no reuse!),
+ *
+ * - If the font is mmap()ed, it's ok to use
+ *   READONLY_MAY_MAKE_WRITABLE, however, using that mode
+ *   correctly is very tricky.  Use MODE_READONLY instead.
+ */
 typedef enum {
   HB_MEMORY_MODE_DUPLICATE,
   HB_MEMORY_MODE_READONLY,
 typedef enum {
   HB_MEMORY_MODE_DUPLICATE,
   HB_MEMORY_MODE_READONLY,
@@ -52,6 +71,12 @@ hb_blob_create (const char        *data,
                void              *user_data,
                hb_destroy_func_t  destroy);
 
                void              *user_data,
                hb_destroy_func_t  destroy);
 
+/* Always creates with MEMORY_MODE_READONLY.
+ * Even if the parent blob is writable, we don't
+ * want the user of the sub-blob to be able to
+ * modify the parent data as that data may be
+ * shared among multiple sub-blobs.
+ */
 hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
                         unsigned int  offset,
 hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
                         unsigned int  offset,
diff --git a/src/hb-buffer-deserialize-json.hh b/src/hb-buffer-deserialize-json.hh
new file mode 100644 (file)
index 0000000..dead700
--- /dev/null
@@ -0,0 +1,643 @@
+
+#line 1 "../../src/hb-buffer-deserialize-json.rl"
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_DESERIALIZE_JSON_HH
+#define HB_BUFFER_DESERIALIZE_JSON_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-buffer-deserialize-json.hh.tmp"
+static const unsigned char _deserialize_json_trans_keys[] = {
+       0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 
+       48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 
+       9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u, 
+       120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 
+       9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 
+       65u, 122u, 34u, 122u, 9u, 125u, 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0
+};
+
+static const char _deserialize_json_key_spans[] = {
+       0, 115, 26, 7, 2, 1, 50, 49, 
+       10, 117, 117, 117, 1, 50, 49, 10, 
+       117, 117, 1, 1, 50, 49, 117, 117, 
+       2, 1, 50, 49, 10, 117, 117, 1, 
+       50, 49, 10, 117, 117, 1, 50, 49, 
+       58, 89, 117, 117, 85, 115, 0
+};
+
+static const short _deserialize_json_index_offsets[] = {
+       0, 0, 116, 143, 151, 154, 156, 207, 
+       257, 268, 386, 504, 622, 624, 675, 725, 
+       736, 854, 972, 974, 976, 1027, 1077, 1195, 
+       1313, 1316, 1318, 1369, 1419, 1430, 1548, 1666, 
+       1668, 1719, 1769, 1780, 1898, 2016, 2018, 2069, 
+       2119, 2178, 2268, 2386, 2504, 2590, 2706
+};
+
+static const char _deserialize_json_indicies[] = {
+       0, 0, 0, 0, 0, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       0, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 2, 1, 3, 3, 3, 
+       3, 3, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 3, 1, 4, 1, 
+       5, 1, 6, 7, 1, 1, 8, 1, 
+       9, 10, 1, 11, 1, 11, 11, 11, 
+       11, 11, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 11, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 12, 1, 
+       12, 12, 12, 12, 12, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 12, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 13, 1, 1, 14, 
+       15, 15, 15, 15, 15, 15, 15, 15, 
+       15, 1, 16, 17, 17, 17, 17, 17, 
+       17, 17, 17, 17, 1, 18, 18, 18, 
+       18, 18, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 18, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       19, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 20, 1, 21, 21, 21, 21, 21, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 21, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 3, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 22, 
+       1, 18, 18, 18, 18, 18, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       18, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 19, 1, 1, 1, 
+       17, 17, 17, 17, 17, 17, 17, 17, 
+       17, 17, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 20, 1, 23, 
+       1, 23, 23, 23, 23, 23, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       23, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 24, 1, 24, 24, 24, 24, 
+       24, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 24, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       25, 1, 1, 26, 27, 27, 27, 27, 
+       27, 27, 27, 27, 27, 1, 28, 29, 
+       29, 29, 29, 29, 29, 29, 29, 29, 
+       1, 30, 30, 30, 30, 30, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       30, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 31, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 32, 1, 30, 
+       30, 30, 30, 30, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 30, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 31, 1, 1, 1, 29, 29, 
+       29, 29, 29, 29, 29, 29, 29, 29, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 32, 1, 33, 1, 34, 
+       1, 34, 34, 34, 34, 34, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       34, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 35, 1, 35, 35, 35, 35, 
+       35, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 35, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 36, 37, 37, 37, 37, 
+       37, 37, 37, 37, 37, 1, 38, 38, 
+       38, 38, 38, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 38, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 39, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 40, 1, 38, 38, 38, 38, 
+       38, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 38, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 39, 
+       1, 1, 1, 41, 41, 41, 41, 41, 
+       41, 41, 41, 41, 41, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       40, 1, 42, 43, 1, 44, 1, 44, 
+       44, 44, 44, 44, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 44, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       45, 1, 45, 45, 45, 45, 45, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 45, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 46, 1, 
+       1, 47, 48, 48, 48, 48, 48, 48, 
+       48, 48, 48, 1, 49, 50, 50, 50, 
+       50, 50, 50, 50, 50, 50, 1, 51, 
+       51, 51, 51, 51, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 51, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 52, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 53, 1, 51, 51, 51, 
+       51, 51, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 51, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       52, 1, 1, 1, 50, 50, 50, 50, 
+       50, 50, 50, 50, 50, 50, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 53, 1, 54, 1, 54, 54, 54, 
+       54, 54, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 54, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 55, 1, 
+       55, 55, 55, 55, 55, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 55, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 56, 1, 1, 57, 
+       58, 58, 58, 58, 58, 58, 58, 58, 
+       58, 1, 59, 60, 60, 60, 60, 60, 
+       60, 60, 60, 60, 1, 61, 61, 61, 
+       61, 61, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 61, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       62, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 63, 1, 61, 61, 61, 61, 61, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 61, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 62, 1, 
+       1, 1, 60, 60, 60, 60, 60, 60, 
+       60, 60, 60, 60, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 63, 
+       1, 64, 1, 64, 64, 64, 64, 64, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 64, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 65, 1, 65, 65, 
+       65, 65, 65, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 65, 1, 66, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 67, 68, 68, 
+       68, 68, 68, 68, 68, 68, 68, 1, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 1, 1, 1, 1, 1, 1, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 69, 69, 69, 69, 69, 69, 
+       69, 69, 1, 70, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 71, 71, 
+       1, 71, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 1, 1, 1, 1, 1, 
+       1, 1, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 1, 1, 1, 1, 
+       71, 1, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 71, 71, 71, 71, 
+       71, 71, 71, 71, 1, 72, 72, 72, 
+       72, 72, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 72, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       73, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 74, 1, 72, 72, 72, 72, 72, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 72, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 73, 1, 
+       1, 1, 75, 75, 75, 75, 75, 75, 
+       75, 75, 75, 75, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 74, 
+       1, 76, 76, 76, 76, 76, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       76, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 77, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 78, 1, 0, 
+       0, 0, 0, 0, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 0, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 2, 1, 1, 0
+};
+
+static const char _deserialize_json_trans_targs[] = {
+       1, 0, 2, 2, 3, 4, 18, 24, 
+       37, 5, 12, 6, 7, 8, 9, 11, 
+       9, 11, 10, 2, 44, 10, 44, 13, 
+       14, 15, 16, 17, 16, 17, 10, 2, 
+       44, 19, 20, 21, 22, 23, 10, 2, 
+       44, 23, 25, 31, 26, 27, 28, 29, 
+       30, 29, 30, 10, 2, 44, 32, 33, 
+       34, 35, 36, 35, 36, 10, 2, 44, 
+       38, 39, 40, 42, 43, 41, 10, 41, 
+       10, 2, 44, 43, 44, 45, 46
+};
+
+static const char _deserialize_json_trans_actions[] = {
+       0, 0, 1, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 2, 2, 2, 
+       0, 0, 3, 3, 4, 0, 5, 0, 
+       0, 2, 2, 2, 0, 0, 6, 6, 
+       7, 0, 0, 0, 2, 2, 8, 8, 
+       9, 0, 0, 0, 0, 0, 2, 2, 
+       2, 0, 0, 10, 10, 11, 0, 0, 
+       2, 2, 2, 0, 0, 12, 12, 13, 
+       0, 0, 0, 2, 2, 2, 14, 0, 
+       15, 15, 16, 0, 0, 0, 0
+};
+
+static const int deserialize_json_start = 1;
+static const int deserialize_json_first_final = 44;
+static const int deserialize_json_error = 0;
+
+static const int deserialize_json_en_main = 1;
+
+
+#line 97 "../../src/hb-buffer-deserialize-json.rl"
+
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
+                                   const char *buf,
+                                   unsigned int buf_len,
+                                   const char **end_ptr,
+                                   hb_font_t *font)
+{
+  const char *p = buf, *pe = buf + buf_len;
+
+  /* Ensure we have positions. */
+  (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+  while (p < pe && ISSPACE (*p))
+    p++;
+  if (p < pe && *p == (buffer->len ? ',' : '['))
+  {
+    *end_ptr = ++p;
+  }
+
+  const char *tok = NULL;
+  int cs;
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
+  
+#line 466 "hb-buffer-deserialize-json.hh.tmp"
+       {
+       cs = deserialize_json_start;
+       }
+
+#line 471 "hb-buffer-deserialize-json.hh.tmp"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+       if ( cs == 0 )
+               goto _out;
+_resume:
+       _keys = _deserialize_json_trans_keys + (cs<<1);
+       _inds = _deserialize_json_indicies + _deserialize_json_index_offsets[cs];
+
+       _slen = _deserialize_json_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+               (*p) <= _keys[1] ?
+               (*p) - _keys[0] : _slen ];
+
+       cs = _deserialize_json_trans_targs[_trans];
+
+       if ( _deserialize_json_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _deserialize_json_trans_actions[_trans] ) {
+       case 1:
+#line 38 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       memset (&info, 0, sizeof (info));
+       memset (&pos , 0, sizeof (pos ));
+}
+       break;
+       case 5:
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 2:
+#line 51 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       tok = p;
+}
+       break;
+       case 14:
+#line 55 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+       break;
+       case 15:
+#line 62 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+       break;
+       case 8:
+#line 63 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_uint (tok, p, &info.cluster )) return false; }
+       break;
+       case 10:
+#line 64 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
+       break;
+       case 12:
+#line 65 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+       break;
+       case 3:
+#line 66 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+       break;
+       case 6:
+#line 67 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+       break;
+       case 16:
+#line 62 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 9:
+#line 63 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 11:
+#line 64 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 13:
+#line 65 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 4:
+#line 66 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 7:
+#line 67 "../../src/hb-buffer-deserialize-json.rl"
+       { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+#line 624 "hb-buffer-deserialize-json.hh.tmp"
+       }
+
+_again:
+       if ( cs == 0 )
+               goto _out;
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       _out: {}
+       }
+
+#line 125 "../../src/hb-buffer-deserialize-json.rl"
+
+
+  *end_ptr = p;
+
+  return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_JSON_HH */
diff --git a/src/hb-buffer-deserialize-json.rl b/src/hb-buffer-deserialize-json.rl
new file mode 100644 (file)
index 0000000..7351b2a
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_DESERIALIZE_JSON_HH
+#define HB_BUFFER_DESERIALIZE_JSON_HH
+
+#include "hb-private.hh"
+
+%%{
+
+machine deserialize_json;
+alphtype unsigned char;
+write data;
+
+action clear_item {
+       memset (&info, 0, sizeof (info));
+       memset (&pos , 0, sizeof (pos ));
+}
+
+action add_item {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+
+action tok {
+       tok = p;
+}
+
+action parse_glyph {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+
+action parse_gid       { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+action parse_cluster   { if (!parse_uint (tok, p, &info.cluster )) return false; }
+action parse_x_offset  { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
+action parse_y_offset  { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+action parse_x_advance { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+action parse_y_advance { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+
+unum   = '0' | [1-9] digit*;
+num    = '-'? unum;
+
+comma = space* ',' space*;
+colon = space* ':' space*;
+
+glyph_id = unum;
+glyph_name = alpha (alnum|'_'|'.'|'-')*;
+
+glyph_string   = '"' (glyph_name >tok %parse_glyph) '"';
+glyph_number = (glyph_id >tok %parse_gid);
+
+glyph  = "\"g\""  colon (glyph_string | glyph_number);
+cluster        = "\"cl\"" colon (unum >tok %parse_cluster);
+xoffset        = "\"dx\"" colon (num >tok %parse_x_offset);
+yoffset        = "\"dy\"" colon (num >tok %parse_y_offset);
+xadvance= "\"ax\"" colon (num >tok %parse_x_advance);
+yadvance= "\"ay\"" colon (num >tok %parse_y_advance);
+
+element = glyph | cluster | xoffset | yoffset | xadvance | yadvance;
+item   =
+       ( '{' space* element (comma element)* space* '}')
+       >clear_item
+       @add_item
+       ;
+
+main := space* item (comma item)* space* (','|']')?;
+
+}%%
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
+                                   const char *buf,
+                                   unsigned int buf_len,
+                                   const char **end_ptr,
+                                   hb_font_t *font)
+{
+  const char *p = buf, *pe = buf + buf_len;
+
+  /* Ensure we have positions. */
+  (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+  while (p < pe && ISSPACE (*p))
+    p++;
+  if (p < pe && *p == (buffer->len ? ',' : '['))
+  {
+    *end_ptr = ++p;
+  }
+
+  const char *tok = NULL;
+  int cs;
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
+  %%{
+    write init;
+    write exec;
+  }%%
+
+  *end_ptr = p;
+
+  return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_JSON_HH */
diff --git a/src/hb-buffer-deserialize-text.hh b/src/hb-buffer-deserialize-text.hh
new file mode 100644 (file)
index 0000000..a38efe3
--- /dev/null
@@ -0,0 +1,571 @@
+
+#line 1 "../../src/hb-buffer-deserialize-text.rl"
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_DESERIALIZE_TEXT_HH
+#define HB_BUFFER_DESERIALIZE_TEXT_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-buffer-deserialize-text.hh.tmp"
+static const unsigned char _deserialize_text_trans_keys[] = {
+       0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u, 
+       48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u, 
+       9u, 122u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 
+       9u, 124u, 9u, 124u, 9u, 124u, 0
+};
+
+static const char _deserialize_text_key_spans[] = {
+       0, 114, 13, 10, 13, 10, 10, 13, 
+       10, 1, 13, 10, 14, 116, 116, 0, 
+       114, 116, 116, 116, 116, 116, 116, 116, 
+       116, 116, 116
+};
+
+static const short _deserialize_text_index_offsets[] = {
+       0, 0, 115, 129, 140, 154, 165, 176, 
+       190, 201, 203, 217, 228, 243, 360, 477, 
+       478, 593, 710, 827, 944, 1061, 1178, 1295, 
+       1412, 1529, 1646
+};
+
+static const char _deserialize_text_indicies[] = {
+       0, 0, 0, 0, 0, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       0, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       2, 3, 3, 3, 3, 3, 3, 3, 
+       3, 3, 1, 1, 1, 1, 1, 1, 
+       1, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 1, 1, 1, 1, 1, 
+       1, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 1, 5, 1, 1, 6, 
+       7, 7, 7, 7, 7, 7, 7, 7, 
+       7, 1, 8, 9, 9, 9, 9, 9, 
+       9, 9, 9, 9, 1, 10, 1, 1, 
+       11, 12, 12, 12, 12, 12, 12, 12, 
+       12, 12, 1, 13, 14, 14, 14, 14, 
+       14, 14, 14, 14, 14, 1, 15, 16, 
+       16, 16, 16, 16, 16, 16, 16, 16, 
+       1, 17, 1, 1, 18, 19, 19, 19, 
+       19, 19, 19, 19, 19, 19, 1, 20, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 1, 22, 1, 23, 1, 1, 24, 
+       25, 25, 25, 25, 25, 25, 25, 25, 
+       25, 1, 26, 27, 27, 27, 27, 27, 
+       27, 27, 27, 27, 1, 22, 1, 1, 
+       1, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 1, 28, 28, 28, 28, 
+       28, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 28, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 29, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       30, 1, 1, 31, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       32, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 33, 
+       1, 34, 34, 34, 34, 34, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       34, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 35, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 36, 1, 1, 0, 
+       0, 0, 0, 0, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 0, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 2, 3, 
+       3, 3, 3, 3, 3, 3, 3, 3, 
+       1, 1, 1, 1, 1, 1, 1, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 1, 1, 1, 1, 1, 1, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 1, 28, 28, 28, 28, 28, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 28, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 29, 1, 1, 1, 
+       1, 37, 37, 37, 37, 37, 37, 37, 
+       37, 37, 37, 1, 1, 1, 30, 1, 
+       1, 31, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 32, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 33, 1, 38, 
+       38, 38, 38, 38, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 38, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 39, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 40, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 41, 1, 42, 42, 42, 42, 
+       42, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 42, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       43, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 44, 
+       1, 42, 42, 42, 42, 42, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       42, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       14, 14, 14, 14, 14, 14, 14, 14, 
+       14, 14, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 43, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 44, 1, 38, 38, 
+       38, 38, 38, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 38, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 39, 1, 1, 1, 9, 9, 9, 
+       9, 9, 9, 9, 9, 9, 9, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 40, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 41, 1, 45, 45, 45, 45, 45, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 45, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 46, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 47, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 48, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 49, 1, 
+       50, 50, 50, 50, 50, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 50, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 51, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 52, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 53, 1, 50, 50, 50, 
+       50, 50, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 50, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 51, 
+       1, 1, 1, 1, 27, 27, 27, 27, 
+       27, 27, 27, 27, 27, 27, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 52, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       53, 1, 45, 45, 45, 45, 45, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 45, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 46, 1, 1, 1, 
+       1, 54, 54, 54, 54, 54, 54, 54, 
+       54, 54, 54, 1, 1, 1, 1, 1, 
+       1, 47, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 48, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 49, 1, 28, 
+       28, 28, 28, 28, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 28, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 29, 1, 55, 55, 1, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       1, 1, 1, 30, 1, 1, 31, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 1, 1, 32, 1, 55, 1, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 1, 33, 1, 0
+};
+
+static const char _deserialize_text_trans_targs[] = {
+       1, 0, 13, 17, 26, 3, 18, 21, 
+       18, 21, 5, 19, 20, 19, 20, 22, 
+       25, 8, 9, 12, 9, 12, 10, 11, 
+       23, 24, 23, 24, 14, 2, 6, 7, 
+       15, 16, 14, 15, 16, 17, 14, 4, 
+       15, 16, 14, 15, 16, 14, 2, 7, 
+       15, 16, 14, 2, 15, 16, 25, 26
+};
+
+static const char _deserialize_text_trans_actions[] = {
+       0, 0, 1, 1, 1, 2, 2, 2, 
+       0, 0, 2, 2, 2, 0, 0, 2, 
+       2, 2, 2, 2, 0, 0, 3, 2, 
+       2, 2, 0, 0, 4, 5, 5, 5, 
+       4, 4, 0, 0, 0, 0, 6, 7, 
+       6, 6, 8, 8, 8, 9, 10, 10, 
+       9, 9, 11, 12, 11, 11, 0, 0
+};
+
+static const char _deserialize_text_eof_actions[] = {
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 4, 0, 0, 
+       0, 4, 6, 8, 8, 6, 9, 11, 
+       11, 9, 4
+};
+
+static const int deserialize_text_start = 1;
+static const int deserialize_text_first_final = 13;
+static const int deserialize_text_error = 0;
+
+static const int deserialize_text_en_main = 1;
+
+
+#line 91 "../../src/hb-buffer-deserialize-text.rl"
+
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
+                                   const char *buf,
+                                   unsigned int buf_len,
+                                   const char **end_ptr,
+                                   hb_font_t *font)
+{
+  const char *p = buf, *pe = buf + buf_len;
+
+  /* Ensure we have positions. */
+  (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+  while (p < pe && ISSPACE (*p))
+    p++;
+  if (p < pe && *p == (buffer->len ? '|' : '['))
+  {
+    *end_ptr = ++p;
+  }
+
+  const char *eof = pe, *tok = NULL;
+  int cs;
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
+  
+#line 343 "hb-buffer-deserialize-text.hh.tmp"
+       {
+       cs = deserialize_text_start;
+       }
+
+#line 348 "hb-buffer-deserialize-text.hh.tmp"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+       if ( cs == 0 )
+               goto _out;
+_resume:
+       _keys = _deserialize_text_trans_keys + (cs<<1);
+       _inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs];
+
+       _slen = _deserialize_text_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+               (*p) <= _keys[1] ?
+               (*p) - _keys[0] : _slen ];
+
+       cs = _deserialize_text_trans_targs[_trans];
+
+       if ( _deserialize_text_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _deserialize_text_trans_actions[_trans] ) {
+       case 2:
+#line 51 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       tok = p;
+}
+       break;
+       case 5:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+       break;
+       case 10:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_uint (tok, p, &info.cluster )) return false; }
+       break;
+       case 3:
+#line 63 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
+       break;
+       case 12:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+       break;
+       case 7:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+       break;
+       case 1:
+#line 38 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       memset (&info, 0, sizeof (info));
+       memset (&pos , 0, sizeof (pos ));
+}
+#line 51 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       tok = p;
+}
+       break;
+       case 4:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 9:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 11:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 6:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 8:
+#line 66 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+#line 480 "hb-buffer-deserialize-text.hh.tmp"
+       }
+
+_again:
+       if ( cs == 0 )
+               goto _out;
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       switch ( _deserialize_text_eof_actions[cs] ) {
+       case 4:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 9:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 11:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 6:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+       case 8:
+#line 66 "../../src/hb-buffer-deserialize-text.rl"
+       { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+       {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+       break;
+#line 557 "hb-buffer-deserialize-text.hh.tmp"
+       }
+       }
+
+       _out: {}
+       }
+
+#line 119 "../../src/hb-buffer-deserialize-text.rl"
+
+
+  *end_ptr = p;
+
+  return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
diff --git a/src/hb-buffer-deserialize-text.rl b/src/hb-buffer-deserialize-text.rl
new file mode 100644 (file)
index 0000000..8856580
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_DESERIALIZE_TEXT_HH
+#define HB_BUFFER_DESERIALIZE_TEXT_HH
+
+#include "hb-private.hh"
+
+%%{
+
+machine deserialize_text;
+alphtype unsigned char;
+write data;
+
+action clear_item {
+       memset (&info, 0, sizeof (info));
+       memset (&pos , 0, sizeof (pos ));
+}
+
+action add_item {
+       buffer->add_info (info);
+       if (buffer->in_error)
+         return false;
+       buffer->pos[buffer->len - 1] = pos;
+       *end_ptr = p;
+}
+
+action tok {
+       tok = p;
+}
+
+action parse_glyph {
+       if (!hb_font_glyph_from_string (font,
+                                       tok, p - tok,
+                                       &info.codepoint))
+         return false;
+}
+
+action parse_cluster   { if (!parse_uint (tok, p, &info.cluster )) return false; }
+action parse_x_offset  { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
+action parse_y_offset  { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
+action parse_x_advance { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
+action parse_y_advance { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
+
+unum   = '0' | [1-9] digit*;
+num    = '-'? unum;
+
+glyph_id = unum;
+glyph_name = alpha (alnum|'_'|'.'|'-')*;
+
+glyph  = (glyph_id | glyph_name) >tok %parse_glyph;
+cluster        = '=' (unum >tok %parse_cluster);
+offsets        = '@' (num >tok %parse_x_offset)   ',' (num >tok %parse_y_offset );
+advances= '+' (num >tok %parse_x_advance) (',' (num >tok %parse_y_advance))?;
+item   =
+       (
+               glyph
+               cluster?
+               offsets?
+               advances?
+       )
+       >clear_item
+       %add_item
+       ;
+
+main := space* item (space* '|' space* item)* space* ('|'|']')?;
+
+}%%
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
+                                   const char *buf,
+                                   unsigned int buf_len,
+                                   const char **end_ptr,
+                                   hb_font_t *font)
+{
+  const char *p = buf, *pe = buf + buf_len;
+
+  /* Ensure we have positions. */
+  (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+  while (p < pe && ISSPACE (*p))
+    p++;
+  if (p < pe && *p == (buffer->len ? '|' : '['))
+  {
+    *end_ptr = ++p;
+  }
+
+  const char *eof = pe, *tok = NULL;
+  int cs;
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
+  %%{
+    write init;
+    write exec;
+  }%%
+
+  *end_ptr = p;
+
+  return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
index 13cf4bb..069f925 100644 (file)
@@ -31,7 +31,6 @@
 #define HB_BUFFER_PRIVATE_HH
 
 #include "hb-private.hh"
 #define HB_BUFFER_PRIVATE_HH
 
 #include "hb-private.hh"
-#include "hb-buffer.h"
 #include "hb-object-private.hh"
 #include "hb-unicode-private.hh"
 
 #include "hb-object-private.hh"
 #include "hb-unicode-private.hh"
 
@@ -49,14 +48,13 @@ struct hb_buffer_t {
   ASSERT_POD ();
 
   /* Information about how the text in the buffer should be treated */
   ASSERT_POD ();
 
   /* Information about how the text in the buffer should be treated */
-
   hb_unicode_funcs_t *unicode; /* Unicode functions */
   hb_unicode_funcs_t *unicode; /* Unicode functions */
-  hb_segment_properties_t props; /* Script, language, direction */
   hb_buffer_flags_t flags; /* BOT / EOT / etc. */
   hb_buffer_flags_t flags; /* BOT / EOT / etc. */
+  hb_codepoint_t replacement; /* U+FFFD or something else. */
 
   /* Buffer contents */
 
   /* Buffer contents */
-
   hb_buffer_content_type_t content_type;
   hb_buffer_content_type_t content_type;
+  hb_segment_properties_t props; /* Script, language, direction */
 
   bool in_error; /* Allocation failed */
   bool have_output; /* Whether we have an output buffer going on */
 
   bool in_error; /* Allocation failed */
   bool have_output; /* Whether we have an output buffer going on */
@@ -80,6 +78,8 @@ struct hb_buffer_t {
   inline hb_glyph_info_t &prev (void) { return out_info[out_len - 1]; }
   inline hb_glyph_info_t prev (void) const { return info[out_len - 1]; }
 
   inline hb_glyph_info_t &prev (void) { return out_info[out_len - 1]; }
   inline hb_glyph_info_t prev (void) const { return info[out_len - 1]; }
 
+  inline bool has_separate_output (void) const { return info != out_info; }
+
   unsigned int serial;
 
   /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
   unsigned int serial;
 
   /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
@@ -101,6 +101,8 @@ struct hb_buffer_t {
 
   inline unsigned int backtrack_len (void) const
   { return have_output? out_len : idx; }
 
   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);
   inline unsigned int next_serial (void) { return serial++; }
 
   HB_INTERNAL void allocate_var (unsigned int byte_i, unsigned int count, const char *owner);
@@ -110,6 +112,7 @@ struct hb_buffer_t {
 
   HB_INTERNAL void add (hb_codepoint_t  codepoint,
                        unsigned int    cluster);
 
   HB_INTERNAL void add (hb_codepoint_t  codepoint,
                        unsigned int    cluster);
+  HB_INTERNAL void add_info (const hb_glyph_info_t &glyph_info);
 
   HB_INTERNAL void reverse_range (unsigned int start, unsigned int end);
   HB_INTERNAL void reverse (void);
 
   HB_INTERNAL void reverse_range (unsigned int start, unsigned int end);
   HB_INTERNAL void reverse (void);
@@ -128,9 +131,10 @@ struct hb_buffer_t {
   HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index);
   /* Makes a copy of the glyph at idx to output and replace glyph_index */
   HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index);
   HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index);
   /* Makes a copy of the glyph at idx to output and replace glyph_index */
   HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index);
-  HB_INTERNAL void output_info (hb_glyph_info_t &glyph_info);
+  HB_INTERNAL void output_info (const hb_glyph_info_t &glyph_info);
   /* Copies glyph at idx to output but doesn't advance idx */
   HB_INTERNAL void copy_glyph (void);
   /* Copies glyph at idx to output 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
   /* Copies glyph at idx to output and advance idx.
    * If there's no output, just advance idx. */
   inline void
@@ -175,11 +179,16 @@ struct hb_buffer_t {
   HB_INTERNAL bool enlarge (unsigned int size);
 
   inline bool ensure (unsigned int size)
   HB_INTERNAL bool enlarge (unsigned int size);
 
   inline bool ensure (unsigned int size)
-  { return likely (size < allocated) ? true : enlarge (size); }
+  { return likely (!size || size < allocated) ? true : enlarge (size); }
+
+  inline bool ensure_inplace (unsigned int size)
+  { return likely (!size || size < allocated); }
 
   HB_INTERNAL bool make_room_for (unsigned int num_in, unsigned int num_out);
 
   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);
+  typedef long scratch_buffer_t;
+  HB_INTERNAL scratch_buffer_t *get_scratch_buffer (unsigned int *size);
 
   inline void clear_context (unsigned int side) { context_len[side] = 0; }
 };
 
   inline void clear_context (unsigned int side) { context_len[side] = 0; }
 };
diff --git a/src/hb-buffer-serialize.cc b/src/hb-buffer-serialize.cc
new file mode 100644 (file)
index 0000000..406d69d
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ * Copyright © 2012,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-buffer-private.hh"
+
+
+static const char *serialize_formats[] = {
+  "text",
+  "json",
+  NULL
+};
+
+/**
+ * hb_buffer_serialize_list_formats:
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
+const char **
+hb_buffer_serialize_list_formats (void)
+{
+  return serialize_formats;
+}
+
+/**
+ * hb_buffer_serialize_format_from_string:
+ * @str: 
+ * @len: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_buffer_serialize_format_t
+hb_buffer_serialize_format_from_string (const char *str, int len)
+{
+  /* Upper-case it. */
+  return (hb_buffer_serialize_format_t) (hb_tag_from_string (str, len) & ~0x20202020u);
+}
+
+/**
+ * hb_buffer_serialize_format_to_string:
+ * @format: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+const char *
+hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
+{
+  switch (format)
+  {
+    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:      return serialize_formats[0];
+    case HB_BUFFER_SERIALIZE_FORMAT_JSON:      return serialize_formats[1];
+    default:
+    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:   return NULL;
+  }
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
+                                 unsigned int start,
+                                 unsigned int end,
+                                 char *buf,
+                                 unsigned int buf_size,
+                                 unsigned int *buf_consumed,
+                                 hb_font_t *font,
+                                 hb_buffer_serialize_flags_t flags)
+{
+  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+
+  *buf_consumed = 0;
+  for (unsigned int i = start; i < end; i++)
+  {
+    char b[1024];
+    char *p = b;
+
+    /* In the following code, we know b is large enough that no overflow can happen. */
+
+#define APPEND(s) HB_STMT_START { strcpy (p, s); p += strlen (s); } HB_STMT_END
+
+    if (i)
+      *p++ = ',';
+
+    *p++ = '{';
+
+    APPEND ("\"g\":");
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+    {
+      char g[128];
+      hb_font_glyph_to_string (font, info[i].codepoint, g, sizeof (g));
+      *p++ = '"';
+      for (char *q = g; *q; q++) {
+        if (*q == '"')
+         *p++ = '\\';
+       *p++ = *q;
+      }
+      *p++ = '"';
+    }
+    else
+      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint));
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"cl\":%u", info[i].cluster));
+    }
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+    {
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
+                    pos[i].x_offset, pos[i].y_offset);
+      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
+                    pos[i].x_advance, pos[i].y_advance);
+    }
+
+    *p++ = '}';
+
+    unsigned int l = p - b;
+    if (buf_size > l)
+    {
+      memcpy (buf, b, l);
+      buf += l;
+      buf_size -= l;
+      *buf_consumed += l;
+      *buf = '\0';
+    } else
+      return i - start;
+  }
+
+  return end - start;
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
+                                 unsigned int start,
+                                 unsigned int end,
+                                 char *buf,
+                                 unsigned int buf_size,
+                                 unsigned int *buf_consumed,
+                                 hb_font_t *font,
+                                 hb_buffer_serialize_flags_t flags)
+{
+  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+
+  *buf_consumed = 0;
+  for (unsigned int i = start; i < end; i++)
+  {
+    char b[1024];
+    char *p = b;
+
+    /* In the following code, we know b is large enough that no overflow can happen. */
+
+    if (i)
+      *p++ = '|';
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+    {
+      hb_font_glyph_to_string (font, info[i].codepoint, p, 128);
+      p += strlen (p);
+    }
+    else
+      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint));
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster));
+    }
+
+    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+    {
+      if (pos[i].x_offset || pos[i].y_offset)
+       p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset));
+
+      *p++ = '+';
+      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance));
+      if (pos[i].y_advance)
+       p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
+    }
+
+    unsigned int l = p - b;
+    if (buf_size > l)
+    {
+      memcpy (buf, b, l);
+      buf += l;
+      buf_size -= l;
+      *buf_consumed += l;
+      *buf = '\0';
+    } else
+      return i - start;
+  }
+
+  return end - start;
+}
+
+/* Returns number of items, starting at start, that were serialized. */
+/**
+ * hb_buffer_serialize_glyphs:
+ * @buffer: a buffer.
+ * @start: 
+ * @end: 
+ * @buf: (array length=buf_size):
+ * @buf_size: 
+ * @buf_consumed: (out):
+ * @font: 
+ * @format: 
+ * @flags: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+unsigned int
+hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
+                           unsigned int start,
+                           unsigned int end,
+                           char *buf,
+                           unsigned int buf_size,
+                           unsigned int *buf_consumed, /* May be NULL */
+                           hb_font_t *font, /* May be NULL */
+                           hb_buffer_serialize_format_t format,
+                           hb_buffer_serialize_flags_t flags)
+{
+  assert (start <= end && end <= buffer->len);
+
+  unsigned int sconsumed;
+  if (!buf_consumed)
+    buf_consumed = &sconsumed;
+  *buf_consumed = 0;
+
+  assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
+         buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+  if (unlikely (start == end))
+    return 0;
+
+  if (!font)
+    font = hb_font_get_empty ();
+
+  switch (format)
+  {
+    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
+      return _hb_buffer_serialize_glyphs_text (buffer, start, end,
+                                              buf, buf_size, buf_consumed,
+                                              font, flags);
+
+    case HB_BUFFER_SERIALIZE_FORMAT_JSON:
+      return _hb_buffer_serialize_glyphs_json (buffer, start, end,
+                                              buf, buf_size, buf_consumed,
+                                              font, flags);
+
+    default:
+    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
+      return 0;
+
+  }
+}
+
+
+static hb_bool_t
+parse_uint (const char *pp, const char *end, uint32_t *pv)
+{
+  char buf[32];
+  unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - pp));
+  strncpy (buf, pp, len);
+  buf[len] = '\0';
+
+  char *p = buf;
+  char *pend = p;
+  uint32_t v;
+
+  errno = 0;
+  v = strtol (p, &pend, 10);
+  if (errno || p == pend || pend - p != end - pp)
+    return false;
+
+  *pv = v;
+  return true;
+}
+
+static hb_bool_t
+parse_int (const char *pp, const char *end, int32_t *pv)
+{
+  char buf[32];
+  unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - pp));
+  strncpy (buf, pp, len);
+  buf[len] = '\0';
+
+  char *p = buf;
+  char *pend = p;
+  int32_t v;
+
+  errno = 0;
+  v = strtol (p, &pend, 10);
+  if (errno || p == pend || pend - p != end - pp)
+    return false;
+
+  *pv = v;
+  return true;
+}
+
+#include "hb-buffer-deserialize-json.hh"
+#include "hb-buffer-deserialize-text.hh"
+
+/**
+ * hb_buffer_deserialize_glyphs:
+ * @buffer: a buffer.
+ * @buf: (array length=buf_len):
+ * @buf_len: 
+ * @end_ptr: (out):
+ * @font: 
+ * @format: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_bool_t
+hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
+                             const char *buf,
+                             int buf_len, /* -1 means nul-terminated */
+                             const char **end_ptr, /* May be NULL */
+                             hb_font_t *font, /* May be NULL */
+                             hb_buffer_serialize_format_t format)
+{
+  const char *end;
+  if (!end_ptr)
+    end_ptr = &end;
+  *end_ptr = buf;
+
+  assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
+         buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+  if (buf_len == -1)
+    buf_len = strlen (buf);
+
+  if (!buf_len)
+  {
+    *end_ptr = buf;
+    return false;
+  }
+
+  hb_buffer_set_content_type (buffer, HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+  if (!font)
+    font = hb_font_get_empty ();
+
+  switch (format)
+  {
+    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
+      return _hb_buffer_deserialize_glyphs_text (buffer,
+                                                buf, buf_len, end_ptr,
+                                                font);
+
+    case HB_BUFFER_SERIALIZE_FORMAT_JSON:
+      return _hb_buffer_deserialize_glyphs_json (buffer,
+                                                buf, buf_len, end_ptr,
+                                                font);
+
+    default:
+    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
+      return false;
+
+  }
+}
index c7860e9..74ae273 100644 (file)
@@ -139,7 +139,20 @@ hb_buffer_t::make_room_for (unsigned int num_in,
   return true;
 }
 
   return true;
 }
 
-void *
+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;
+}
+
+hb_buffer_t::scratch_buffer_t *
 hb_buffer_t::get_scratch_buffer (unsigned int *size)
 {
   have_output = false;
 hb_buffer_t::get_scratch_buffer (unsigned int *size)
 {
   have_output = false;
@@ -148,8 +161,9 @@ hb_buffer_t::get_scratch_buffer (unsigned int *size)
   out_len = 0;
   out_info = info;
 
   out_len = 0;
   out_info = info;
 
-  *size = allocated * sizeof (pos[0]);
-  return pos;
+  assert ((uintptr_t) pos % sizeof (scratch_buffer_t) == 0);
+  *size = allocated * sizeof (pos[0]) / sizeof (scratch_buffer_t);
+  return (scratch_buffer_t *) (void *) pos;
 }
 
 
 }
 
 
@@ -164,6 +178,8 @@ hb_buffer_t::reset (void)
 
   hb_unicode_funcs_destroy (unicode);
   unicode = hb_unicode_funcs_get_default ();
 
   hb_unicode_funcs_destroy (unicode);
   unicode = hb_unicode_funcs_get_default ();
+  flags = HB_BUFFER_FLAG_DEFAULT;
+  replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
 
   clear ();
 }
 
   clear ();
 }
@@ -176,7 +192,6 @@ hb_buffer_t::clear (void)
 
   hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
   props = default_props;
 
   hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
   props = default_props;
-  flags = HB_BUFFER_FLAGS_DEFAULT;
 
   content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
   in_error = false;
 
   content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
   in_error = false;
@@ -215,6 +230,17 @@ hb_buffer_t::add (hb_codepoint_t  codepoint,
 }
 
 void
 }
 
 void
+hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info)
+{
+  if (unlikely (!ensure (len + 1))) return;
+
+  info[len] = glyph_info;
+
+  len++;
+}
+
+
+void
 hb_buffer_t::remove_output (void)
 {
   if (unlikely (hb_object_is_inert (this)))
 hb_buffer_t::remove_output (void)
 {
   if (unlikely (hb_object_is_inert (this)))
@@ -315,7 +341,7 @@ hb_buffer_t::output_glyph (hb_codepoint_t glyph_index)
 }
 
 void
 }
 
 void
-hb_buffer_t::output_info (hb_glyph_info_t &glyph_info)
+hb_buffer_t::output_info (const hb_glyph_info_t &glyph_info)
 {
   if (unlikely (!make_room_for (0, 1))) return;
 
 {
   if (unlikely (!make_room_for (0, 1))) return;
 
@@ -334,6 +360,44 @@ hb_buffer_t::copy_glyph (void)
   out_len++;
 }
 
   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)
 {
 void
 hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index)
 {
@@ -437,6 +501,10 @@ void
 hb_buffer_t::merge_clusters (unsigned int start,
                             unsigned int end)
 {
 hb_buffer_t::merge_clusters (unsigned int start,
                             unsigned int end)
 {
+#ifdef HB_NO_MERGE_CLUSTERS
+  return;
+#endif
+
   if (unlikely (end - start < 2))
     return;
 
   if (unlikely (end - start < 2))
     return;
 
@@ -465,6 +533,10 @@ void
 hb_buffer_t::merge_out_clusters (unsigned int start,
                                 unsigned int end)
 {
 hb_buffer_t::merge_out_clusters (unsigned int start,
                                 unsigned int end)
 {
+#ifdef HB_NO_MERGE_CLUSTERS
+  return;
+#endif
+
   if (unlikely (end - start < 2))
     return;
 
   if (unlikely (end - start < 2))
     return;
 
@@ -538,7 +610,7 @@ void hb_buffer_t::allocate_var (unsigned int byte_i, unsigned int count, const c
 {
   assert (byte_i < 8 && byte_i + count <= 8);
 
 {
   assert (byte_i < 8 && byte_i + count <= 8);
 
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
   DEBUG_MSG (BUFFER, this,
             "Allocating var bytes %d..%d for %s",
     dump_var_allocation (this);
   DEBUG_MSG (BUFFER, this,
             "Allocating var bytes %d..%d for %s",
@@ -553,7 +625,7 @@ void hb_buffer_t::allocate_var (unsigned int byte_i, unsigned int count, const c
 
 void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const char *owner)
 {
 
 void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const char *owner)
 {
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
@@ -570,7 +642,7 @@ void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const
 
 void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const char *owner)
 {
 
 void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const char *owner)
 {
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
@@ -592,6 +664,15 @@ void hb_buffer_t::deallocate_var_all (void)
 
 /* Public API */
 
 
 /* Public API */
 
+/**
+ * hb_buffer_create: (Xconstructor)
+ *
+ * 
+ *
+ * Return value: (transfer full)
+ *
+ * Since: 1.0
+ **/
 hb_buffer_t *
 hb_buffer_create (void)
 {
 hb_buffer_t *
 hb_buffer_create (void)
 {
@@ -605,6 +686,15 @@ hb_buffer_create (void)
   return buffer;
 }
 
   return buffer;
 }
 
+/**
+ * hb_buffer_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_buffer_t *
 hb_buffer_get_empty (void)
 {
 hb_buffer_t *
 hb_buffer_get_empty (void)
 {
@@ -612,10 +702,11 @@ hb_buffer_get_empty (void)
     HB_OBJECT_HEADER_STATIC,
 
     const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
     HB_OBJECT_HEADER_STATIC,
 
     const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
-    HB_SEGMENT_PROPERTIES_DEFAULT,
-    HB_BUFFER_FLAGS_DEFAULT,
+    HB_BUFFER_FLAG_DEFAULT,
+    HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
 
     HB_BUFFER_CONTENT_TYPE_INVALID,
 
     HB_BUFFER_CONTENT_TYPE_INVALID,
+    HB_SEGMENT_PROPERTIES_DEFAULT,
     true, /* in_error */
     true, /* have_output */
     true  /* have_positions */
     true, /* in_error */
     true, /* have_output */
     true  /* have_positions */
@@ -626,12 +717,30 @@ hb_buffer_get_empty (void)
   return const_cast<hb_buffer_t *> (&_hb_buffer_nil);
 }
 
   return const_cast<hb_buffer_t *> (&_hb_buffer_nil);
 }
 
+/**
+ * hb_buffer_reference: (skip)
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_buffer_t *
 hb_buffer_reference (hb_buffer_t *buffer)
 {
   return hb_object_reference (buffer);
 }
 
 hb_buffer_t *
 hb_buffer_reference (hb_buffer_t *buffer)
 {
   return hb_object_reference (buffer);
 }
 
+/**
+ * hb_buffer_destroy: (skip)
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_destroy (hb_buffer_t *buffer)
 {
 void
 hb_buffer_destroy (hb_buffer_t *buffer)
 {
@@ -645,6 +754,20 @@ hb_buffer_destroy (hb_buffer_t *buffer)
   free (buffer);
 }
 
   free (buffer);
 }
 
+/**
+ * hb_buffer_set_user_data: (skip)
+ * @buffer: a buffer.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_buffer_set_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key,
 hb_bool_t
 hb_buffer_set_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key,
@@ -655,6 +778,17 @@ hb_buffer_set_user_data (hb_buffer_t        *buffer,
   return hb_object_set_user_data (buffer, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (buffer, key, data, destroy, replace);
 }
 
+/**
+ * hb_buffer_get_user_data: (skip)
+ * @buffer: a buffer.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 void *
 hb_buffer_get_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key)
 void *
 hb_buffer_get_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key)
@@ -663,6 +797,15 @@ hb_buffer_get_user_data (hb_buffer_t        *buffer,
 }
 
 
 }
 
 
+/**
+ * hb_buffer_set_content_type:
+ * @buffer: a buffer.
+ * @content_type: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_content_type (hb_buffer_t              *buffer,
                            hb_buffer_content_type_t  content_type)
 void
 hb_buffer_set_content_type (hb_buffer_t              *buffer,
                            hb_buffer_content_type_t  content_type)
@@ -670,6 +813,16 @@ hb_buffer_set_content_type (hb_buffer_t              *buffer,
   buffer->content_type = content_type;
 }
 
   buffer->content_type = content_type;
 }
 
+/**
+ * hb_buffer_get_content_type:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_buffer_content_type_t
 hb_buffer_get_content_type (hb_buffer_t *buffer)
 {
 hb_buffer_content_type_t
 hb_buffer_get_content_type (hb_buffer_t *buffer)
 {
@@ -677,28 +830,56 @@ hb_buffer_get_content_type (hb_buffer_t *buffer)
 }
 
 
 }
 
 
+/**
+ * hb_buffer_set_unicode_funcs:
+ * @buffer: a buffer.
+ * @unicode_funcs: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
 void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
-                            hb_unicode_funcs_t *unicode)
+                            hb_unicode_funcs_t *unicode_funcs)
 {
   if (unlikely (hb_object_is_inert (buffer)))
     return;
 
 {
   if (unlikely (hb_object_is_inert (buffer)))
     return;
 
-  if (!unicode)
-    unicode = hb_unicode_funcs_get_default ();
+  if (!unicode_funcs)
+    unicode_funcs = hb_unicode_funcs_get_default ();
 
 
 
 
-  hb_unicode_funcs_reference (unicode);
+  hb_unicode_funcs_reference (unicode_funcs);
   hb_unicode_funcs_destroy (buffer->unicode);
   hb_unicode_funcs_destroy (buffer->unicode);
-  buffer->unicode = unicode;
+  buffer->unicode = unicode_funcs;
 }
 
 }
 
+/**
+ * hb_buffer_get_unicode_funcs:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_unicode_funcs_t *
 hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer)
 {
   return buffer->unicode;
 }
 
 hb_unicode_funcs_t *
 hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer)
 {
   return buffer->unicode;
 }
 
+/**
+ * hb_buffer_set_direction:
+ * @buffer: a buffer.
+ * @direction: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_direction (hb_buffer_t    *buffer,
                         hb_direction_t  direction)
 void
 hb_buffer_set_direction (hb_buffer_t    *buffer,
                         hb_direction_t  direction)
@@ -710,12 +891,31 @@ hb_buffer_set_direction (hb_buffer_t    *buffer,
   buffer->props.direction = direction;
 }
 
   buffer->props.direction = direction;
 }
 
+/**
+ * hb_buffer_get_direction:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_direction_t
 hb_buffer_get_direction (hb_buffer_t    *buffer)
 {
   return buffer->props.direction;
 }
 
 hb_direction_t
 hb_buffer_get_direction (hb_buffer_t    *buffer)
 {
   return buffer->props.direction;
 }
 
+/**
+ * hb_buffer_set_script:
+ * @buffer: a buffer.
+ * @script: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_script (hb_buffer_t *buffer,
                      hb_script_t  script)
 void
 hb_buffer_set_script (hb_buffer_t *buffer,
                      hb_script_t  script)
@@ -726,12 +926,31 @@ hb_buffer_set_script (hb_buffer_t *buffer,
   buffer->props.script = script;
 }
 
   buffer->props.script = script;
 }
 
+/**
+ * hb_buffer_get_script:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_script_t
 hb_buffer_get_script (hb_buffer_t *buffer)
 {
   return buffer->props.script;
 }
 
 hb_script_t
 hb_buffer_get_script (hb_buffer_t *buffer)
 {
   return buffer->props.script;
 }
 
+/**
+ * hb_buffer_set_language:
+ * @buffer: a buffer.
+ * @language: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_language (hb_buffer_t   *buffer,
                        hb_language_t  language)
 void
 hb_buffer_set_language (hb_buffer_t   *buffer,
                        hb_language_t  language)
@@ -742,12 +961,31 @@ hb_buffer_set_language (hb_buffer_t   *buffer,
   buffer->props.language = language;
 }
 
   buffer->props.language = language;
 }
 
+/**
+ * hb_buffer_get_language:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_language_t
 hb_buffer_get_language (hb_buffer_t *buffer)
 {
   return buffer->props.language;
 }
 
 hb_language_t
 hb_buffer_get_language (hb_buffer_t *buffer)
 {
   return buffer->props.language;
 }
 
+/**
+ * hb_buffer_set_segment_properties:
+ * @buffer: a buffer.
+ * @props: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_segment_properties (hb_buffer_t *buffer,
                                  const hb_segment_properties_t *props)
 void
 hb_buffer_set_segment_properties (hb_buffer_t *buffer,
                                  const hb_segment_properties_t *props)
@@ -758,6 +996,15 @@ hb_buffer_set_segment_properties (hb_buffer_t *buffer,
   buffer->props = *props;
 }
 
   buffer->props = *props;
 }
 
+/**
+ * hb_buffer_get_segment_properties:
+ * @buffer: a buffer.
+ * @props: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_get_segment_properties (hb_buffer_t *buffer,
                                  hb_segment_properties_t *props)
 void
 hb_buffer_get_segment_properties (hb_buffer_t *buffer,
                                  hb_segment_properties_t *props)
@@ -766,6 +1013,15 @@ hb_buffer_get_segment_properties (hb_buffer_t *buffer,
 }
 
 
 }
 
 
+/**
+ * hb_buffer_set_flags:
+ * @buffer: a buffer.
+ * @flags: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_set_flags (hb_buffer_t       *buffer,
                     hb_buffer_flags_t  flags)
 void
 hb_buffer_set_flags (hb_buffer_t       *buffer,
                     hb_buffer_flags_t  flags)
@@ -776,6 +1032,16 @@ hb_buffer_set_flags (hb_buffer_t       *buffer,
   buffer->flags = flags;
 }
 
   buffer->flags = flags;
 }
 
+/**
+ * hb_buffer_get_flags:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_buffer_flags_t
 hb_buffer_get_flags (hb_buffer_t *buffer)
 {
 hb_buffer_flags_t
 hb_buffer_get_flags (hb_buffer_t *buffer)
 {
@@ -783,30 +1049,113 @@ hb_buffer_get_flags (hb_buffer_t *buffer)
 }
 
 
 }
 
 
+/**
+ * hb_buffer_set_replacement_codepoint:
+ * @buffer: a buffer.
+ * @replacement: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_buffer_set_replacement_codepoint (hb_buffer_t    *buffer,
+                                    hb_codepoint_t  replacement)
+{
+  if (unlikely (hb_object_is_inert (buffer)))
+    return;
+
+  buffer->replacement = replacement;
+}
+
+/**
+ * hb_buffer_get_replacement_codepoint:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_codepoint_t
+hb_buffer_get_replacement_codepoint (hb_buffer_t    *buffer)
+{
+  return buffer->replacement;
+}
+
+
+/**
+ * hb_buffer_reset:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_reset (hb_buffer_t *buffer)
 {
   buffer->reset ();
 }
 
 void
 hb_buffer_reset (hb_buffer_t *buffer)
 {
   buffer->reset ();
 }
 
+/**
+ * hb_buffer_clear_contents:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_clear_contents (hb_buffer_t *buffer)
 {
   buffer->clear ();
 }
 
 void
 hb_buffer_clear_contents (hb_buffer_t *buffer)
 {
   buffer->clear ();
 }
 
+/**
+ * hb_buffer_pre_allocate:
+ * @buffer: a buffer.
+ * @size: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
 {
   return buffer->ensure (size);
 }
 
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
 {
   return buffer->ensure (size);
 }
 
+/**
+ * hb_buffer_allocation_successful:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_buffer_allocation_successful (hb_buffer_t  *buffer)
 {
   return !buffer->in_error;
 }
 
 hb_bool_t
 hb_buffer_allocation_successful (hb_buffer_t  *buffer)
 {
   return !buffer->in_error;
 }
 
+/**
+ * hb_buffer_add:
+ * @buffer: a buffer.
+ * @codepoint: 
+ * @cluster: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_add (hb_buffer_t    *buffer,
               hb_codepoint_t  codepoint,
 void
 hb_buffer_add (hb_buffer_t    *buffer,
               hb_codepoint_t  codepoint,
@@ -816,6 +1165,17 @@ hb_buffer_add (hb_buffer_t    *buffer,
   buffer->clear_context (1);
 }
 
   buffer->clear_context (1);
 }
 
+/**
+ * hb_buffer_set_length:
+ * @buffer: a buffer.
+ * @length: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_buffer_set_length (hb_buffer_t  *buffer,
                      unsigned int  length)
 hb_bool_t
 hb_buffer_set_length (hb_buffer_t  *buffer,
                      unsigned int  length)
@@ -836,19 +1196,43 @@ hb_buffer_set_length (hb_buffer_t  *buffer,
   buffer->len = length;
 
   if (!length)
   buffer->len = length;
 
   if (!length)
+  {
+    buffer->content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
     buffer->clear_context (0);
     buffer->clear_context (0);
+  }
   buffer->clear_context (1);
 
   return true;
 }
 
   buffer->clear_context (1);
 
   return true;
 }
 
+/**
+ * hb_buffer_get_length:
+ * @buffer: a buffer.
+ *
+ * Returns the number of items in the buffer.
+ *
+ * Return value: buffer length.
+ *
+ * Since: 1.0
+ **/
 unsigned int
 hb_buffer_get_length (hb_buffer_t *buffer)
 {
   return buffer->len;
 }
 
 unsigned int
 hb_buffer_get_length (hb_buffer_t *buffer)
 {
   return buffer->len;
 }
 
-/* Return value valid as long as buffer not modified */
+/**
+ * hb_buffer_get_glyph_infos:
+ * @buffer: a buffer.
+ * @length: (out): output array length.
+ *
+ * Returns buffer glyph information array.  Returned pointer
+ * is valid as long as buffer contents are not modified.
+ *
+ * Return value: (transfer none) (array length=length): buffer glyph information array.
+ *
+ * Since: 1.0
+ **/
 hb_glyph_info_t *
 hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
                            unsigned int *length)
 hb_glyph_info_t *
 hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
                            unsigned int *length)
@@ -859,7 +1243,18 @@ hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
   return (hb_glyph_info_t *) buffer->info;
 }
 
   return (hb_glyph_info_t *) buffer->info;
 }
 
-/* Return value valid as long as buffer not modified */
+/**
+ * hb_buffer_get_glyph_positions:
+ * @buffer: a buffer.
+ * @length: (out): output length.
+ *
+ * Returns buffer glyph position array.  Returned pointer
+ * is valid as long as buffer contents are not modified.
+ *
+ * Return value: (transfer none) (array length=length): buffer glyph position array.
+ *
+ * Since: 1.0
+ **/
 hb_glyph_position_t *
 hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
                                unsigned int *length)
 hb_glyph_position_t *
 hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
                                unsigned int *length)
@@ -873,25 +1268,67 @@ hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
   return (hb_glyph_position_t *) buffer->pos;
 }
 
   return (hb_glyph_position_t *) buffer->pos;
 }
 
+/**
+ * hb_buffer_reverse:
+ * @buffer: a buffer.
+ *
+ * Reverses buffer contents.
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_reverse (hb_buffer_t *buffer)
 {
   buffer->reverse ();
 }
 
 void
 hb_buffer_reverse (hb_buffer_t *buffer)
 {
   buffer->reverse ();
 }
 
+/**
+ * hb_buffer_reverse_clusters:
+ * @buffer: a buffer.
+ *
+ * Reverses buffer clusters.  That is, the buffer contents are
+ * reversed, then each cluster (consecutive items having the
+ * same cluster number) are reversed again.
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_reverse_clusters (hb_buffer_t *buffer)
 {
   buffer->reverse_clusters ();
 }
 
 void
 hb_buffer_reverse_clusters (hb_buffer_t *buffer)
 {
   buffer->reverse_clusters ();
 }
 
+/**
+ * hb_buffer_guess_segment_properties:
+ * @buffer: a buffer.
+ *
+ * Sets unset buffer segment properties based on buffer Unicode
+ * contents.  If buffer is not empty, it must have content type
+ * %HB_BUFFER_CONTENT_TYPE_UNICODE.
+ *
+ * If buffer script is not set (ie. is %HB_SCRIPT_INVALID), it
+ * will be set to the Unicode script of the first character in
+ * the buffer that has a script other than %HB_SCRIPT_COMMON,
+ * %HB_SCRIPT_INHERITED, and %HB_SCRIPT_UNKNOWN.
+ *
+ * Next, if buffer direction is not set (ie. is %HB_DIRECTION_INVALID),
+ * it will be set to the natural horizontal direction of the
+ * buffer script as returned by hb_script_get_horizontal_direction().
+ *
+ * Finally, if buffer language is not set (ie. is %HB_LANGUAGE_INVALID),
+ * it will be set to the process's default language as returned by
+ * hb_language_get_default().  This may change in the future by
+ * taking buffer script into consideration when choosing a language.
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
 {
   buffer->guess_segment_properties ();
 }
 
 void
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
 {
   buffer->guess_segment_properties ();
 }
 
-template <typename T>
+template <bool validate, typename T>
 static inline void
 hb_buffer_add_utf (hb_buffer_t  *buffer,
                   const T      *text,
 static inline void
 hb_buffer_add_utf (hb_buffer_t  *buffer,
                   const T      *text,
@@ -899,6 +1336,9 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
                   unsigned int  item_offset,
                   int           item_length)
 {
                   unsigned int  item_offset,
                   int           item_length)
 {
+  typedef hb_utf_t<T, true> utf_t;
+  const hb_codepoint_t replacement = buffer->replacement;
+
   assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
          (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
 
   assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
          (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
 
@@ -906,7 +1346,7 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
     return;
 
   if (text_length == -1)
     return;
 
   if (text_length == -1)
-    text_length = hb_utf_strlen (text);
+    text_length = utf_t::strlen (text);
 
   if (item_length == -1)
     item_length = text_length - item_offset;
 
   if (item_length == -1)
     item_length = text_length - item_offset;
@@ -929,7 +1369,7 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
     while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
     {
       hb_codepoint_t u;
     while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
     {
       hb_codepoint_t u;
-      prev = hb_utf_prev (prev, start, &u);
+      prev = utf_t::prev (prev, start, &u, replacement);
       buffer->context[0][buffer->context_len[0]++] = u;
     }
   }
       buffer->context[0][buffer->context_len[0]++] = u;
     }
   }
@@ -940,7 +1380,7 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
   {
     hb_codepoint_t u;
     const T *old_next = next;
   {
     hb_codepoint_t u;
     const T *old_next = next;
-    next = hb_utf_next (next, end, &u);
+    next = utf_t::next (next, end, &u, replacement);
     buffer->add (u, old_next - (const T *) text);
   }
 
     buffer->add (u, old_next - (const T *) text);
   }
 
@@ -950,13 +1390,25 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
   while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
   {
     hb_codepoint_t u;
   while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
   {
     hb_codepoint_t u;
-    next = hb_utf_next (next, end, &u);
+    next = utf_t::next (next, end, &u, replacement);
     buffer->context[1][buffer->context_len[1]++] = u;
   }
 
   buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
 }
 
     buffer->context[1][buffer->context_len[1]++] = u;
   }
 
   buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
 }
 
+/**
+ * hb_buffer_add_utf8:
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    const char   *text,
 void
 hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    const char   *text,
@@ -964,19 +1416,43 @@ hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    unsigned int  item_offset,
                    int           item_length)
 {
                    unsigned int  item_offset,
                    int           item_length)
 {
-  hb_buffer_add_utf (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
+  hb_buffer_add_utf<true> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
 }
 
 }
 
+/**
+ * hb_buffer_add_utf16:
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_add_utf16 (hb_buffer_t    *buffer,
                     const uint16_t *text,
                     int             text_length,
                     unsigned int    item_offset,
 void
 hb_buffer_add_utf16 (hb_buffer_t    *buffer,
                     const uint16_t *text,
                     int             text_length,
                     unsigned int    item_offset,
-                    int            item_length)
+                    int             item_length)
 {
 {
-  hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
+  hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
 }
 
 }
 
+/**
+ * hb_buffer_add_utf32:
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     const uint32_t *text,
 void
 hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     const uint32_t *text,
@@ -984,7 +1460,29 @@ hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     unsigned int    item_offset,
                     int             item_length)
 {
                     unsigned int    item_offset,
                     int             item_length)
 {
-  hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
+  hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
+}
+
+/**
+ * hb_buffer_add_codepoints:
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_buffer_add_codepoints (hb_buffer_t          *buffer,
+                         const hb_codepoint_t *text,
+                         int                   text_length,
+                         unsigned int          item_offset,
+                         int                   item_length)
+{
+  hb_buffer_add_utf<false> (buffer, text, text_length, item_offset, item_length);
 }
 
 
 }
 
 
@@ -1043,6 +1541,14 @@ normalize_glyphs_cluster (hb_buffer_t *buffer,
   }
 }
 
   }
 }
 
+/**
+ * hb_buffer_normalize_glyphs:
+ * @buffer: a buffer.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
 {
 void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
 {
@@ -1064,231 +1570,3 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
     }
   normalize_glyphs_cluster (buffer, start, end, backward);
 }
     }
   normalize_glyphs_cluster (buffer, start, end, backward);
 }
-
-
-/*
- * Serialize
- */
-
-static const char *serialize_formats[] = {
-  "text",
-  "json",
-  NULL
-};
-
-const char **
-hb_buffer_serialize_list_formats (void)
-{
-  return serialize_formats;
-}
-
-hb_buffer_serialize_format_t
-hb_buffer_serialize_format_from_string (const char *str, int len)
-{
-  /* Upper-case it. */
-  return (hb_buffer_serialize_format_t) (hb_tag_from_string (str, len) & ~0x20202020);
-}
-
-const char *
-hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
-{
-  switch (format)
-  {
-    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:      return serialize_formats[0];
-    case HB_BUFFER_SERIALIZE_FORMAT_JSON:      return serialize_formats[1];
-    default:
-    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:   return NULL;
-  }
-}
-
-static unsigned int
-_hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
-                                 unsigned int start,
-                                 unsigned int end,
-                                 char *buf,
-                                 unsigned int buf_size,
-                                 unsigned int *buf_consumed,
-                                 hb_font_t *font,
-                                 hb_buffer_serialize_flags_t flags)
-{
-  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
-  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
-
-  *buf_consumed = 0;
-  for (unsigned int i = start; i < end; i++)
-  {
-    char b[1024];
-    char *p = b;
-
-    /* In the following code, we know b is large enough that no overflow can happen. */
-
-#define APPEND(s) HB_STMT_START { strcpy (p, s); p += strlen (s); } HB_STMT_END
-
-    if (i)
-      *p++ = ',';
-
-    *p++ = '{';
-
-    APPEND ("\"g\":");
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
-    {
-      char g[128];
-      hb_font_glyph_to_string (font, info[i].codepoint, g, sizeof (g));
-      *p++ = '"';
-      for (char *q = g; *q; q++) {
-        if (*q == '"')
-         *p++ = '\\';
-       *p++ = *q;
-      }
-      *p++ = '"';
-    }
-    else
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
-
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"cl\":%u", info[i].cluster);
-    }
-
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
-    {
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
-                    pos[i].x_offset, pos[i].y_offset);
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
-                    pos[i].x_advance, pos[i].y_advance);
-    }
-
-    *p++ = '}';
-
-    if (buf_size > (p - b))
-    {
-      unsigned int l = p - b;
-      memcpy (buf, b, l);
-      buf += l;
-      buf_size -= l;
-      *buf_consumed += l;
-      *buf = '\0';
-    } else
-      return i - start;
-  }
-
-  return end - start;
-}
-
-static unsigned int
-_hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
-                                 unsigned int start,
-                                 unsigned int end,
-                                 char *buf,
-                                 unsigned int buf_size,
-                                 unsigned int *buf_consumed,
-                                 hb_font_t *font,
-                                 hb_buffer_serialize_flags_t flags)
-{
-  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
-  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
-  hb_direction_t direction = hb_buffer_get_direction (buffer);
-
-  *buf_consumed = 0;
-  for (unsigned int i = start; i < end; i++)
-  {
-    char b[1024];
-    char *p = b;
-
-    /* In the following code, we know b is large enough that no overflow can happen. */
-
-    if (i)
-      *p++ = '|';
-
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
-    {
-      hb_font_glyph_to_string (font, info[i].codepoint, p, 128);
-      p += strlen (p);
-    }
-    else
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
-
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
-      p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster);
-    }
-
-    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
-    {
-      if (pos[i].x_offset || pos[i].y_offset)
-       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset);
-
-      *p++ = '+';
-      if (HB_DIRECTION_IS_HORIZONTAL (direction) || pos[i].x_advance)
-       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance);
-      if (HB_DIRECTION_IS_VERTICAL (direction) || pos->y_advance)
-       p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance);
-    }
-
-    if (buf_size > (p - b))
-    {
-      unsigned int l = p - b;
-      memcpy (buf, b, l);
-      buf += l;
-      buf_size -= l;
-      *buf_consumed += l;
-      *buf = '\0';
-    } else
-      return i - start;
-  }
-
-  return end - start;
-}
-
-/* Returns number of items, starting at start, that were serialized. */
-unsigned int
-hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
-                           unsigned int start,
-                           unsigned int end,
-                           char *buf,
-                           unsigned int buf_size,
-                           unsigned int *buf_consumed,
-                           hb_font_t *font, /* May be NULL */
-                           hb_buffer_serialize_format_t format,
-                           hb_buffer_serialize_flags_t flags)
-{
-  assert (start <= end && end <= buffer->len);
-
-  *buf_consumed = 0;
-
-  assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
-         buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
-
-  if (unlikely (start == end))
-    return 0;
-
-  if (!font)
-    font = hb_font_get_empty ();
-
-  switch (format)
-  {
-    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
-      return _hb_buffer_serialize_glyphs_text (buffer, start, end,
-                                              buf, buf_size, buf_consumed,
-                                              font, flags);
-
-    case HB_BUFFER_SERIALIZE_FORMAT_JSON:
-      return _hb_buffer_serialize_glyphs_json (buffer, start, end,
-                                              buf, buf_size, buf_consumed,
-                                              font, flags);
-
-    default:
-    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
-      return 0;
-
-  }
-}
-
-hb_bool_t
-hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
-                             const char *buf,
-                             unsigned int buf_len,
-                             unsigned int *buf_consumed,
-                             hb_font_t *font, /* May be NULL */
-                             hb_buffer_serialize_format_t format)
-{
-  return false;
-}
index 5386e36..7b0c920 100644 (file)
@@ -171,11 +171,11 @@ void
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
 
 
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
 
 
-typedef enum {
-  HB_BUFFER_FLAGS_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
+typedef enum { /*< flags >*/
+  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
 } hb_buffer_flags_t;
 
 void
@@ -186,12 +186,25 @@ hb_buffer_flags_t
 hb_buffer_get_flags (hb_buffer_t *buffer);
 
 
 hb_buffer_get_flags (hb_buffer_t *buffer);
 
 
+
+#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
+
+/* Sets codepoint used to replace invalid UTF-8/16/32 entries.
+ * Default is 0xFFFDu. */
+void
+hb_buffer_set_replacement_codepoint (hb_buffer_t    *buffer,
+                                    hb_codepoint_t  replacement);
+
+hb_codepoint_t
+hb_buffer_get_replacement_codepoint (hb_buffer_t    *buffer);
+
+
 /* Resets the buffer.  Afterwards it's as if it was just created,
  * except that it has a larger buffer allocated perhaps... */
 void
 hb_buffer_reset (hb_buffer_t *buffer);
 
 /* Resets the buffer.  Afterwards it's as if it was just created,
  * except that it has a larger buffer allocated perhaps... */
 void
 hb_buffer_reset (hb_buffer_t *buffer);
 
-/* Like reset, but does NOT clear unicode_funcs. */
+/* Like reset, but does NOT clear unicode_funcs and replacement_codepoint. */
 void
 hb_buffer_clear_contents (hb_buffer_t *buffer);
 
 void
 hb_buffer_clear_contents (hb_buffer_t *buffer);
 
@@ -240,6 +253,14 @@ hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     unsigned int    item_offset,
                     int             item_length);
 
                     unsigned int    item_offset,
                     int             item_length);
 
+/* Like add_utf32 but does NOT check for invalid Unicode codepoints. */
+void
+hb_buffer_add_codepoints (hb_buffer_t          *buffer,
+                         const hb_codepoint_t *text,
+                         int                   text_length,
+                         unsigned int          item_offset,
+                         int                   item_length);
+
 
 /* Clears any new items added at the end */
 hb_bool_t
 
 /* Clears any new items added at the end */
 hb_bool_t
@@ -274,11 +295,11 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
  * Serialize
  */
 
  * Serialize
  */
 
-typedef enum {
-  HB_BUFFER_SERIALIZE_FLAGS_DEFAULT            = 0x00000000,
-  HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS         = 0x00000001,
-  HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS                = 0x00000002,
-  HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES      = 0x00000004
+typedef enum { /*< flags >*/
+  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 {
 } hb_buffer_serialize_flags_t;
 
 typedef enum {
@@ -304,7 +325,7 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
                            unsigned int end,
                            char *buf,
                            unsigned int buf_size,
                            unsigned int end,
                            char *buf,
                            unsigned int buf_size,
-                           unsigned int *buf_consumed,
+                           unsigned int *buf_consumed, /* May be NULL */
                            hb_font_t *font, /* May be NULL */
                            hb_buffer_serialize_format_t format,
                            hb_buffer_serialize_flags_t flags);
                            hb_font_t *font, /* May be NULL */
                            hb_buffer_serialize_format_t format,
                            hb_buffer_serialize_flags_t flags);
@@ -312,8 +333,8 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
 hb_bool_t
 hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
                              const char *buf,
 hb_bool_t
 hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
                              const char *buf,
-                             unsigned int buf_len,
-                             unsigned int *buf_consumed,
+                             int buf_len, /* -1 means nul-terminated */
+                             const char **end_ptr, /* May be NULL */
                              hb_font_t *font, /* May be NULL */
                              hb_buffer_serialize_format_t format);
 
                              hb_font_t *font, /* May be NULL */
                              hb_buffer_serialize_format_t format);
 
index 9422555..a6a5144 100644 (file)
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-version.h"
-
 #include "hb-mutex-private.hh"
 #include "hb-object-private.hh"
 
 #include <locale.h>
 
 
 #include "hb-mutex-private.hh"
 #include "hb-object-private.hh"
 
 #include <locale.h>
 
 
+/* hb_options_t */
+
+hb_options_union_t _hb_options;
+
+void
+_hb_options_init (void)
+{
+  hb_options_union_t u;
+  u.i = 0;
+  u.opts.initialized = 1;
+
+  char *c = getenv ("HB_OPTIONS");
+  u.opts.uniscribe_bug_compatible = c && strstr (c, "uniscribe-bug-compatible");
+
+  /* This is idempotent and threadsafe. */
+  _hb_options = u;
+}
+
 
 /* hb_tag_t */
 
 
 /* hb_tag_t */
 
+/**
+ * hb_tag_from_string:
+ * @str: (array length=len): 
+ * @len: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_tag_t
 hb_tag_t
-hb_tag_from_string (const char *s, int len)
+hb_tag_from_string (const char *str, int len)
 {
   char tag[4];
   unsigned int i;
 
 {
   char tag[4];
   unsigned int i;
 
-  if (!s || !len || !*s)
+  if (!str || !len || !*str)
     return HB_TAG_NONE;
 
   if (len < 0 || len > 4)
     len = 4;
     return HB_TAG_NONE;
 
   if (len < 0 || len > 4)
     len = 4;
-  for (i = 0; i < (unsigned) len && s[i]; i++)
-    tag[i] = s[i];
+  for (i = 0; i < (unsigned) len && str[i]; i++)
+    tag[i] = str[i];
   for (; i < 4; i++)
     tag[i] = ' ';
 
   return HB_TAG_CHAR4 (tag);
 }
 
   for (; i < 4; i++)
     tag[i] = ' ';
 
   return HB_TAG_CHAR4 (tag);
 }
 
+/**
+ * hb_tag_to_string:
+ * @tag: 
+ * @buf: (array fixed-size=4): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_tag_to_string (hb_tag_t tag, char *buf)
 {
 void
 hb_tag_to_string (hb_tag_t tag, char *buf)
 {
@@ -77,6 +113,17 @@ const char direction_strings[][4] = {
   "btt"
 };
 
   "btt"
 };
 
+/**
+ * hb_direction_from_string:
+ * @str: (array length=len): 
+ * @len: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_direction_t
 hb_direction_from_string (const char *str, int len)
 {
 hb_direction_t
 hb_direction_from_string (const char *str, int len)
 {
@@ -94,6 +141,16 @@ hb_direction_from_string (const char *str, int len)
   return HB_DIRECTION_INVALID;
 }
 
   return HB_DIRECTION_INVALID;
 }
 
+/**
+ * hb_direction_to_string:
+ * @direction: 
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 const char *
 hb_direction_to_string (hb_direction_t direction)
 {
 const char *
 hb_direction_to_string (hb_direction_t direction)
 {
@@ -169,7 +226,7 @@ struct hb_language_item_t {
     return *this;
   }
 
     return *this;
   }
 
-  void finish (void) { free (lang); }
+  void finish (void) { free ((void *) lang); }
 };
 
 
 };
 
 
@@ -177,7 +234,8 @@ struct hb_language_item_t {
 
 static hb_language_item_t *langs;
 
 
 static hb_language_item_t *langs;
 
-static
+#ifdef HB_USE_ATEXIT
+static inline
 void free_langs (void)
 {
   while (langs) {
 void free_langs (void)
 {
   while (langs) {
@@ -187,6 +245,7 @@ void free_langs (void)
     langs = next;
   }
 }
     langs = next;
   }
 }
+#endif
 
 static hb_language_item_t *
 lang_find_or_insert (const char *key)
 
 static hb_language_item_t *
 lang_find_or_insert (const char *key)
@@ -210,7 +269,7 @@ retry:
     goto retry;
   }
 
     goto retry;
   }
 
-#ifdef HAVE_ATEXIT
+#ifdef HB_USE_ATEXIT
   if (!first_lang)
     atexit (free_langs); /* First person registers atexit() callback. */
 #endif
   if (!first_lang)
     atexit (free_langs); /* First person registers atexit() callback. */
 #endif
@@ -219,17 +278,32 @@ retry:
 }
 
 
 }
 
 
+/**
+ * hb_language_from_string:
+ * @str: (array length=len): 
+ * @len: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_language_t
 hb_language_from_string (const char *str, int len)
 {
 hb_language_t
 hb_language_from_string (const char *str, int len)
 {
+  char strbuf[64];
+
   if (!str || !len || !*str)
     return HB_LANGUAGE_INVALID;
 
   if (!str || !len || !*str)
     return HB_LANGUAGE_INVALID;
 
-  char strbuf[32];
-  if (len >= 0) {
+  if (len >= 0)
+  {
+    /* NUL-terminate it. */
     len = MIN (len, (int) sizeof (strbuf) - 1);
     len = MIN (len, (int) sizeof (strbuf) - 1);
-    str = (char *) memcpy (strbuf, str, len);
+    memcpy (strbuf, str, len);
     strbuf[len] = '\0';
     strbuf[len] = '\0';
+    str = strbuf;
   }
 
   hb_language_item_t *item = lang_find_or_insert (str);
   }
 
   hb_language_item_t *item = lang_find_or_insert (str);
@@ -237,6 +311,16 @@ hb_language_from_string (const char *str, int len)
   return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
 }
 
   return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
 }
 
+/**
+ * hb_language_to_string:
+ * @language: 
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 const char *
 hb_language_to_string (hb_language_t language)
 {
 const char *
 hb_language_to_string (hb_language_t language)
 {
@@ -244,6 +328,15 @@ hb_language_to_string (hb_language_t language)
   return language->s;
 }
 
   return language->s;
 }
 
+/**
+ * hb_language_get_default:
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_language_t
 hb_language_get_default (void)
 {
 hb_language_t
 hb_language_get_default (void)
 {
@@ -261,6 +354,16 @@ hb_language_get_default (void)
 
 /* hb_script_t */
 
 
 /* hb_script_t */
 
+/**
+ * hb_script_from_iso15924_tag:
+ * @tag: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag)
 {
 hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag)
 {
@@ -268,7 +371,7 @@ hb_script_from_iso15924_tag (hb_tag_t tag)
     return HB_SCRIPT_INVALID;
 
   /* Be lenient, adjust case (one capital letter followed by three small letters) */
     return HB_SCRIPT_INVALID;
 
   /* Be lenient, adjust case (one capital letter followed by three small letters) */
-  tag = (tag & 0xDFDFDFDF) | 0x00202020;
+  tag = (tag & 0xDFDFDFDFu) | 0x00202020u;
 
   switch (tag) {
 
 
   switch (tag) {
 
@@ -288,25 +391,56 @@ hb_script_from_iso15924_tag (hb_tag_t tag)
   }
 
   /* If it looks right, just use the tag as a script */
   }
 
   /* If it looks right, just use the tag as a script */
-  if (((uint32_t) tag & 0xE0E0E0E0) == 0x40606060)
+  if (((uint32_t) tag & 0xE0E0E0E0u) == 0x40606060u)
     return (hb_script_t) tag;
 
   /* Otherwise, return unknown */
   return HB_SCRIPT_UNKNOWN;
 }
 
     return (hb_script_t) tag;
 
   /* Otherwise, return unknown */
   return HB_SCRIPT_UNKNOWN;
 }
 
+/**
+ * hb_script_from_string:
+ * @s: (array length=len): 
+ * @len: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_script_t
 hb_script_from_string (const char *s, int len)
 {
   return hb_script_from_iso15924_tag (hb_tag_from_string (s, len));
 }
 
 hb_script_t
 hb_script_from_string (const char *s, int len)
 {
   return hb_script_from_iso15924_tag (hb_tag_from_string (s, len));
 }
 
+/**
+ * hb_script_to_iso15924_tag:
+ * @script: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_tag_t
 hb_script_to_iso15924_tag (hb_script_t script)
 {
   return (hb_tag_t) script;
 }
 
 hb_tag_t
 hb_script_to_iso15924_tag (hb_script_t script)
 {
   return (hb_tag_t) script;
 }
 
+/**
+ * hb_script_get_horizontal_direction:
+ * @script: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_direction_t
 hb_script_get_horizontal_direction (hb_script_t script)
 {
 hb_direction_t
 hb_script_get_horizontal_direction (hb_script_t script)
 {
@@ -350,6 +484,14 @@ hb_script_get_horizontal_direction (hb_script_t script)
     case HB_SCRIPT_MEROITIC_CURSIVE:
     case HB_SCRIPT_MEROITIC_HIEROGLYPHS:
 
     case HB_SCRIPT_MEROITIC_CURSIVE:
     case HB_SCRIPT_MEROITIC_HIEROGLYPHS:
 
+    /* Unicode-7.0 additions */
+    case HB_SCRIPT_MANICHAEAN:
+    case HB_SCRIPT_MENDE_KIKAKUI:
+    case HB_SCRIPT_NABATAEAN:
+    case HB_SCRIPT_OLD_NORTH_ARABIAN:
+    case HB_SCRIPT_PALMYRENE:
+    case HB_SCRIPT_PSALTER_PAHLAVI:
+
       return HB_DIRECTION_RTL;
   }
 
       return HB_DIRECTION_RTL;
   }
 
@@ -391,6 +533,16 @@ hb_user_data_array_t::get (hb_user_data_key_t *key)
 
 /* hb_version */
 
 
 /* hb_version */
 
+/**
+ * hb_version:
+ * @major: (out): Library major version component.
+ * @minor: (out): Library minor version component.
+ * @micro: (out): Library micro version component.
+ *
+ * Returns library version as three integer components.
+ *
+ * Since: 1.0
+ **/
 void
 hb_version (unsigned int *major,
            unsigned int *minor,
 void
 hb_version (unsigned int *major,
            unsigned int *minor,
@@ -401,18 +553,37 @@ hb_version (unsigned int *major,
   *micro = HB_VERSION_MICRO;
 }
 
   *micro = HB_VERSION_MICRO;
 }
 
+/**
+ * hb_version_string:
+ *
+ * Returns library version as a string with three components.
+ *
+ * Return value: library version string.
+ *
+ * Since: 1.0
+ **/
 const char *
 hb_version_string (void)
 {
   return HB_VERSION_STRING;
 }
 
 const char *
 hb_version_string (void)
 {
   return HB_VERSION_STRING;
 }
 
+/**
+ * hb_version_atleast:
+ * @major: 
+ * @minor: 
+ * @micro: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_bool_t
-hb_version_check (unsigned int major,
-                 unsigned int minor,
-                 unsigned int micro)
+hb_version_atleast (unsigned int major,
+                   unsigned int minor,
+                   unsigned int micro)
 {
 {
-  return HB_VERSION_CHECK (major, minor, micro);
+  return HB_VERSION_ATLEAST (major, minor, micro);
 }
 }
-
-
index cc221d3..b6ce3f7 100644 (file)
@@ -90,10 +90,12 @@ typedef union _hb_var_int_t {
 
 typedef uint32_t hb_tag_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)
 #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)
+#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)
+#define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)
 
 /* len=-1 means str is NUL-terminated. */
 hb_tag_t
 
 /* len=-1 means str is NUL-terminated. */
 hb_tag_t
@@ -121,17 +123,18 @@ hb_direction_from_string (const char *str, int len);
 const char *
 hb_direction_to_string (hb_direction_t direction);
 
 const char *
 hb_direction_to_string (hb_direction_t direction);
 
+#define HB_DIRECTION_IS_VALID(dir)     ((((unsigned int) (dir)) & ~3U) == 4)
+/* Direction must be valid for the following */
 #define HB_DIRECTION_IS_HORIZONTAL(dir)        ((((unsigned int) (dir)) & ~1U) == 4)
 #define HB_DIRECTION_IS_VERTICAL(dir)  ((((unsigned int) (dir)) & ~1U) == 6)
 #define HB_DIRECTION_IS_FORWARD(dir)   ((((unsigned int) (dir)) & ~2U) == 4)
 #define HB_DIRECTION_IS_BACKWARD(dir)  ((((unsigned int) (dir)) & ~2U) == 5)
 #define HB_DIRECTION_IS_HORIZONTAL(dir)        ((((unsigned int) (dir)) & ~1U) == 4)
 #define HB_DIRECTION_IS_VERTICAL(dir)  ((((unsigned int) (dir)) & ~1U) == 6)
 #define HB_DIRECTION_IS_FORWARD(dir)   ((((unsigned int) (dir)) & ~2U) == 4)
 #define HB_DIRECTION_IS_BACKWARD(dir)  ((((unsigned int) (dir)) & ~2U) == 5)
-#define HB_DIRECTION_IS_VALID(dir)     ((((unsigned int) (dir)) & ~3U) == 4)
-#define HB_DIRECTION_REVERSE(dir)      ((hb_direction_t) (((unsigned int) (dir)) ^ 1)) /* Direction must be valid */
+#define HB_DIRECTION_REVERSE(dir)      ((hb_direction_t) (((unsigned int) (dir)) ^ 1))
 
 
 /* hb_language_t */
 
 
 
 /* hb_language_t */
 
-typedef struct hb_language_impl_t *hb_language_t;
+typedef const struct hb_language_impl_t *hb_language_t;
 
 /* len=-1 means str is NUL-terminated */
 hb_language_t
 
 /* len=-1 means str is NUL-terminated */
 hb_language_t
@@ -153,135 +156,159 @@ hb_language_get_default (void);
 /* Unicode Character Database property: Script (sc) */
 typedef enum
 {
 /* Unicode Character Database property: Script (sc) */
 typedef enum
 {
-  /* Unicode-1.1 additions */
-  HB_SCRIPT_COMMON                     = HB_TAG ('Z','y','y','y'),
-  HB_SCRIPT_ARABIC                     = HB_TAG ('A','r','a','b'),
-  HB_SCRIPT_ARMENIAN                   = HB_TAG ('A','r','m','n'),
-  HB_SCRIPT_BENGALI                    = HB_TAG ('B','e','n','g'),
-  HB_SCRIPT_BOPOMOFO                   = HB_TAG ('B','o','p','o'),
-  HB_SCRIPT_CANADIAN_ABORIGINAL                = HB_TAG ('C','a','n','s'),
-  HB_SCRIPT_CHEROKEE                   = HB_TAG ('C','h','e','r'),
-  HB_SCRIPT_COPTIC                     = HB_TAG ('C','o','p','t'),
-  HB_SCRIPT_CYRILLIC                   = HB_TAG ('C','y','r','l'),
-  HB_SCRIPT_DEVANAGARI                 = HB_TAG ('D','e','v','a'),
-  HB_SCRIPT_GEORGIAN                   = HB_TAG ('G','e','o','r'),
-  HB_SCRIPT_GREEK                      = HB_TAG ('G','r','e','k'),
-  HB_SCRIPT_GUJARATI                   = HB_TAG ('G','u','j','r'),
-  HB_SCRIPT_GURMUKHI                   = HB_TAG ('G','u','r','u'),
-  HB_SCRIPT_HANGUL                     = HB_TAG ('H','a','n','g'),
-  HB_SCRIPT_HAN                                = HB_TAG ('H','a','n','i'),
-  HB_SCRIPT_HEBREW                     = HB_TAG ('H','e','b','r'),
-  HB_SCRIPT_HIRAGANA                   = HB_TAG ('H','i','r','a'),
-  HB_SCRIPT_INHERITED                  = HB_TAG ('Z','i','n','h'),
-  HB_SCRIPT_KANNADA                    = HB_TAG ('K','n','d','a'),
-  HB_SCRIPT_KATAKANA                   = HB_TAG ('K','a','n','a'),
-  HB_SCRIPT_LAO                                = HB_TAG ('L','a','o','o'),
-  HB_SCRIPT_LATIN                      = HB_TAG ('L','a','t','n'),
-  HB_SCRIPT_MALAYALAM                  = HB_TAG ('M','l','y','m'),
-  HB_SCRIPT_MONGOLIAN                  = HB_TAG ('M','o','n','g'),
-  HB_SCRIPT_OGHAM                      = HB_TAG ('O','g','a','m'),
-  HB_SCRIPT_ORIYA                      = HB_TAG ('O','r','y','a'),
-  HB_SCRIPT_RUNIC                      = HB_TAG ('R','u','n','r'),
-  HB_SCRIPT_SYRIAC                     = HB_TAG ('S','y','r','c'),
-  HB_SCRIPT_TAMIL                      = HB_TAG ('T','a','m','l'),
-  HB_SCRIPT_TELUGU                     = HB_TAG ('T','e','l','u'),
-  HB_SCRIPT_THAI                       = HB_TAG ('T','h','a','i'),
-  HB_SCRIPT_YI                         = HB_TAG ('Y','i','i','i'),
-
-  /* Unicode-2.0 additions */
-  HB_SCRIPT_TIBETAN                    = HB_TAG ('T','i','b','t'),
-
-  /* Unicode-3.0 additions */
-  HB_SCRIPT_ETHIOPIC                   = HB_TAG ('E','t','h','i'),
-  HB_SCRIPT_KHMER                      = HB_TAG ('K','h','m','r'),
-  HB_SCRIPT_MYANMAR                    = HB_TAG ('M','y','m','r'),
-  HB_SCRIPT_SINHALA                    = HB_TAG ('S','i','n','h'),
-  HB_SCRIPT_THAANA                     = HB_TAG ('T','h','a','a'),
-
-  /* Unicode-3.1 additions */
-  HB_SCRIPT_DESERET                    = HB_TAG ('D','s','r','t'),
-  HB_SCRIPT_GOTHIC                     = HB_TAG ('G','o','t','h'),
-  HB_SCRIPT_OLD_ITALIC                 = HB_TAG ('I','t','a','l'),
-
-  /* Unicode-3.2 additions */
-  HB_SCRIPT_BUHID                      = HB_TAG ('B','u','h','d'),
-  HB_SCRIPT_HANUNOO                    = HB_TAG ('H','a','n','o'),
-  HB_SCRIPT_TAGALOG                    = HB_TAG ('T','g','l','g'),
-  HB_SCRIPT_TAGBANWA                   = HB_TAG ('T','a','g','b'),
-
-  /* Unicode-4.0 additions */
-  HB_SCRIPT_BRAILLE                    = HB_TAG ('B','r','a','i'),
-  HB_SCRIPT_CYPRIOT                    = HB_TAG ('C','p','r','t'),
-  HB_SCRIPT_LIMBU                      = HB_TAG ('L','i','m','b'),
-  HB_SCRIPT_LINEAR_B                   = HB_TAG ('L','i','n','b'),
-  HB_SCRIPT_OSMANYA                    = HB_TAG ('O','s','m','a'),
-  HB_SCRIPT_SHAVIAN                    = HB_TAG ('S','h','a','w'),
-  HB_SCRIPT_TAI_LE                     = HB_TAG ('T','a','l','e'),
-  HB_SCRIPT_UGARITIC                   = HB_TAG ('U','g','a','r'),
-
-  /* Unicode-4.1 additions */
-  HB_SCRIPT_BUGINESE                   = HB_TAG ('B','u','g','i'),
-  HB_SCRIPT_GLAGOLITIC                 = HB_TAG ('G','l','a','g'),
-  HB_SCRIPT_KHAROSHTHI                 = HB_TAG ('K','h','a','r'),
-  HB_SCRIPT_NEW_TAI_LUE                        = HB_TAG ('T','a','l','u'),
-  HB_SCRIPT_OLD_PERSIAN                        = HB_TAG ('X','p','e','o'),
-  HB_SCRIPT_SYLOTI_NAGRI               = HB_TAG ('S','y','l','o'),
-  HB_SCRIPT_TIFINAGH                   = HB_TAG ('T','f','n','g'),
-
-  /* Unicode-5.0 additions */
-  HB_SCRIPT_BALINESE                   = HB_TAG ('B','a','l','i'),
-  HB_SCRIPT_CUNEIFORM                  = HB_TAG ('X','s','u','x'),
-  HB_SCRIPT_NKO                                = HB_TAG ('N','k','o','o'),
-  HB_SCRIPT_PHAGS_PA                   = HB_TAG ('P','h','a','g'),
-  HB_SCRIPT_PHOENICIAN                 = HB_TAG ('P','h','n','x'),
-  HB_SCRIPT_UNKNOWN                    = HB_TAG ('Z','z','z','z'),
-
-  /* Unicode-5.1 additions */
-  HB_SCRIPT_CARIAN                     = HB_TAG ('C','a','r','i'),
-  HB_SCRIPT_CHAM                       = HB_TAG ('C','h','a','m'),
-  HB_SCRIPT_KAYAH_LI                   = HB_TAG ('K','a','l','i'),
-  HB_SCRIPT_LEPCHA                     = HB_TAG ('L','e','p','c'),
-  HB_SCRIPT_LYCIAN                     = HB_TAG ('L','y','c','i'),
-  HB_SCRIPT_LYDIAN                     = HB_TAG ('L','y','d','i'),
-  HB_SCRIPT_OL_CHIKI                   = HB_TAG ('O','l','c','k'),
-  HB_SCRIPT_REJANG                     = HB_TAG ('R','j','n','g'),
-  HB_SCRIPT_SAURASHTRA                 = HB_TAG ('S','a','u','r'),
-  HB_SCRIPT_SUNDANESE                  = HB_TAG ('S','u','n','d'),
-  HB_SCRIPT_VAI                                = HB_TAG ('V','a','i','i'),
-
-  /* Unicode-5.2 additions */
-  HB_SCRIPT_AVESTAN                    = HB_TAG ('A','v','s','t'),
-  HB_SCRIPT_BAMUM                      = HB_TAG ('B','a','m','u'),
-  HB_SCRIPT_EGYPTIAN_HIEROGLYPHS       = HB_TAG ('E','g','y','p'),
-  HB_SCRIPT_IMPERIAL_ARAMAIC           = HB_TAG ('A','r','m','i'),
-  HB_SCRIPT_INSCRIPTIONAL_PAHLAVI      = HB_TAG ('P','h','l','i'),
-  HB_SCRIPT_INSCRIPTIONAL_PARTHIAN     = HB_TAG ('P','r','t','i'),
-  HB_SCRIPT_JAVANESE                   = HB_TAG ('J','a','v','a'),
-  HB_SCRIPT_KAITHI                     = HB_TAG ('K','t','h','i'),
-  HB_SCRIPT_LISU                       = HB_TAG ('L','i','s','u'),
-  HB_SCRIPT_MEETEI_MAYEK               = HB_TAG ('M','t','e','i'),
-  HB_SCRIPT_OLD_SOUTH_ARABIAN          = HB_TAG ('S','a','r','b'),
-  HB_SCRIPT_OLD_TURKIC                 = HB_TAG ('O','r','k','h'),
-  HB_SCRIPT_SAMARITAN                  = HB_TAG ('S','a','m','r'),
-  HB_SCRIPT_TAI_THAM                   = HB_TAG ('L','a','n','a'),
-  HB_SCRIPT_TAI_VIET                   = HB_TAG ('T','a','v','t'),
-
-  /* Unicode-6.0 additions */
-  HB_SCRIPT_BATAK                      = HB_TAG ('B','a','t','k'),
-  HB_SCRIPT_BRAHMI                     = HB_TAG ('B','r','a','h'),
-  HB_SCRIPT_MANDAIC                    = HB_TAG ('M','a','n','d'),
-
-  /* Unicode-6.1 additions */
-  HB_SCRIPT_CHAKMA                     = HB_TAG ('C','a','k','m'),
-  HB_SCRIPT_MEROITIC_CURSIVE           = HB_TAG ('M','e','r','c'),
-  HB_SCRIPT_MEROITIC_HIEROGLYPHS       = HB_TAG ('M','e','r','o'),
-  HB_SCRIPT_MIAO                       = HB_TAG ('P','l','r','d'),
-  HB_SCRIPT_SHARADA                    = HB_TAG ('S','h','r','d'),
-  HB_SCRIPT_SORA_SOMPENG               = HB_TAG ('S','o','r','a'),
-  HB_SCRIPT_TAKRI                      = HB_TAG ('T','a','k','r'),
-
-  /* No script set */
-  HB_SCRIPT_INVALID                    = HB_TAG_NONE
+  /*1.1*/ HB_SCRIPT_COMMON                     = HB_TAG ('Z','y','y','y'),
+  /*1.1*/ HB_SCRIPT_INHERITED                  = HB_TAG ('Z','i','n','h'),
+  /*5.0*/ HB_SCRIPT_UNKNOWN                    = HB_TAG ('Z','z','z','z'),
+
+  /*1.1*/ HB_SCRIPT_ARABIC                     = HB_TAG ('A','r','a','b'),
+  /*1.1*/ HB_SCRIPT_ARMENIAN                   = HB_TAG ('A','r','m','n'),
+  /*1.1*/ HB_SCRIPT_BENGALI                    = HB_TAG ('B','e','n','g'),
+  /*1.1*/ HB_SCRIPT_CYRILLIC                   = HB_TAG ('C','y','r','l'),
+  /*1.1*/ HB_SCRIPT_DEVANAGARI                 = HB_TAG ('D','e','v','a'),
+  /*1.1*/ HB_SCRIPT_GEORGIAN                   = HB_TAG ('G','e','o','r'),
+  /*1.1*/ HB_SCRIPT_GREEK                      = HB_TAG ('G','r','e','k'),
+  /*1.1*/ HB_SCRIPT_GUJARATI                   = HB_TAG ('G','u','j','r'),
+  /*1.1*/ HB_SCRIPT_GURMUKHI                   = HB_TAG ('G','u','r','u'),
+  /*1.1*/ HB_SCRIPT_HANGUL                     = HB_TAG ('H','a','n','g'),
+  /*1.1*/ HB_SCRIPT_HAN                                = HB_TAG ('H','a','n','i'),
+  /*1.1*/ HB_SCRIPT_HEBREW                     = HB_TAG ('H','e','b','r'),
+  /*1.1*/ HB_SCRIPT_HIRAGANA                   = HB_TAG ('H','i','r','a'),
+  /*1.1*/ HB_SCRIPT_KANNADA                    = HB_TAG ('K','n','d','a'),
+  /*1.1*/ HB_SCRIPT_KATAKANA                   = HB_TAG ('K','a','n','a'),
+  /*1.1*/ HB_SCRIPT_LAO                                = HB_TAG ('L','a','o','o'),
+  /*1.1*/ HB_SCRIPT_LATIN                      = HB_TAG ('L','a','t','n'),
+  /*1.1*/ HB_SCRIPT_MALAYALAM                  = HB_TAG ('M','l','y','m'),
+  /*1.1*/ HB_SCRIPT_ORIYA                      = HB_TAG ('O','r','y','a'),
+  /*1.1*/ HB_SCRIPT_TAMIL                      = HB_TAG ('T','a','m','l'),
+  /*1.1*/ HB_SCRIPT_TELUGU                     = HB_TAG ('T','e','l','u'),
+  /*1.1*/ HB_SCRIPT_THAI                       = HB_TAG ('T','h','a','i'),
+
+  /*2.0*/ HB_SCRIPT_TIBETAN                    = HB_TAG ('T','i','b','t'),
+
+  /*3.0*/ HB_SCRIPT_BOPOMOFO                   = HB_TAG ('B','o','p','o'),
+  /*3.0*/ HB_SCRIPT_BRAILLE                    = HB_TAG ('B','r','a','i'),
+  /*3.0*/ HB_SCRIPT_CANADIAN_SYLLABICS         = HB_TAG ('C','a','n','s'),
+  /*3.0*/ HB_SCRIPT_CHEROKEE                   = HB_TAG ('C','h','e','r'),
+  /*3.0*/ HB_SCRIPT_ETHIOPIC                   = HB_TAG ('E','t','h','i'),
+  /*3.0*/ HB_SCRIPT_KHMER                      = HB_TAG ('K','h','m','r'),
+  /*3.0*/ HB_SCRIPT_MONGOLIAN                  = HB_TAG ('M','o','n','g'),
+  /*3.0*/ HB_SCRIPT_MYANMAR                    = HB_TAG ('M','y','m','r'),
+  /*3.0*/ HB_SCRIPT_OGHAM                      = HB_TAG ('O','g','a','m'),
+  /*3.0*/ HB_SCRIPT_RUNIC                      = HB_TAG ('R','u','n','r'),
+  /*3.0*/ HB_SCRIPT_SINHALA                    = HB_TAG ('S','i','n','h'),
+  /*3.0*/ HB_SCRIPT_SYRIAC                     = HB_TAG ('S','y','r','c'),
+  /*3.0*/ HB_SCRIPT_THAANA                     = HB_TAG ('T','h','a','a'),
+  /*3.0*/ HB_SCRIPT_YI                         = HB_TAG ('Y','i','i','i'),
+
+  /*3.1*/ HB_SCRIPT_DESERET                    = HB_TAG ('D','s','r','t'),
+  /*3.1*/ HB_SCRIPT_GOTHIC                     = HB_TAG ('G','o','t','h'),
+  /*3.1*/ HB_SCRIPT_OLD_ITALIC                 = HB_TAG ('I','t','a','l'),
+
+  /*3.2*/ HB_SCRIPT_BUHID                      = HB_TAG ('B','u','h','d'),
+  /*3.2*/ HB_SCRIPT_HANUNOO                    = HB_TAG ('H','a','n','o'),
+  /*3.2*/ HB_SCRIPT_TAGALOG                    = HB_TAG ('T','g','l','g'),
+  /*3.2*/ HB_SCRIPT_TAGBANWA                   = HB_TAG ('T','a','g','b'),
+
+  /*4.0*/ HB_SCRIPT_CYPRIOT                    = HB_TAG ('C','p','r','t'),
+  /*4.0*/ HB_SCRIPT_LIMBU                      = HB_TAG ('L','i','m','b'),
+  /*4.0*/ HB_SCRIPT_LINEAR_B                   = HB_TAG ('L','i','n','b'),
+  /*4.0*/ HB_SCRIPT_OSMANYA                    = HB_TAG ('O','s','m','a'),
+  /*4.0*/ HB_SCRIPT_SHAVIAN                    = HB_TAG ('S','h','a','w'),
+  /*4.0*/ HB_SCRIPT_TAI_LE                     = HB_TAG ('T','a','l','e'),
+  /*4.0*/ HB_SCRIPT_UGARITIC                   = HB_TAG ('U','g','a','r'),
+
+  /*4.1*/ HB_SCRIPT_BUGINESE                   = HB_TAG ('B','u','g','i'),
+  /*4.1*/ HB_SCRIPT_COPTIC                     = HB_TAG ('C','o','p','t'),
+  /*4.1*/ HB_SCRIPT_GLAGOLITIC                 = HB_TAG ('G','l','a','g'),
+  /*4.1*/ HB_SCRIPT_KHAROSHTHI                 = HB_TAG ('K','h','a','r'),
+  /*4.1*/ HB_SCRIPT_NEW_TAI_LUE                        = HB_TAG ('T','a','l','u'),
+  /*4.1*/ HB_SCRIPT_OLD_PERSIAN                        = HB_TAG ('X','p','e','o'),
+  /*4.1*/ HB_SCRIPT_SYLOTI_NAGRI               = HB_TAG ('S','y','l','o'),
+  /*4.1*/ HB_SCRIPT_TIFINAGH                   = HB_TAG ('T','f','n','g'),
+
+  /*5.0*/ HB_SCRIPT_BALINESE                   = HB_TAG ('B','a','l','i'),
+  /*5.0*/ HB_SCRIPT_CUNEIFORM                  = HB_TAG ('X','s','u','x'),
+  /*5.0*/ HB_SCRIPT_NKO                                = HB_TAG ('N','k','o','o'),
+  /*5.0*/ HB_SCRIPT_PHAGS_PA                   = HB_TAG ('P','h','a','g'),
+  /*5.0*/ HB_SCRIPT_PHOENICIAN                 = HB_TAG ('P','h','n','x'),
+
+  /*5.1*/ HB_SCRIPT_CARIAN                     = HB_TAG ('C','a','r','i'),
+  /*5.1*/ HB_SCRIPT_CHAM                       = HB_TAG ('C','h','a','m'),
+  /*5.1*/ HB_SCRIPT_KAYAH_LI                   = HB_TAG ('K','a','l','i'),
+  /*5.1*/ HB_SCRIPT_LEPCHA                     = HB_TAG ('L','e','p','c'),
+  /*5.1*/ HB_SCRIPT_LYCIAN                     = HB_TAG ('L','y','c','i'),
+  /*5.1*/ HB_SCRIPT_LYDIAN                     = HB_TAG ('L','y','d','i'),
+  /*5.1*/ HB_SCRIPT_OL_CHIKI                   = HB_TAG ('O','l','c','k'),
+  /*5.1*/ HB_SCRIPT_REJANG                     = HB_TAG ('R','j','n','g'),
+  /*5.1*/ HB_SCRIPT_SAURASHTRA                 = HB_TAG ('S','a','u','r'),
+  /*5.1*/ HB_SCRIPT_SUNDANESE                  = HB_TAG ('S','u','n','d'),
+  /*5.1*/ HB_SCRIPT_VAI                                = HB_TAG ('V','a','i','i'),
+
+  /*5.2*/ HB_SCRIPT_AVESTAN                    = HB_TAG ('A','v','s','t'),
+  /*5.2*/ HB_SCRIPT_BAMUM                      = HB_TAG ('B','a','m','u'),
+  /*5.2*/ HB_SCRIPT_EGYPTIAN_HIEROGLYPHS       = HB_TAG ('E','g','y','p'),
+  /*5.2*/ HB_SCRIPT_IMPERIAL_ARAMAIC           = HB_TAG ('A','r','m','i'),
+  /*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PAHLAVI      = HB_TAG ('P','h','l','i'),
+  /*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PARTHIAN     = HB_TAG ('P','r','t','i'),
+  /*5.2*/ HB_SCRIPT_JAVANESE                   = HB_TAG ('J','a','v','a'),
+  /*5.2*/ HB_SCRIPT_KAITHI                     = HB_TAG ('K','t','h','i'),
+  /*5.2*/ HB_SCRIPT_LISU                       = HB_TAG ('L','i','s','u'),
+  /*5.2*/ HB_SCRIPT_MEETEI_MAYEK               = HB_TAG ('M','t','e','i'),
+  /*5.2*/ HB_SCRIPT_OLD_SOUTH_ARABIAN          = HB_TAG ('S','a','r','b'),
+  /*5.2*/ HB_SCRIPT_OLD_TURKIC                 = HB_TAG ('O','r','k','h'),
+  /*5.2*/ HB_SCRIPT_SAMARITAN                  = HB_TAG ('S','a','m','r'),
+  /*5.2*/ HB_SCRIPT_TAI_THAM                   = HB_TAG ('L','a','n','a'),
+  /*5.2*/ HB_SCRIPT_TAI_VIET                   = HB_TAG ('T','a','v','t'),
+
+  /*6.0*/ HB_SCRIPT_BATAK                      = HB_TAG ('B','a','t','k'),
+  /*6.0*/ HB_SCRIPT_BRAHMI                     = HB_TAG ('B','r','a','h'),
+  /*6.0*/ HB_SCRIPT_MANDAIC                    = HB_TAG ('M','a','n','d'),
+
+  /*6.1*/ HB_SCRIPT_CHAKMA                     = HB_TAG ('C','a','k','m'),
+  /*6.1*/ HB_SCRIPT_MEROITIC_CURSIVE           = HB_TAG ('M','e','r','c'),
+  /*6.1*/ HB_SCRIPT_MEROITIC_HIEROGLYPHS       = HB_TAG ('M','e','r','o'),
+  /*6.1*/ HB_SCRIPT_MIAO                       = HB_TAG ('P','l','r','d'),
+  /*6.1*/ HB_SCRIPT_SHARADA                    = HB_TAG ('S','h','r','d'),
+  /*6.1*/ HB_SCRIPT_SORA_SOMPENG               = HB_TAG ('S','o','r','a'),
+  /*6.1*/ HB_SCRIPT_TAKRI                      = HB_TAG ('T','a','k','r'),
+
+  /*7.0*/ HB_SCRIPT_BASSA_VAH                  = HB_TAG ('B','a','s','s'),
+  /*7.0*/ HB_SCRIPT_CAUCASIAN_ALBANIAN         = HB_TAG ('A','g','h','b'),
+  /*7.0*/ HB_SCRIPT_DUPLOYAN                   = HB_TAG ('D','u','p','l'),
+  /*7.0*/ HB_SCRIPT_ELBASAN                    = HB_TAG ('E','l','b','a'),
+  /*7.0*/ HB_SCRIPT_GRANTHA                    = HB_TAG ('G','r','a','n'),
+  /*7.0*/ HB_SCRIPT_KHOJKI                     = HB_TAG ('K','h','o','j'),
+  /*7.0*/ HB_SCRIPT_KHUDAWADI                  = HB_TAG ('S','i','n','d'),
+  /*7.0*/ HB_SCRIPT_LINEAR_A                   = HB_TAG ('L','i','n','a'),
+  /*7.0*/ HB_SCRIPT_MAHAJANI                   = HB_TAG ('M','a','h','j'),
+  /*7.0*/ HB_SCRIPT_MANICHAEAN                 = HB_TAG ('M','a','n','i'),
+  /*7.0*/ HB_SCRIPT_MENDE_KIKAKUI              = HB_TAG ('M','e','n','d'),
+  /*7.0*/ HB_SCRIPT_MODI                       = HB_TAG ('M','o','d','i'),
+  /*7.0*/ HB_SCRIPT_MRO                                = HB_TAG ('M','r','o','o'),
+  /*7.0*/ HB_SCRIPT_NABATAEAN                  = HB_TAG ('N','b','a','t'),
+  /*7.0*/ HB_SCRIPT_OLD_NORTH_ARABIAN          = HB_TAG ('N','a','r','b'),
+  /*7.0*/ HB_SCRIPT_OLD_PERMIC                 = HB_TAG ('P','e','r','m'),
+  /*7.0*/ HB_SCRIPT_PAHAWH_HMONG               = HB_TAG ('H','m','n','g'),
+  /*7.0*/ HB_SCRIPT_PALMYRENE                  = HB_TAG ('P','a','l','m'),
+  /*7.0*/ HB_SCRIPT_PAU_CIN_HAU                        = HB_TAG ('P','a','u','c'),
+  /*7.0*/ HB_SCRIPT_PSALTER_PAHLAVI            = HB_TAG ('P','h','l','p'),
+  /*7.0*/ HB_SCRIPT_SIDDHAM                    = HB_TAG ('S','i','d','d'),
+  /*7.0*/ HB_SCRIPT_TIRHUTA                    = HB_TAG ('T','i','r','h'),
+  /*7.0*/ HB_SCRIPT_WARANG_CITI                        = HB_TAG ('W','a','r','a'),
+
+  /* No script set. */
+  HB_SCRIPT_INVALID                            = HB_TAG_NONE,
+
+  /* Dummy values to ensure any hb_tag_t value can be passed/stored as hb_script_t
+   * without risking undefined behavior.  Include both a signed and unsigned max,
+   * since technically enums are int, and indeed, hb_script_t ends up being signed.
+   * See this thread for technicalities:
+   *
+   *   http://lists.freedesktop.org/archives/harfbuzz/2014-March/004150.html
+   */
+  _HB_SCRIPT_MAX_VALUE                         = HB_TAG_MAX, /*< skip >*/
+  _HB_SCRIPT_MAX_VALUE_SIGNED                  = HB_TAG_MAX_SIGNED /*< skip >*/
+
 } hb_script_t;
 
 
 } hb_script_t;
 
 
@@ -290,7 +317,7 @@ typedef enum
 hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag);
 
 hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag);
 
-/* suger for tag_from_string() then script_from_iso15924_tag */
+/* sugar for tag_from_string() then script_from_iso15924_tag */
 /* len=-1 means s is NUL-terminated */
 hb_script_t
 hb_script_from_string (const char *s, int len);
 /* len=-1 means s is NUL-terminated */
 hb_script_t
 hb_script_from_string (const char *s, int len);
index 8f94795..9097cce 100644 (file)
@@ -1,6 +1,6 @@
 /*
 /*
- * Copyright © 2012  Mozilla Foundation.
- * Copyright © 2012  Google, Inc.
+ * Copyright © 2012,2013  Mozilla Foundation.
+ * Copyright © 2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -27,6 +27,7 @@
  */
 
 #define HB_SHAPER coretext
  */
 
 #define HB_SHAPER coretext
+#define hb_coretext_shaper_face_data_t CGFont
 #include "hb-shaper-impl-private.hh"
 
 #include "hb-coretext.h"
 #include "hb-shaper-impl-private.hh"
 
 #include "hb-coretext.h"
 #endif
 
 
 #endif
 
 
+static void
+release_table_data (void *user_data)
+{
+  CFDataRef cf_data = reinterpret_cast<CFDataRef> (user_data);
+  CFRelease(cf_data);
+}
+
+static hb_blob_t *
+reference_table  (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
+{
+  CGFontRef cg_font = reinterpret_cast<CGFontRef> (user_data);
+  CFDataRef cf_data = CGFontCopyTableForTag (cg_font, tag);
+  if (unlikely (!cf_data))
+    return NULL;
+
+  const char *data = reinterpret_cast<const char*> (CFDataGetBytePtr (cf_data));
+  const size_t length = CFDataGetLength (cf_data);
+  if (!data || !length)
+    return NULL;
+
+  return hb_blob_create (data, length, HB_MEMORY_MODE_READONLY,
+                        reinterpret_cast<void *> (const_cast<__CFData *> (cf_data)),
+                        release_table_data);
+}
+
+hb_face_t *
+hb_coretext_face_create (CGFontRef cg_font)
+{
+  return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), (hb_destroy_func_t) CGFontRelease);
+}
+
+
 HB_SHAPER_DATA_ENSURE_DECLARE(coretext, face)
 HB_SHAPER_DATA_ENSURE_DECLARE(coretext, font)
 
 HB_SHAPER_DATA_ENSURE_DECLARE(coretext, face)
 HB_SHAPER_DATA_ENSURE_DECLARE(coretext, font)
 
@@ -45,10 +78,6 @@ HB_SHAPER_DATA_ENSURE_DECLARE(coretext, font)
  * shaper face data
  */
 
  * shaper face data
  */
 
-struct hb_coretext_shaper_face_data_t {
-  CGFontRef cg_font;
-};
-
 static void
 release_data (void *info, const void *data, size_t size)
 {
 static void
 release_data (void *info, const void *data, size_t size)
 {
@@ -61,24 +90,30 @@ release_data (void *info, const void *data, size_t size)
 hb_coretext_shaper_face_data_t *
 _hb_coretext_shaper_face_data_create (hb_face_t *face)
 {
 hb_coretext_shaper_face_data_t *
 _hb_coretext_shaper_face_data_create (hb_face_t *face)
 {
-  hb_coretext_shaper_face_data_t *data = (hb_coretext_shaper_face_data_t *) calloc (1, sizeof (hb_coretext_shaper_face_data_t));
-  if (unlikely (!data))
-    return NULL;
-
-  hb_blob_t *blob = hb_face_reference_blob (face);
-  unsigned int blob_length;
-  const char *blob_data = hb_blob_get_data (blob, &blob_length);
-  if (unlikely (!blob_length))
-    DEBUG_MSG (CORETEXT, face, "Face has empty blob");
+  hb_coretext_shaper_face_data_t *data = NULL;
 
 
-  CGDataProviderRef provider = CGDataProviderCreateWithData (blob, blob_data, blob_length, &release_data);
-  data->cg_font = CGFontCreateWithDataProvider (provider);
-  CGDataProviderRelease (provider);
+  if (face->destroy == (hb_destroy_func_t) CGFontRelease)
+  {
+    data = CGFontRetain ((CGFontRef) face->user_data);
+  }
+  else
+  {
+    hb_blob_t *blob = hb_face_reference_blob (face);
+    unsigned int blob_length;
+    const char *blob_data = hb_blob_get_data (blob, &blob_length);
+    if (unlikely (!blob_length))
+      DEBUG_MSG (CORETEXT, face, "Face has empty blob");
+
+    CGDataProviderRef provider = CGDataProviderCreateWithData (blob, blob_data, blob_length, &release_data);
+    if (likely (provider))
+    {
+      data = CGFontCreateWithDataProvider (provider);
+      CGDataProviderRelease (provider);
+    }
+  }
 
 
-  if (unlikely (!data->cg_font)) {
+  if (unlikely (!data)) {
     DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
     DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
-    free (data);
-    return NULL;
   }
 
   return data;
   }
 
   return data;
@@ -87,8 +122,7 @@ _hb_coretext_shaper_face_data_create (hb_face_t *face)
 void
 _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
 {
 void
 _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
 {
-  CFRelease (data->cg_font);
-  free (data);
+  CFRelease (data);
 }
 
 CGFontRef
 }
 
 CGFontRef
@@ -96,7 +130,7 @@ hb_coretext_face_get_cg_font (hb_face_t *face)
 {
   if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
 {
   if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-  return face_data->cg_font;
+  return face_data;
 }
 
 
 }
 
 
@@ -120,7 +154,7 @@ _hb_coretext_shaper_font_data_create (hb_font_t *font)
   hb_face_t *face = font->face;
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
 
   hb_face_t *face = font->face;
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
 
-  data->ct_font = CTFontCreateWithGraphicsFont (face_data->cg_font, font->y_scale, NULL, NULL);
+  data->ct_font = CTFontCreateWithGraphicsFont (face_data, font->y_scale, NULL, NULL);
   if (unlikely (!data->ct_font)) {
     DEBUG_MSG (CORETEXT, font, "Font CTFontCreateWithGraphicsFont() failed");
     free (data);
   if (unlikely (!data->ct_font)) {
     DEBUG_MSG (CORETEXT, font, "Font CTFontCreateWithGraphicsFont() failed");
     free (data);
@@ -170,6 +204,222 @@ hb_coretext_font_get_ct_font (hb_font_t *font)
  * shaper
  */
 
  * shaper
  */
 
+struct feature_record_t {
+  unsigned int feature;
+  unsigned int setting;
+};
+
+struct active_feature_t {
+  feature_record_t rec;
+  unsigned int order;
+
+  static int cmp (const active_feature_t *a, const active_feature_t *b) {
+    return a->rec.feature < b->rec.feature ? -1 : a->rec.feature > b->rec.feature ? 1 :
+          a->order < b->order ? -1 : a->order > b->order ? 1 :
+          a->rec.setting < b->rec.setting ? -1 : a->rec.setting > b->rec.setting ? 1 :
+          0;
+  }
+  bool operator== (const active_feature_t *f) {
+    return cmp (this, f) == 0;
+  }
+};
+
+struct feature_event_t {
+  unsigned int index;
+  bool start;
+  active_feature_t feature;
+
+  static int cmp (const feature_event_t *a, const feature_event_t *b) {
+    return a->index < b->index ? -1 : a->index > b->index ? 1 :
+          a->start < b->start ? -1 : a->start > b->start ? 1 :
+          active_feature_t::cmp (&a->feature, &b->feature);
+  }
+};
+
+struct range_record_t {
+  CTFontRef font;
+  unsigned int index_first; /* == start */
+  unsigned int index_last;  /* == end - 1 */
+};
+
+
+/* The following enum members are added in OS X 10.8. */
+#define kAltHalfWidthTextSelector              6
+#define kAltProportionalTextSelector           5
+#define kAlternateHorizKanaOffSelector         1
+#define kAlternateHorizKanaOnSelector          0
+#define kAlternateKanaType                     34
+#define kAlternateVertKanaOffSelector          3
+#define kAlternateVertKanaOnSelector           2
+#define kCaseSensitiveLayoutOffSelector                1
+#define kCaseSensitiveLayoutOnSelector         0
+#define kCaseSensitiveLayoutType               33
+#define kCaseSensitiveSpacingOffSelector       3
+#define kCaseSensitiveSpacingOnSelector                2
+#define kContextualAlternatesOffSelector       1
+#define kContextualAlternatesOnSelector                0
+#define kContextualAlternatesType              36
+#define kContextualLigaturesOffSelector                19
+#define kContextualLigaturesOnSelector         18
+#define kContextualSwashAlternatesOffSelector  5
+#define kContextualSwashAlternatesOnSelector   4
+#define kDefaultLowerCaseSelector              0
+#define kDefaultUpperCaseSelector              0
+#define kHistoricalLigaturesOffSelector                21
+#define kHistoricalLigaturesOnSelector         20
+#define kHojoCharactersSelector                        12
+#define kJIS2004CharactersSelector             11
+#define kLowerCasePetiteCapsSelector           2
+#define kLowerCaseSmallCapsSelector            1
+#define kLowerCaseType                         37
+#define kMathematicalGreekOffSelector          11
+#define kMathematicalGreekOnSelector           10
+#define kNLCCharactersSelector                 13
+#define kQuarterWidthTextSelector              4
+#define kScientificInferiorsSelector           4
+#define kStylisticAltEightOffSelector          17
+#define kStylisticAltEightOnSelector           16
+#define kStylisticAltEighteenOffSelector       37
+#define kStylisticAltEighteenOnSelector                36
+#define kStylisticAltElevenOffSelector         23
+#define kStylisticAltElevenOnSelector          22
+#define kStylisticAltFifteenOffSelector                31
+#define kStylisticAltFifteenOnSelector         30
+#define kStylisticAltFiveOffSelector           11
+#define kStylisticAltFiveOnSelector            10
+#define kStylisticAltFourOffSelector           9
+#define kStylisticAltFourOnSelector            8
+#define kStylisticAltFourteenOffSelector       29
+#define kStylisticAltFourteenOnSelector                28
+#define kStylisticAltNineOffSelector           19
+#define kStylisticAltNineOnSelector            18
+#define kStylisticAltNineteenOffSelector       39
+#define kStylisticAltNineteenOnSelector                38
+#define kStylisticAltOneOffSelector            3
+#define kStylisticAltOneOnSelector             2
+#define kStylisticAltSevenOffSelector          15
+#define kStylisticAltSevenOnSelector           14
+#define kStylisticAltSeventeenOffSelector      35
+#define kStylisticAltSeventeenOnSelector       34
+#define kStylisticAltSixOffSelector            13
+#define kStylisticAltSixOnSelector             12
+#define kStylisticAltSixteenOffSelector                33
+#define kStylisticAltSixteenOnSelector         32
+#define kStylisticAltTenOffSelector            21
+#define kStylisticAltTenOnSelector             20
+#define kStylisticAltThirteenOffSelector       27
+#define kStylisticAltThirteenOnSelector                26
+#define kStylisticAltThreeOffSelector          7
+#define kStylisticAltThreeOnSelector           6
+#define kStylisticAltTwelveOffSelector         25
+#define kStylisticAltTwelveOnSelector          24
+#define kStylisticAltTwentyOffSelector         41
+#define kStylisticAltTwentyOnSelector          40
+#define kStylisticAltTwoOffSelector            5
+#define kStylisticAltTwoOnSelector             4
+#define kStylisticAlternativesType             35
+#define kSwashAlternatesOffSelector            3
+#define kSwashAlternatesOnSelector             2
+#define kThirdWidthTextSelector                        3
+#define kTraditionalNamesCharactersSelector    14
+#define kUpperCasePetiteCapsSelector           2
+#define kUpperCaseSmallCapsSelector            1
+#define kUpperCaseType                         38
+
+/* Table data courtesy of Apple. */
+struct feature_mapping_t {
+    FourCharCode otFeatureTag;
+    uint16_t aatFeatureType;
+    uint16_t selectorToEnable;
+    uint16_t selectorToDisable;
+} feature_mappings[] = {
+    { 'c2pc',   kUpperCaseType,             kUpperCasePetiteCapsSelector,           kDefaultUpperCaseSelector },
+    { 'c2sc',   kUpperCaseType,             kUpperCaseSmallCapsSelector,            kDefaultUpperCaseSelector },
+    { 'calt',   kContextualAlternatesType,  kContextualAlternatesOnSelector,        kContextualAlternatesOffSelector },
+    { 'case',   kCaseSensitiveLayoutType,   kCaseSensitiveLayoutOnSelector,         kCaseSensitiveLayoutOffSelector },
+    { 'clig',   kLigaturesType,             kContextualLigaturesOnSelector,         kContextualLigaturesOffSelector },
+    { 'cpsp',   kCaseSensitiveLayoutType,   kCaseSensitiveSpacingOnSelector,        kCaseSensitiveSpacingOffSelector },
+    { 'cswh',   kContextualAlternatesType,  kContextualSwashAlternatesOnSelector,   kContextualSwashAlternatesOffSelector },
+    { 'dlig',   kLigaturesType,             kRareLigaturesOnSelector,               kRareLigaturesOffSelector },
+    { 'expt',   kCharacterShapeType,        kExpertCharactersSelector,              16 },
+    { 'frac',   kFractionsType,             kDiagonalFractionsSelector,             kNoFractionsSelector },
+    { 'fwid',   kTextSpacingType,           kMonospacedTextSelector,                7 },
+    { 'halt',   kTextSpacingType,           kAltHalfWidthTextSelector,              7 },
+    { 'hist',   kLigaturesType,             kHistoricalLigaturesOnSelector,         kHistoricalLigaturesOffSelector },
+    { 'hkna',   kAlternateKanaType,         kAlternateHorizKanaOnSelector,          kAlternateHorizKanaOffSelector, },
+    { 'hlig',   kLigaturesType,             kHistoricalLigaturesOnSelector,         kHistoricalLigaturesOffSelector },
+    { 'hngl',   kTransliterationType,       kHanjaToHangulSelector,                 kNoTransliterationSelector },
+    { 'hojo',   kCharacterShapeType,        kHojoCharactersSelector,                16 },
+    { 'hwid',   kTextSpacingType,           kHalfWidthTextSelector,                 7 },
+    { 'ital',   kItalicCJKRomanType,        kCJKItalicRomanOnSelector,              kCJKItalicRomanOffSelector },
+    { 'jp04',   kCharacterShapeType,        kJIS2004CharactersSelector,             16 },
+    { 'jp78',   kCharacterShapeType,        kJIS1978CharactersSelector,             16 },
+    { 'jp83',   kCharacterShapeType,        kJIS1983CharactersSelector,             16 },
+    { 'jp90',   kCharacterShapeType,        kJIS1990CharactersSelector,             16 },
+    { 'liga',   kLigaturesType,             kCommonLigaturesOnSelector,             kCommonLigaturesOffSelector },
+    { 'lnum',   kNumberCaseType,            kUpperCaseNumbersSelector,              2 },
+    { 'mgrk',   kMathematicalExtrasType,    kMathematicalGreekOnSelector,           kMathematicalGreekOffSelector },
+    { 'nlck',   kCharacterShapeType,        kNLCCharactersSelector,                 16 },
+    { 'onum',   kNumberCaseType,            kLowerCaseNumbersSelector,              2 },
+    { 'ordn',   kVerticalPositionType,      kOrdinalsSelector,                      kNormalPositionSelector },
+    { 'palt',   kTextSpacingType,           kAltProportionalTextSelector,           7 },
+    { 'pcap',   kLowerCaseType,             kLowerCasePetiteCapsSelector,           kDefaultLowerCaseSelector },
+    { 'pkna',   kTextSpacingType,           kProportionalTextSelector,              7 },
+    { 'pnum',   kNumberSpacingType,         kProportionalNumbersSelector,           4 },
+    { 'pwid',   kTextSpacingType,           kProportionalTextSelector,              7 },
+    { 'qwid',   kTextSpacingType,           kQuarterWidthTextSelector,              7 },
+    { 'ruby',   kRubyKanaType,              kRubyKanaOnSelector,                    kRubyKanaOffSelector },
+    { 'sinf',   kVerticalPositionType,      kScientificInferiorsSelector,           kNormalPositionSelector },
+    { 'smcp',   kLowerCaseType,             kLowerCaseSmallCapsSelector,            kDefaultLowerCaseSelector },
+    { 'smpl',   kCharacterShapeType,        kSimplifiedCharactersSelector,          16 },
+    { 'ss01',   kStylisticAlternativesType, kStylisticAltOneOnSelector,             kStylisticAltOneOffSelector },
+    { 'ss02',   kStylisticAlternativesType, kStylisticAltTwoOnSelector,             kStylisticAltTwoOffSelector },
+    { 'ss03',   kStylisticAlternativesType, kStylisticAltThreeOnSelector,           kStylisticAltThreeOffSelector },
+    { 'ss04',   kStylisticAlternativesType, kStylisticAltFourOnSelector,            kStylisticAltFourOffSelector },
+    { 'ss05',   kStylisticAlternativesType, kStylisticAltFiveOnSelector,            kStylisticAltFiveOffSelector },
+    { 'ss06',   kStylisticAlternativesType, kStylisticAltSixOnSelector,             kStylisticAltSixOffSelector },
+    { 'ss07',   kStylisticAlternativesType, kStylisticAltSevenOnSelector,           kStylisticAltSevenOffSelector },
+    { 'ss08',   kStylisticAlternativesType, kStylisticAltEightOnSelector,           kStylisticAltEightOffSelector },
+    { 'ss09',   kStylisticAlternativesType, kStylisticAltNineOnSelector,            kStylisticAltNineOffSelector },
+    { 'ss10',   kStylisticAlternativesType, kStylisticAltTenOnSelector,             kStylisticAltTenOffSelector },
+    { 'ss11',   kStylisticAlternativesType, kStylisticAltElevenOnSelector,          kStylisticAltElevenOffSelector },
+    { 'ss12',   kStylisticAlternativesType, kStylisticAltTwelveOnSelector,          kStylisticAltTwelveOffSelector },
+    { 'ss13',   kStylisticAlternativesType, kStylisticAltThirteenOnSelector,        kStylisticAltThirteenOffSelector },
+    { 'ss14',   kStylisticAlternativesType, kStylisticAltFourteenOnSelector,        kStylisticAltFourteenOffSelector },
+    { 'ss15',   kStylisticAlternativesType, kStylisticAltFifteenOnSelector,         kStylisticAltFifteenOffSelector },
+    { 'ss16',   kStylisticAlternativesType, kStylisticAltSixteenOnSelector,         kStylisticAltSixteenOffSelector },
+    { 'ss17',   kStylisticAlternativesType, kStylisticAltSeventeenOnSelector,       kStylisticAltSeventeenOffSelector },
+    { 'ss18',   kStylisticAlternativesType, kStylisticAltEighteenOnSelector,        kStylisticAltEighteenOffSelector },
+    { 'ss19',   kStylisticAlternativesType, kStylisticAltNineteenOnSelector,        kStylisticAltNineteenOffSelector },
+    { 'ss20',   kStylisticAlternativesType, kStylisticAltTwentyOnSelector,          kStylisticAltTwentyOffSelector },
+    { 'subs',   kVerticalPositionType,      kInferiorsSelector,                     kNormalPositionSelector },
+    { 'sups',   kVerticalPositionType,      kSuperiorsSelector,                     kNormalPositionSelector },
+    { 'swsh',   kContextualAlternatesType,  kSwashAlternatesOnSelector,             kSwashAlternatesOffSelector },
+    { 'titl',   kStyleOptionsType,          kTitlingCapsSelector,                   kNoStyleOptionsSelector },
+    { 'tnam',   kCharacterShapeType,        kTraditionalNamesCharactersSelector,    16 },
+    { 'tnum',   kNumberSpacingType,         kMonospacedNumbersSelector,             4 },
+    { 'trad',   kCharacterShapeType,        kTraditionalCharactersSelector,         16 },
+    { 'twid',   kTextSpacingType,           kThirdWidthTextSelector,                7 },
+    { 'unic',   kLetterCaseType,            14,                                     15 },
+    { 'valt',   kTextSpacingType,           kAltProportionalTextSelector,           7 },
+    { 'vert',   kVerticalSubstitutionType,  kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
+    { 'vhal',   kTextSpacingType,           kAltHalfWidthTextSelector,              7 },
+    { 'vkna',   kAlternateKanaType,         kAlternateVertKanaOnSelector,           kAlternateVertKanaOffSelector },
+    { 'vpal',   kTextSpacingType,           kAltProportionalTextSelector,           7 },
+    { 'vrt2',   kVerticalSubstitutionType,  kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
+    { 'zero',   kTypographicExtrasType,     kSlashedZeroOnSelector,                 kSlashedZeroOffSelector },
+};
+
+static int
+_hb_feature_mapping_cmp (const void *key_, const void *entry_)
+{
+  unsigned int key = * (unsigned int *) key_;
+  const feature_mapping_t * entry = (const feature_mapping_t *) entry_;
+  return key < entry->otFeatureTag ? -1 :
+        key > entry->otFeatureTag ? 1 :
+        0;
+}
+
 hb_bool_t
 _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
                    hb_font_t          *font,
 hb_bool_t
 _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
                    hb_font_t          *font,
@@ -181,175 +431,725 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
   hb_coretext_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
 
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
   hb_coretext_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
 
-#define FAIL(...) \
-  HB_STMT_START { \
-    DEBUG_MSG (CORETEXT, NULL, __VA_ARGS__); \
-    return false; \
-  } HB_STMT_END;
+  /* Attach marks to their bases, to match the 'ot' shaper.
+   * Adapted from hb-ot-shape:hb_form_clusters().
+   * Note that this only makes us be closer to the 'ot' shaper,
+   * but by no means the same.  For example, if there's
+   * B1 M1 B2 M2, and B1-B2 form a ligature, M2's cluster will
+   * continue pointing to B2 even though B2 was merged into B1's
+   * cluster... */
+  {
+    hb_unicode_funcs_t *unicode = buffer->unicode;
+    unsigned int count = buffer->len;
+    hb_glyph_info_t *info = buffer->info;
+    for (unsigned int i = 1; i < count; i++)
+      if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (unicode->general_category (info[i].codepoint)))
+       buffer->merge_clusters (i - 1, i + 1);
+  }
+
+  hb_auto_array_t<feature_record_t> feature_records;
+  hb_auto_array_t<range_record_t> range_records;
+
+  /*
+   * Set up features.
+   * (copied + modified from code from hb-uniscribe.cc)
+   */
+  if (num_features)
+  {
+    /* Sort features by start/end events. */
+    hb_auto_array_t<feature_event_t> feature_events;
+    for (unsigned int i = 0; i < num_features; i++)
+    {
+      const feature_mapping_t * mapping = (const feature_mapping_t *) bsearch (&features[i].tag,
+                                                                              feature_mappings,
+                                                                              ARRAY_LENGTH (feature_mappings),
+                                                                              sizeof (feature_mappings[0]),
+                                                                              _hb_feature_mapping_cmp);
+      if (!mapping)
+        continue;
+
+      active_feature_t feature;
+      feature.rec.feature = mapping->aatFeatureType;
+      feature.rec.setting = features[i].value ? mapping->selectorToEnable : mapping->selectorToDisable;
+      feature.order = i;
+
+      feature_event_t *event;
+
+      event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = features[i].start;
+      event->start = true;
+      event->feature = feature;
+
+      event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = features[i].end;
+      event->start = false;
+      event->feature = feature;
+    }
+    feature_events.qsort ();
+    /* Add a strategic final event. */
+    {
+      active_feature_t feature;
+      feature.rec.feature = HB_TAG_NONE;
+      feature.rec.setting = 0;
+      feature.order = num_features + 1;
+
+      feature_event_t *event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = 0; /* This value does magic. */
+      event->start = false;
+      event->feature = feature;
+    }
+
+    /* Scan events and save features for each range. */
+    hb_auto_array_t<active_feature_t> active_features;
+    unsigned int last_index = 0;
+    for (unsigned int i = 0; i < feature_events.len; i++)
+    {
+      feature_event_t *event = &feature_events[i];
+
+      if (event->index != last_index)
+      {
+        /* Save a snapshot of active features and the range. */
+       range_record_t *range = range_records.push ();
+       if (unlikely (!range))
+         goto fail_features;
+
+       if (active_features.len)
+       {
+         CFMutableArrayRef features_array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
+
+         /* TODO sort and resolve conflicting features? */
+         /* active_features.qsort (); */
+         for (unsigned int j = 0; j < active_features.len; j++)
+         {
+           CFStringRef keys[2] = {
+             kCTFontFeatureTypeIdentifierKey,
+             kCTFontFeatureSelectorIdentifierKey
+           };
+           CFNumberRef values[2] = {
+             CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.feature),
+             CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.setting)
+           };
+           CFDictionaryRef dict = CFDictionaryCreate (kCFAllocatorDefault,
+                                                      (const void **) keys,
+                                                      (const void **) values,
+                                                      2,
+                                                      &kCFTypeDictionaryKeyCallBacks,
+                                                      &kCFTypeDictionaryValueCallBacks);
+           CFRelease (values[0]);
+           CFRelease (values[1]);
+
+           CFArrayAppendValue (features_array, dict);
+           CFRelease (dict);
+
+         }
+
+         CFDictionaryRef attributes = CFDictionaryCreate (kCFAllocatorDefault,
+                                                          (const void **) &kCTFontFeatureSettingsAttribute,
+                                                          (const void **) &features_array,
+                                                          1,
+                                                          &kCFTypeDictionaryKeyCallBacks,
+                                                          &kCFTypeDictionaryValueCallBacks);
+         CFRelease (features_array);
+
+         CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
+         CFRelease (attributes);
+
+         range->font = CTFontCreateCopyWithAttributes (font_data->ct_font, 0.0, NULL, font_desc);
+         CFRelease (font_desc);
+       }
+       else
+       {
+         range->font = NULL;
+       }
+
+       range->index_first = last_index;
+       range->index_last  = event->index - 1;
+
+       last_index = event->index;
+      }
+
+      if (event->start) {
+        active_feature_t *feature = active_features.push ();
+       if (unlikely (!feature))
+         goto fail_features;
+       *feature = event->feature;
+      } else {
+        active_feature_t *feature = active_features.find (&event->feature);
+       if (feature)
+         active_features.remove (feature - active_features.array);
+      }
+    }
+
+    if (!range_records.len) /* No active feature found. */
+      goto fail_features;
+  }
+  else
+  {
+  fail_features:
+    num_features = 0;
+  }
 
   unsigned int scratch_size;
 
   unsigned int scratch_size;
-  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+  hb_buffer_t::scratch_buffer_t *scratch = buffer->get_scratch_buffer (&scratch_size);
 
 
-#define utf16_index() var1.u32
+#define ALLOCATE_ARRAY(Type, name, len, on_no_room) \
+  Type *name = (Type *) scratch; \
+  { \
+    unsigned int _consumed = DIV_CEIL ((len) * sizeof (Type), sizeof (*scratch)); \
+    if (unlikely (_consumed > scratch_size)) \
+    { \
+      on_no_room; \
+      assert (0); \
+    } \
+    scratch += _consumed; \
+    scratch_size -= _consumed; \
+  }
 
 
-  UniChar *pchars = (UniChar *) scratch;
+  ALLOCATE_ARRAY (UniChar, pchars, buffer->len * 2, /*nothing*/);
   unsigned int chars_len = 0;
   for (unsigned int i = 0; i < buffer->len; i++) {
     hb_codepoint_t c = buffer->info[i].codepoint;
   unsigned int chars_len = 0;
   for (unsigned int i = 0; i < buffer->len; i++) {
     hb_codepoint_t c = buffer->info[i].codepoint;
-    buffer->info[i].utf16_index() = chars_len;
-    if (likely (c < 0x10000))
+    if (likely (c <= 0xFFFFu))
       pchars[chars_len++] = c;
       pchars[chars_len++] = c;
-    else if (unlikely (c >= 0x110000))
-      pchars[chars_len++] = 0xFFFD;
+    else if (unlikely (c > 0x10FFFFu))
+      pchars[chars_len++] = 0xFFFDu;
     else {
     else {
-      pchars[chars_len++] = 0xD800 + ((c - 0x10000) >> 10);
-      pchars[chars_len++] = 0xDC00 + ((c - 0x10000) & ((1 << 10) - 1));
+      pchars[chars_len++] = 0xD800u + ((c - 0x10000u) >> 10);
+      pchars[chars_len++] = 0xDC00u + ((c - 0x10000u) & ((1 << 10) - 1));
     }
   }
 
     }
   }
 
-#undef utf16_index
+  ALLOCATE_ARRAY (unsigned int, log_clusters, chars_len, /*nothing*/);
+  chars_len = 0;
+  for (unsigned int i = 0; i < buffer->len; i++)
+  {
+    hb_codepoint_t c = buffer->info[i].codepoint;
+    unsigned int cluster = buffer->info[i].cluster;
+    log_clusters[chars_len++] = cluster;
+    if (hb_in_range (c, 0x10000u, 0x10FFFFu))
+      log_clusters[chars_len++] = cluster; /* Surrogates. */
+  }
+
+#define FAIL(...) \
+  HB_STMT_START { \
+    DEBUG_MSG (CORETEXT, NULL, __VA_ARGS__); \
+    ret = false; \
+    goto fail; \
+  } HB_STMT_END;
+
+  bool ret = true;
+  CFStringRef string_ref = NULL;
+  CTLineRef line = NULL;
+
+  if (0)
+  {
+resize_and_retry:
+    DEBUG_MSG (CORETEXT, buffer, "Buffer resize");
+    /* string_ref uses the scratch-buffer for backing store, and line references
+     * string_ref (via attr_string).  We must release those before resizing buffer. */
+    assert (string_ref);
+    assert (line);
+    CFRelease (string_ref);
+    CFRelease (line);
+    string_ref = NULL;
+    line = NULL;
+
+    /* Get previous start-of-scratch-area, that we use later for readjusting
+     * our existing scratch arrays. */
+    unsigned int old_scratch_used;
+    hb_buffer_t::scratch_buffer_t *old_scratch;
+    old_scratch = buffer->get_scratch_buffer (&old_scratch_used);
+    old_scratch_used = scratch - old_scratch;
+
+    if (unlikely (!buffer->ensure (buffer->allocated * 2)))
+      FAIL ("Buffer resize failed");
+
+    /* Adjust scratch, pchars, and log_cluster arrays.  This is ugly, but really the
+     * cleanest way to do without completely restructuring the rest of this shaper. */
+    scratch = buffer->get_scratch_buffer (&scratch_size);
+    pchars = reinterpret_cast<UniChar *> (((char *) scratch + ((char *) pchars - (char *) old_scratch)));
+    log_clusters = reinterpret_cast<unsigned int *> (((char *) scratch + ((char *) log_clusters - (char *) old_scratch)));
+    scratch += old_scratch_used;
+    scratch_size -= old_scratch_used;
+  }
+retry:
+  {
+    string_ref = CFStringCreateWithCharactersNoCopy (NULL,
+                                                    pchars, chars_len,
+                                                    kCFAllocatorNull);
+    if (unlikely (!string_ref))
+      FAIL ("CFStringCreateWithCharactersNoCopy failed");
+
+    /* Create an attributed string, populate it, and create a line from it, then release attributed string. */
+    {
+      CFMutableAttributedStringRef attr_string = CFAttributedStringCreateMutable (kCFAllocatorDefault,
+                                                                                 chars_len);
+      if (unlikely (!attr_string))
+       FAIL ("CFAttributedStringCreateMutable failed");
+      CFAttributedStringReplaceString (attr_string, CFRangeMake (0, 0), string_ref);
+      if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
+      {
+       CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
+                                       kCTVerticalFormsAttributeName, kCFBooleanTrue);
+      }
+
+      if (buffer->props.language)
+      {
+/* What's the iOS equivalent of this check?
+ * The symbols was introduced in iOS 7.0.
+ * At any rate, our fallback is safe and works fine. */
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
+#  define kCTLanguageAttributeName CFSTR ("NSLanguage")
+#endif
+        CFStringRef lang = CFStringCreateWithCStringNoCopy (kCFAllocatorDefault,
+                                                           hb_language_to_string (buffer->props.language),
+                                                           kCFStringEncodingUTF8,
+                                                           kCFAllocatorNull);
+       if (unlikely (!lang))
+         FAIL ("CFStringCreateWithCStringNoCopy failed");
+       CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
+                                       kCTLanguageAttributeName, lang);
+       CFRelease (lang);
+      }
+      CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
+                                     kCTFontAttributeName, font_data->ct_font);
+
+      if (num_features)
+      {
+       unsigned int start = 0;
+       range_record_t *last_range = &range_records[0];
+       for (unsigned int k = 0; k < chars_len; k++)
+       {
+         range_record_t *range = last_range;
+         while (log_clusters[k] < range->index_first)
+           range--;
+         while (log_clusters[k] > range->index_last)
+           range++;
+         if (range != last_range)
+         {
+           if (last_range->font)
+             CFAttributedStringSetAttribute (attr_string, CFRangeMake (start, k - start),
+                                             kCTFontAttributeName, last_range->font);
+
+           start = k;
+         }
+
+         last_range = range;
+       }
+       if (start != chars_len && last_range->font)
+         CFAttributedStringSetAttribute (attr_string, CFRangeMake (start, chars_len - start),
+                                         kCTFontAttributeName, last_range->font);
+      }
 
 
-  CFStringRef string_ref = CFStringCreateWithCharactersNoCopy (kCFAllocatorDefault,
-                                                               pchars, chars_len,
-                                                               kCFAllocatorNull);
+      int level = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
+      CFNumberRef level_number = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &level);
+      CFDictionaryRef options = CFDictionaryCreate (kCFAllocatorDefault,
+                                                   (const void **) &kCTTypesetterOptionForcedEmbeddingLevel,
+                                                   (const void **) &level_number,
+                                                   1,
+                                                   &kCFTypeDictionaryKeyCallBacks,
+                                                   &kCFTypeDictionaryValueCallBacks);
+      if (unlikely (!options))
+        FAIL ("CFDictionaryCreate failed");
+
+      CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedStringAndOptions (attr_string, options);
+      CFRelease (options);
+      CFRelease (attr_string);
+      if (unlikely (!typesetter))
+       FAIL ("CTTypesetterCreateWithAttributedStringAndOptions failed");
+
+      line = CTTypesetterCreateLine (typesetter, CFRangeMake(0, 0));
+      CFRelease (typesetter);
+      if (unlikely (!line))
+       FAIL ("CTTypesetterCreateLine failed");
+    }
 
 
-  CFDictionaryRef attrs = CFDictionaryCreate (kCFAllocatorDefault,
-                                              (const void**) &kCTFontAttributeName,
-                                              (const void**) &font_data->ct_font,
-                                              1, /* count of attributes */
-                                              &kCFTypeDictionaryKeyCallBacks,
-                                              &kCFTypeDictionaryValueCallBacks);
+    CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
+    unsigned int num_runs = CFArrayGetCount (glyph_runs);
+    DEBUG_MSG (CORETEXT, NULL, "Num runs: %d", num_runs);
+
+    buffer->len = 0;
+    uint32_t status_and = ~0, status_or = 0;
+
+    const CFRange range_all = CFRangeMake (0, 0);
+
+    for (unsigned int i = 0; i < num_runs; i++)
+    {
+      CTRunRef run = static_cast<CTRunRef>(CFArrayGetValueAtIndex (glyph_runs, i));
+      CTRunStatus run_status = CTRunGetStatus (run);
+      status_or  |= run_status;
+      status_and &= run_status;
+      DEBUG_MSG (CORETEXT, run, "CTRunStatus: %x", run_status);
+
+      /* CoreText does automatic font fallback (AKA "cascading") for  characters
+       * not supported by the requested font, and provides no way to turn it off,
+       * so we must detect if the returned run uses a font other than the requested
+       * one and fill in the buffer with .notdef glyphs instead of random glyph
+       * indices from a different font.
+       */
+      CFDictionaryRef attributes = CTRunGetAttributes (run);
+      CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName));
+      if (!CFEqual (run_ct_font, font_data->ct_font))
+      {
+       /* The run doesn't use our main font instance.  We have to figure out
+        * whether font fallback happened, or this is just CoreText giving us
+        * another CTFont using the same underlying CGFont.  CoreText seems
+        * to do that in a variety of situations, one of which being vertical
+        * text, but also perhaps for caching reasons.
+        *
+        * First, see if it uses any of our subfonts created to set font features...
+        *
+        * Next, compare the CGFont to the one we used to create our fonts.
+        * Even this doesn't work all the time.
+        *
+        * Finally, we compare PS names, which I don't think are unique...
+        *
+        * Looks like if we really want to be sure here we have to modify the
+        * font to change the name table, similar to what we do in the uniscribe
+        * backend.
+        *
+        * However, even that wouldn't work if we were passed in the CGFont to
+        * begin with.
+        *
+        * Webkit uses a slightly different approach: it installs LastResort
+        * as fallback chain, and then checks PS name of used font against
+        * LastResort.  That one is safe for any font except for LastResort,
+        * as opposed to ours, which can fail if we are using any uninstalled
+        * font that has the same name as an installed font.
+        *
+        * See: http://github.com/behdad/harfbuzz/pull/36
+        */
+       bool matched = false;
+       for (unsigned int i = 0; i < range_records.len; i++)
+         if (range_records[i].font && CFEqual (run_ct_font, range_records[i].font))
+         {
+           matched = true;
+           break;
+         }
+       if (!matched)
+       {
+         CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0);
+         if (run_cg_font)
+         {
+           matched = CFEqual (run_cg_font, face_data);
+           CFRelease (run_cg_font);
+         }
+       }
+       if (!matched)
+       {
+         CFStringRef font_ps_name = CTFontCopyName (font_data->ct_font, kCTFontPostScriptNameKey);
+         CFStringRef run_ps_name = CTFontCopyName (run_ct_font, kCTFontPostScriptNameKey);
+         CFComparisonResult result = CFStringCompare (run_ps_name, font_ps_name, 0);
+         CFRelease (run_ps_name);
+         CFRelease (font_ps_name);
+         if (result == kCFCompareEqualTo)
+           matched = true;
+       }
+       if (!matched)
+       {
+         CFRange range = CTRunGetStringRange (run);
+          DEBUG_MSG (CORETEXT, run, "Run used fallback font: %ld..%ld",
+                    range.location, range.location + range.length);
+         if (!buffer->ensure_inplace (buffer->len + range.length))
+           goto resize_and_retry;
+         hb_glyph_info_t *info = buffer->info + buffer->len;
+
+         CGGlyph notdef = 0;
+         double advance = CTFontGetAdvancesForGlyphs (font_data->ct_font, kCTFontHorizontalOrientation, &notdef, NULL, 1);
+
+         unsigned int old_len = buffer->len;
+         for (CFIndex j = range.location; j < range.location + range.length; j++)
+         {
+             UniChar ch = CFStringGetCharacterAtIndex (string_ref, j);
+             if (hb_in_range<UniChar> (ch, 0xDC00u, 0xDFFFu) && range.location < j)
+             {
+               ch = CFStringGetCharacterAtIndex (string_ref, j - 1);
+               if (hb_in_range<UniChar> (ch, 0xD800u, 0xDBFFu))
+                 /* This is the second of a surrogate pair.  Don't need .notdef
+                  * for this one. */
+                 continue;
+             }
+
+             info->codepoint = notdef;
+             info->cluster = log_clusters[j];
+
+             info->mask = advance;
+             info->var1.u32 = 0;
+             info->var2.u32 = 0;
+
+             info++;
+             buffer->len++;
+         }
+         if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
+           buffer->reverse_range (old_len, buffer->len);
+         continue;
+       }
+      }
 
 
-  /* TODO: support features */
+      unsigned int num_glyphs = CTRunGetGlyphCount (run);
+      if (num_glyphs == 0)
+       continue;
+
+      if (!buffer->ensure_inplace (buffer->len + num_glyphs))
+       goto resize_and_retry;
+
+      hb_glyph_info_t *run_info = buffer->info + buffer->len;
+
+      /* Testing used to indicate that CTRunGetGlyphsPtr, etc (almost?) always
+       * succeed, and so copying data to our own buffer will be rare.  Reports
+       * have it that this changed in OS X 10.10 Yosemite, and NULL is returned
+       * frequently.  At any rate, we can test that codepath by setting USE_PTR
+       * to false. */
+
+#define USE_PTR true
+
+#define SCRATCH_SAVE() \
+  unsigned int scratch_size_saved = scratch_size; \
+  hb_buffer_t::scratch_buffer_t *scratch_saved = scratch
+
+#define SCRATCH_RESTORE() \
+  scratch_size = scratch_size_saved; \
+  scratch = scratch_saved;
+
+      {
+        SCRATCH_SAVE();
+       const CGGlyph* glyphs = USE_PTR ? CTRunGetGlyphsPtr (run) : NULL;
+       if (!glyphs) {
+         ALLOCATE_ARRAY (CGGlyph, glyph_buf, num_glyphs, goto resize_and_retry);
+         CTRunGetGlyphs (run, range_all, glyph_buf);
+         glyphs = glyph_buf;
+       }
+       const CFIndex* string_indices = USE_PTR ? CTRunGetStringIndicesPtr (run) : NULL;
+       if (!string_indices) {
+         ALLOCATE_ARRAY (CFIndex, index_buf, num_glyphs, goto resize_and_retry);
+         CTRunGetStringIndices (run, range_all, index_buf);
+         string_indices = index_buf;
+       }
+       hb_glyph_info_t *info = run_info;
+       for (unsigned int j = 0; j < num_glyphs; j++)
+       {
+         info->codepoint = glyphs[j];
+         info->cluster = log_clusters[string_indices[j]];
+         info++;
+       }
+       SCRATCH_RESTORE();
+      }
+      {
+        SCRATCH_SAVE();
+       const CGPoint* positions = USE_PTR ? CTRunGetPositionsPtr (run) : NULL;
+       if (!positions) {
+         ALLOCATE_ARRAY (CGPoint, position_buf, num_glyphs, goto resize_and_retry);
+         CTRunGetPositions (run, range_all, position_buf);
+         positions = position_buf;
+       }
+       double run_advance = CTRunGetTypographicBounds (run, range_all, NULL, NULL, NULL);
+       DEBUG_MSG (CORETEXT, run, "Run advance: %g", run_advance);
+       hb_glyph_info_t *info = run_info;
+       if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
+       {
+         for (unsigned int j = 0; j < num_glyphs; j++)
+         {
+           double advance = (j + 1 < num_glyphs ? positions[j + 1].x : positions[0].x + run_advance) - positions[j].x;
+           info->mask = advance;
+           info->var1.u32 = positions[0].x; /* Yes, zero. */
+           info->var2.u32 = positions[j].y;
+           info++;
+         }
+       }
+       else
+       {
+         run_advance = -run_advance;
+         for (unsigned int j = 0; j < num_glyphs; j++)
+         {
+           double advance = (j + 1 < num_glyphs ? positions[j + 1].y : positions[0].y + run_advance) - positions[j].y;
+           info->mask = advance;
+           info->var1.u32 = positions[j].x;
+           info->var2.u32 = positions[0].y; /* Yes, zero. */
+           info++;
+         }
+       }
+       SCRATCH_RESTORE();
+      }
+#undef SCRATCH_RESTORE
+#undef SCRATCH_SAVE
+#undef USE_PTR
+#undef ALLOCATE_ARRAY
 
 
-  CFAttributedStringRef attr_string = CFAttributedStringCreate (kCFAllocatorDefault, string_ref, attrs);
-  CFRelease (string_ref);
-  CFRelease (attrs);
+      buffer->len += num_glyphs;
+    }
 
 
-  CTLineRef line = CTLineCreateWithAttributedString (attr_string);
-  CFRelease (attr_string);
+    /* Make sure all runs had the expected direction. */
+    bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
+    assert (bool (status_and & kCTRunStatusRightToLeft) == backward);
+    assert (bool (status_or  & kCTRunStatusRightToLeft) == backward);
+
+    buffer->clear_positions ();
+
+    unsigned int count = buffer->len;
+    hb_glyph_info_t *info = buffer->info;
+    hb_glyph_position_t *pos = buffer->pos;
+    if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
+      for (unsigned int i = 0; i < count; i++)
+      {
+       pos->x_advance = info->mask;
+       pos->x_offset = info->var1.u32;
+       pos->y_offset = info->var2.u32;
+       info++, pos++;
+      }
+    else
+      for (unsigned int i = 0; i < count; i++)
+      {
+       pos->y_advance = info->mask;
+       pos->x_offset = info->var1.u32;
+       pos->y_offset = info->var2.u32;
+       info++, pos++;
+      }
 
 
-  CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
-  unsigned int num_runs = CFArrayGetCount (glyph_runs);
+    /* Fix up clusters so that we never return out-of-order indices;
+     * if core text has reordered glyphs, we'll merge them to the
+     * beginning of the reordered cluster.  CoreText is nice enough
+     * to tell us whenever it has produced nonmonotonic results...
+     * Note that we assume the input clusters were nonmonotonic to
+     * begin with.
+     *
+     * This does *not* mean we'll form the same clusters as Uniscribe
+     * or the native OT backend, only that the cluster indices will be
+     * monotonic in the output buffer. */
+    if (count > 1 && (status_or & kCTRunStatusNonMonotonic))
+    {
+      hb_glyph_info_t *info = buffer->info;
+      if (HB_DIRECTION_IS_FORWARD (buffer->props.direction))
+      {
+       unsigned int cluster = info[count - 1].cluster;
+       for (unsigned int i = count - 1; i > 0; i--)
+       {
+         cluster = MIN (cluster, info[i - 1].cluster);
+         info[i - 1].cluster = cluster;
+       }
+      }
+      else
+      {
+       unsigned int cluster = info[0].cluster;
+       for (unsigned int i = 1; i < count; i++)
+       {
+         cluster = MIN (cluster, info[i].cluster);
+         info[i].cluster = cluster;
+       }
+      }
+    }
+  }
 
 
-  bool success = true;
-  buffer->len = 0;
+#undef FAIL
 
 
-  const CFRange range_all = CFRangeMake (0, 0);
+fail:
+  if (string_ref)
+    CFRelease (string_ref);
+  if (line)
+    CFRelease (line);
 
 
-  for (unsigned int i = 0; i < num_runs; i++) {
-    CTRunRef run = (CTRunRef) CFArrayGetValueAtIndex (glyph_runs, i);
+  for (unsigned int i = 0; i < range_records.len; i++)
+    if (range_records[i].font)
+      CFRelease (range_records[i].font);
 
 
-    unsigned int num_glyphs = CTRunGetGlyphCount (run);
-    if (num_glyphs == 0)
-      continue;
+  return ret;
+}
 
 
-    buffer->ensure (buffer->len + num_glyphs);
 
 
-    /* Testing indicates that CTRunGetGlyphsPtr (almost?) always succeeds,
-     * and so copying data to our own buffer with CTRunGetGlyphs will be
    * extremely rare. */
+/*
+ * AAT shaper
+ */
 
 
-    unsigned int scratch_size;
-    char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+HB_SHAPER_DATA_ENSURE_DECLARE(coretext_aat, face)
+HB_SHAPER_DATA_ENSURE_DECLARE(coretext_aat, font)
 
 
-#define ALLOCATE_ARRAY(Type, name, len) \
-  Type *name = (Type *) scratch; \
-  scratch += (len) * sizeof ((name)[0]); \
-  scratch_size -= (len) * sizeof ((name)[0]);
-
-    const CGGlyph* glyphs = CTRunGetGlyphsPtr (run);
-    if (!glyphs) {
-      ALLOCATE_ARRAY (CGGlyph, glyph_buf, num_glyphs);
-      CTRunGetGlyphs (run, range_all, glyph_buf);
-      glyphs = glyph_buf;
-    }
 
 
-    const CGPoint* positions = CTRunGetPositionsPtr (run);
-    if (!positions) {
-      ALLOCATE_ARRAY (CGPoint, position_buf, num_glyphs);
-      CTRunGetPositions (run, range_all, position_buf);
-      positions = position_buf;
-    }
+/*
+ * shaper face data
+ */
+
+struct hb_coretext_aat_shaper_face_data_t {};
 
 
-    const CFIndex* string_indices = CTRunGetStringIndicesPtr (run);
-    if (!string_indices) {
-      ALLOCATE_ARRAY (CFIndex, index_buf, num_glyphs);
-      CTRunGetStringIndices (run, range_all, index_buf);
-      string_indices = index_buf;
+hb_coretext_aat_shaper_face_data_t *
+_hb_coretext_aat_shaper_face_data_create (hb_face_t *face)
+{
+  hb_blob_t *mort_blob = face->reference_table (HB_CORETEXT_TAG_MORT);
+  /* Umm, we just reference the table to check whether it exists.
+   * Maybe add better API for this? */
+  if (!hb_blob_get_length (mort_blob))
+  {
+    hb_blob_destroy (mort_blob);
+    mort_blob = face->reference_table (HB_CORETEXT_TAG_MORX);
+    if (!hb_blob_get_length (mort_blob))
+    {
+      hb_blob_destroy (mort_blob);
+      return NULL;
     }
     }
+  }
+  hb_blob_destroy (mort_blob);
 
 
-#undef ALLOCATE_ARRAY
+  return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
+}
+
+void
+_hb_coretext_aat_shaper_face_data_destroy (hb_coretext_aat_shaper_face_data_t *data HB_UNUSED)
+{
+}
 
 
-    double run_width = CTRunGetTypographicBounds (run, range_all, NULL, NULL, NULL);
 
 
-    for (unsigned int j = 0; j < num_glyphs; j++) {
-      double advance = (j + 1 < num_glyphs ? positions[j + 1].x : positions[0].x + run_width) - positions[j].x;
+/*
+ * shaper font data
+ */
 
 
-      hb_glyph_info_t *info = &buffer->info[buffer->len];
-      hb_glyph_position_t *pos = &buffer->pos[buffer->len];
+struct hb_coretext_aat_shaper_font_data_t {};
 
 
-      info->codepoint = glyphs[j];
-      info->cluster = string_indices[j];
+hb_coretext_aat_shaper_font_data_t *
+_hb_coretext_aat_shaper_font_data_create (hb_font_t *font)
+{
+  return hb_coretext_shaper_font_data_ensure (font) ? (hb_coretext_aat_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
+}
 
 
-      /* Currently, we do all x-positioning by setting the advance, we never use x-offset. */
-      info->mask = advance;
-      info->var1.u32 = 0;
-      info->var2.u32 = positions[j].y;
+void
+_hb_coretext_aat_shaper_font_data_destroy (hb_coretext_aat_shaper_font_data_t *data HB_UNUSED)
+{
+}
 
 
-      buffer->len++;
-    }
-  }
 
 
-  buffer->clear_positions ();
+/*
+ * shaper shape_plan data
+ */
 
 
-  unsigned int count = buffer->len;
-  for (unsigned int i = 0; i < count; ++i) {
-    hb_glyph_info_t *info = &buffer->info[i];
-    hb_glyph_position_t *pos = &buffer->pos[i];
+struct hb_coretext_aat_shaper_shape_plan_data_t {};
 
 
-    /* TODO vertical */
-    pos->x_advance = info->mask;
-    pos->x_offset = info->var1.u32;
-    pos->y_offset = info->var2.u32;
-  }
+hb_coretext_aat_shaper_shape_plan_data_t *
+_hb_coretext_aat_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan HB_UNUSED,
+                                            const hb_feature_t *user_features HB_UNUSED,
+                                            unsigned int        num_user_features HB_UNUSED)
+{
+  return (hb_coretext_aat_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+}
 
 
-  /* Fix up clusters so that we never return out-of-order indices;
-   * if core text has reordered glyphs, we'll merge them to the
-   * beginning of the reordered cluster.
-   *
-   * This does *not* mean we'll form the same clusters as Uniscribe
-   * or the native OT backend, only that the cluster indices will be
-   * monotonic in the output buffer. */
-  if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
-    unsigned int prev_cluster = 0;
-    for (unsigned int i = 0; i < count; i++) {
-      unsigned int curr_cluster = buffer->info[i].cluster;
-      if (curr_cluster < prev_cluster) {
-        for (unsigned int j = i; j > 0; j--) {
-          if (buffer->info[j - 1].cluster > curr_cluster)
-            buffer->info[j - 1].cluster = curr_cluster;
-          else
-            break;
-        }
-      }
-      prev_cluster = curr_cluster;
-    }
-  } else {
-    unsigned int prev_cluster = (unsigned int)-1;
-    for (unsigned int i = 0; i < count; i++) {
-      unsigned int curr_cluster = buffer->info[i].cluster;
-      if (curr_cluster > prev_cluster) {
-        for (unsigned int j = i; j > 0; j--) {
-          if (buffer->info[j - 1].cluster < curr_cluster)
-            buffer->info[j - 1].cluster = curr_cluster;
-          else
-            break;
-        }
-      }
-      prev_cluster = curr_cluster;
-    }
-  }
+void
+_hb_coretext_aat_shaper_shape_plan_data_destroy (hb_coretext_aat_shaper_shape_plan_data_t *data HB_UNUSED)
+{
+}
+
+
+/*
+ * shaper
+ */
 
 
-  return true;
+hb_bool_t
+_hb_coretext_aat_shape (hb_shape_plan_t    *shape_plan,
+                       hb_font_t          *font,
+                       hb_buffer_t        *buffer,
+                       const hb_feature_t *features,
+                       unsigned int        num_features)
+{
+  return _hb_coretext_shape (shape_plan, font, buffer, features, num_features);
 }
 }
index c4954fa..25267bc 100644 (file)
 
 #include "hb.h"
 
 
 #include "hb.h"
 
-#include <ApplicationServices/ApplicationServices.h>
+#include <TargetConditionals.h>
+#if TARGET_OS_IPHONE
+#  include <CoreText/CoreText.h>
+#  include <CoreGraphics/CoreGraphics.h>
+#else
+#  include <ApplicationServices/ApplicationServices.h>
+#endif
 
 HB_BEGIN_DECLS
 
 
 
 HB_BEGIN_DECLS
 
 
+#define HB_CORETEXT_TAG_MORT HB_TAG('m','o','r','t')
+#define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x')
+
+
+hb_face_t *
+hb_coretext_face_create (CGFontRef cg_font);
+
+
 CGFontRef
 hb_coretext_face_get_cg_font (hb_face_t *face);
 
 CGFontRef
 hb_coretext_face_get_cg_font (hb_face_t *face);
 
similarity index 63%
rename from src/hb-old/harfbuzz-stream.h
rename to src/hb-deprecated.h
index a155cc2..30ae4b1 100644 (file)
@@ -1,8 +1,7 @@
 /*
 /*
- * Copyright (C) 2005  David Turner
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright © 2013  Google, Inc.
  *
  *
- * This is part of HarfBuzz, an OpenType Layout engine library.
+ *  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
  *
  * Permission is hereby granted, without written agreement and without
  * license or royalty fees, to use, copy, modify, and distribute this
  * 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.
  * 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 HARFBUZZ_STREAM_H
-#define HARFBUZZ_STREAM_H
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
 
 
-#include "harfbuzz-global.h"
+#ifndef HB_DEPRECATED_H
+#define HB_DEPRECATED_H
 
 
-HB_BEGIN_HEADER
+#include "hb-common.h"
+#include "hb-unicode.h"
+#include "hb-font.h"
 
 
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
+HB_BEGIN_DECLS
 
 
-typedef struct HB_StreamRec_
-{
-    HB_Byte*       base;
-    HB_Byte*       cursor;
-    HB_UInt        size;
-    HB_UInt        pos;
-} HB_StreamRec;
+#ifndef HB_DISABLE_DEPRECATED
 
 
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
+#define HB_SCRIPT_CANADIAN_ABORIGINAL          HB_SCRIPT_CANADIAN_SYLLABICS
 
 
-HB_END_HEADER
+#define HB_BUFFER_FLAGS_DEFAULT                        HB_BUFFER_FLAG_DEFAULT
+#define HB_BUFFER_SERIALIZE_FLAGS_DEFAULT      HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 
 #endif
 
 #endif
+
+HB_END_DECLS
+
+#endif /* HB_DEPRECATED_H */
diff --git a/src/hb-face-private.hh b/src/hb-face-private.hh
new file mode 100644 (file)
index 0000000..6520d3d
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright © 2009  Red Hat, Inc.
+ * Copyright © 2011  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.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_FACE_PRIVATE_HH
+#define HB_FACE_PRIVATE_HH
+
+#include "hb-private.hh"
+
+#include "hb-object-private.hh"
+#include "hb-shaper-private.hh"
+#include "hb-shape-plan-private.hh"
+
+
+/*
+ * hb_face_t
+ */
+
+struct hb_face_t {
+  hb_object_header_t header;
+  ASSERT_POD ();
+
+  hb_bool_t immutable;
+
+  hb_reference_table_func_t  reference_table_func;
+  void                      *user_data;
+  hb_destroy_func_t          destroy;
+
+  unsigned int index;
+  mutable unsigned int upem;
+  mutable unsigned int num_glyphs;
+
+  struct hb_shaper_data_t shaper_data;
+
+  struct plan_node_t {
+    hb_shape_plan_t *shape_plan;
+    plan_node_t *next;
+  } *shape_plans;
+
+
+  inline hb_blob_t *reference_table (hb_tag_t tag) const
+  {
+    hb_blob_t *blob;
+
+    if (unlikely (!this || !reference_table_func))
+      return hb_blob_get_empty ();
+
+    blob = reference_table_func (/*XXX*/const_cast<hb_face_t *> (this), tag, user_data);
+    if (unlikely (!blob))
+      return hb_blob_get_empty ();
+
+    return blob;
+  }
+
+  inline HB_PURE_FUNC unsigned int get_upem (void) const
+  {
+    if (unlikely (!upem))
+      load_upem ();
+    return upem;
+  }
+
+  inline unsigned int get_num_glyphs (void) const
+  {
+    if (unlikely (num_glyphs == (unsigned int) -1))
+      load_num_glyphs ();
+    return num_glyphs;
+  }
+
+  private:
+  HB_INTERNAL void load_upem (void) const;
+  HB_INTERNAL void load_num_glyphs (void) const;
+};
+
+extern HB_INTERNAL const hb_face_t _hb_face_nil;
+
+#define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
+#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, face);
+#include "hb-shaper-list.hh"
+#undef HB_SHAPER_IMPLEMENT
+#undef HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
+
+
+#endif /* HB_FACE_PRIVATE_HH */
diff --git a/src/hb-face.cc b/src/hb-face.cc
new file mode 100644 (file)
index 0000000..9348af7
--- /dev/null
@@ -0,0 +1,481 @@
+/*
+ * Copyright © 2009  Red Hat, Inc.
+ * Copyright © 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.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.hh"
+
+#include "hb-ot-layout-private.hh"
+
+#include "hb-font-private.hh"
+#include "hb-open-file-private.hh"
+#include "hb-ot-head-table.hh"
+#include "hb-ot-maxp-table.hh"
+
+#include "hb-cache-private.hh"
+
+#include <string.h>
+
+
+/*
+ * hb_face_t
+ */
+
+const hb_face_t _hb_face_nil = {
+  HB_OBJECT_HEADER_STATIC,
+
+  true, /* immutable */
+
+  NULL, /* reference_table_func */
+  NULL, /* user_data */
+  NULL, /* destroy */
+
+  0,    /* index */
+  1000, /* upem */
+  0,    /* num_glyphs */
+
+  {
+#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
+#include "hb-shaper-list.hh"
+#undef HB_SHAPER_IMPLEMENT
+  },
+
+  NULL, /* shape_plans */
+};
+
+
+/**
+ * hb_face_create_for_tables:
+ * @reference_table_func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data: 
+ * @destroy: 
+ *
+ * 
+ *
+ * Return value: (transfer full)
+ *
+ * Since: 1.0
+ **/
+hb_face_t *
+hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
+                          void                      *user_data,
+                          hb_destroy_func_t          destroy)
+{
+  hb_face_t *face;
+
+  if (!reference_table_func || !(face = hb_object_create<hb_face_t> ())) {
+    if (destroy)
+      destroy (user_data);
+    return hb_face_get_empty ();
+  }
+
+  face->reference_table_func = reference_table_func;
+  face->user_data = user_data;
+  face->destroy = destroy;
+
+  face->upem = 0;
+  face->num_glyphs = (unsigned int) -1;
+
+  return face;
+}
+
+
+typedef struct hb_face_for_data_closure_t {
+  hb_blob_t *blob;
+  unsigned int  index;
+} hb_face_for_data_closure_t;
+
+static hb_face_for_data_closure_t *
+_hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
+{
+  hb_face_for_data_closure_t *closure;
+
+  closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t));
+  if (unlikely (!closure))
+    return NULL;
+
+  closure->blob = blob;
+  closure->index = index;
+
+  return closure;
+}
+
+static void
+_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
+{
+  hb_blob_destroy (closure->blob);
+  free (closure);
+}
+
+static hb_blob_t *
+_hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
+{
+  hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
+
+  if (tag == HB_TAG_NONE)
+    return hb_blob_reference (data->blob);
+
+  const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
+  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
+
+  const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
+
+  hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length);
+
+  return blob;
+}
+
+/**
+ * hb_face_create: (Xconstructor)
+ * @blob: 
+ * @index: 
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
+hb_face_t *
+hb_face_create (hb_blob_t    *blob,
+               unsigned int  index)
+{
+  hb_face_t *face;
+
+  if (unlikely (!blob || !hb_blob_get_length (blob)))
+    return hb_face_get_empty ();
+
+  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
+
+  if (unlikely (!closure))
+    return hb_face_get_empty ();
+
+  face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
+                                   closure,
+                                   (hb_destroy_func_t) _hb_face_for_data_closure_destroy);
+
+  hb_face_set_index (face, index);
+
+  return face;
+}
+
+/**
+ * hb_face_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full)
+ *
+ * Since: 1.0
+ **/
+hb_face_t *
+hb_face_get_empty (void)
+{
+  return const_cast<hb_face_t *> (&_hb_face_nil);
+}
+
+
+/**
+ * hb_face_reference: (skip)
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_face_t *
+hb_face_reference (hb_face_t *face)
+{
+  return hb_object_reference (face);
+}
+
+/**
+ * hb_face_destroy: (skip)
+ * @face: a face.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_face_destroy (hb_face_t *face)
+{
+  if (!hb_object_destroy (face)) return;
+
+  for (hb_face_t::plan_node_t *node = face->shape_plans; node; )
+  {
+    hb_face_t::plan_node_t *next = node->next;
+    hb_shape_plan_destroy (node->shape_plan);
+    free (node);
+    node = next;
+  }
+
+#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, face);
+#include "hb-shaper-list.hh"
+#undef HB_SHAPER_IMPLEMENT
+
+  if (face->destroy)
+    face->destroy (face->user_data);
+
+  free (face);
+}
+
+/**
+ * hb_face_set_user_data: (skip)
+ * @face: a face.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_bool_t
+hb_face_set_user_data (hb_face_t          *face,
+                      hb_user_data_key_t *key,
+                      void *              data,
+                      hb_destroy_func_t   destroy,
+                      hb_bool_t           replace)
+{
+  return hb_object_set_user_data (face, key, data, destroy, replace);
+}
+
+/**
+ * hb_face_get_user_data: (skip)
+ * @face: a face.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
+void *
+hb_face_get_user_data (hb_face_t          *face,
+                      hb_user_data_key_t *key)
+{
+  return hb_object_get_user_data (face, key);
+}
+
+/**
+ * hb_face_make_immutable:
+ * @face: a face.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_face_make_immutable (hb_face_t *face)
+{
+  if (unlikely (hb_object_is_inert (face)))
+    return;
+
+  face->immutable = true;
+}
+
+/**
+ * hb_face_is_immutable:
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+hb_bool_t
+hb_face_is_immutable (hb_face_t *face)
+{
+  return face->immutable;
+}
+
+
+/**
+ * hb_face_reference_table:
+ * @face: a face.
+ * @tag: 
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
+hb_blob_t *
+hb_face_reference_table (hb_face_t *face,
+                        hb_tag_t   tag)
+{
+  return face->reference_table (tag);
+}
+
+/**
+ * hb_face_reference_blob:
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
+hb_blob_t *
+hb_face_reference_blob (hb_face_t *face)
+{
+  return face->reference_table (HB_TAG_NONE);
+}
+
+/**
+ * hb_face_set_index:
+ * @face: a face.
+ * @index: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_face_set_index (hb_face_t    *face,
+                  unsigned int  index)
+{
+  if (face->immutable)
+    return;
+
+  face->index = index;
+}
+
+/**
+ * hb_face_get_index:
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+unsigned int
+hb_face_get_index (hb_face_t    *face)
+{
+  return face->index;
+}
+
+/**
+ * hb_face_set_upem:
+ * @face: a face.
+ * @upem: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_face_set_upem (hb_face_t    *face,
+                 unsigned int  upem)
+{
+  if (face->immutable)
+    return;
+
+  face->upem = upem;
+}
+
+/**
+ * hb_face_get_upem:
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+unsigned int
+hb_face_get_upem (hb_face_t *face)
+{
+  return face->get_upem ();
+}
+
+void
+hb_face_t::load_upem (void) const
+{
+  hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
+  const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
+  upem = head_table->get_upem ();
+  hb_blob_destroy (head_blob);
+}
+
+/**
+ * hb_face_set_glyph_count:
+ * @face: a face.
+ * @glyph_count: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
+void
+hb_face_set_glyph_count (hb_face_t    *face,
+                        unsigned int  glyph_count)
+{
+  if (face->immutable)
+    return;
+
+  face->num_glyphs = glyph_count;
+}
+
+/**
+ * hb_face_get_glyph_count:
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
+unsigned int
+hb_face_get_glyph_count (hb_face_t *face)
+{
+  return face->get_num_glyphs ();
+}
+
+void
+hb_face_t::load_num_glyphs (void) const
+{
+  hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_OT_TAG_maxp));
+  const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob);
+  num_glyphs = maxp_table->get_num_glyphs ();
+  hb_blob_destroy (maxp_blob);
+}
+
+
diff --git a/src/hb-face.h b/src/hb-face.h
new file mode 100644 (file)
index 0000000..f682c46
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright © 2009  Red Hat, 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.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
+
+#ifndef HB_FACE_H
+#define HB_FACE_H
+
+#include "hb-common.h"
+#include "hb-blob.h"
+
+HB_BEGIN_DECLS
+
+
+/*
+ * hb_face_t
+ */
+
+typedef struct hb_face_t hb_face_t;
+
+hb_face_t *
+hb_face_create (hb_blob_t    *blob,
+               unsigned int  index);
+
+typedef hb_blob_t * (*hb_reference_table_func_t)  (hb_face_t *face, hb_tag_t tag, void *user_data);
+
+/* calls destroy() when not needing user_data anymore */
+hb_face_t *
+hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
+                          void                      *user_data,
+                          hb_destroy_func_t          destroy);
+
+hb_face_t *
+hb_face_get_empty (void);
+
+hb_face_t *
+hb_face_reference (hb_face_t *face);
+
+void
+hb_face_destroy (hb_face_t *face);
+
+hb_bool_t
+hb_face_set_user_data (hb_face_t          *face,
+                      hb_user_data_key_t *key,
+                      void *              data,
+                      hb_destroy_func_t   destroy,
+                      hb_bool_t           replace);
+
+
+void *
+hb_face_get_user_data (hb_face_t          *face,
+                      hb_user_data_key_t *key);
+
+void
+hb_face_make_immutable (hb_face_t *face);
+
+hb_bool_t
+hb_face_is_immutable (hb_face_t *face);
+
+
+hb_blob_t *
+hb_face_reference_table (hb_face_t *face,
+                        hb_tag_t   tag);
+
+hb_blob_t *
+hb_face_reference_blob (hb_face_t *face);
+
+void
+hb_face_set_index (hb_face_t    *face,
+                  unsigned int  index);
+
+unsigned int
+hb_face_get_index (hb_face_t    *face);
+
+void
+hb_face_set_upem (hb_face_t    *face,
+                 unsigned int  upem);
+
+unsigned int
+hb_face_get_upem (hb_face_t *face);
+
+void
+hb_face_set_glyph_count (hb_face_t    *face,
+                        unsigned int  glyph_count);
+
+unsigned int
+hb_face_get_glyph_count (hb_face_t *face);
+
+
+HB_END_DECLS
+
+#endif /* HB_FACE_H */
index bdc8a80..9d061a9 100644 (file)
@@ -95,34 +95,46 @@ _hb_fallback_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
                    const hb_feature_t *features HB_UNUSED,
                    unsigned int        num_features HB_UNUSED)
 {
                    const hb_feature_t *features HB_UNUSED,
                    unsigned int        num_features HB_UNUSED)
 {
+  /* TODO
+   *
+   * - Apply fallback kern.
+   * - Handle Variation Selectors?
+   * - Apply normalization?
+   *
+   * This will make the fallback shaper into a dumb "TrueType"
+   * shaper which many people unfortunately still request.
+   */
+
   hb_codepoint_t space;
   hb_codepoint_t space;
-  font->get_glyph (' ', 0, &space);
+  bool has_space = font->get_glyph (' ', 0, &space);
 
 
-  buffer->guess_segment_properties ();
   buffer->clear_positions ();
 
   buffer->clear_positions ();
 
+  hb_direction_t direction = buffer->props.direction;
+  hb_unicode_funcs_t *unicode = buffer->unicode;
   unsigned int count = buffer->len;
   unsigned int count = buffer->len;
-
+  hb_glyph_info_t *info = buffer->info;
+  hb_glyph_position_t *pos = buffer->pos;
   for (unsigned int i = 0; i < count; i++)
   {
   for (unsigned int i = 0; i < count; i++)
   {
-    if (buffer->unicode->is_default_ignorable (buffer->info[i].codepoint)) {
-      buffer->info[i].codepoint = space;
-      buffer->pos[i].x_advance = 0;
-      buffer->pos[i].y_advance = 0;
+    if (has_space && unicode->is_default_ignorable (info[i].codepoint)) {
+      info[i].codepoint = space;
+      pos[i].x_advance = 0;
+      pos[i].y_advance = 0;
       continue;
     }
       continue;
     }
-    font->get_glyph (buffer->info[i].codepoint, 0, &buffer->info[i].codepoint);
-    font->get_glyph_advance_for_direction (buffer->info[i].codepoint,
-                                          buffer->props.direction,
-                                          &buffer->pos[i].x_advance,
-                                          &buffer->pos[i].y_advance);
-    font->subtract_glyph_origin_for_direction (buffer->info[i].codepoint,
-                                              buffer->props.direction,
-                                              &buffer->pos[i].x_offset,
-                                              &buffer->pos[i].y_offset);
+    font->get_glyph (info[i].codepoint, 0, &info[i].codepoint);
+    font->get_glyph_advance_for_direction (info[i].codepoint,
+                                          direction,
+                                          &pos[i].x_advance,
+                                          &pos[i].y_advance);
+    font->subtract_glyph_origin_for_direction (info[i].codepoint,
+                                              direction,
+                                              &pos[i].x_offset,
+                                              &pos[i].y_offset);
   }
 
   }
 
-  if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
+  if (HB_DIRECTION_IS_BACKWARD (direction))
     hb_buffer_reverse (buffer);
 
   return true;
     hb_buffer_reverse (buffer);
 
   return true;
index 48fbb0e..33bbf71 100644 (file)
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-font.h"
 #include "hb-object-private.hh"
 #include "hb-object-private.hh"
+#include "hb-face-private.hh"
 #include "hb-shaper-private.hh"
 #include "hb-shaper-private.hh"
-#include "hb-shape-plan-private.hh"
 
 
 
 
 
 
@@ -84,71 +83,6 @@ struct hb_font_funcs_t {
 };
 
 
 };
 
 
-/*
- * hb_face_t
- */
-
-struct hb_face_t {
-  hb_object_header_t header;
-  ASSERT_POD ();
-
-  hb_bool_t immutable;
-
-  hb_reference_table_func_t  reference_table_func;
-  void                      *user_data;
-  hb_destroy_func_t          destroy;
-
-  unsigned int index;
-  mutable unsigned int upem;
-  mutable unsigned int num_glyphs;
-
-  struct hb_shaper_data_t shaper_data;
-
-  struct plan_node_t {
-    hb_shape_plan_t *shape_plan;
-    plan_node_t *next;
-  } *shape_plans;
-
-
-  inline hb_blob_t *reference_table (hb_tag_t tag) const
-  {
-    hb_blob_t *blob;
-
-    if (unlikely (!this || !reference_table_func))
-      return hb_blob_get_empty ();
-
-    blob = reference_table_func (/*XXX*/const_cast<hb_face_t *> (this), tag, user_data);
-    if (unlikely (!blob))
-      return hb_blob_get_empty ();
-
-    return blob;
-  }
-
-  inline unsigned int get_upem (void) const
-  {
-    if (unlikely (!upem))
-      load_upem ();
-    return upem;
-  }
-
-  inline unsigned int get_num_glyphs (void) const
-  {
-    if (unlikely (num_glyphs == (unsigned int) -1))
-      load_num_glyphs ();
-    return num_glyphs;
-  }
-
-  private:
-  HB_INTERNAL void load_upem (void) const;
-  HB_INTERNAL void load_num_glyphs (void) const;
-};
-
-#define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
-#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, face);
-#include "hb-shaper-list.hh"
-#undef HB_SHAPER_IMPLEMENT
-#undef HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
-
 
 /*
  * hb_font_t
 
 /*
  * hb_font_t
@@ -183,12 +117,12 @@ struct hb_font_t {
   /* Convert from parent-font user-space to our user-space */
   inline hb_position_t parent_scale_x_distance (hb_position_t v) {
     if (unlikely (parent && parent->x_scale != x_scale))
   /* Convert from parent-font user-space to our user-space */
   inline hb_position_t parent_scale_x_distance (hb_position_t v) {
     if (unlikely (parent && parent->x_scale != x_scale))
-      return v * (int64_t) this->x_scale / this->parent->x_scale;
+      return (hb_position_t) (v * (int64_t) this->x_scale / this->parent->x_scale);
     return v;
   }
   inline hb_position_t parent_scale_y_distance (hb_position_t v) {
     if (unlikely (parent && parent->y_scale != y_scale))
     return v;
   }
   inline hb_position_t parent_scale_y_distance (hb_position_t v) {
     if (unlikely (parent && parent->y_scale != y_scale))
-      return v * (int64_t) this->y_scale / this->parent->y_scale;
+      return (hb_position_t) (v * (int64_t) this->y_scale / this->parent->y_scale);
     return v;
   }
   inline hb_position_t parent_scale_x_position (hb_position_t v) {
     return v;
   }
   inline hb_position_t parent_scale_x_position (hb_position_t v) {
@@ -210,6 +144,12 @@ struct hb_font_t {
 
   /* Public getters */
 
 
   /* Public getters */
 
+  inline hb_bool_t has_glyph (hb_codepoint_t unicode)
+  {
+    hb_codepoint_t glyph;
+    return get_glyph (unicode, 0, &glyph);
+  }
+
   inline hb_bool_t get_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
                              hb_codepoint_t *glyph)
   {
   inline hb_bool_t get_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
                              hb_codepoint_t *glyph)
   {
@@ -258,10 +198,10 @@ struct hb_font_t {
                                       klass->user_data.glyph_h_kerning);
   }
 
                                       klass->user_data.glyph_h_kerning);
   }
 
-  inline hb_position_t get_glyph_v_kerning (hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
+  inline hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
   {
     return klass->get.glyph_v_kerning (this, user_data,
   {
     return klass->get.glyph_v_kerning (this, user_data,
-                                      left_glyph, right_glyph,
+                                      top_glyph, bottom_glyph,
                                       klass->user_data.glyph_v_kerning);
   }
 
                                       klass->user_data.glyph_v_kerning);
   }
 
@@ -336,16 +276,21 @@ struct hb_font_t {
                                              hb_direction_t direction,
                                              hb_position_t *x, hb_position_t *y)
   {
                                              hb_direction_t direction,
                                              hb_position_t *x, hb_position_t *y)
   {
-    if (likely (HB_DIRECTION_IS_HORIZONTAL (direction))) {
-      hb_bool_t ret = get_glyph_h_origin (glyph, x, y);
-      if (!ret && (ret = get_glyph_v_origin (glyph, x, y))) {
+    if (likely (HB_DIRECTION_IS_HORIZONTAL (direction)))
+    {
+      if (!get_glyph_h_origin (glyph, x, y) &&
+          get_glyph_v_origin (glyph, x, y))
+      {
        hb_position_t dx, dy;
        guess_v_origin_minus_h_origin (glyph, &dx, &dy);
        *x -= dx; *y -= dy;
       }
        hb_position_t dx, dy;
        guess_v_origin_minus_h_origin (glyph, &dx, &dy);
        *x -= dx; *y -= dy;
       }
-    } else {
-      hb_bool_t ret = get_glyph_v_origin (glyph, x, y);
-      if (!ret && (ret = get_glyph_h_origin (glyph, x, y))) {
+    }
+    else
+    {
+      if (!get_glyph_v_origin (glyph, x, y) &&
+          get_glyph_h_origin (glyph, x, y))
+      {
        hb_position_t dx, dy;
        guess_v_origin_minus_h_origin (glyph, &dx, &dy);
        *x += dx; *y += dy;
        hb_position_t dx, dy;
        guess_v_origin_minus_h_origin (glyph, &dx, &dy);
        *x += dx; *y += dy;
@@ -421,7 +366,8 @@ struct hb_font_t {
   {
     if (get_glyph_name (glyph, s, size)) return;
 
   {
     if (get_glyph_name (glyph, s, size)) return;
 
-    snprintf (s, size, "gid%u", glyph);
+    if (size && snprintf (s, size, "gid%u", glyph) < 0)
+      *s = '\0';
   }
 
   /* Parses gidDDD and uniUUUU strings automatically. */
   }
 
   /* Parses gidDDD and uniUUUU strings automatically. */
@@ -456,7 +402,7 @@ struct hb_font_t {
   }
 
   private:
   }
 
   private:
-  inline hb_position_t em_scale (int16_t v, int scale) { return v * (int64_t) scale / hb_face_get_upem (this->face); }
+  inline hb_position_t em_scale (int16_t v, int scale) { return (hb_position_t) (v * (int64_t) scale / face->get_upem ()); }
 };
 
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
 };
 
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
index b59fdeb..4364ca7 100644 (file)
@@ -31,7 +31,6 @@
 #include "hb-ot-layout-private.hh"
 
 #include "hb-font-private.hh"
 #include "hb-ot-layout-private.hh"
 
 #include "hb-font-private.hh"
-#include "hb-blob.h"
 #include "hb-open-file-private.hh"
 #include "hb-ot-head-table.hh"
 #include "hb-ot-maxp-table.hh"
 #include "hb-open-file-private.hh"
 #include "hb-ot-head-table.hh"
 #include "hb-ot-maxp-table.hh"
@@ -41,7 +40,6 @@
 #include <string.h>
 
 
 #include <string.h>
 
 
-
 /*
  * hb_font_funcs_t
  */
 /*
  * hb_font_funcs_t
  */
@@ -231,6 +229,15 @@ static const hb_font_funcs_t _hb_font_funcs_nil = {
 };
 
 
 };
 
 
+/**
+ * hb_font_funcs_create: (Xconstructor)
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ *
+ * Since: 1.0
+ **/
 hb_font_funcs_t *
 hb_font_funcs_create (void)
 {
 hb_font_funcs_t *
 hb_font_funcs_create (void)
 {
@@ -244,18 +251,45 @@ hb_font_funcs_create (void)
   return ffuncs;
 }
 
   return ffuncs;
 }
 
+/**
+ * hb_font_funcs_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ *
+ * Since: 1.0
+ **/
 hb_font_funcs_t *
 hb_font_funcs_get_empty (void)
 {
   return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil);
 }
 
 hb_font_funcs_t *
 hb_font_funcs_get_empty (void)
 {
   return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil);
 }
 
+/**
+ * hb_font_funcs_reference: (skip)
+ * @ffuncs: font functions.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_font_funcs_t *
 hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
 {
   return hb_object_reference (ffuncs);
 }
 
 hb_font_funcs_t *
 hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
 {
   return hb_object_reference (ffuncs);
 }
 
+/**
+ * hb_font_funcs_destroy: (skip)
+ * @ffuncs: font functions.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
 {
 void
 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
 {
@@ -269,6 +303,20 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
   free (ffuncs);
 }
 
   free (ffuncs);
 }
 
+/**
+ * hb_font_funcs_set_user_data: (skip)
+ * @ffuncs: font functions.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key,
 hb_bool_t
 hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key,
@@ -279,6 +327,17 @@ hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
   return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
 }
 
+/**
+ * hb_font_funcs_get_user_data: (skip)
+ * @ffuncs: font functions.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 void *
 hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key)
 void *
 hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key)
@@ -287,15 +346,33 @@ hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
 }
 
 
 }
 
 
+/**
+ * hb_font_funcs_make_immutable:
+ * @ffuncs: font functions.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
 {
 void
 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
 {
-  if (hb_object_is_inert (ffuncs))
+  if (unlikely (hb_object_is_inert (ffuncs)))
     return;
 
   ffuncs->immutable = true;
 }
 
     return;
 
   ffuncs->immutable = true;
 }
 
+/**
+ * hb_font_funcs_is_immutable:
+ * @ffuncs: font functions.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
 {
 hb_bool_t
 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
 {
@@ -337,6 +414,19 @@ HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
 
 /* Public getters */
 
 
 /* Public getters */
 
+/**
+ * hb_font_get_glyph:
+ * @font: a font.
+ * @unicode: 
+ * @variation_selector: 
+ * @glyph: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph (hb_font_t *font,
                   hb_codepoint_t unicode, hb_codepoint_t variation_selector,
 hb_bool_t
 hb_font_get_glyph (hb_font_t *font,
                   hb_codepoint_t unicode, hb_codepoint_t variation_selector,
@@ -345,6 +435,17 @@ hb_font_get_glyph (hb_font_t *font,
   return font->get_glyph (unicode, variation_selector, glyph);
 }
 
   return font->get_glyph (unicode, variation_selector, glyph);
 }
 
+/**
+ * hb_font_get_glyph_h_advance:
+ * @font: a font.
+ * @glyph: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_position_t
 hb_font_get_glyph_h_advance (hb_font_t *font,
                             hb_codepoint_t glyph)
 hb_position_t
 hb_font_get_glyph_h_advance (hb_font_t *font,
                             hb_codepoint_t glyph)
@@ -352,6 +453,17 @@ hb_font_get_glyph_h_advance (hb_font_t *font,
   return font->get_glyph_h_advance (glyph);
 }
 
   return font->get_glyph_h_advance (glyph);
 }
 
+/**
+ * hb_font_get_glyph_v_advance:
+ * @font: a font.
+ * @glyph: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_position_t
 hb_font_get_glyph_v_advance (hb_font_t *font,
                             hb_codepoint_t glyph)
 hb_position_t
 hb_font_get_glyph_v_advance (hb_font_t *font,
                             hb_codepoint_t glyph)
@@ -359,6 +471,19 @@ hb_font_get_glyph_v_advance (hb_font_t *font,
   return font->get_glyph_v_advance (glyph);
 }
 
   return font->get_glyph_v_advance (glyph);
 }
 
+/**
+ * hb_font_get_glyph_h_origin:
+ * @font: a font.
+ * @glyph: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_h_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
 hb_bool_t
 hb_font_get_glyph_h_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
@@ -367,6 +492,19 @@ hb_font_get_glyph_h_origin (hb_font_t *font,
   return font->get_glyph_h_origin (glyph, x, y);
 }
 
   return font->get_glyph_h_origin (glyph, x, y);
 }
 
+/**
+ * hb_font_get_glyph_v_origin:
+ * @font: a font.
+ * @glyph: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_v_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
 hb_bool_t
 hb_font_get_glyph_v_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
@@ -375,6 +513,18 @@ hb_font_get_glyph_v_origin (hb_font_t *font,
   return font->get_glyph_v_origin (glyph, x, y);
 }
 
   return font->get_glyph_v_origin (glyph, x, y);
 }
 
+/**
+ * hb_font_get_glyph_h_kerning:
+ * @font: a font.
+ * @left_glyph: 
+ * @right_glyph: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_position_t
 hb_font_get_glyph_h_kerning (hb_font_t *font,
                             hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
 hb_position_t
 hb_font_get_glyph_h_kerning (hb_font_t *font,
                             hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
@@ -382,13 +532,37 @@ hb_font_get_glyph_h_kerning (hb_font_t *font,
   return font->get_glyph_h_kerning (left_glyph, right_glyph);
 }
 
   return font->get_glyph_h_kerning (left_glyph, right_glyph);
 }
 
+/**
+ * hb_font_get_glyph_v_kerning:
+ * @font: a font.
+ * @top_glyph: 
+ * @bottom_glyph: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_position_t
 hb_font_get_glyph_v_kerning (hb_font_t *font,
 hb_position_t
 hb_font_get_glyph_v_kerning (hb_font_t *font,
-                            hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
+                            hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
 {
 {
-  return font->get_glyph_v_kerning (left_glyph, right_glyph);
+  return font->get_glyph_v_kerning (top_glyph, bottom_glyph);
 }
 
 }
 
+/**
+ * hb_font_get_glyph_extents:
+ * @font: a font.
+ * @glyph: 
+ * @extents: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_extents (hb_font_t *font,
                           hb_codepoint_t glyph,
 hb_bool_t
 hb_font_get_glyph_extents (hb_font_t *font,
                           hb_codepoint_t glyph,
@@ -397,6 +571,20 @@ hb_font_get_glyph_extents (hb_font_t *font,
   return font->get_glyph_extents (glyph, extents);
 }
 
   return font->get_glyph_extents (glyph, extents);
 }
 
+/**
+ * hb_font_get_glyph_contour_point:
+ * @font: a font.
+ * @glyph: 
+ * @point_index: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_contour_point (hb_font_t *font,
                                 hb_codepoint_t glyph, unsigned int point_index,
 hb_bool_t
 hb_font_get_glyph_contour_point (hb_font_t *font,
                                 hb_codepoint_t glyph, unsigned int point_index,
@@ -405,6 +593,19 @@ hb_font_get_glyph_contour_point (hb_font_t *font,
   return font->get_glyph_contour_point (glyph, point_index, x, y);
 }
 
   return font->get_glyph_contour_point (glyph, point_index, x, y);
 }
 
+/**
+ * hb_font_get_glyph_name:
+ * @font: a font.
+ * @glyph: 
+ * @name: (array length=size): 
+ * @size: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_name (hb_font_t *font,
                        hb_codepoint_t glyph,
 hb_bool_t
 hb_font_get_glyph_name (hb_font_t *font,
                        hb_codepoint_t glyph,
@@ -413,6 +614,19 @@ hb_font_get_glyph_name (hb_font_t *font,
   return font->get_glyph_name (glyph, name, size);
 }
 
   return font->get_glyph_name (glyph, name, size);
 }
 
+/**
+ * hb_font_get_glyph_from_name:
+ * @font: a font.
+ * @name: (array length=len): 
+ * @len: 
+ * @glyph: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_from_name (hb_font_t *font,
                             const char *name, int len, /* -1 means nul-terminated */
 hb_bool_t
 hb_font_get_glyph_from_name (hb_font_t *font,
                             const char *name, int len, /* -1 means nul-terminated */
@@ -424,6 +638,18 @@ hb_font_get_glyph_from_name (hb_font_t *font,
 
 /* A bit higher-level, and with fallback */
 
 
 /* A bit higher-level, and with fallback */
 
+/**
+ * hb_font_get_glyph_advance_for_direction:
+ * @font: a font.
+ * @glyph: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
                                         hb_codepoint_t glyph,
 void
 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
                                         hb_codepoint_t glyph,
@@ -433,6 +659,18 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
   return font->get_glyph_advance_for_direction (glyph, direction, x, y);
 }
 
   return font->get_glyph_advance_for_direction (glyph, direction, x, y);
 }
 
+/**
+ * hb_font_get_glyph_origin_for_direction:
+ * @font: a font.
+ * @glyph: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
 void
 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
@@ -442,6 +680,18 @@ hb_font_get_glyph_origin_for_direction (hb_font_t *font,
   return font->get_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
   return font->get_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
+/**
+ * hb_font_add_glyph_origin_for_direction:
+ * @font: a font.
+ * @glyph: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
 void
 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
@@ -451,6 +701,18 @@ hb_font_add_glyph_origin_for_direction (hb_font_t *font,
   return font->add_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
   return font->add_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
+/**
+ * hb_font_subtract_glyph_origin_for_direction:
+ * @font: a font.
+ * @glyph: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
                                             hb_codepoint_t glyph,
 void
 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
                                             hb_codepoint_t glyph,
@@ -460,6 +722,19 @@ hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
   return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
   return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
 }
 
+/**
+ * hb_font_get_glyph_kerning_for_direction:
+ * @font: a font.
+ * @first_glyph: 
+ * @second_glyph: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
                                         hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
 void
 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
                                         hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
@@ -469,6 +744,19 @@ hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
   return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direction, x, y);
 }
 
   return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direction, x, y);
 }
 
+/**
+ * hb_font_get_glyph_extents_for_origin:
+ * @font: a font.
+ * @glyph: 
+ * @direction: 
+ * @extents: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
                                      hb_codepoint_t glyph,
 hb_bool_t
 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
                                      hb_codepoint_t glyph,
@@ -478,6 +766,21 @@ hb_font_get_glyph_extents_for_origin (hb_font_t *font,
   return font->get_glyph_extents_for_origin (glyph, direction, extents);
 }
 
   return font->get_glyph_extents_for_origin (glyph, direction, extents);
 }
 
+/**
+ * hb_font_get_glyph_contour_point_for_origin:
+ * @font: a font.
+ * @glyph: 
+ * @point_index: 
+ * @direction: 
+ * @x: (out): 
+ * @y: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
                                            hb_codepoint_t glyph, unsigned int point_index,
 hb_bool_t
 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
                                            hb_codepoint_t glyph, unsigned int point_index,
@@ -488,6 +791,17 @@ hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
 }
 
 /* Generates gidDDD if glyph has no name. */
 }
 
 /* Generates gidDDD if glyph has no name. */
+/**
+ * hb_font_glyph_to_string:
+ * @font: a font.
+ * @glyph: 
+ * @s: (array length=size): 
+ * @size: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_glyph_to_string (hb_font_t *font,
                         hb_codepoint_t glyph,
 void
 hb_font_glyph_to_string (hb_font_t *font,
                         hb_codepoint_t glyph,
@@ -497,6 +811,19 @@ hb_font_glyph_to_string (hb_font_t *font,
 }
 
 /* Parses gidDDD and uniUUUU strings automatically. */
 }
 
 /* Parses gidDDD and uniUUUU strings automatically. */
+/**
+ * hb_font_glyph_from_string:
+ * @font: a font.
+ * @s: (array length=len): 
+ * @len: 
+ * @glyph: (out): 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_glyph_from_string (hb_font_t *font,
                           const char *s, int len, /* -1 means nul-terminated */
 hb_bool_t
 hb_font_glyph_from_string (hb_font_t *font,
                           const char *s, int len, /* -1 means nul-terminated */
@@ -507,277 +834,19 @@ hb_font_glyph_from_string (hb_font_t *font,
 
 
 /*
 
 
 /*
- * hb_face_t
- */
-
-static const hb_face_t _hb_face_nil = {
-  HB_OBJECT_HEADER_STATIC,
-
-  true, /* immutable */
-
-  NULL, /* reference_table_func */
-  NULL, /* user_data */
-  NULL, /* destroy */
-
-  0,    /* index */
-  1000, /* upem */
-  0,    /* num_glyphs */
-
-  {
-#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
-#include "hb-shaper-list.hh"
-#undef HB_SHAPER_IMPLEMENT
-  },
-
-  NULL, /* shape_plans */
-};
-
-
-hb_face_t *
-hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
-                          void                      *user_data,
-                          hb_destroy_func_t          destroy)
-{
-  hb_face_t *face;
-
-  if (!reference_table_func || !(face = hb_object_create<hb_face_t> ())) {
-    if (destroy)
-      destroy (user_data);
-    return hb_face_get_empty ();
-  }
-
-  face->reference_table_func = reference_table_func;
-  face->user_data = user_data;
-  face->destroy = destroy;
-
-  face->upem = 0;
-  face->num_glyphs = (unsigned int) -1;
-
-  return face;
-}
-
-
-typedef struct hb_face_for_data_closure_t {
-  hb_blob_t *blob;
-  unsigned int  index;
-} hb_face_for_data_closure_t;
-
-static hb_face_for_data_closure_t *
-_hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
-{
-  hb_face_for_data_closure_t *closure;
-
-  closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t));
-  if (unlikely (!closure))
-    return NULL;
-
-  closure->blob = blob;
-  closure->index = index;
-
-  return closure;
-}
-
-static void
-_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
-{
-  hb_blob_destroy (closure->blob);
-  free (closure);
-}
-
-static hb_blob_t *
-_hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
-{
-  hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
-
-  if (tag == HB_TAG_NONE)
-    return hb_blob_reference (data->blob);
-
-  const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
-  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
-
-  const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
-
-  hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length);
-
-  return blob;
-}
-
-hb_face_t *
-hb_face_create (hb_blob_t    *blob,
-               unsigned int  index)
-{
-  hb_face_t *face;
-
-  if (unlikely (!blob || !hb_blob_get_length (blob)))
-    return hb_face_get_empty ();
-
-  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
-
-  if (unlikely (!closure))
-    return hb_face_get_empty ();
-
-  face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
-                                   closure,
-                                   (hb_destroy_func_t) _hb_face_for_data_closure_destroy);
-
-  hb_face_set_index (face, index);
-
-  return face;
-}
-
-hb_face_t *
-hb_face_get_empty (void)
-{
-  return const_cast<hb_face_t *> (&_hb_face_nil);
-}
-
-
-hb_face_t *
-hb_face_reference (hb_face_t *face)
-{
-  return hb_object_reference (face);
-}
-
-void
-hb_face_destroy (hb_face_t *face)
-{
-  if (!hb_object_destroy (face)) return;
-
-  for (hb_face_t::plan_node_t *node = face->shape_plans; node; )
-  {
-    hb_face_t::plan_node_t *next = node->next;
-    hb_shape_plan_destroy (node->shape_plan);
-    free (node);
-    node = next;
-  }
-
-#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, face);
-#include "hb-shaper-list.hh"
-#undef HB_SHAPER_IMPLEMENT
-
-  if (face->destroy)
-    face->destroy (face->user_data);
-
-  free (face);
-}
-
-hb_bool_t
-hb_face_set_user_data (hb_face_t          *face,
-                      hb_user_data_key_t *key,
-                      void *              data,
-                      hb_destroy_func_t   destroy,
-                      hb_bool_t           replace)
-{
-  return hb_object_set_user_data (face, key, data, destroy, replace);
-}
-
-void *
-hb_face_get_user_data (hb_face_t          *face,
-                      hb_user_data_key_t *key)
-{
-  return hb_object_get_user_data (face, key);
-}
-
-void
-hb_face_make_immutable (hb_face_t *face)
-{
-  if (hb_object_is_inert (face))
-    return;
-
-  face->immutable = true;
-}
-
-hb_bool_t
-hb_face_is_immutable (hb_face_t *face)
-{
-  return face->immutable;
-}
-
-
-hb_blob_t *
-hb_face_reference_table (hb_face_t *face,
-                        hb_tag_t   tag)
-{
-  return face->reference_table (tag);
-}
-
-hb_blob_t *
-hb_face_reference_blob (hb_face_t *face)
-{
-  return face->reference_table (HB_TAG_NONE);
-}
-
-void
-hb_face_set_index (hb_face_t    *face,
-                  unsigned int  index)
-{
-  if (hb_object_is_inert (face))
-    return;
-
-  face->index = index;
-}
-
-unsigned int
-hb_face_get_index (hb_face_t    *face)
-{
-  return face->index;
-}
-
-void
-hb_face_set_upem (hb_face_t    *face,
-                 unsigned int  upem)
-{
-  if (hb_object_is_inert (face))
-    return;
-
-  face->upem = upem;
-}
-
-unsigned int
-hb_face_get_upem (hb_face_t *face)
-{
-  return face->get_upem ();
-}
-
-void
-hb_face_t::load_upem (void) const
-{
-  hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
-  const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
-  upem = head_table->get_upem ();
-  hb_blob_destroy (head_blob);
-}
-
-void
-hb_face_set_glyph_count (hb_face_t    *face,
-                        unsigned int  glyph_count)
-{
-  if (hb_object_is_inert (face))
-    return;
-
-  face->num_glyphs = glyph_count;
-}
-
-unsigned int
-hb_face_get_glyph_count (hb_face_t *face)
-{
-  return face->get_num_glyphs ();
-}
-
-void
-hb_face_t::load_num_glyphs (void) const
-{
-  hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_OT_TAG_maxp));
-  const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob);
-  num_glyphs = maxp_table->get_num_glyphs ();
-  hb_blob_destroy (maxp_blob);
-}
-
-
-/*
  * hb_font_t
  */
 
  * hb_font_t
  */
 
+/**
+ * hb_font_create: (Xconstructor)
+ * @face: a face.
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ *
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_font_create (hb_face_t *face)
 {
 hb_font_t *
 hb_font_create (hb_face_t *face)
 {
@@ -797,6 +866,16 @@ hb_font_create (hb_face_t *face)
   return font;
 }
 
   return font;
 }
 
+/**
+ * hb_font_create_sub_font:
+ * @parent: parent font.
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ *
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_font_create_sub_font (hb_font_t *parent)
 {
 hb_font_t *
 hb_font_create_sub_font (hb_font_t *parent)
 {
@@ -819,6 +898,15 @@ hb_font_create_sub_font (hb_font_t *parent)
   return font;
 }
 
   return font;
 }
 
+/**
+ * hb_font_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full)
+ *
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_font_get_empty (void)
 {
 hb_font_t *
 hb_font_get_empty (void)
 {
@@ -850,12 +938,30 @@ hb_font_get_empty (void)
   return const_cast<hb_font_t *> (&_hb_font_nil);
 }
 
   return const_cast<hb_font_t *> (&_hb_font_nil);
 }
 
+/**
+ * hb_font_reference: (skip)
+ * @font: a font.
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ *
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_font_reference (hb_font_t *font)
 {
   return hb_object_reference (font);
 }
 
 hb_font_t *
 hb_font_reference (hb_font_t *font)
 {
   return hb_object_reference (font);
 }
 
+/**
+ * hb_font_destroy: (skip)
+ * @font: a font.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_destroy (hb_font_t *font)
 {
 void
 hb_font_destroy (hb_font_t *font)
 {
@@ -875,6 +981,20 @@ hb_font_destroy (hb_font_t *font)
   free (font);
 }
 
   free (font);
 }
 
+/**
+ * hb_font_set_user_data: (skip)
+ * @font: a font.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_set_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key,
 hb_bool_t
 hb_font_set_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key,
@@ -885,6 +1005,17 @@ hb_font_set_user_data (hb_font_t          *font,
   return hb_object_set_user_data (font, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (font, key, data, destroy, replace);
 }
 
+/**
+ * hb_font_get_user_data: (skip)
+ * @font: a font.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 void *
 hb_font_get_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key)
 void *
 hb_font_get_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key)
@@ -892,27 +1023,65 @@ hb_font_get_user_data (hb_font_t          *font,
   return hb_object_get_user_data (font, key);
 }
 
   return hb_object_get_user_data (font, key);
 }
 
+/**
+ * hb_font_make_immutable:
+ * @font: a font.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_make_immutable (hb_font_t *font)
 {
 void
 hb_font_make_immutable (hb_font_t *font)
 {
-  if (hb_object_is_inert (font))
+  if (unlikely (hb_object_is_inert (font)))
     return;
 
   font->immutable = true;
 }
 
     return;
 
   font->immutable = true;
 }
 
+/**
+ * hb_font_is_immutable:
+ * @font: a font.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_font_is_immutable (hb_font_t *font)
 {
   return font->immutable;
 }
 
 hb_bool_t
 hb_font_is_immutable (hb_font_t *font)
 {
   return font->immutable;
 }
 
+/**
+ * hb_font_get_parent:
+ * @font: a font.
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_font_get_parent (hb_font_t *font)
 {
   return font->parent;
 }
 
 hb_font_t *
 hb_font_get_parent (hb_font_t *font)
 {
   return font->parent;
 }
 
+/**
+ * hb_font_get_face:
+ * @font: a font.
+ *
+ * 
+ *
+ * Return value: (transfer none): 
+ *
+ * Since: 1.0
+ **/
 hb_face_t *
 hb_font_get_face (hb_font_t *font)
 {
 hb_face_t *
 hb_font_get_face (hb_font_t *font)
 {
@@ -920,15 +1089,26 @@ hb_font_get_face (hb_font_t *font)
 }
 
 
 }
 
 
+/**
+ * hb_font_set_funcs:
+ * @font: a font.
+ * @klass: (closure font_data) (destroy destroy) (scope notified):
+ * @font_data: 
+ * @destroy: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_set_funcs (hb_font_t         *font,
                   hb_font_funcs_t   *klass,
 void
 hb_font_set_funcs (hb_font_t         *font,
                   hb_font_funcs_t   *klass,
-                  void              *user_data,
+                  void              *font_data,
                   hb_destroy_func_t  destroy)
 {
   if (font->immutable) {
     if (destroy)
                   hb_destroy_func_t  destroy)
 {
   if (font->immutable) {
     if (destroy)
-      destroy (user_data);
+      destroy (font_data);
     return;
   }
 
     return;
   }
 
@@ -941,30 +1121,50 @@ hb_font_set_funcs (hb_font_t         *font,
   hb_font_funcs_reference (klass);
   hb_font_funcs_destroy (font->klass);
   font->klass = klass;
   hb_font_funcs_reference (klass);
   hb_font_funcs_destroy (font->klass);
   font->klass = klass;
-  font->user_data = user_data;
+  font->user_data = font_data;
   font->destroy = destroy;
 }
 
   font->destroy = destroy;
 }
 
+/**
+ * hb_font_set_funcs_data:
+ * @font: a font.
+ * @font_data: (destroy destroy) (scope notified):
+ * @destroy: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_set_funcs_data (hb_font_t         *font,
 void
 hb_font_set_funcs_data (hb_font_t         *font,
-                       void              *user_data,
+                       void              *font_data,
                        hb_destroy_func_t  destroy)
 {
   /* Destroy user_data? */
   if (font->immutable) {
     if (destroy)
                        hb_destroy_func_t  destroy)
 {
   /* Destroy user_data? */
   if (font->immutable) {
     if (destroy)
-      destroy (user_data);
+      destroy (font_data);
     return;
   }
 
   if (font->destroy)
     font->destroy (font->user_data);
 
     return;
   }
 
   if (font->destroy)
     font->destroy (font->user_data);
 
-  font->user_data = user_data;
+  font->user_data = font_data;
   font->destroy = destroy;
 }
 
 
   font->destroy = destroy;
 }
 
 
+/**
+ * hb_font_set_scale:
+ * @font: a font.
+ * @x_scale: 
+ * @y_scale: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_set_scale (hb_font_t *font,
                   int x_scale,
 void
 hb_font_set_scale (hb_font_t *font,
                   int x_scale,
@@ -977,6 +1177,16 @@ hb_font_set_scale (hb_font_t *font,
   font->y_scale = y_scale;
 }
 
   font->y_scale = y_scale;
 }
 
+/**
+ * hb_font_get_scale:
+ * @font: a font.
+ * @x_scale: (out): 
+ * @y_scale: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_get_scale (hb_font_t *font,
                   int *x_scale,
 void
 hb_font_get_scale (hb_font_t *font,
                   int *x_scale,
@@ -986,6 +1196,16 @@ hb_font_get_scale (hb_font_t *font,
   if (y_scale) *y_scale = font->y_scale;
 }
 
   if (y_scale) *y_scale = font->y_scale;
 }
 
+/**
+ * hb_font_set_ppem:
+ * @font: a font.
+ * @x_ppem: 
+ * @y_ppem: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_set_ppem (hb_font_t *font,
                  unsigned int x_ppem,
 void
 hb_font_set_ppem (hb_font_t *font,
                  unsigned int x_ppem,
@@ -998,6 +1218,16 @@ hb_font_set_ppem (hb_font_t *font,
   font->y_ppem = y_ppem;
 }
 
   font->y_ppem = y_ppem;
 }
 
+/**
+ * hb_font_get_ppem:
+ * @font: a font.
+ * @x_ppem: (out): 
+ * @y_ppem: (out): 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_get_ppem (hb_font_t *font,
                  unsigned int *x_ppem,
 void
 hb_font_get_ppem (hb_font_t *font,
                  unsigned int *x_ppem,
index 88d4895..7273db4 100644 (file)
 #define HB_FONT_H
 
 #include "hb-common.h"
 #define HB_FONT_H
 
 #include "hb-common.h"
-#include "hb-blob.h"
+#include "hb-face.h"
 
 HB_BEGIN_DECLS
 
 
 
 HB_BEGIN_DECLS
 
 
-typedef struct hb_face_t hb_face_t;
 typedef struct hb_font_t hb_font_t;
 
 typedef struct hb_font_t hb_font_t;
 
-/*
- * hb_face_t
- */
-
-hb_face_t *
-hb_face_create (hb_blob_t    *blob,
-               unsigned int  index);
-
-typedef hb_blob_t * (*hb_reference_table_func_t)  (hb_face_t *face, hb_tag_t tag, void *user_data);
-
-/* calls destroy() when not needing user_data anymore */
-hb_face_t *
-hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
-                          void                      *user_data,
-                          hb_destroy_func_t          destroy);
-
-hb_face_t *
-hb_face_get_empty (void);
-
-hb_face_t *
-hb_face_reference (hb_face_t *face);
-
-void
-hb_face_destroy (hb_face_t *face);
-
-hb_bool_t
-hb_face_set_user_data (hb_face_t          *face,
-                      hb_user_data_key_t *key,
-                      void *              data,
-                      hb_destroy_func_t   destroy,
-                      hb_bool_t           replace);
-
-
-void *
-hb_face_get_user_data (hb_face_t          *face,
-                      hb_user_data_key_t *key);
-
-void
-hb_face_make_immutable (hb_face_t *face);
-
-hb_bool_t
-hb_face_is_immutable (hb_face_t *face);
-
-
-hb_blob_t *
-hb_face_reference_table (hb_face_t *face,
-                        hb_tag_t   tag);
-
-hb_blob_t *
-hb_face_reference_blob (hb_face_t *face);
-
-void
-hb_face_set_index (hb_face_t    *face,
-                  unsigned int  index);
-
-unsigned int
-hb_face_get_index (hb_face_t    *face);
-
-void
-hb_face_set_upem (hb_face_t    *face,
-                 unsigned int  upem);
-
-unsigned int
-hb_face_get_upem (hb_face_t *face);
-
-void
-hb_face_set_glyph_count (hb_face_t    *face,
-                        unsigned int  glyph_count);
-
-unsigned int
-hb_face_get_glyph_count (hb_face_t *face);
-
 
 /*
  * hb_font_funcs_t
 
 /*
  * hb_font_funcs_t
@@ -212,54 +139,180 @@ typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *
 
 /* func setters */
 
 
 /* func setters */
 
+/**
+ * hb_font_funcs_set_glyph_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
 void
 hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
-                             hb_font_get_glyph_func_t glyph_func,
+                             hb_font_get_glyph_func_t func,
                              void *user_data, hb_destroy_func_t destroy);
 
                              void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_font_funcs_set_glyph_h_advance_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_h_advance_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 void
 hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_h_advance_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
+
+/**
+ * hb_font_funcs_set_glyph_v_advance_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_v_advance_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
 void
 hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_v_advance_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_font_funcs_set_glyph_h_origin_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
                                       hb_font_get_glyph_h_origin_func_t func,
                                       void *user_data, hb_destroy_func_t destroy);
 void
 hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
                                       hb_font_get_glyph_h_origin_func_t func,
                                       void *user_data, hb_destroy_func_t destroy);
+
+/**
+ * hb_font_funcs_set_glyph_v_origin_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
                                       hb_font_get_glyph_v_origin_func_t func,
                                       void *user_data, hb_destroy_func_t destroy);
 
 void
 hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
                                       hb_font_get_glyph_v_origin_func_t func,
                                       void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_font_funcs_set_glyph_h_kerning_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_h_kerning_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 void
 hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_h_kerning_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
+
+/**
+ * hb_font_funcs_set_glyph_v_kerning_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_v_kerning_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
 void
 hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_v_kerning_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_font_funcs_set_glyph_extents_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
                                      hb_font_get_glyph_extents_func_t func,
                                      void *user_data, hb_destroy_func_t destroy);
 void
 hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
                                      hb_font_get_glyph_extents_func_t func,
                                      void *user_data, hb_destroy_func_t destroy);
+
+/**
+ * hb_font_funcs_set_glyph_contour_point_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
                                            hb_font_get_glyph_contour_point_func_t func,
                                            void *user_data, hb_destroy_func_t destroy);
 
 void
 hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
                                            hb_font_get_glyph_contour_point_func_t func,
                                            void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_font_funcs_set_glyph_name_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
 void
 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
-                                  hb_font_get_glyph_name_func_t glyph_func,
+                                  hb_font_get_glyph_name_func_t func,
                                   void *user_data, hb_destroy_func_t destroy);
                                   void *user_data, hb_destroy_func_t destroy);
+
+/**
+ * hb_font_funcs_set_glyph_from_name_func:
+ * @ffuncs: font functions.
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
 void
 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
-                                       hb_font_get_glyph_from_name_func_t glyph_func,
+                                       hb_font_get_glyph_from_name_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
 
                                        void *user_data, hb_destroy_func_t destroy);
 
 
index 6198185..16bf51f 100644 (file)
  *
  *   - We don't handle / allow for emboldening / obliqueing.
  *
  *
  *   - We don't handle / allow for emboldening / obliqueing.
  *
- *   - Rounding, etc?
- *
- *   - In the future, we should add constructors to create fonts in font space.
- *
- *   - I believe transforms are not correctly implemented.  FreeType does not
- *     provide any API to get to the transform/delta set on the face. :(
- *
- *   - Always use FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH?
+ *   - In the future, we should add constructors to create fonts in font space?
  *
  *   - FT_Load_Glyph() is exteremely costly.  Do something about it?
  */
  *
  *   - FT_Load_Glyph() is exteremely costly.  Do something about it?
  */
@@ -80,8 +73,7 @@ hb_ft_get_glyph (hb_font_t *font HB_UNUSED,
 #ifdef HAVE_FT_FACE_GETCHARVARIANTINDEX
   if (unlikely (variation_selector)) {
     *glyph = FT_Face_GetCharVariantIndex (ft_face, unicode, variation_selector);
 #ifdef HAVE_FT_FACE_GETCHARVARIANTINDEX
   if (unlikely (variation_selector)) {
     *glyph = FT_Face_GetCharVariantIndex (ft_face, unicode, variation_selector);
-    if (*glyph)
-      return true;
+    return *glyph != 0;
   }
 #endif
 
   }
 #endif
 
@@ -102,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;
 
   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
 }
 
 static hb_position_t
@@ -120,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. */
 
   /* 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
 }
 
 static hb_bool_t
@@ -242,8 +234,8 @@ hb_ft_get_glyph_name (hb_font_t *font HB_UNUSED,
   FT_Face ft_face = (FT_Face) font_data;
 
   hb_bool_t ret = !FT_Get_Glyph_Name (ft_face, glyph, name, size);
   FT_Face ft_face = (FT_Face) font_data;
 
   hb_bool_t ret = !FT_Get_Glyph_Name (ft_face, glyph, name, size);
-  if (!ret || (size && !*name))
-    snprintf (name, size, "gid%u", glyph);
+  if (ret && (size && !*name))
+    ret = false;
 
   return ret;
 }
 
   return ret;
 }
@@ -268,6 +260,15 @@ hb_ft_get_glyph_from_name (hb_font_t *font HB_UNUSED,
     *glyph = FT_Get_Name_Index (ft_face, buf);
   }
 
     *glyph = FT_Get_Name_Index (ft_face, buf);
   }
 
+  if (*glyph == 0)
+  {
+    /* Check whether the given name was actually the name of glyph 0. */
+    char buf[128];
+    if (!FT_Get_Glyph_Name(ft_face, 0, buf, sizeof (buf)) &&
+        len < 0 ? !strcmp (buf, name) : !strncmp (buf, name, len))
+      return true;
+  }
+
   return *glyph != 0;
 }
 
   return *glyph != 0;
 }
 
@@ -318,7 +319,16 @@ reference_table  (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
                         buffer, free);
 }
 
                         buffer, free);
 }
 
-
+/**
+ * hb_ft_face_create:
+ * @ft_face: (destroy destroy) (scope notified): 
+ * @destroy:
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ * Since: 1.0
+ **/
 hb_face_t *
 hb_ft_face_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy)
 hb_face_t *
 hb_ft_face_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy)
@@ -354,6 +364,15 @@ hb_ft_face_finalize (FT_Face ft_face)
   hb_face_destroy ((hb_face_t *) ft_face->generic.data);
 }
 
   hb_face_destroy ((hb_face_t *) ft_face->generic.data);
 }
 
+/**
+ * hb_ft_face_create_cached:
+ * @ft_face: 
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ * Since: 1.0
+ **/
 hb_face_t *
 hb_ft_face_create_cached (FT_Face ft_face)
 {
 hb_face_t *
 hb_ft_face_create_cached (FT_Face ft_face)
 {
@@ -375,6 +394,16 @@ _do_nothing (void)
 }
 
 
 }
 
 
+/**
+ * hb_ft_font_create:
+ * @ft_face: (destroy destroy) (scope notified): 
+ * @destroy:
+ *
+ * 
+ *
+ * Return value: (transfer full): 
+ * Since: 1.0
+ **/
 hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy)
 hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy)
@@ -389,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,
                     _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);
+                    (int) (((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM + (1<<15)) >> 16),
+                    (int) (((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);
   hb_font_set_ppem (font,
                    ft_face->size->metrics.x_ppem,
                    ft_face->size->metrics.y_ppem);
@@ -403,7 +432,7 @@ hb_ft_font_create (FT_Face           ft_face,
 
 static FT_Library ft_library;
 
 
 static FT_Library ft_library;
 
-static
+static inline
 void free_ft_library (void)
 {
   FT_Done_FreeType (ft_library);
 void free_ft_library (void)
 {
   FT_Done_FreeType (ft_library);
@@ -426,7 +455,7 @@ retry:
       goto retry;
     }
 
       goto retry;
     }
 
-#ifdef HAVE_ATEXIT
+#ifdef HB_USE_ATEXIT
     atexit (free_ft_library); /* First person registers atexit() callback. */
 #endif
   }
     atexit (free_ft_library); /* First person registers atexit() callback. */
 #endif
   }
index 676e660..af43cab 100644 (file)
@@ -77,7 +77,7 @@ glib_script_to_script[] =
   HB_SCRIPT_THAANA,
   HB_SCRIPT_THAI,
   HB_SCRIPT_TIBETAN,
   HB_SCRIPT_THAANA,
   HB_SCRIPT_THAI,
   HB_SCRIPT_TIBETAN,
-  HB_SCRIPT_CANADIAN_ABORIGINAL,
+  HB_SCRIPT_CANADIAN_SYLLABICS,
   HB_SCRIPT_YI,
   HB_SCRIPT_TAGALOG,
   HB_SCRIPT_HANUNOO,
   HB_SCRIPT_YI,
   HB_SCRIPT_TAGALOG,
   HB_SCRIPT_HANUNOO,
@@ -340,7 +340,7 @@ hb_glib_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs HB_UNUSED,
                                         void               *user_data HB_UNUSED)
 {
 #if GLIB_CHECK_VERSION(2,29,12)
                                         void               *user_data HB_UNUSED)
 {
 #if GLIB_CHECK_VERSION(2,29,12)
-  return g_unichar_fully_decompose (u, TRUE, decomposed, HB_UNICODE_MAX_DECOMPOSITION_LEN);
+  return g_unichar_fully_decompose (u, true, decomposed, HB_UNICODE_MAX_DECOMPOSITION_LEN);
 #endif
 
   /* If the user doesn't have GLib >= 2.29.12 we have to perform
 #endif
 
   /* If the user doesn't have GLib >= 2.29.12 we have to perform
index 05abd89..ca458a3 100644 (file)
 /*** END file-production ***/
 
 /*** BEGIN value-header ***/
 /*** END file-production ***/
 
 /*** BEGIN value-header ***/
-inline static /* TODO(behdad) disable these for now until we fix them... */
 GType
 @enum_name@_get_type (void)
 {
 GType
 @enum_name@_get_type (void)
 {
-  static volatile gsize g_define_type_id__volatile = 0;
+  static gsize type_id = 0;
 
 
-  if (g_once_init_enter (&g_define_type_id__volatile))
+  if (g_once_init_enter (&type_id))
     {
       static const G@Type@Value values[] = {
 /*** END value-header ***/
     {
       static const G@Type@Value values[] = {
 /*** END value-header ***/
@@ -63,12 +62,12 @@ GType
 /*** BEGIN value-tail ***/
         { 0, NULL, NULL }
       };
 /*** BEGIN value-tail ***/
         { 0, NULL, NULL }
       };
-      GType g_define_type_id =
+      GType id =
         g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
         g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
-      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+      g_once_init_leave (&type_id, id);
     }
 
     }
 
-  return g_define_type_id__volatile;
+  return type_id;
 }
 
 /*** END value-tail ***/
 }
 
 /*** END value-tail ***/
diff --git a/src/hb-gobject-enums.h.tmpl b/src/hb-gobject-enums.h.tmpl
new file mode 100644 (file)
index 0000000..6ecda06
--- /dev/null
@@ -0,0 +1,55 @@
+/*** BEGIN file-header ***/
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_GOBJECT_H_IN
+#error "Include <hb-gobject.h> instead."
+#endif
+
+#ifndef HB_GOBJECT_ENUMS_H
+#define HB_GOBJECT_ENUMS_H
+
+#include "hb.h"
+
+#include <glib-object.h>
+
+HB_BEGIN_DECLS
+
+
+/*** END file-header ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+
+HB_END_DECLS
+
+#endif /* HB_GOBJECT_ENUMS_H */
+/*** END file-tail ***/
index cec4854..2451b66 100644 (file)
 
 #include "hb-gobject.h"
 
 
 #include "hb-gobject.h"
 
-#define _HB_DEFINE_BOXED_TYPE(Name,underscore_name,copy_func,free_func) \
+#define HB_DEFINE_BOXED_TYPE(name,copy_func,free_func) \
 GType \
 GType \
-underscore_name##_get_type (void) \
+hb_gobject_##name##_get_type (void) \
 { \
 { \
-   static volatile gsize type = 0; \
-   if (g_once_init_enter (&type)) { \
-      GType t = g_boxed_type_register_static (g_intern_static_string (#Name), \
-                                             (GBoxedCopyFunc) copy_func, \
-                                             (GBoxedFreeFunc) free_func); \
-      g_once_init_leave (&type, t); \
+   static gsize type_id = 0; \
+   if (g_once_init_enter (&type_id)) { \
+      GType id = g_boxed_type_register_static (g_intern_static_string ("hb_" #name "_t"), \
+                                              (GBoxedCopyFunc) copy_func, \
+                                              (GBoxedFreeFunc) free_func); \
+      g_once_init_leave (&type_id, id); \
    } \
    } \
-   return type; \
+   return type_id; \
 }
 
 }
 
-#define HB_DEFINE_BOXED_TYPE(name) \
-       _HB_DEFINE_BOXED_TYPE (hb_##name, hb_gobject_##name, hb_##name##_reference, hb_##name##_destroy);
+#define HB_DEFINE_OBJECT_TYPE(name) \
+       HB_DEFINE_BOXED_TYPE (name, hb_##name##_reference, hb_##name##_destroy);
 
 
-HB_DEFINE_BOXED_TYPE (buffer)
-HB_DEFINE_BOXED_TYPE (blob)
-HB_DEFINE_BOXED_TYPE (face)
-HB_DEFINE_BOXED_TYPE (font)
-HB_DEFINE_BOXED_TYPE (font_funcs)
-HB_DEFINE_BOXED_TYPE (unicode_funcs)
+HB_DEFINE_OBJECT_TYPE (buffer)
+HB_DEFINE_OBJECT_TYPE (blob)
+HB_DEFINE_OBJECT_TYPE (face)
+HB_DEFINE_OBJECT_TYPE (font)
+HB_DEFINE_OBJECT_TYPE (font_funcs)
+HB_DEFINE_OBJECT_TYPE (set)
+HB_DEFINE_OBJECT_TYPE (shape_plan)
+HB_DEFINE_OBJECT_TYPE (unicode_funcs)
 
 
+
+static hb_feature_t *feature_reference (hb_feature_t *g)
+{
+  hb_feature_t *c = (hb_feature_t *) calloc (1, sizeof (hb_feature_t));
+  if (unlikely (!c)) return NULL;
+  *c = *g;
+  return c;
+}
+static void feature_destroy (hb_feature_t *g) { free (g); }
+HB_DEFINE_BOXED_TYPE (feature, feature_reference, feature_destroy)
+
+static hb_glyph_info_t *glyph_info_reference (hb_glyph_info_t *g)
+{
+  hb_glyph_info_t *c = (hb_glyph_info_t *) calloc (1, sizeof (hb_glyph_info_t));
+  if (unlikely (!c)) return NULL;
+  *c = *g;
+  return c;
+}
+static void glyph_info_destroy (hb_glyph_info_t *g) { free (g); }
+HB_DEFINE_BOXED_TYPE (glyph_info, glyph_info_reference, glyph_info_destroy)
+
+static hb_glyph_position_t *glyph_position_reference (hb_glyph_position_t *g)
+{
+  hb_glyph_position_t *c = (hb_glyph_position_t *) calloc (1, sizeof (hb_glyph_position_t));
+  if (unlikely (!c)) return NULL;
+  *c = *g;
+  return c;
+}
+static void glyph_position_destroy (hb_glyph_position_t *g) { free (g); }
+HB_DEFINE_BOXED_TYPE (glyph_position, glyph_position_reference, glyph_position_destroy)
+
+static hb_segment_properties_t *segment_properties_reference (hb_segment_properties_t *g)
+{
+  hb_segment_properties_t *c = (hb_segment_properties_t *) calloc (1, sizeof (hb_segment_properties_t));
+  if (unlikely (!c)) return NULL;
+  *c = *g;
+  return c;
+}
+static void segment_properties_destroy (hb_segment_properties_t *g) { free (g); }
+HB_DEFINE_BOXED_TYPE (segment_properties, segment_properties_reference, segment_properties_destroy)
+
+static hb_user_data_key_t user_data_key_reference (hb_user_data_key_t l) { return l; }
+static void user_data_key_destroy (hb_user_data_key_t l) { }
+HB_DEFINE_BOXED_TYPE (user_data_key, user_data_key_reference, user_data_key_destroy)
+
+
+static hb_language_t *language_reference (hb_language_t *l)
+{
+  hb_language_t *c = (hb_language_t *) calloc (1, sizeof (hb_language_t));
+  if (unlikely (!c)) return NULL;
+  *c = *l;
+  return c;
+}
+static void language_destroy (hb_language_t *l) { free (l); }
+HB_DEFINE_BOXED_TYPE (language, language_reference, language_destroy)
diff --git a/src/hb-gobject-structs.h b/src/hb-gobject-structs.h
new file mode 100644 (file)
index 0000000..4a88d56
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright © 2011  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_GOBJECT_H_IN
+#error "Include <hb-gobject.h> instead."
+#endif
+
+#ifndef HB_GOBJECT_STRUCTS_H
+#define HB_GOBJECT_STRUCTS_H
+
+#include "hb.h"
+
+#include <glib-object.h>
+
+HB_BEGIN_DECLS
+
+
+/* Object types */
+
+GType hb_gobject_blob_get_type (void);
+#define HB_GOBJECT_TYPE_BLOB (hb_gobject_blob_get_type ())
+
+GType hb_gobject_buffer_get_type (void);
+#define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
+
+GType hb_gobject_face_get_type (void);
+#define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
+
+GType hb_gobject_font_get_type (void);
+#define HB_GOBJECT_TYPE_FONT (hb_gobject_font_get_type ())
+
+GType hb_gobject_font_funcs_get_type (void);
+#define HB_GOBJECT_TYPE_FONT_FUNCS (hb_gobject_font_funcs_get_type ())
+
+GType hb_gobject_set_get_type (void);
+#define HB_GOBJECT_TYPE_SET (hb_gobject_set_get_type ())
+
+GType hb_gobject_shape_plan_get_type (void);
+#define HB_GOBJECT_TYPE_SHAPE_PLAN (hb_gobject_shape_plan_get_type ())
+
+GType hb_gobject_unicode_funcs_get_type (void);
+#define HB_GOBJECT_TYPE_UNICODE_FUNCS (hb_gobject_unicode_funcs_get_type ())
+
+/* Value types */
+
+GType hb_gobject_feature_get_type (void);
+#define HB_GOBJECT_TYPE_FEATURE (hb_gobject_feature_get_type ())
+
+GType hb_gobject_glyph_info_get_type (void);
+#define HB_GOBJECT_TYPE_GLYPH_INFO (hb_gobject_glyph_info_get_type ())
+
+GType hb_gobject_glyph_position_get_type (void);
+#define HB_GOBJECT_TYPE_GLYPH_POSITION (hb_gobject_glyph_position_get_type ())
+
+GType hb_gobject_segment_properties_get_type (void);
+#define HB_GOBJECT_TYPE_SEGMENT_PROPERTIES (hb_gobject_segment_properties_get_type ())
+
+GType hb_gobject_user_data_key_get_type (void);
+#define HB_GOBJECT_TYPE_USER_DATA_KEY (hb_gobject_user_data_key_get_type ())
+
+/* Currently gobject-introspection doesn't understand that hb_language_t
+ * can be passed by-value.  As such we box it up.  May remove in the
+ * future.
+ *
+ *   https://bugzilla.gnome.org/show_bug.cgi?id=707656
+ */
+GType hb_gobject_language_get_type (void);
+#define HB_GOBJECT_TYPE_LANGUAGE (hb_gobject_language_get_type ())
+
+HB_END_DECLS
+
+#endif /* HB_GOBJECT_H */
index 4f23fdd..ea1bd25 100644 (file)
 
 #ifndef HB_GOBJECT_H
 #define HB_GOBJECT_H
 
 #ifndef HB_GOBJECT_H
 #define HB_GOBJECT_H
+#define HB_GOBJECT_H_IN
 
 #include "hb.h"
 
 
 #include "hb.h"
 
-#include <glib-object.h>
+#include "hb-gobject-enums.h"
+#include "hb-gobject-structs.h"
 
 HB_BEGIN_DECLS
 
 HB_BEGIN_DECLS
-
-
-/* Objects */
-
-#define HB_GOBJECT_TYPE_BLOB hb_gobject_blob_get_type ()
-GType
-hb_gobject_blob_get_type (void);
-
-#define HB_GOBJECT_TYPE_BUFFER hb_gobject_buffer_get_type ()
-GType
-hb_gobject_buffer_get_type (void);
-
-#define HB_GOBJECT_TYPE_FACE hb_gobject_face_get_type ()
-GType
-hb_gobject_face_get_type (void);
-
-#define HB_GOBJECT_TYPE_FONT hb_gobject_font_get_type ()
-GType
-hb_gobject_font_get_type (void);
-
-#define HB_GOBJECT_TYPE_FONT_FUNCS hb_gobject_font_funcs_get_type ()
-GType
-hb_gobject_font_funcs_get_type (void);
-
-#define HB_GOBJECT_TYPE_UNICODE_FUNCS hb_gobject_unicode_funcs_get_type ()
-GType
-hb_gobject_unicode_funcs_get_type (void);
-
-
-/* Enums */
-
-
 HB_END_DECLS
 
 HB_END_DECLS
 
+#undef HB_GOBJECT_H_IN
 #endif /* HB_GOBJECT_H */
 #endif /* HB_GOBJECT_H */
index 16ef9a4..807c330 100644 (file)
 #define hb_graphite2_shaper_font_data_t gr_font
 #include "hb-shaper-impl-private.hh"
 
 #define hb_graphite2_shaper_font_data_t gr_font
 #include "hb-shaper-impl-private.hh"
 
-#include <graphite2/Font.h>
-#include <graphite2/Segment.h>
-
 #include "hb-graphite2.h"
 
 #include "hb-graphite2.h"
 
-#include "hb-ot-tag.h"
+#include <graphite2/Segment.h>
 
 
 HB_SHAPER_DATA_ENSURE_DECLARE(graphite2, face)
 
 
 HB_SHAPER_DATA_ENSURE_DECLARE(graphite2, face)
@@ -110,7 +107,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face)
 
   hb_graphite2_shaper_face_data_t *data = (hb_graphite2_shaper_face_data_t *) calloc (1, sizeof (hb_graphite2_shaper_face_data_t));
   if (unlikely (!data))
 
   hb_graphite2_shaper_face_data_t *data = (hb_graphite2_shaper_face_data_t *) calloc (1, sizeof (hb_graphite2_shaper_face_data_t));
   if (unlikely (!data))
-    hb_blob_destroy (silf_blob);
+    return NULL;
 
   data->face = face;
   data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll);
 
   data->face = face;
   data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll);
@@ -212,6 +209,7 @@ struct hb_graphite2_cluster_t {
   unsigned int num_chars;
   unsigned int base_glyph;
   unsigned int num_glyphs;
   unsigned int num_chars;
   unsigned int base_glyph;
   unsigned int num_glyphs;
+  unsigned int cluster;
 };
 
 hb_bool_t
 };
 
 hb_bool_t
@@ -226,7 +224,7 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   gr_font *grfont = HB_SHAPER_DATA_GET (font);
 
   const char *lang = hb_language_to_string (hb_buffer_get_language (buffer));
   gr_font *grfont = HB_SHAPER_DATA_GET (font);
 
   const char *lang = hb_language_to_string (hb_buffer_get_language (buffer));
-  const char *lang_end = strchr (lang, '-');
+  const char *lang_end = lang ? strchr (lang, '-') : NULL;
   int lang_len = lang_end ? lang_end - lang : -1;
   gr_feature_val *feats = gr_face_featureval_for_lang (grface, lang ? hb_tag_from_string (lang, lang_len) : 0);
 
   int lang_len = lang_end ? lang_end - lang : -1;
   gr_feature_val *feats = gr_face_featureval_for_lang (grface, lang ? hb_tag_from_string (lang, lang_len) : 0);
 
@@ -244,14 +242,9 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   float curradvx = 0., curradvy = 0.;
 
   unsigned int scratch_size;
   float curradvx = 0., curradvy = 0.;
 
   unsigned int scratch_size;
-  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
-
-#define ALLOCATE_ARRAY(Type, name, len) \
-  Type *name = (Type *) scratch; \
-  scratch += (len) * sizeof ((name)[0]); \
-  scratch_size -= (len) * sizeof ((name)[0]);
+  hb_buffer_t::scratch_buffer_t *scratch = buffer->get_scratch_buffer (&scratch_size);
 
 
-  ALLOCATE_ARRAY (uint32_t, chars, buffer->len);
+  uint32_t *chars = (uint32_t *) scratch;
 
   for (unsigned int i = 0; i < buffer->len; ++i)
     chars[i] = buffer->info[i].codepoint;
 
   for (unsigned int i = 0; i < buffer->len; ++i)
     chars[i] = buffer->info[i].codepoint;
@@ -277,25 +270,37 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
     return false;
   }
 
     return false;
   }
 
-  scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
-  while ((sizeof (hb_graphite2_cluster_t) * buffer->len +
-         sizeof (hb_codepoint_t) * glyph_count) > scratch_size)
+  scratch = buffer->get_scratch_buffer (&scratch_size);
+  while ((DIV_CEIL (sizeof (hb_graphite2_cluster_t) * buffer->len, sizeof (*scratch)) +
+         DIV_CEIL (sizeof (hb_codepoint_t) * glyph_count, sizeof (*scratch))) > scratch_size)
   {
   {
-    buffer->ensure (buffer->allocated * 2);
-    if (unlikely (buffer->in_error)) {
+    if (unlikely (!buffer->ensure (buffer->allocated * 2)))
+    {
       if (feats) gr_featureval_destroy (feats);
       gr_seg_destroy (seg);
       return false;
     }
       if (feats) gr_featureval_destroy (feats);
       gr_seg_destroy (seg);
       return false;
     }
-    scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
+    scratch = buffer->get_scratch_buffer (&scratch_size);
+  }
+
+#define ALLOCATE_ARRAY(Type, name, len) \
+  Type *name = (Type *) scratch; \
+  { \
+    unsigned int _consumed = DIV_CEIL ((len) * sizeof (Type), sizeof (*scratch)); \
+    assert (_consumed <= scratch_size); \
+    scratch += _consumed; \
+    scratch_size -= _consumed; \
   }
 
   ALLOCATE_ARRAY (hb_graphite2_cluster_t, clusters, buffer->len);
   ALLOCATE_ARRAY (hb_codepoint_t, gids, glyph_count);
 
   }
 
   ALLOCATE_ARRAY (hb_graphite2_cluster_t, clusters, buffer->len);
   ALLOCATE_ARRAY (hb_codepoint_t, gids, glyph_count);
 
+#undef ALLOCATE_ARRAY
+
   memset (clusters, 0, sizeof (clusters[0]) * buffer->len);
 
   hb_codepoint_t *pg = gids;
   memset (clusters, 0, sizeof (clusters[0]) * buffer->len);
 
   hb_codepoint_t *pg = gids;
+  clusters[0].cluster = buffer->info[0].cluster;
   for (is = gr_seg_first_slot (seg), ic = 0; is; is = gr_slot_next_in_segment (is), ic++)
   {
     unsigned int before = gr_slot_before (is);
   for (is = gr_seg_first_slot (seg), ic = 0; is; is = gr_slot_next_in_segment (is), ic++)
   {
     unsigned int before = gr_slot_before (is);
@@ -313,6 +318,7 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
     {
       hb_graphite2_cluster_t *c = clusters + ci + 1;
       c->base_char = clusters[ci].base_char + clusters[ci].num_chars;
     {
       hb_graphite2_cluster_t *c = clusters + ci + 1;
       c->base_char = clusters[ci].base_char + clusters[ci].num_chars;
+      c->cluster = buffer->info[c->base_char].cluster;
       c->num_chars = before - c->base_char;
       c->base_glyph = ic;
       c->num_glyphs = 0;
       c->num_chars = before - c->base_char;
       c->base_glyph = ic;
       c->num_glyphs = 0;
@@ -332,7 +338,7 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
     {
       hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
       info->codepoint = gids[clusters[i].base_glyph + j];
     {
       hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
       info->codepoint = gids[clusters[i].base_glyph + j];
-      info->cluster = gr_cinfo_base(gr_seg_cinfo(seg, clusters[i].base_char));
+      info->cluster = clusters[i].cluster;
     }
   }
   buffer->len = glyph_count;
     }
   }
   buffer->len = glyph_count;
index bea68f9..3eae54a 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "hb.h"
 
 
 #include "hb.h"
 
+#include <graphite2/Font.h>
+
 HB_BEGIN_DECLS
 
 
 HB_BEGIN_DECLS
 
 
diff --git a/src/hb-icu-le.cc b/src/hb-icu-le.cc
deleted file mode 100644 (file)
index c05d330..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright © 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
- */
-
-#define HB_SHAPER icu_le
-#define hb_icu_le_shaper_font_data_t PortableFontInstance
-#include "hb-shaper-impl-private.hh"
-
-#include "hb-icu-le/PortableFontInstance.h"
-
-#include "layout/loengine.h"
-#include "unicode/unistr.h"
-
-#include "hb-icu.h"
-
-
-/*
- * shaper face data
- */
-
-struct hb_icu_le_shaper_face_data_t {};
-
-hb_icu_le_shaper_face_data_t *
-_hb_icu_le_shaper_face_data_create (hb_face_t *face HB_UNUSED)
-{
-  return (hb_icu_le_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_icu_le_shaper_face_data_destroy (hb_icu_le_shaper_face_data_t *data HB_UNUSED)
-{
-}
-
-
-/*
- * shaper font data
- */
-
-hb_icu_le_shaper_font_data_t *
-_hb_icu_le_shaper_font_data_create (hb_font_t *font)
-{
-  LEErrorCode status = LE_NO_ERROR;
-  hb_icu_le_shaper_font_data_t *data = new PortableFontInstance (font->face,
-                                                                font->x_scale,
-                                                                font->y_scale,
-                                                                status);
-  if (status != LE_NO_ERROR) {
-    delete (data);
-    return NULL;
-  }
-
-  return data;
-}
-
-void
-_hb_icu_le_shaper_font_data_destroy (hb_icu_le_shaper_font_data_t *data)
-{
-  delete (data);
-}
-
-
-/*
- * shaper shape_plan data
- */
-
-struct hb_icu_le_shaper_shape_plan_data_t {};
-
-hb_icu_le_shaper_shape_plan_data_t *
-_hb_icu_le_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan HB_UNUSED,
-                                         const hb_feature_t *user_features,
-                                         unsigned int        num_user_features)
-{
-  return (hb_icu_le_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_icu_le_shaper_shape_plan_data_destroy (hb_icu_le_shaper_shape_plan_data_t *data)
-{
-}
-
-
-/*
- * shaper
- */
-
-hb_bool_t
-_hb_icu_le_shape (hb_shape_plan_t    *shape_plan,
-                 hb_font_t          *font,
-                 hb_buffer_t        *buffer,
-                 const hb_feature_t *features,
-                 unsigned int        num_features)
-{
-  LEFontInstance *font_instance = HB_SHAPER_DATA_GET (font);
-  le_int32 script_code = hb_icu_script_from_script (shape_plan->props.script);
-  le_int32 language_code = -1 /* TODO */;
-  le_int32 typography_flags = 3; /* Needed for ligatures and kerning */
-  LEErrorCode status = LE_NO_ERROR;
-  le_engine *le = le_create ((const le_font *) font_instance,
-                            script_code,
-                            language_code,
-                            typography_flags,
-                            &status);
-  if (status != LE_NO_ERROR)
-  { le_close (le); return false; }
-
-retry:
-
-  unsigned int scratch_size;
-  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
-
-#define ALLOCATE_ARRAY(Type, name, len) \
-  Type *name = (Type *) scratch; \
-  scratch += (len) * sizeof ((name)[0]); \
-  scratch_size -= (len) * sizeof ((name)[0]);
-
-  ALLOCATE_ARRAY (LEUnicode, chars, buffer->len);
-  ALLOCATE_ARRAY (unsigned int, clusters, buffer->len);
-
-  /* XXX Use UTF-16 decoder! */
-  for (unsigned int i = 0; i < buffer->len; i++) {
-    chars[i] = buffer->info[i].codepoint;
-    clusters[i] = buffer->info[i].cluster;
-  }
-
-  unsigned int glyph_count = le_layoutChars (le,
-                                            chars,
-                                            0,
-                                            buffer->len,
-                                            buffer->len,
-                                            HB_DIRECTION_IS_BACKWARD (buffer->props.direction),
-                                            0., 0.,
-                                            &status);
-  if (status != LE_NO_ERROR)
-  { le_close (le); return false; }
-
-  unsigned int num_glyphs = scratch_size / (sizeof (LEGlyphID) +
-                                           sizeof (le_int32) +
-                                           sizeof (float) * 2);
-
-  if (unlikely (glyph_count >= num_glyphs || glyph_count > buffer->allocated)) {
-    buffer->ensure (buffer->allocated * 2);
-    if (buffer->in_error)
-    { le_close (le); return false; }
-    goto retry;
-  }
-
-  ALLOCATE_ARRAY (LEGlyphID, glyphs, glyph_count);
-  ALLOCATE_ARRAY (le_int32, indices, glyph_count);
-  ALLOCATE_ARRAY (float, positions, glyph_count * 2 + 2);
-
-  le_getGlyphs (le, glyphs, &status);
-  le_getCharIndices (le, indices, &status);
-  le_getGlyphPositions (le, positions, &status);
-
-#undef ALLOCATE_ARRAY
-
-  /* Ok, we've got everything we need, now compose output buffer,
-   * very, *very*, carefully! */
-
-  unsigned int j = 0;
-  hb_glyph_info_t *info = buffer->info;
-  for (unsigned int i = 0; i < glyph_count; i++)
-  {
-    if (glyphs[i] >= 0xFFFE)
-       continue;
-
-    info[j].codepoint = glyphs[i];
-    info[j].cluster = clusters[indices[i]];
-
-    /* icu-le doesn't seem to have separate advance values. */
-    info[j].mask = positions[2 * i + 2] - positions[2 * i];
-    info[j].var1.u32 = 0;
-    info[j].var2.u32 = -positions[2 * i + 1];
-
-    j++;
-  }
-  buffer->len = j;
-
-  buffer->clear_positions ();
-
-  for (unsigned int i = 0; i < buffer->len; i++) {
-    hb_glyph_info_t *info = &buffer->info[i];
-    hb_glyph_position_t *pos = &buffer->pos[i];
-
-    /* TODO vertical */
-    pos->x_advance = info->mask;
-    pos->x_offset = info->var1.u32;
-    pos->y_offset = info->var2.u32;
-  }
-
-  le_close (le);
-  return true;
-}
diff --git a/src/hb-icu-le/COPYING b/src/hb-icu-le/COPYING
deleted file mode 100644 (file)
index 8080968..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-The contents of this directory are licensed under the ICU license.
-See file license.html.
diff --git a/src/hb-icu-le/FontTableCache.cpp b/src/hb-icu-le/FontTableCache.cpp
deleted file mode 100644 (file)
index 93db6cc..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 2003-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#include "layout/LETypes.h"
-
-#include "letest.h"
-#include "FontTableCache.h"
-
-#define TABLE_CACHE_INIT 5
-#define TABLE_CACHE_GROW 5
-
-struct FontTableCacheEntry
-{
-    LETag tag;
-    hb_blob_t *blob;
-};
-
-FontTableCache::FontTableCache()
-    : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT)
-{
-    fTableCache = NEW_ARRAY(FontTableCacheEntry, fTableCacheSize);
-
-    if (fTableCache == NULL) {
-        fTableCacheSize = 0;
-        return;
-    }
-
-    for (int i = 0; i < fTableCacheSize; i += 1) {
-        fTableCache[i].tag  = 0;
-        fTableCache[i].blob = NULL;
-    }
-}
-
-FontTableCache::~FontTableCache()
-{
-    for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) {
-        hb_blob_destroy(fTableCache[i].blob);
-
-        fTableCache[i].tag  = 0;
-        fTableCache[i].blob = NULL;
-    }
-
-    fTableCacheCurr = 0;
-
-    DELETE_ARRAY(fTableCache);
-}
-
-void FontTableCache::freeFontTable(hb_blob_t *blob) const
-{
-    hb_blob_destroy(blob);
-}
-
-const void *FontTableCache::find(LETag tableTag) const
-{
-    for (int i = 0; i < fTableCacheCurr; i += 1) {
-        if (fTableCache[i].tag == tableTag) {
-            return hb_blob_get_data(fTableCache[i].blob, NULL);
-        }
-    }
-
-    hb_blob_t *blob = readFontTable(tableTag);
-
-    ((FontTableCache *) this)->add(tableTag, blob);
-
-    return hb_blob_get_data (blob, NULL);
-}
-
-void FontTableCache::add(LETag tableTag, hb_blob_t *blob)
-{
-    if (fTableCacheCurr >= fTableCacheSize) {
-        le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW;
-
-        fTableCache = (FontTableCacheEntry *) GROW_ARRAY(fTableCache, newSize);
-
-        for (le_int32 i = fTableCacheSize; i < newSize; i += 1) {
-            fTableCache[i].tag  = 0;
-            fTableCache[i].blob = NULL;
-        }
-
-        fTableCacheSize = newSize;
-    }
-
-    fTableCache[fTableCacheCurr].tag  = tableTag;
-    fTableCache[fTableCacheCurr].blob = blob;
-
-    fTableCacheCurr += 1;
-}
diff --git a/src/hb-icu-le/FontTableCache.h b/src/hb-icu-le/FontTableCache.h
deleted file mode 100644 (file)
index f956f88..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- **********************************************************************
- *   Copyright (C) 2003-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#ifndef __FONTTABLECACHE_H
-
-#define __FONTTABLECACHE_H
-
-#define HB_H_IN
-#include <hb-blob.h>
-
-#include "layout/LETypes.h"
-#include "letest.h"
-
-HB_BEGIN_VISIBILITY
-
-U_NAMESPACE_USE
-
-struct FontTableCacheEntry;
-
-class FontTableCache
-{
-public:
-    FontTableCache();
-
-    virtual ~FontTableCache();
-
-    const void *find(LETag tableTag) const;
-
-protected:
-    virtual hb_blob_t *readFontTable(LETag tableTag) const = 0;
-    virtual void freeFontTable(hb_blob_t *blob) const;
-
-private:
-
-    void add(LETag tableTag, hb_blob_t *blob);
-
-    FontTableCacheEntry *fTableCache;
-    le_int32 fTableCacheCurr;
-    le_int32 fTableCacheSize;
-};
-
-HB_END_VISIBILITY
-
-#endif
diff --git a/src/hb-icu-le/Makefile.am b/src/hb-icu-le/Makefile.am
deleted file mode 100644 (file)
index e3b103c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-noinst_LTLIBRARIES = libhb-icu-le.la
-
-
-libhb_icu_le_la_SOURCES = \
-       FontTableCache.cpp \
-       FontTableCache.h \
-       PortableFontInstance.cpp \
-       PortableFontInstance.h \
-       cmaps.cpp \
-       cmaps.h \
-       letest.h \
-       sfnt.h
-libhb_icu_le_la_CPPFLAGS = \
-       -I$(top_srcdir) \
-       -I$(top_srcdir)/src \
-       -I$(top_builddir)/src \
-       $(ICU_LE_CFLAGS)
-libhb_icu_le_la_LIBADD = \
-       $(ICU_LE_LIBS)
-
-EXTRA_DIST = README license.html COPYING
-
--include $(top_srcdir)/git.mk
diff --git a/src/hb-icu-le/Makefile.in b/src/hb-icu-le/Makefile.in
deleted file mode 100644 (file)
index 0f59f13..0000000
+++ /dev/null
@@ -1,593 +0,0 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = src/hb-icu-le
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-       COPYING
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libhb_icu_le_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libhb_icu_le_la_OBJECTS = libhb_icu_le_la-FontTableCache.lo \
-       libhb_icu_le_la-PortableFontInstance.lo \
-       libhb_icu_le_la-cmaps.lo
-libhb_icu_le_la_OBJECTS = $(am_libhb_icu_le_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD " $@;
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(libhb_icu_le_la_SOURCES)
-DIST_SOURCES = $(libhb_icu_le_la_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CAIRO_CFLAGS = @CAIRO_CFLAGS@
-CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
-CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
-CAIRO_LIBS = @CAIRO_LIBS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
-CORETEXT_LIBS = @CORETEXT_LIBS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_LIBS = @FREETYPE_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
-GOBJECT_LIBS = @GOBJECT_LIBS@
-GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
-GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
-HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
-HB_VERSION = @HB_VERSION@
-HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
-HB_VERSION_MICRO = @HB_VERSION_MICRO@
-HB_VERSION_MINOR = @HB_VERSION_MINOR@
-ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
-ICU_LIBS = @ICU_LIBS@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
-UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-ax_pthread_config = @ax_pthread_config@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-noinst_LTLIBRARIES = libhb-icu-le.la
-libhb_icu_le_la_SOURCES = \
-       FontTableCache.cpp \
-       FontTableCache.h \
-       PortableFontInstance.cpp \
-       PortableFontInstance.h \
-       cmaps.cpp \
-       cmaps.h \
-       letest.h \
-       sfnt.h
-
-libhb_icu_le_la_CPPFLAGS = \
-       -I$(top_srcdir) \
-       -I$(top_srcdir)/src \
-       -I$(top_builddir)/src \
-       $(ICU_LE_CFLAGS)
-
-libhb_icu_le_la_LIBADD = \
-       $(ICU_LE_LIBS)
-
-EXTRA_DIST = README license.html COPYING
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/hb-icu-le/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnits src/hb-icu-le/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-libhb-icu-le.la: $(libhb_icu_le_la_OBJECTS) $(libhb_icu_le_la_DEPENDENCIES) $(EXTRA_libhb_icu_le_la_DEPENDENCIES) 
-       $(AM_V_CXXLD)$(CXXLINK)  $(libhb_icu_le_la_OBJECTS) $(libhb_icu_le_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-FontTableCache.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_icu_le_la-cmaps.Plo@am__quote@
-
-.cpp.o:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-libhb_icu_le_la-FontTableCache.lo: FontTableCache.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-FontTableCache.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-FontTableCache.Tpo -c -o libhb_icu_le_la-FontTableCache.lo `test -f 'FontTableCache.cpp' || echo '$(srcdir)/'`FontTableCache.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-FontTableCache.Tpo $(DEPDIR)/libhb_icu_le_la-FontTableCache.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='FontTableCache.cpp' object='libhb_icu_le_la-FontTableCache.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-FontTableCache.lo `test -f 'FontTableCache.cpp' || echo '$(srcdir)/'`FontTableCache.cpp
-
-libhb_icu_le_la-PortableFontInstance.lo: PortableFontInstance.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-PortableFontInstance.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Tpo -c -o libhb_icu_le_la-PortableFontInstance.lo `test -f 'PortableFontInstance.cpp' || echo '$(srcdir)/'`PortableFontInstance.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Tpo $(DEPDIR)/libhb_icu_le_la-PortableFontInstance.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='PortableFontInstance.cpp' object='libhb_icu_le_la-PortableFontInstance.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-PortableFontInstance.lo `test -f 'PortableFontInstance.cpp' || echo '$(srcdir)/'`PortableFontInstance.cpp
-
-libhb_icu_le_la-cmaps.lo: cmaps.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_icu_le_la-cmaps.lo -MD -MP -MF $(DEPDIR)/libhb_icu_le_la-cmaps.Tpo -c -o libhb_icu_le_la-cmaps.lo `test -f 'cmaps.cpp' || echo '$(srcdir)/'`cmaps.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_icu_le_la-cmaps.Tpo $(DEPDIR)/libhb_icu_le_la-cmaps.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='cmaps.cpp' object='libhb_icu_le_la-cmaps.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_icu_le_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_icu_le_la-cmaps.lo `test -f 'cmaps.cpp' || echo '$(srcdir)/'`cmaps.cpp
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
--include $(top_srcdir)/git.mk
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/hb-icu-le/PortableFontInstance.cpp b/src/hb-icu-le/PortableFontInstance.cpp
deleted file mode 100644 (file)
index c38e2b1..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- *******************************************************************************
- *
- *   Copyright (C) 1999-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  PortableFontInstance.cpp
- *
- *   created on: 11/22/1999
- *   created by: Eric R. Mader
- */
-
-#include <stdio.h>
-
-#include "layout/LETypes.h"
-#include "layout/LEFontInstance.h"
-#include "layout/LESwaps.h"
-
-#include "PortableFontInstance.h"
-
-#include "letest.h"
-#include "sfnt.h"
-
-#include <string.h>
-
-
-PortableFontInstance::PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status)
-    : fFace(face), fXScale(xScale), fYScale(yScale), fUnitsPerEM(0), fAscent(0), fDescent(0), fLeading(0),
-      fNAMETable(NULL), fNameCount(0), fNameStringOffset(0), fCMAPMapper(NULL), fHMTXTable(NULL), fNumGlyphs(0), fNumLongHorMetrics(0)
-{
-    if (LE_FAILURE(status)) {
-        return;
-    }
-
-    const LETag hheaTag = LE_HHEA_TABLE_TAG;
-    const HHEATable *hheaTable = NULL;
-
-    fUnitsPerEM = hb_face_get_upem (face);
-
-    hheaTable = (HHEATable *) getFontTable(hheaTag);
-
-    if (hheaTable == NULL) {
-        status = LE_MISSING_FONT_TABLE_ERROR;
-       return;
-    }
-
-    fAscent  = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->ascent));
-    fDescent = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->descent));
-    fLeading = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->lineGap));
-
-    fNumLongHorMetrics = SWAPW(hheaTable->numOfLongHorMetrics);
-
-    fCMAPMapper = findUnicodeMapper();
-
-    if (fCMAPMapper == NULL) {
-        status = LE_MISSING_FONT_TABLE_ERROR;
-       return;
-    }
-}
-
-PortableFontInstance::~PortableFontInstance()
-{
-    if (fCMAPMapper)
-        delete fCMAPMapper;
-}
-
-const void *PortableFontInstance::getFontTable(LETag tableTag) const
-{
-    return FontTableCache::find(tableTag);
-}
-
-hb_blob_t *PortableFontInstance::readFontTable(LETag tableTag) const
-{
-  return hb_face_reference_table(fFace, tableTag);
-}
-
-CMAPMapper *PortableFontInstance::findUnicodeMapper()
-{
-    LETag cmapTag = LE_CMAP_TABLE_TAG;
-    const CMAPTable *cmap = (CMAPTable *) getFontTable(cmapTag);
-
-    if (cmap == NULL) {
-        return NULL;
-    }
-
-    return CMAPMapper::createUnicodeMapper(cmap);
-}
-
-const char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const
-{
-    if (fNAMETable == NULL) {
-        LETag nameTag = LE_NAME_TABLE_TAG;
-        PortableFontInstance *realThis = (PortableFontInstance *) this;
-
-        realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag);
-
-        if (realThis->fNAMETable != NULL) {
-            realThis->fNameCount        = SWAPW(realThis->fNAMETable->count);
-            realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset);
-        }
-    }
-
-    for(le_int32 i = 0; i < fNameCount; i += 1) {
-        const NameRecord *nameRecord = &fNAMETable->nameRecords[i];
-        
-        if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID &&
-            SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) {
-            char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset);
-            le_uint16 length = SWAPW(nameRecord->length);
-            char *result = NEW_ARRAY(char, length + 2);
-
-            ARRAY_COPY(result, name, length);
-            result[length] = result[length + 1] = 0;
-
-            return result;
-        }
-    }
-
-    return NULL;
-}
-
-const LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const
-{
-    if (fNAMETable == NULL) {
-        LETag nameTag = LE_NAME_TABLE_TAG;
-        PortableFontInstance *realThis = (PortableFontInstance *) this;
-
-        realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag);
-
-        if (realThis->fNAMETable != NULL) {
-            realThis->fNameCount        = SWAPW(realThis->fNAMETable->count);
-            realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset);
-        }
-    }
-
-    for(le_int32 i = 0; i < fNameCount; i += 1) {
-        const NameRecord *nameRecord = &fNAMETable->nameRecords[i];
-        
-        if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID &&
-            SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) {
-            LEUnicode16 *name = (LEUnicode16 *) (((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset));
-            le_uint16 length = SWAPW(nameRecord->length) / 2;
-            LEUnicode16 *result = NEW_ARRAY(LEUnicode16, length + 2);
-
-            for (le_int32 c = 0; c < length; c += 1) {
-                result[c] = SWAPW(name[c]);
-            }
-
-            result[length] = 0;
-
-            return result;
-        }
-    }
-
-    return NULL;
-}
-
-void PortableFontInstance::deleteNameString(const char *name) const
-{
-    DELETE_ARRAY(name);
-}
-
-void PortableFontInstance::deleteNameString(const LEUnicode16 *name) const
-{
-    DELETE_ARRAY(name);
-}
-
-void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const
-{
-    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
-
-    if (fHMTXTable == NULL) {
-        LETag maxpTag = LE_MAXP_TABLE_TAG;
-        LETag hmtxTag = LE_HMTX_TABLE_TAG;
-        const MAXPTable *maxpTable = (MAXPTable *) getFontTable(maxpTag);
-        PortableFontInstance *realThis = (PortableFontInstance *) this;
-
-        if (maxpTable != NULL) {
-            realThis->fNumGlyphs = SWAPW(maxpTable->numGlyphs);
-        }
-
-        realThis->fHMTXTable = (const HMTXTable *) getFontTable(hmtxTag);
-    }
-
-    le_uint16 index = ttGlyph;
-
-    if (ttGlyph >= fNumGlyphs || fHMTXTable == NULL) {
-        advance.fX = advance.fY = 0;
-        return;
-    }
-
-    if (ttGlyph >= fNumLongHorMetrics) {
-        index = fNumLongHorMetrics - 1;
-    }
-
-    advance.fX = xUnitsToPoints(SWAPW(fHMTXTable->hMetrics[index].advanceWidth));
-    advance.fY = 0;
-}
-
-le_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const
-{
-    return FALSE;
-}
-
-le_int32 PortableFontInstance::getUnitsPerEM() const
-{
-    return fUnitsPerEM;
-}
-
-le_uint32 PortableFontInstance::getFontChecksum() const
-{
-    return 0;
-}
-
-le_int32 PortableFontInstance::getAscent() const
-{
-    return fAscent;
-}
-
-le_int32 PortableFontInstance::getDescent() const
-{
-    return fDescent;
-}
-
-le_int32 PortableFontInstance::getLeading() const
-{
-    return fLeading;
-}
-
-// We really want to inherit this method from the superclass, but some compilers
-// issue a warning if we don't implement it...
-LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
-{
-    return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth);
-}
-
-// We really want to inherit this method from the superclass, but some compilers
-// issue a warning if we don't implement it...
-LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
-{
-    return LEFontInstance::mapCharToGlyph(ch, mapper);
-}
-
-LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch) const
-{
-    return fCMAPMapper->unicodeToGlyph(ch);
-}
-
-float PortableFontInstance::getXPixelsPerEm() const
-{
-    return fXScale;
-}
-
-float PortableFontInstance::getYPixelsPerEm() const
-{
-    return fYScale;
-}
-
-float PortableFontInstance::getScaleFactorX() const
-{
-    return 1.0;
-}
-
-float PortableFontInstance::getScaleFactorY() const
-{
-    return 1.0;
-}
diff --git a/src/hb-icu-le/PortableFontInstance.h b/src/hb-icu-le/PortableFontInstance.h
deleted file mode 100644 (file)
index 0794560..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*
- *******************************************************************************
- *
- *   Copyright (C) 1999-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  PortableFontInstance.h
- *
- *   created on: 11/12/1999
- *   created by: Eric R. Mader
- */
-
-#ifndef __PORTABLEFONTINSTANCE_H
-#define __PORTABLEFONTINSTANCE_H
-
-#define HB_H_IN
-#include <hb-font.h>
-#include <hb-blob.h>
-
-#include "layout/LETypes.h"
-#include "layout/LEFontInstance.h"
-#include "letest.h"
-
-#include "FontTableCache.h"
-
-#include "cmaps.h"
-
-HB_BEGIN_VISIBILITY
-
-class PortableFontInstance : public LEFontInstance, protected FontTableCache
-{
-private:
-    hb_face_t *fFace;
-
-    float     fXScale;
-    float     fYScale;
-    le_int32  fUnitsPerEM;
-    le_int32  fAscent;
-    le_int32  fDescent;
-    le_int32  fLeading;
-
-    const NAMETable *fNAMETable;
-    le_uint16 fNameCount;
-    le_uint16 fNameStringOffset;
-
-    CMAPMapper *fCMAPMapper;
-
-    const HMTXTable *fHMTXTable;
-    le_uint16 fNumGlyphs;
-    le_uint16 fNumLongHorMetrics;
-
-    void getMetrics();
-
-    CMAPMapper *findUnicodeMapper();
-
-protected:
-    hb_blob_t *readFontTable(LETag tableTag) const;
-
-public:
-    PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status);
-
-    virtual ~PortableFontInstance();
-
-    virtual const void *getFontTable(LETag tableTag) const;
-
-    virtual const char *getNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const;
-
-    virtual const LEUnicode16 *getUnicodeNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const;
-
-    virtual void deleteNameString(const char *name) const;
-
-    virtual void deleteNameString(const LEUnicode16 *name) const;
-
-    virtual le_int32 getUnitsPerEM() const;
-
-    virtual le_uint32 getFontChecksum() const;
-
-    virtual le_int32 getAscent() const;
-
-    virtual le_int32 getDescent() const;
-
-    virtual le_int32 getLeading() const;
-
-    // We really want to inherit this method from the superclass, but some compilers
-    // issue a warning if we don't implement it...
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
-    
-    // We really want to inherit this method from the superclass, but some compilers
-    // issue a warning if we don't implement it...
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
-
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
-
-    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
-
-    virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
-
-    virtual float getXPixelsPerEm() const;
-
-    virtual float getYPixelsPerEm() const;
-
-    virtual float getScaleFactorX() const;
-
-    virtual float getScaleFactorY() const;
-
-};
-
-HB_END_VISIBILITY
-
-#endif
diff --git a/src/hb-icu-le/README b/src/hb-icu-le/README
deleted file mode 100644 (file)
index 329a218..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This is PortableFontInstance from icu/test/testle of ICU50.
-Modified to use a hb_face_t.
-For license information, see the file license.html.
diff --git a/src/hb-icu-le/cmaps.cpp b/src/hb-icu-le/cmaps.cpp
deleted file mode 100644 (file)
index d03ee71..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/***************************************************************************
-*
-*   Copyright (C) 1998-2003, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-************************************************************************/
-
-#include "layout/LETypes.h"
-#include "layout/LESwaps.h"
-
-#include "sfnt.h"
-#include "cmaps.h"
-
-#define SWAPU16(code) ((LEUnicode16) SWAPW(code))
-#define SWAPU32(code) ((LEUnicode32) SWAPL(code))
-
-//
-// Finds the high bit by binary searching
-// through the bits in value.
-//
-static inline le_int8 highBit(le_uint32 value)
-{
-    le_uint8 bit = 0;
-
-    if (value >= 1 << 16) {
-        value >>= 16;
-        bit += 16;
-    }
-
-    if (value >= 1 << 8) {
-        value >>= 8;
-        bit += 8;
-    }
-
-    if (value >= 1 << 4) {
-        value >>= 4;
-        bit += 4;
-    }
-
-    if (value >= 1 << 2) {
-        value >>= 2;
-        bit += 2;
-    }
-
-    if (value >= 1 << 1) {
-        value >>= 1;
-        bit += 1;
-    }
-
-    return bit;
-}
-
-CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap)
-{
-    le_uint16 i;
-    le_uint16 nSubtables = SWAPW(cmap->numberSubtables);
-    const CMAPEncodingSubtable *subtable = NULL;
-    le_uint32 offset1 = 0, offset10 = 0;
-
-    for (i = 0; i < nSubtables; i += 1) {
-        const CMAPEncodingSubtableHeader *esh = &cmap->encodingSubtableHeaders[i];
-
-        if (SWAPW(esh->platformID) == 3) {
-            switch (SWAPW(esh->platformSpecificID)) {
-            case 1:
-                offset1 = SWAPL(esh->encodingOffset);
-                break;
-
-            case 10:
-                offset10 = SWAPL(esh->encodingOffset);
-                break;
-            }
-        }
-    }
-
-
-    if (offset10 != 0)
-    {
-        subtable = (const CMAPEncodingSubtable *) ((const char *) cmap + offset10);
-    } else if (offset1 != 0) {
-        subtable = (const CMAPEncodingSubtable *) ((const char *) cmap + offset1);
-    } else {
-        return NULL;
-    }
-
-    switch (SWAPW(subtable->format)) {
-    case 4:
-        return new CMAPFormat4Mapper(cmap, (const CMAPFormat4Encoding *) subtable);
-
-    case 12:
-    {
-        const CMAPFormat12Encoding *encoding = (const CMAPFormat12Encoding *) subtable;
-
-        return new CMAPGroupMapper(cmap, encoding->groups, SWAPL(encoding->nGroups));
-    }
-
-    default:
-        break;
-    }
-
-    return NULL;
-}
-
-CMAPFormat4Mapper::CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header)
-    : CMAPMapper(cmap)
-{
-    le_uint16 segCount = SWAPW(header->segCountX2) / 2;
-
-    fEntrySelector = SWAPW(header->entrySelector);
-    fRangeShift = SWAPW(header->rangeShift) / 2;
-    fEndCodes = &header->endCodes[0];
-    fStartCodes = &header->endCodes[segCount + 1]; // + 1 for reservedPad...
-    fIdDelta = &fStartCodes[segCount];
-    fIdRangeOffset = &fIdDelta[segCount];
-}
-
-LEGlyphID CMAPFormat4Mapper::unicodeToGlyph(LEUnicode32 unicode32) const
-{
-    if (unicode32 >= 0x10000) {
-        return 0;
-    }
-
-    LEUnicode16 unicode = (LEUnicode16) unicode32;
-    le_uint16 index = 0;
-    le_uint16 probe = 1 << fEntrySelector;
-    TTGlyphID result = 0;
-
-    if (SWAPU16(fStartCodes[fRangeShift]) <= unicode) {
-        index = fRangeShift;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (SWAPU16(fStartCodes[index + probe]) <= unicode) {
-            index += probe;
-        }
-    }
-
-    if (unicode >= SWAPU16(fStartCodes[index]) && unicode <= SWAPU16(fEndCodes[index])) {
-        if (fIdRangeOffset[index] == 0) {
-            result = (TTGlyphID) unicode;
-        } else {
-            le_uint16 offset = unicode - SWAPU16(fStartCodes[index]);
-            le_uint16 rangeOffset = SWAPW(fIdRangeOffset[index]);
-            le_uint16 *glyphIndexTable = (le_uint16 *) ((char *) &fIdRangeOffset[index] + rangeOffset);
-
-            result = SWAPW(glyphIndexTable[offset]);
-        }
-
-        result += SWAPW(fIdDelta[index]);
-    } else {
-        result = 0;
-    }
-
-    return LE_SET_GLYPH(0, result);
-}
-
-CMAPFormat4Mapper::~CMAPFormat4Mapper()
-{
-    // parent destructor does it all
-}
-
-CMAPGroupMapper::CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups)
-    : CMAPMapper(cmap), fGroups(groups)
-{
-    le_uint8 bit = highBit(nGroups);
-    fPower = 1 << bit;
-    fRangeOffset = nGroups - fPower;
-}
-
-LEGlyphID CMAPGroupMapper::unicodeToGlyph(LEUnicode32 unicode32) const
-{
-    le_int32 probe = fPower;
-    le_int32 range = 0;
-
-    if (SWAPU32(fGroups[fRangeOffset].startCharCode) <= unicode32) {
-        range = fRangeOffset;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (SWAPU32(fGroups[range + probe].startCharCode) <= unicode32) {
-            range += probe;
-        }
-    }
-
-    if (SWAPU32(fGroups[range].startCharCode) <= unicode32 && SWAPU32(fGroups[range].endCharCode) >= unicode32) {
-        return (LEGlyphID) (SWAPU32(fGroups[range].startGlyphCode) + unicode32 - SWAPU32(fGroups[range].startCharCode));
-    }
-
-    return 0;
-}
-
-CMAPGroupMapper::~CMAPGroupMapper()
-{
-    // parent destructor does it all
-}
-
diff --git a/src/hb-icu-le/cmaps.h b/src/hb-icu-le/cmaps.h
deleted file mode 100644 (file)
index cf73f3a..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/***************************************************************************
-*
-*   Copyright (C) 1998-2006, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-************************************************************************/
-
-
-#ifndef __CMAPS_H
-#define __CMAPS_H
-
-#include "layout/LETypes.h"
-#include "letest.h"
-#include "sfnt.h"
-
-HB_BEGIN_VISIBILITY
-
-class CMAPMapper
-{
-public:
-    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0;
-
-    virtual ~CMAPMapper();
-
-    static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap);
-
-protected:
-    CMAPMapper(const CMAPTable *cmap);
-
-    CMAPMapper() {};
-
-private:
-    const CMAPTable *fcmap;
-};
-
-class CMAPFormat4Mapper : public CMAPMapper
-{
-public:
-    CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header);
-
-    virtual ~CMAPFormat4Mapper();
-
-    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
-
-protected:
-    CMAPFormat4Mapper() {};
-
-private:
-    le_uint16       fEntrySelector;
-    le_uint16       fRangeShift;
-    const le_uint16 *fEndCodes;
-    const le_uint16 *fStartCodes;
-    const le_uint16 *fIdDelta;
-    const le_uint16 *fIdRangeOffset;
-};
-
-class CMAPGroupMapper : public CMAPMapper
-{
-public:
-    CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups);
-
-    virtual ~CMAPGroupMapper();
-
-    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
-
-protected:
-    CMAPGroupMapper() {};
-
-private:
-    le_int32 fPower;
-    le_int32 fRangeOffset;
-    const CMAPGroup *fGroups;
-};
-
-inline CMAPMapper::CMAPMapper(const CMAPTable *cmap)
-    : fcmap(cmap)
-{
-    // nothing else to do
-}
-
-inline CMAPMapper::~CMAPMapper()
-{
-}
-
-HB_END_VISIBILITY
-
-#endif
diff --git a/src/hb-icu-le/letest.h b/src/hb-icu-le/letest.h
deleted file mode 100644 (file)
index ff564ba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *******************************************************************************
- *
- *   Copyright (C) 1999-2011, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  letest.h
- *
- *   created on: 11/06/2000
- *   created by: Eric R. Mader
- */
-
-#ifndef __LETEST_H
-#define __LETEST_H
-
-
-#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
-# define HB_BEGIN_VISIBILITY _Pragma ("GCC visibility push(hidden)")
-# define HB_END_VISIBILITY _Pragma ("GCC visibility pop")
-#else
-# define HB_BEGIN_VISIBILITY
-# define HB_END_VISIBILITY
-#endif
-
-
-#include "layout/LETypes.h"
-/*#include "unicode/ctest.h"*/
-
-#include <stdlib.h>
-#include <string.h>
-
-HB_BEGIN_VISIBILITY
-
-U_NAMESPACE_USE
-
-#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
-#define ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
-#define NEW_ARRAY(type,count) (type *) malloc((count) * sizeof(type))
-
-#define DELETE_ARRAY(array) free((void *) (array))
-
-#define GROW_ARRAY(array,newSize) realloc((void *) (array), (newSize) * sizeof (array)[0])
-
-struct TestResult
-{
-    le_int32   glyphCount;
-    LEGlyphID *glyphs;
-    le_int32  *indices;
-    float     *positions;
-};
-
-#ifndef __cplusplus
-typedef struct TestResult TestResult;
-#endif
-
-//U_CFUNC void addCTests(TestNode **root);
-
-HB_END_VISIBILITY
-
-#endif
diff --git a/src/hb-icu-le/license.html b/src/hb-icu-le/license.html
deleted file mode 100644 (file)
index d078d05..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></meta>
-<title>ICU License - ICU 1.8.1 and later</title>
-</head>
-
-<body BGCOLOR="#ffffff">
-<h2>ICU License - ICU 1.8.1 and later</h2>
-
-<p>COPYRIGHT AND PERMISSION NOTICE</p>
-
-<p>
-Copyright (c) 1995-2012 International Business Machines Corporation and others
-</p>
-<p>
-All rights reserved.
-</p>
-<p>
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, and/or sell
-copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies
-of the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-</p>
-<p>
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
-THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
-OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
-RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
-USE OR PERFORMANCE OF THIS SOFTWARE.
-</p>
-<p>
-Except as contained in this notice, the name of a copyright holder shall not be
-used in advertising or otherwise to promote the sale, use or other dealings in
-this Software without prior written authorization of the copyright holder.
-</p>
-
-<hr>
-<p><small>
-All trademarks and registered trademarks mentioned herein are the property of their respective owners.
-</small></p>
-</body>
-</html>
diff --git a/src/hb-icu-le/sfnt.h b/src/hb-icu-le/sfnt.h
deleted file mode 100644 (file)
index feec0ad..0000000
+++ /dev/null
@@ -1,453 +0,0 @@
-/***************************************************************************
-*
-*   Copyright (C) 1998-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-************************************************************************/
-
-#ifndef __SFNT_H
-#define __SFNT_H
-
-#include "layout/LETypes.h"
-#include "letest.h"
-
-HB_BEGIN_VISIBILITY
-
-U_NAMESPACE_USE
-
-#ifndef ANY_NUMBER
-#define ANY_NUMBER 1
-#endif
-
-struct DirectoryEntry
-{
-    le_uint32   tag;
-    le_uint32   checksum;
-    le_uint32   offset;
-    le_uint32   length;
-};
-
-#ifndef __cplusplus
-typedef struct DirectoryEntry DirectoryEntry;
-#endif
-
-struct SFNTDirectory
-{
-    le_uint32       scalerType;
-    le_uint16       numTables;
-    le_uint16       searchRange;
-    le_uint16       entrySelector;
-    le_uint16       rangeShift;
-    DirectoryEntry  tableDirectory[ANY_NUMBER];
-};
-
-#ifndef __cplusplus
-typedef struct SFNTDirectory SFNTDirectory;
-#endif
-
-
-struct CMAPEncodingSubtableHeader
-{
-    le_uint16   platformID;
-    le_uint16   platformSpecificID;
-    le_uint32   encodingOffset;
-};
-
-#ifndef __cplusplus
-typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader;
-#endif
-
-struct CMAPTable
-{
-    le_uint16   version;
-    le_uint16   numberSubtables;
-    CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
-};
-
-#ifndef __cplusplus
-typedef struct CMAPTable CMAPTable;
-#endif
-
-struct CMAPEncodingSubtable
-{
-    le_uint16   format;
-    le_uint16   length;
-    le_uint16   language;
-};
-
-#ifndef __cplusplus
-typedef struct CMAPEncodingSubtable CMAPEncodingSubtable;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat0Encoding : CMAPEncodingSubtable
-{
-    le_uint8    glyphIndexArray[256];
-};
-#else
-struct CMAPFormat0Encoding
-{
-       CMAPEncodingSubtable base;
-
-       le_uint8 glyphIndexArray[256];
-};
-
-typedef struct CMAPFormat0Encoding CMAPFormat0Encoding;
-#endif
-
-struct CMAPFormat2Subheader
-{
-    le_uint16   firstCode;
-    le_uint16   entryCount;
-    le_int16    idDelta;
-    le_uint16   idRangeOffset;
-};
-
-#ifndef __cplusplus
-typedef struct CMAPFormat2Subheader CMAPFormat2Subheader;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat2Encoding : CMAPEncodingSubtable
-{
-    le_uint16  subHeadKeys[256];
-    CMAPFormat2Subheader subheaders[ANY_NUMBER];
-};
-#else
-struct CMAPFormat2Encoding
-{
-       CMAPEncodingSubtable base;
-
-    le_uint16  subHeadKeys[256];
-    CMAPFormat2Subheader subheaders[ANY_NUMBER];
-};
-
-typedef struct CMAPFormat2Encoding CMAPFormat2Encoding;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat4Encoding : CMAPEncodingSubtable
-{
-    le_uint16   segCountX2;
-    le_uint16   searchRange;
-    le_uint16   entrySelector;
-    le_uint16   rangeShift;
-    le_uint16   endCodes[ANY_NUMBER];
-/*
-    le_uint16   reservedPad;
-    le_uint16   startCodes[ANY_NUMBER];
-    le_uint16   idDelta[ANY_NUMBER];
-    le_uint16   idRangeOffset[ANY_NUMBER];
-    le_uint16   glyphIndexArray[ANY_NUMBER];
-*/
-};
-#else
-struct CMAPFormat4Encoding
-{
-       CMAPEncodingSubtable base;
-
-    le_uint16   segCountX2;
-    le_uint16   searchRange;
-    le_uint16   entrySelector;
-    le_uint16   rangeShift;
-    le_uint16   endCodes[ANY_NUMBER];
-/*
-//  le_uint16   reservedPad;
-//  le_uint16   startCodes[ANY_NUMBER];
-//  le_uint16   idDelta[ANY_NUMBER];
-//  le_uint16   idRangeOffset[ANY_NUMBER];
-//  le_uint16   glyphIndexArray[ANY_NUMBER];
-*/
-};
-
-typedef struct CMAPFormat4Encoding CMAPFormat4Encoding;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat6Encoding : CMAPEncodingSubtable
-{
-    le_uint16   firstCode;
-    le_uint16   entryCount;
-    le_uint16   glyphIndexArray[ANY_NUMBER];
-};
-#else
-struct CMAPFormat6Encoding
-{
-       CMAPEncodingSubtable base;
-
-    le_uint16   firstCode;
-    le_uint16   entryCount;
-    le_uint16   glyphIndexArray[ANY_NUMBER];
-};
-
-typedef struct CMAPFormat6Encoding CMAPFormat6Encoding;
-#endif
-
-struct CMAPEncodingSubtable32
-{
-    le_uint32   format;
-    le_uint32   length;
-    le_uint32   language;
-};
-
-#ifndef __cplusplus
-typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32;
-#endif
-
-struct CMAPGroup
-{
-    le_uint32   startCharCode;
-    le_uint32   endCharCode;
-    le_uint32   startGlyphCode;
-};
-
-#ifndef __cplusplus
-typedef struct CMAPGroup CMAPGroup;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat8Encoding : CMAPEncodingSubtable32
-{
-    le_uint32   is32[65536/32];
-    le_uint32   nGroups;
-    CMAPGroup   groups[ANY_NUMBER];
-};
-#else
-struct CMAPFormat8Encoding
-{
-       CMAPEncodingSubtable32 base;
-
-    le_uint32   is32[65536/32];
-    le_uint32   nGroups;
-    CMAPGroup   groups[ANY_NUMBER];
-};
-
-typedef struct CMAPFormat8Encoding CMAPFormat8Encoding;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat10Encoding : CMAPEncodingSubtable32
-{
-    le_uint32   startCharCode;
-    le_uint32   numCharCodes;
-    le_uint16   glyphs[ANY_NUMBER];
-};
-#else
-struct CMAPFormat10Encoding
-{
-       CMAPEncodingSubtable32 base;
-
-    le_uint32   startCharCode;
-    le_uint32   numCharCodes;
-    le_uint16   glyphs[ANY_NUMBER];
-};
-
-typedef struct CMAPFormat10Encoding CMAPFormat10Encoding;
-#endif
-
-#ifdef __cplusplus
-struct CMAPFormat12Encoding : CMAPEncodingSubtable32
-{
-    le_uint32   nGroups;
-    CMAPGroup   groups[ANY_NUMBER];
-};
-#else
-struct CMAPFormat12Encoding
-{
-       CMAPEncodingSubtable32 base;
-
-    le_uint32   nGroups;
-    CMAPGroup   groups[ANY_NUMBER];
-};
-
-typedef struct CMAPFormat12Encoding CMAPFormat12Encoding;
-#endif
-
-typedef le_int32 fixed;
-
-struct BigDate
-{
-    le_uint32   bc;
-    le_uint32   ad;
-};
-
-#ifndef __cplusplus
-typedef struct BigDate BigDate;
-#endif
-
-struct HEADTable
-{
-    fixed       version;
-    fixed       fontRevision;
-    le_uint32   checksumAdjustment;
-    le_uint32   magicNumber;
-    le_uint16   flags;
-    le_uint16   unitsPerEm;
-    BigDate     created;
-    BigDate     modified;
-    le_int16    xMin;
-    le_int16    yMin;
-    le_int16    xMax;
-    le_int16    yMax;
-    le_int16    lowestRecPPEM;
-    le_int16    fontDirectionHint;
-    le_int16    indexToLocFormat;
-    le_int16    glyphDataFormat;
-};
-
-#ifndef __cplusplus
-typedef struct HEADTable HEADTable;
-#endif
-
-struct MAXPTable
-{
-    fixed       version;
-    le_uint16   numGlyphs;
-    le_uint16   maxPoints;
-    le_uint16   maxContours;
-    le_uint16   maxComponentPoints;
-    le_uint16   maxComponentContours;
-    le_uint16   maxZones;
-    le_uint16   maxTwilightPoints;
-    le_uint16   maxStorage;
-    le_uint16   maxFunctionDefs;
-    le_uint16   maxInstructionDefs;
-    le_uint16   maxStackElements;
-    le_uint16   maxSizeOfInstructions;
-    le_uint16   maxComponentElements;
-    le_uint16   maxComponentDepth;
-};
-
-#ifndef __cplusplus
-typedef struct MAXPTable MAXPTable;
-#endif
-
-struct HHEATable
-{
-    fixed       version;
-    le_int16    ascent;
-    le_int16    descent;
-    le_int16    lineGap;
-    le_uint16   advanceWidthMax;
-    le_int16    minLeftSideBearing;
-    le_int16    minRightSideBearing;
-    le_int16    xMaxExtent;
-    le_int16    caretSlopeRise;
-    le_int16    caretSlopeRun;
-    le_int16    caretOffset;
-    le_int16    reserved1;
-    le_int16    reserved2;
-    le_int16    reserved3;
-    le_int16    reserved4;
-    le_int16    metricDataFormat;
-    le_uint16   numOfLongHorMetrics;
-};
-
-#ifndef __cplusplus
-typedef struct HHEATable HHEATable;
-#endif
-
-struct LongHorMetric
-{
-    le_uint16   advanceWidth;
-    le_int16    leftSideBearing;
-};
-
-#ifndef __cplusplus
-typedef struct LongHorMetric LongHorMetric;
-#endif
-
-struct HMTXTable
-{
-    LongHorMetric hMetrics[ANY_NUMBER];       /* ANY_NUMBER = numOfLongHorMetrics from hhea table */
-/* le_int16        leftSideBearing[ANY_NUMBER];  ANY_NUMBER = numGlyphs - numOfLongHorMetrics     */
-};
-
-#ifndef __cplusplus
-typedef struct HMTXTable HMTXTable;
-#endif
-
-enum PlatformID
-{
-    PLATFORM_UNICODE = 0,
-    PLATFORM_MACINTOSH = 1,
-    PLATFORM_ISO       = 2,
-    PLATFORM_MICROSOFT = 3,
-    PLATFORM_CUSTOM    = 4
-};
-
-enum MacintoshEncodingID
-{
-    MACINTOSH_ROMAN = 0
-};
-
-enum MacintoshLanguageID
-{
-    MACINTOSH_ENGLISH = 0
-};
-
-enum MicrosoftEncodingID
-{
-    MICROSOFT_UNICODE_BMP  =  1,
-    MICROSOFT_UNICODE_FULL = 10
-};
-
-enum MicrosoftLanguageID
-{
-    MICROSOFT_ENGLISH = 0x409
-};
-
-enum NameID
-{
-    NAME_COPYRIGHT_NOTICE     = 0,
-    NAME_FONT_FAMILY          = 1,
-    NAME_FONT_SUB_FAMILY      = 2,
-    NAME_UNIQUE_FONT_ID       = 3,
-    NAME_FULL_FONT_NAME       = 4,
-    NAME_VERSION_STRING       = 5,
-    NAME_POSTSCRIPT_NAME      = 6,
-    NAME_TRADEMARK            = 7,
-    NAME_MANUFACTURER         = 8,
-    NAME_DESIGNER             = 9,
-    NAME_DESCRIPTION          = 10,
-    NAME_VENDOR_URL           = 11,
-    NAME_DESIGNER_URL         = 12,
-    NAME_LICENSE_DESCRIPTION  = 13,
-    NAME_LICENSE_URL          = 14,
-    NAME_RESERVED             = 15,
-    NAME_PREFERRED_FAMILY     = 16,
-    NAME_PREFERRED_SUB_FAMILY = 17,
-    NAME_COMPATIBLE_FULL      = 18,
-    NAME_SAMPLE_TEXT          = 19,
-    NAME_POSTSCRIPT_CID       = 20
-};
-
-struct NameRecord
-{
-    le_uint16 platformID;
-    le_uint16 encodingID;
-    le_uint16 languageID;
-    le_uint16 nameID;
-    le_uint16 length;
-    le_uint16 offset;
-};
-
-#ifndef __cplusplus
-typedef struct NameRecord NameRecord;
-#endif
-
-struct NAMETable
-{
-    le_uint16 version;
-    le_uint16 count;
-    le_uint16 stringOffset;
-    NameRecord nameRecords[ANY_NUMBER];
-};
-
-#ifndef __cplusplus
-typedef struct NAMETable NAMETable;
-#endif
-
-HB_END_VISIBILITY
-
-#endif
index c177be2..86c8b5c 100644 (file)
@@ -323,7 +323,7 @@ hb_icu_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs HB_UNUSED,
 
   /* Copy @u into a UTF-16 array to be passed to ICU. */
   len = 0;
 
   /* Copy @u into a UTF-16 array to be passed to ICU. */
   len = 0;
-  err = FALSE;
+  err = false;
   U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), u, err);
   if (err)
     return 0;
   U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), u, err);
   if (err)
     return 0;
index 5b3a17e..6281201 100644 (file)
 #if 0
 
 
 #if 0
 
 
-#elif !defined(HB_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
+#elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
 
 
-#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 typedef CRITICAL_SECTION hb_mutex_impl_t;
 #include <windows.h>
 typedef CRITICAL_SECTION hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT     { NULL, 0, 0, NULL, NULL, 0 }
+#define HB_MUTEX_IMPL_INIT     {0}
 #define hb_mutex_impl_init(M)  InitializeCriticalSection (M)
 #define hb_mutex_impl_lock(M)  EnterCriticalSection (M)
 #define hb_mutex_impl_unlock(M)        LeaveCriticalSection (M)
 #define hb_mutex_impl_init(M)  InitializeCriticalSection (M)
 #define hb_mutex_impl_lock(M)  EnterCriticalSection (M)
 #define hb_mutex_impl_unlock(M)        LeaveCriticalSection (M)
diff --git a/src/hb-old.cc b/src/hb-old.cc
deleted file mode 100644 (file)
index a7ea8ed..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright © 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
- */
-
-#define HB_SHAPER old
-#define hb_old_shaper_face_data_t HB_FaceRec_
-#define hb_old_shaper_font_data_t HB_Font_
-#include "hb-shaper-impl-private.hh"
-
-#include <harfbuzz.h>
-
-
-#ifndef HB_DEBUG_OLD
-#define HB_DEBUG_OLD (HB_DEBUG+0)
-#endif
-
-
-static HB_Script
-hb_old_script_from_script (hb_script_t script)
-{
-  switch ((hb_tag_t) script)
-  {
-    default:
-    case HB_SCRIPT_COMMON:             return HB_Script_Common;
-    case HB_SCRIPT_GREEK:              return HB_Script_Greek;
-    case HB_SCRIPT_CYRILLIC:           return HB_Script_Cyrillic;
-    case HB_SCRIPT_ARMENIAN:           return HB_Script_Armenian;
-    case HB_SCRIPT_HEBREW:             return HB_Script_Hebrew;
-    case HB_SCRIPT_ARABIC:             return HB_Script_Arabic;
-    case HB_SCRIPT_SYRIAC:             return HB_Script_Syriac;
-    case HB_SCRIPT_THAANA:             return HB_Script_Thaana;
-    case HB_SCRIPT_DEVANAGARI:         return HB_Script_Devanagari;
-    case HB_SCRIPT_BENGALI:            return HB_Script_Bengali;
-    case HB_SCRIPT_GURMUKHI:           return HB_Script_Gurmukhi;
-    case HB_SCRIPT_GUJARATI:           return HB_Script_Gujarati;
-    case HB_SCRIPT_ORIYA:              return HB_Script_Oriya;
-    case HB_SCRIPT_TAMIL:              return HB_Script_Tamil;
-    case HB_SCRIPT_TELUGU:             return HB_Script_Telugu;
-    case HB_SCRIPT_KANNADA:            return HB_Script_Kannada;
-    case HB_SCRIPT_MALAYALAM:          return HB_Script_Malayalam;
-    case HB_SCRIPT_SINHALA:            return HB_Script_Sinhala;
-    case HB_SCRIPT_THAI:               return HB_Script_Thai;
-    case HB_SCRIPT_LAO:                        return HB_Script_Lao;
-    case HB_SCRIPT_TIBETAN:            return HB_Script_Tibetan;
-    case HB_SCRIPT_MYANMAR:            return HB_Script_Myanmar;
-    case HB_SCRIPT_GEORGIAN:           return HB_Script_Georgian;
-    case HB_SCRIPT_HANGUL:             return HB_Script_Hangul;
-    case HB_SCRIPT_OGHAM:              return HB_Script_Ogham;
-    case HB_SCRIPT_RUNIC:              return HB_Script_Runic;
-    case HB_SCRIPT_KHMER:              return HB_Script_Khmer;
-    case HB_SCRIPT_NKO:                        return HB_Script_Nko;
-    case HB_SCRIPT_INHERITED:          return HB_Script_Inherited;
-  }
-}
-
-
-static HB_Bool
-hb_old_convertStringToGlyphIndices (HB_Font old_font,
-                                   const HB_UChar16 *string,
-                                   hb_uint32 length,
-                                   HB_Glyph *glyphs,
-                                   hb_uint32 *numGlyphs,
-                                   HB_Bool rightToLeft)
-{
-  hb_font_t *font = (hb_font_t *) old_font->userData;
-
-  for (unsigned int i = 0; i < length; i++)
-  {
-    hb_codepoint_t u;
-
-    /* XXX Handle UTF-16.  Ugh */
-    u = string[i];
-
-    if (rightToLeft)
-      u = hb_unicode_funcs_get_default ()->mirroring (u);
-
-    font->get_glyph (u, 0, &u); /* TODO Variation selectors */
-
-    glyphs[i] = u;
-  }
-  *numGlyphs = length; /* XXX */
-
-  return true;
-}
-
-static void
-hb_old_getGlyphAdvances (HB_Font old_font,
-                        const HB_Glyph *glyphs,
-                        hb_uint32 numGlyphs,
-                        HB_Fixed *advances,
-                        int flags /*HB_ShaperFlag*/ HB_UNUSED)
-{
-  hb_font_t *font = (hb_font_t *) old_font->userData;
-
-  for (unsigned int i = 0; i < numGlyphs; i++)
-    advances[i] = font->get_glyph_h_advance (glyphs[i]);
-}
-
-static HB_Bool
-hb_old_canRender (HB_Font old_font,
-                 const HB_UChar16 *string,
-                 hb_uint32 length)
-{
-  return true; /* TODO */
-}
-
-static HB_Error
-hb_old_getPointInOutline (HB_Font old_font,
-                         HB_Glyph glyph,
-                         int flags /*HB_ShaperFlag*/,
-                         hb_uint32 point,
-                         HB_Fixed *xpos,
-                         HB_Fixed *ypos,
-                         hb_uint32 *nPoints)
-{
-  return HB_Err_Ok; /* TODO */
-}
-
-static void
-hb_old_getGlyphMetrics (HB_Font old_font,
-                       HB_Glyph glyph,
-                       HB_GlyphMetrics *metrics)
-{
-  hb_font_t *font = (hb_font_t *) old_font->userData;
-
-  hb_glyph_extents_t extents;
-
-  font->get_glyph_extents (glyph, &extents);
-
-  metrics->x       = extents.x_bearing;
-  metrics->y       = extents.y_bearing;
-  metrics->width   = extents.width;
-  metrics->height  = extents.height;
-  metrics->xOffset = font->get_glyph_h_advance (glyph);
-  metrics->yOffset = 0;
-}
-
-static HB_Fixed
-hb_old_getFontMetric (HB_Font old_font,
-                     HB_FontMetric metric)
-{
-  hb_font_t *font = (hb_font_t *) old_font->userData;
-
-  switch (metric)
-  {
-    case HB_FontAscent:
-       return font->y_scale; /* XXX We don't have ascent data yet. */
-
-    default:
-      return 0;
-  }
-}
-
-static const HB_FontClass hb_old_font_class = {
-  hb_old_convertStringToGlyphIndices,
-  hb_old_getGlyphAdvances,
-  hb_old_canRender,
-  hb_old_getPointInOutline,
-  hb_old_getGlyphMetrics,
-  hb_old_getFontMetric
-};
-
-
-
-static HB_Error
-table_func (void *font, HB_Tag tag, HB_Byte *buffer, HB_UInt *length)
-{
-  hb_face_t *face = (hb_face_t *) font;
-  hb_blob_t *blob = face->reference_table ((hb_tag_t) tag);
-  unsigned int capacity = *length;
-  *length = hb_blob_get_length (blob);
-  memcpy (buffer, hb_blob_get_data (blob, NULL), MIN (capacity, *length));
-  hb_blob_destroy (blob);
- return HB_Err_Ok;
-}
-
-
-/*
- * shaper face data
- */
-
-hb_old_shaper_face_data_t *
-_hb_old_shaper_face_data_create (hb_face_t *face)
-{
-  return HB_NewFace (face, table_func);
-}
-
-void
-_hb_old_shaper_face_data_destroy (hb_old_shaper_face_data_t *data)
-{
-  HB_FreeFace (data);
-}
-
-
-/*
- * shaper font data
- */
-
-hb_old_shaper_font_data_t *
-_hb_old_shaper_font_data_create (hb_font_t *font)
-{
-  HB_FontRec *data = (HB_FontRec *) calloc (1, sizeof (HB_FontRec));
-  if (unlikely (!data)) {
-    DEBUG_MSG (OLD, font, "malloc()ing HB_Font failed");
-    return NULL;
-  }
-
-  data->klass = &hb_old_font_class;
-  data->x_ppem = font->x_ppem;
-  data->y_ppem = font->y_ppem;
-  data->x_scale = font->x_scale; /* XXX */
-  data->y_scale = font->y_scale; /* XXX */
-  data->userData = font;
-
-  return data;
-}
-
-void
-_hb_old_shaper_font_data_destroy (hb_old_shaper_font_data_t *data)
-{
-  free (data);
-}
-
-
-/*
- * shaper shape_plan data
- */
-
-struct hb_old_shaper_shape_plan_data_t {};
-
-hb_old_shaper_shape_plan_data_t *
-_hb_old_shaper_shape_plan_data_create (hb_shape_plan_t    *shape_plan HB_UNUSED,
-                                      const hb_feature_t *user_features HB_UNUSED,
-                                      unsigned int        num_user_features HB_UNUSED)
-{
-  return (hb_old_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_old_shaper_shape_plan_data_destroy (hb_old_shaper_shape_plan_data_t *data HB_UNUSED)
-{
-}
-
-
-/*
- * shaper
- */
-
-hb_bool_t
-_hb_old_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
-              hb_font_t          *font,
-              hb_buffer_t        *buffer,
-              const hb_feature_t *features,
-              unsigned int        num_features)
-{
-  hb_face_t *face = font->face;
-  HB_Face old_face = HB_SHAPER_DATA_GET (face);
-  HB_Font old_font = HB_SHAPER_DATA_GET (font);
-
-  bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
-
-retry:
-
-  unsigned int scratch_size;
-  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
-
-#define utf16_index() var1.u32
-  HB_UChar16 *pchars = (HB_UChar16 *) scratch;
-  unsigned int chars_len = 0;
-  for (unsigned int i = 0; i < buffer->len; i++) {
-    hb_codepoint_t c = buffer->info[i].codepoint;
-    buffer->info[i].utf16_index() = chars_len;
-    if (likely (c < 0x10000))
-      pchars[chars_len++] = c;
-    else if (unlikely (c >= 0x110000))
-      pchars[chars_len++] = 0xFFFD;
-    else {
-      pchars[chars_len++] = 0xD800 + ((c - 0x10000) >> 10);
-      pchars[chars_len++] = 0xDC00 + ((c - 0x10000) & ((1 << 10) - 1));
-    }
-  }
-
-
-#define ALLOCATE_ARRAY(Type, name, len) \
-  name = (Type *) scratch; \
-  scratch += (len) * sizeof ((name)[0]); \
-  scratch_size -= (len) * sizeof ((name)[0]);
-
-
-  HB_ShaperItem item = {0};
-
-  ALLOCATE_ARRAY (const HB_UChar16, item.string, chars_len);
-  ALLOCATE_ARRAY (unsigned short, item.log_clusters, chars_len + 2);
-  item.stringLength = chars_len;
-  item.item.pos = 0;
-  item.item.length = item.stringLength;
-  item.item.script = hb_old_script_from_script (buffer->props.script);
-  item.item.bidiLevel = backward ? 1 : 0;
-
-  item.font = old_font;
-  item.face = old_face;
-  item.shaperFlags = 0;
-
-  item.glyphIndicesPresent = false;
-
-  /* TODO Alignment. */
-  unsigned int num_glyphs = scratch_size / (sizeof (HB_Glyph) +
-                                           sizeof (HB_GlyphAttributes) +
-                                           sizeof (HB_Fixed) +
-                                           sizeof (HB_FixedPoint) +
-                                           sizeof (uint32_t));
-
-  item.num_glyphs = num_glyphs;
-  ALLOCATE_ARRAY (HB_Glyph, item.glyphs, num_glyphs);
-  ALLOCATE_ARRAY (HB_GlyphAttributes, item.attributes, num_glyphs);
-  ALLOCATE_ARRAY (HB_Fixed, item.advances, num_glyphs);
-  ALLOCATE_ARRAY (HB_FixedPoint, item.offsets, num_glyphs);
-  /* Apparently in some cases the offsets array will not be fully assigned to.
-   * Clear it. */
-  memset (item.offsets, 0, num_glyphs * sizeof (item.offsets[0]));
-  uint32_t *vis_clusters;
-  ALLOCATE_ARRAY (uint32_t, vis_clusters, num_glyphs);
-
-#undef ALLOCATE_ARRAY
-
-  if (!HB_ShapeItem (&item))
-  {
-    if (unlikely (item.num_glyphs > num_glyphs))
-    {
-      buffer->ensure (buffer->allocated * 2);
-      if (buffer->in_error)
-        return false;
-      goto retry;
-    }
-    return false;
-  }
-  num_glyphs = item.num_glyphs;
-
-  /* Ok, we've got everything we need, now compose output buffer,
-   * very, *very*, carefully! */
-
-  /* Calculate visual-clusters.  That's what we ship. */
-  for (unsigned int i = 0; i < num_glyphs; i++)
-    vis_clusters[i] = -1;
-  for (unsigned int i = 0; i < buffer->len; i++) {
-    uint32_t *p = &vis_clusters[item.log_clusters[buffer->info[i].utf16_index()]];
-    *p = MIN (*p, buffer->info[i].cluster);
-  }
-  for (unsigned int i = 1; i < num_glyphs; i++)
-    if (vis_clusters[i] == (uint32_t) -1)
-      vis_clusters[i] = vis_clusters[i - 1];
-
-#undef utf16_index
-
-  buffer->ensure (num_glyphs);
-  if (buffer->in_error)
-    return false;
-
-
-  buffer->len = num_glyphs;
-  hb_glyph_info_t *info = buffer->info;
-  for (unsigned int i = 0; i < num_glyphs; i++)
-  {
-    info[i].codepoint = item.glyphs[i];
-    info[i].cluster = vis_clusters[i];
-
-    info[i].mask = item.advances[i];
-    info[i].var1.u32 = item.offsets[i].x;
-    info[i].var2.u32 = item.offsets[i].y;
-  }
-
-  buffer->clear_positions ();
-
-  for (unsigned int i = 0; i < num_glyphs; ++i) {
-    hb_glyph_info_t *info = &buffer->info[i];
-    hb_glyph_position_t *pos = &buffer->pos[i];
-
-    /* TODO vertical */
-    pos->x_advance = info->mask;
-    pos->x_offset = info->var1.u32;
-    pos->y_offset = info->var2.u32;
-  }
-
-  if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
-    buffer->reverse ();
-
-  return true;
-}
diff --git a/src/hb-old/COPYING b/src/hb-old/COPYING
deleted file mode 100644 (file)
index f7c0e97..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-HarfBuzz-old was previously licensed under different licenses.  This was
-changed in January 2008.  If you need to relicense your old copies,
-consult the announcement of the license change on the internet.
-Other than that, each copy of HarfBuzz-old is licensed under the COPYING
-file included with it.  The actual license follows:
-
-
-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.
diff --git a/src/hb-old/Makefile.am b/src/hb-old/Makefile.am
deleted file mode 100644 (file)
index 39830a6..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-noinst_LTLIBRARIES = libhb-old.la
-
-MAINSOURCES =  \
-       harfbuzz-buffer.c \
-       harfbuzz-stream.c \
-       harfbuzz-gdef.c \
-       harfbuzz-gpos.c \
-       harfbuzz-gsub.c \
-       harfbuzz-impl.c \
-       harfbuzz-open.c \
-       harfbuzz-shaper.cpp \
-       harfbuzz-greek.c \
-       harfbuzz-tibetan.c \
-       harfbuzz-khmer.c \
-       harfbuzz-indic.cpp \
-       harfbuzz-hebrew.c \
-       harfbuzz-arabic.c \
-       harfbuzz-hangul.c \
-       harfbuzz-myanmar.c
-
-PUBLICHEADERS = \
-       harfbuzz.h \
-       harfbuzz-buffer.h \
-       harfbuzz-gdef.h \
-       harfbuzz-gpos.h \
-       harfbuzz-gsub.h \
-       harfbuzz-open.h \
-       harfbuzz-global.h \
-       harfbuzz-external.h \
-       harfbuzz-shaper.h \
-       harfbuzz-stream.h
-
-PRIVATEHEADERS = \
-       harfbuzz-impl.h \
-       harfbuzz-buffer-private.h \
-       harfbuzz-stream-private.h \
-       harfbuzz-gdef-private.h \
-       harfbuzz-gpos-private.h \
-       harfbuzz-gsub-private.h \
-       harfbuzz-open-private.h \
-       harfbuzz-shaper-private.h
-
-libhb_old_la_SOURCES = \
-       $(MAINSOURCES) \
-       $(PUBLICHEADERS) \
-       $(PRIVATEHEADERS)
-libhb_old_la_CPPFLAGS = \
-       -I$(top_srcdir) \
-       -I$(top_srcdir)/src \
-       -I$(top_builddir)/src
-
-EXTRA_DIST = README COPYING
-
--include $(top_srcdir)/git.mk
diff --git a/src/hb-old/Makefile.in b/src/hb-old/Makefile.in
deleted file mode 100644 (file)
index 01e1a67..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = src/hb-old
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-       COPYING
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libhb_old_la_LIBADD =
-am__objects_1 = libhb_old_la-harfbuzz-buffer.lo \
-       libhb_old_la-harfbuzz-stream.lo libhb_old_la-harfbuzz-gdef.lo \
-       libhb_old_la-harfbuzz-gpos.lo libhb_old_la-harfbuzz-gsub.lo \
-       libhb_old_la-harfbuzz-impl.lo libhb_old_la-harfbuzz-open.lo \
-       libhb_old_la-harfbuzz-shaper.lo libhb_old_la-harfbuzz-greek.lo \
-       libhb_old_la-harfbuzz-tibetan.lo \
-       libhb_old_la-harfbuzz-khmer.lo libhb_old_la-harfbuzz-indic.lo \
-       libhb_old_la-harfbuzz-hebrew.lo \
-       libhb_old_la-harfbuzz-arabic.lo \
-       libhb_old_la-harfbuzz-hangul.lo \
-       libhb_old_la-harfbuzz-myanmar.lo
-am__objects_2 =
-am_libhb_old_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
-       $(am__objects_2)
-libhb_old_la_OBJECTS = $(am_libhb_old_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX   " $@;
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(libhb_old_la_SOURCES)
-DIST_SOURCES = $(libhb_old_la_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CAIRO_CFLAGS = @CAIRO_CFLAGS@
-CAIRO_FT_CFLAGS = @CAIRO_FT_CFLAGS@
-CAIRO_FT_LIBS = @CAIRO_FT_LIBS@
-CAIRO_LIBS = @CAIRO_LIBS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CORETEXT_CFLAGS = @CORETEXT_CFLAGS@
-CORETEXT_LIBS = @CORETEXT_LIBS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_LIBS = @FREETYPE_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
-GOBJECT_LIBS = @GOBJECT_LIBS@
-GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
-GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
-HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
-HB_VERSION = @HB_VERSION@
-HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
-HB_VERSION_MICRO = @HB_VERSION_MICRO@
-HB_VERSION_MINOR = @HB_VERSION_MINOR@
-ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
-ICU_LIBS = @ICU_LIBS@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UNISCRIBE_CFLAGS = @UNISCRIBE_CFLAGS@
-UNISCRIBE_LIBS = @UNISCRIBE_LIBS@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-ax_pthread_config = @ax_pthread_config@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-noinst_LTLIBRARIES = libhb-old.la
-MAINSOURCES = \
-       harfbuzz-buffer.c \
-       harfbuzz-stream.c \
-       harfbuzz-gdef.c \
-       harfbuzz-gpos.c \
-       harfbuzz-gsub.c \
-       harfbuzz-impl.c \
-       harfbuzz-open.c \
-       harfbuzz-shaper.cpp \
-       harfbuzz-greek.c \
-       harfbuzz-tibetan.c \
-       harfbuzz-khmer.c \
-       harfbuzz-indic.cpp \
-       harfbuzz-hebrew.c \
-       harfbuzz-arabic.c \
-       harfbuzz-hangul.c \
-       harfbuzz-myanmar.c
-
-PUBLICHEADERS = \
-       harfbuzz.h \
-       harfbuzz-buffer.h \
-       harfbuzz-gdef.h \
-       harfbuzz-gpos.h \
-       harfbuzz-gsub.h \
-       harfbuzz-open.h \
-       harfbuzz-global.h \
-       harfbuzz-external.h \
-       harfbuzz-shaper.h \
-       harfbuzz-stream.h
-
-PRIVATEHEADERS = \
-       harfbuzz-impl.h \
-       harfbuzz-buffer-private.h \
-       harfbuzz-stream-private.h \
-       harfbuzz-gdef-private.h \
-       harfbuzz-gpos-private.h \
-       harfbuzz-gsub-private.h \
-       harfbuzz-open-private.h \
-       harfbuzz-shaper-private.h
-
-libhb_old_la_SOURCES = \
-       $(MAINSOURCES) \
-       $(PUBLICHEADERS) \
-       $(PRIVATEHEADERS)
-
-libhb_old_la_CPPFLAGS = \
-       -I$(top_srcdir) \
-       -I$(top_srcdir)/src \
-       -I$(top_builddir)/src
-
-EXTRA_DIST = README COPYING
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .cpp .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/hb-old/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnits src/hb-old/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-libhb-old.la: $(libhb_old_la_OBJECTS) $(libhb_old_la_DEPENDENCIES) $(EXTRA_libhb_old_la_DEPENDENCIES) 
-       $(AM_V_CXXLD)$(CXXLINK)  $(libhb_old_la_OBJECTS) $(libhb_old_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-arabic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-buffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-gdef.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-gpos.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-greek.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-gsub.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-hangul.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-impl.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-indic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-khmer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-open.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-shaper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-stream.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libhb_old_la-harfbuzz-buffer.lo: harfbuzz-buffer.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-buffer.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Tpo -c -o libhb_old_la-harfbuzz-buffer.lo `test -f 'harfbuzz-buffer.c' || echo '$(srcdir)/'`harfbuzz-buffer.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-buffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-buffer.c' object='libhb_old_la-harfbuzz-buffer.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-buffer.lo `test -f 'harfbuzz-buffer.c' || echo '$(srcdir)/'`harfbuzz-buffer.c
-
-libhb_old_la-harfbuzz-stream.lo: harfbuzz-stream.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-stream.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-stream.Tpo -c -o libhb_old_la-harfbuzz-stream.lo `test -f 'harfbuzz-stream.c' || echo '$(srcdir)/'`harfbuzz-stream.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-stream.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-stream.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-stream.c' object='libhb_old_la-harfbuzz-stream.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-stream.lo `test -f 'harfbuzz-stream.c' || echo '$(srcdir)/'`harfbuzz-stream.c
-
-libhb_old_la-harfbuzz-gdef.lo: harfbuzz-gdef.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gdef.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Tpo -c -o libhb_old_la-harfbuzz-gdef.lo `test -f 'harfbuzz-gdef.c' || echo '$(srcdir)/'`harfbuzz-gdef.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gdef.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gdef.c' object='libhb_old_la-harfbuzz-gdef.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gdef.lo `test -f 'harfbuzz-gdef.c' || echo '$(srcdir)/'`harfbuzz-gdef.c
-
-libhb_old_la-harfbuzz-gpos.lo: harfbuzz-gpos.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gpos.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Tpo -c -o libhb_old_la-harfbuzz-gpos.lo `test -f 'harfbuzz-gpos.c' || echo '$(srcdir)/'`harfbuzz-gpos.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gpos.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gpos.c' object='libhb_old_la-harfbuzz-gpos.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gpos.lo `test -f 'harfbuzz-gpos.c' || echo '$(srcdir)/'`harfbuzz-gpos.c
-
-libhb_old_la-harfbuzz-gsub.lo: harfbuzz-gsub.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-gsub.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Tpo -c -o libhb_old_la-harfbuzz-gsub.lo `test -f 'harfbuzz-gsub.c' || echo '$(srcdir)/'`harfbuzz-gsub.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-gsub.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-gsub.c' object='libhb_old_la-harfbuzz-gsub.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-gsub.lo `test -f 'harfbuzz-gsub.c' || echo '$(srcdir)/'`harfbuzz-gsub.c
-
-libhb_old_la-harfbuzz-impl.lo: harfbuzz-impl.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-impl.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-impl.Tpo -c -o libhb_old_la-harfbuzz-impl.lo `test -f 'harfbuzz-impl.c' || echo '$(srcdir)/'`harfbuzz-impl.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-impl.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-impl.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-impl.c' object='libhb_old_la-harfbuzz-impl.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-impl.lo `test -f 'harfbuzz-impl.c' || echo '$(srcdir)/'`harfbuzz-impl.c
-
-libhb_old_la-harfbuzz-open.lo: harfbuzz-open.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-open.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-open.Tpo -c -o libhb_old_la-harfbuzz-open.lo `test -f 'harfbuzz-open.c' || echo '$(srcdir)/'`harfbuzz-open.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-open.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-open.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-open.c' object='libhb_old_la-harfbuzz-open.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-open.lo `test -f 'harfbuzz-open.c' || echo '$(srcdir)/'`harfbuzz-open.c
-
-libhb_old_la-harfbuzz-greek.lo: harfbuzz-greek.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-greek.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-greek.Tpo -c -o libhb_old_la-harfbuzz-greek.lo `test -f 'harfbuzz-greek.c' || echo '$(srcdir)/'`harfbuzz-greek.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-greek.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-greek.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-greek.c' object='libhb_old_la-harfbuzz-greek.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-greek.lo `test -f 'harfbuzz-greek.c' || echo '$(srcdir)/'`harfbuzz-greek.c
-
-libhb_old_la-harfbuzz-tibetan.lo: harfbuzz-tibetan.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-tibetan.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Tpo -c -o libhb_old_la-harfbuzz-tibetan.lo `test -f 'harfbuzz-tibetan.c' || echo '$(srcdir)/'`harfbuzz-tibetan.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-tibetan.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-tibetan.c' object='libhb_old_la-harfbuzz-tibetan.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-tibetan.lo `test -f 'harfbuzz-tibetan.c' || echo '$(srcdir)/'`harfbuzz-tibetan.c
-
-libhb_old_la-harfbuzz-khmer.lo: harfbuzz-khmer.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-khmer.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Tpo -c -o libhb_old_la-harfbuzz-khmer.lo `test -f 'harfbuzz-khmer.c' || echo '$(srcdir)/'`harfbuzz-khmer.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-khmer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-khmer.c' object='libhb_old_la-harfbuzz-khmer.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-khmer.lo `test -f 'harfbuzz-khmer.c' || echo '$(srcdir)/'`harfbuzz-khmer.c
-
-libhb_old_la-harfbuzz-hebrew.lo: harfbuzz-hebrew.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-hebrew.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Tpo -c -o libhb_old_la-harfbuzz-hebrew.lo `test -f 'harfbuzz-hebrew.c' || echo '$(srcdir)/'`harfbuzz-hebrew.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-hebrew.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-hebrew.c' object='libhb_old_la-harfbuzz-hebrew.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hebrew.lo `test -f 'harfbuzz-hebrew.c' || echo '$(srcdir)/'`harfbuzz-hebrew.c
-
-libhb_old_la-harfbuzz-arabic.lo: harfbuzz-arabic.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-arabic.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Tpo -c -o libhb_old_la-harfbuzz-arabic.lo `test -f 'harfbuzz-arabic.c' || echo '$(srcdir)/'`harfbuzz-arabic.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-arabic.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-arabic.c' object='libhb_old_la-harfbuzz-arabic.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-arabic.lo `test -f 'harfbuzz-arabic.c' || echo '$(srcdir)/'`harfbuzz-arabic.c
-
-libhb_old_la-harfbuzz-hangul.lo: harfbuzz-hangul.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-hangul.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Tpo -c -o libhb_old_la-harfbuzz-hangul.lo `test -f 'harfbuzz-hangul.c' || echo '$(srcdir)/'`harfbuzz-hangul.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-hangul.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-hangul.c' object='libhb_old_la-harfbuzz-hangul.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-hangul.lo `test -f 'harfbuzz-hangul.c' || echo '$(srcdir)/'`harfbuzz-hangul.c
-
-libhb_old_la-harfbuzz-myanmar.lo: harfbuzz-myanmar.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_old_la-harfbuzz-myanmar.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Tpo -c -o libhb_old_la-harfbuzz-myanmar.lo `test -f 'harfbuzz-myanmar.c' || echo '$(srcdir)/'`harfbuzz-myanmar.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-myanmar.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='harfbuzz-myanmar.c' object='libhb_old_la-harfbuzz-myanmar.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_old_la-harfbuzz-myanmar.lo `test -f 'harfbuzz-myanmar.c' || echo '$(srcdir)/'`harfbuzz-myanmar.c
-
-.cpp.o:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-libhb_old_la-harfbuzz-shaper.lo: harfbuzz-shaper.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_old_la-harfbuzz-shaper.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Tpo -c -o libhb_old_la-harfbuzz-shaper.lo `test -f 'harfbuzz-shaper.cpp' || echo '$(srcdir)/'`harfbuzz-shaper.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-shaper.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='harfbuzz-shaper.cpp' object='libhb_old_la-harfbuzz-shaper.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-shaper.lo `test -f 'harfbuzz-shaper.cpp' || echo '$(srcdir)/'`harfbuzz-shaper.cpp
-
-libhb_old_la-harfbuzz-indic.lo: harfbuzz-indic.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhb_old_la-harfbuzz-indic.lo -MD -MP -MF $(DEPDIR)/libhb_old_la-harfbuzz-indic.Tpo -c -o libhb_old_la-harfbuzz-indic.lo `test -f 'harfbuzz-indic.cpp' || echo '$(srcdir)/'`harfbuzz-indic.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_old_la-harfbuzz-indic.Tpo $(DEPDIR)/libhb_old_la-harfbuzz-indic.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='harfbuzz-indic.cpp' object='libhb_old_la-harfbuzz-indic.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_old_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhb_old_la-harfbuzz-indic.lo `test -f 'harfbuzz-indic.cpp' || echo '$(srcdir)/'`harfbuzz-indic.cpp
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       set x; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
--include $(top_srcdir)/git.mk
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/hb-old/README b/src/hb-old/README
deleted file mode 100644 (file)
index a29344a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This is HarfBuzz-old, an OpenType Layout engine library.
-
-To report bugs or post to discussion mailing list, see:
-
-       http://freedesktop.org/wiki/Software/HarfBuzz
-
-For license information, see the file COPYING.
diff --git a/src/hb-old/harfbuzz-arabic.c b/src/hb-old/harfbuzz-arabic.c
deleted file mode 100644 (file)
index 51f839a..0000000
+++ /dev/null
@@ -1,1150 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-
-static const HB_UChar16 ReplacementCharacter = 0xfffd;
-
-typedef struct {
-    unsigned char shape;
-    unsigned char justification;
-} HB_ArabicProperties;
-
-typedef enum {
-    XIsolated,
-    XFinal,
-    XInitial,
-    XMedial,
-    /* intermediate state */
-    XCausing
-} ArabicShape;
-
-/*
-// these groups correspond to the groups defined in the Unicode standard.
-// Some of these groups are equal with regards to both joining and line breaking behaviour,
-// and thus have the same enum value
-//
-// I'm not sure the mapping of syriac to arabic enums is correct with regards to justification, but as
-// I couldn't find any better document I'll hope for the best.
-*/
-typedef enum {
-    /* NonJoining */
-    ArabicNone,
-    ArabicSpace,
-    /* Transparent */
-    Transparent,
-    /* Causing */
-    Center,
-    Kashida,
-
-    /* Arabic */
-    /* Dual */
-    Beh,
-    Noon,
-    Meem = Noon,
-    Heh = Noon,
-    KnottedHeh = Noon,
-    HehGoal = Noon,
-    SwashKaf = Noon,
-    Yeh,
-    Hah,
-    Seen,
-    Sad = Seen,
-    Tah,
-    Kaf = Tah,
-    Gaf = Tah,
-    Lam = Tah,
-    Ain,
-    Feh = Ain,
-    Qaf = Ain,
-    /* Right */
-    Alef,
-    Waw,
-    Dal,
-    TehMarbuta = Dal,
-    Reh,
-    HamzaOnHehGoal,
-    YehWithTail = HamzaOnHehGoal,
-    YehBarre = HamzaOnHehGoal,
-
-    /* Syriac */
-    /* Dual */
-    Beth = Beh,
-    Gamal = Ain,
-    Heth = Noon,
-    Teth = Hah,
-    Yudh = Noon,
-    Kaph = Noon,
-    Lamadh = Lam,
-    Mim = Noon,
-    Nun = Noon,
-    Semakh = Noon,
-    FinalSemakh = Noon,
-    SyriacE = Ain,
-    Pe = Ain,
-    ReversedPe = Hah,
-    Qaph = Noon,
-    Shin = Noon,
-    Fe = Ain,
-
-    /* Right */
-    Alaph = Alef,
-    Dalath = Dal,
-    He = Dal,
-    SyriacWaw = Waw,
-    Zain = Alef,
-    YudhHe = Waw,
-    Sadhe = HamzaOnHehGoal,
-    Taw = Dal,
-
-    /* Compiler bug? Otherwise ArabicGroupsEnd would be equal to Dal + 1. */
-    Dummy = HamzaOnHehGoal,
-    ArabicGroupsEnd
-} ArabicGroup;
-
-static const unsigned char arabic_group[0x150] = {
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-
-    ArabicNone, ArabicNone, Alef, Alef,
-    Waw, Alef, Yeh, Alef,
-    Beh, TehMarbuta, Beh, Beh,
-    Hah, Hah, Hah, Dal,
-
-    Dal, Reh, Reh, Seen,
-    Seen, Sad, Sad, Tah,
-    Tah, Ain, Ain, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-
-    /* 0x640 */
-    Kashida, Feh, Qaf, Kaf,
-    Lam, Meem, Noon, Heh,
-    Waw, Yeh, Yeh, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, Beh, Qaf,
-
-    Transparent, Alef, Alef, Alef,
-    ArabicNone, Alef, Waw, Waw,
-    Yeh, Beh, Beh, Beh,
-    Beh, Beh, Beh, Beh,
-
-    /* 0x680 */
-    Beh, Hah, Hah, Hah,
-    Hah, Hah, Hah, Hah,
-    Dal, Dal, Dal, Dal,
-    Dal, Dal, Dal, Dal,
-
-    Dal, Reh, Reh, Reh,
-    Reh, Reh, Reh, Reh,
-    Reh, Reh, Seen, Seen,
-    Seen, Sad, Sad, Tah,
-
-    Ain, Feh, Feh, Feh,
-    Feh, Feh, Feh, Qaf,
-    Qaf, Gaf, SwashKaf, Gaf,
-    Kaf, Kaf, Kaf, Gaf,
-
-    Gaf, Gaf, Gaf, Gaf,
-    Gaf, Lam, Lam, Lam,
-    Lam, Noon, Noon, Noon,
-    Noon, Noon, KnottedHeh, Hah,
-
-    /* 0x6c0 */
-    TehMarbuta, HehGoal, HamzaOnHehGoal, HamzaOnHehGoal,
-    Waw, Waw, Waw, Waw,
-    Waw, Waw, Waw, Waw,
-    Yeh, YehWithTail, Yeh, Waw,
-
-    Yeh, Yeh, YehBarre, YehBarre,
-    ArabicNone, TehMarbuta, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, ArabicNone, ArabicNone, Transparent,
-
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, ArabicNone, ArabicNone, Transparent,
-    Transparent, ArabicNone, Transparent, Transparent,
-    Transparent, Transparent, Dal, Reh,
-
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, Seen, Sad,
-    Ain, ArabicNone, ArabicNone, KnottedHeh,
-
-    /* 0x700 */
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-    ArabicNone, ArabicNone, ArabicNone, ArabicNone,
-
-    Alaph, Transparent, Beth, Gamal,
-    Gamal, Dalath, Dalath, He,
-    SyriacWaw, Zain, Heth, Teth,
-    Teth, Yudh, YudhHe, Kaph,
-
-    Lamadh, Mim, Nun, Semakh,
-    FinalSemakh, SyriacE, Pe, ReversedPe,
-    Sadhe, Qaph, Dalath, Shin,
-    Taw, Beth, Gamal, Dalath,
-
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, Transparent,
-    Transparent, Transparent, Transparent, ArabicNone,
-    ArabicNone, Zain, Kaph, Fe,
-};
-
-static ArabicGroup arabicGroup(unsigned short uc)
-{
-    if (uc >= 0x0600 && uc < 0x750)
-        return (ArabicGroup) arabic_group[uc-0x600];
-    else if (uc == 0x200d)
-        return Center;
-    else if (HB_GetUnicodeCharCategory(uc) == HB_Separator_Space)
-        return ArabicSpace;
-    else
-        return ArabicNone;
-}
-
-
-/*
-   Arabic shaping obeys a number of rules according to the joining classes (see Unicode book, section on
-   arabic).
-
-   Each unicode char has a joining class (right, dual (left&right), center (joincausing) or transparent).
-   transparent joining is not encoded in HB_UChar16::joining(), but applies to all combining marks and format marks.
-
-   Right join-causing: dual + center
-   Left join-causing: dual + right + center
-
-   Rules are as follows (for a string already in visual order, as we have it here):
-
-   R1 Transparent characters do not affect joining behaviour.
-   R2 A right joining character, that has a right join-causing char on the right will get form XRight
-   (R3 A left joining character, that has a left join-causing char on the left will get form XLeft)
-   Note: the above rule is meaningless, as there are no pure left joining characters defined in Unicode
-   R4 A dual joining character, that has a left join-causing char on the left and a right join-causing char on
-             the right will get form XMedial
-   R5  A dual joining character, that has a right join causing char on the right, and no left join causing char on the left
-         will get form XRight
-   R6 A dual joining character, that has a  left join causing char on the left, and no right join causing char on the right
-         will get form XLeft
-   R7 Otherwise the character will get form XIsolated
-
-   Additionally we have to do the minimal ligature support for lam-alef ligatures:
-
-   L1 Transparent characters do not affect ligature behaviour.
-   L2 Any sequence of Alef(XRight) + Lam(XMedial) will form the ligature Alef.Lam(XLeft)
-   L3 Any sequence of Alef(XRight) + Lam(XLeft) will form the ligature Alef.Lam(XIsolated)
-
-   The state table below handles rules R1-R7.
-*/
-
-typedef enum {
-    JNone,
-    JCausing,
-    JDual,
-    JRight,
-    JTransparent
-} Joining;
-
-static const Joining joining_for_group[ArabicGroupsEnd] = {
-    /* NonJoining */
-    JNone, /* ArabicNone */
-    JNone, /* ArabicSpace */
-    /* Transparent */
-    JTransparent, /* Transparent */
-    /* Causing */
-    JCausing, /* Center */
-    JCausing, /* Kashida */
-    /* Dual */
-    JDual, /* Beh */
-    JDual, /* Noon */
-    JDual, /* Yeh */
-    JDual, /* Hah */
-    JDual, /* Seen */
-    JDual, /* Tah */
-    JDual, /* Ain */
-    /* Right */
-    JRight, /* Alef */
-    JRight, /* Waw */
-    JRight, /* Dal */
-    JRight, /* Reh */
-    JRight  /* HamzaOnHehGoal */
-};
-
-
-typedef struct {
-    ArabicShape form1;
-    ArabicShape form2;
-} JoiningPair;
-
-static const JoiningPair joining_table[5][4] =
-/* None, Causing, Dual, Right */
-{
-    { { XIsolated, XIsolated }, { XIsolated, XCausing }, { XIsolated, XInitial }, { XIsolated, XIsolated } }, /* XIsolated */
-    { { XFinal, XIsolated }, { XFinal, XCausing }, { XFinal, XInitial }, { XFinal, XIsolated } }, /* XFinal */
-    { { XIsolated, XIsolated }, { XInitial, XCausing }, { XInitial, XMedial }, { XInitial, XFinal } }, /* XInitial */
-    { { XFinal, XIsolated }, { XMedial, XCausing }, { XMedial, XMedial }, { XMedial, XFinal } }, /* XMedial */
-    { { XIsolated, XIsolated }, { XIsolated, XCausing }, { XIsolated, XMedial }, { XIsolated, XFinal } }, /* XCausing */
-};
-
-
-/*
-According to http://www.microsoft.com/middleeast/Arabicdev/IE6/KBase.asp
-
-1. Find the priority of the connecting opportunities in each word
-2. Add expansion at the highest priority connection opportunity
-3. If more than one connection opportunity have the same highest value,
-   use the opportunity closest to the end of the word.
-
-Following is a chart that provides the priority for connection
-opportunities and where expansion occurs. The character group names
-are those in table 6.6 of the UNICODE 2.0 book.
-
-
-PrioritY        Glyph                   Condition                                       Kashida Location
-
-Arabic_Kashida        User inserted Kashida   The user entered a Kashida in a position.       After the user
-                (Shift+j or Shift+[E with hat])    Thus, it is the highest priority to insert an   inserted kashida
-                                        automatic kashida.
-
-Arabic_Seen        Seen, Sad               Connecting to the next character.               After the character.
-                                        (Initial or medial form).
-
-Arabic_HaaDal        Teh Marbutah, Haa, Dal  Connecting to previous character.               Before the final form
-                                                                                        of these characters.
-
-Arabic_Alef     Alef, Tah, Lam,         Connecting to previous character.               Before the final form
-                Kaf and Gaf                                                             of these characters.
-
-Arabic_BaRa     Reh, Yeh                Connected to medial Beh                         Before preceding medial Baa
-
-Arabic_Waw        Waw, Ain, Qaf, Feh      Connecting to previous character.               Before the final form of
-                                                                                        these characters.
-
-Arabic_Normal   Other connecting        Connecting to previous character.               Before the final form
-                characters                                                              of these characters.
-
-
-
-This seems to imply that we have at most one kashida point per arabic word.
-
-*/
-
-static void getArabicProperties(const unsigned short *chars, int len, HB_ArabicProperties *properties)
-{
-/*     qDebug("arabicSyriacOpenTypeShape: properties:"); */
-    int lastPos = 0;
-    int lastGroup = ArabicNone;
-    int i = 0;
-
-    ArabicGroup group = arabicGroup(chars[0]);
-    Joining j = joining_for_group[group];
-    ArabicShape shape = joining_table[XIsolated][j].form2;
-    properties[0].justification = HB_NoJustification;
-
-    for (i = 1; i < len; ++i) {
-        /* #### fix handling for spaces and punktuation */
-        properties[i].justification = HB_NoJustification;
-
-        group = arabicGroup(chars[i]);
-        j = joining_for_group[group];
-
-        if (j == JTransparent) {
-            properties[i].shape = XIsolated;
-            continue;
-        }
-
-        properties[lastPos].shape = joining_table[shape][j].form1;
-        shape = joining_table[shape][j].form2;
-
-        switch(lastGroup) {
-        case Seen:
-            if (properties[lastPos].shape == XInitial || properties[lastPos].shape == XMedial)
-                properties[i-1].justification = HB_Arabic_Seen;
-            break;
-        case Hah:
-            if (properties[lastPos].shape == XFinal)
-                properties[lastPos-1].justification = HB_Arabic_HaaDal;
-            break;
-        case Alef:
-            if (properties[lastPos].shape == XFinal)
-                properties[lastPos-1].justification = HB_Arabic_Alef;
-            break;
-        case Ain:
-            if (properties[lastPos].shape == XFinal)
-                properties[lastPos-1].justification = HB_Arabic_Waw;
-            break;
-        case Noon:
-            if (properties[lastPos].shape == XFinal)
-                properties[lastPos-1].justification = HB_Arabic_Normal;
-            break;
-        case ArabicNone:
-            break;
-
-        default:
-            assert(FALSE);
-        }
-
-        lastGroup = ArabicNone;
-
-        switch(group) {
-        case ArabicNone:
-        case Transparent:
-        /* ### Center should probably be treated as transparent when it comes to justification. */
-        case Center:
-            break;
-        case ArabicSpace:
-            properties[i].justification = HB_Arabic_Space;
-            break;
-        case Kashida:
-            properties[i].justification = HB_Arabic_Kashida;
-            break;
-        case Seen:
-            lastGroup = Seen;
-            break;
-
-        case Hah:
-        case Dal:
-            lastGroup = Hah;
-            break;
-
-        case Alef:
-        case Tah:
-            lastGroup = Alef;
-            break;
-
-        case Yeh:
-        case Reh:
-            if (properties[lastPos].shape == XMedial && arabicGroup(chars[lastPos]) == Beh)
-                properties[lastPos-1].justification = HB_Arabic_BaRa;
-            break;
-
-        case Ain:
-        case Waw:
-            lastGroup = Ain;
-            break;
-
-        case Noon:
-        case Beh:
-        case HamzaOnHehGoal:
-            lastGroup = Noon;
-            break;
-        case ArabicGroupsEnd:
-            assert(FALSE);
-        }
-
-        lastPos = i;
-    }
-    properties[lastPos].shape = joining_table[shape][JNone].form1;
-
-
-    /*
-     for (int i = 0; i < len; ++i)
-         qDebug("arabic properties(%d): uc=%x shape=%d, justification=%d", i, chars[i], properties[i].shape, properties[i].justification);
-    */
-}
-
-static Joining getNkoJoining(unsigned short uc)
-{
-    if (uc < 0x7ca)
-        return JNone;
-    if (uc <= 0x7ea)
-        return JDual;
-    if (uc <= 0x7f3)
-        return JTransparent;
-    if (uc <= 0x7f9)
-        return JNone;
-    if (uc == 0x7fa)
-        return JCausing;
-    return JNone;
-}
-
-static void getNkoProperties(const unsigned short *chars, int len, HB_ArabicProperties *properties)
-{
-    int lastPos = 0;
-    int i = 0;
-
-    Joining j = getNkoJoining(chars[0]);
-    ArabicShape shape = joining_table[XIsolated][j].form2;
-    properties[0].justification = HB_NoJustification;
-
-    for (i = 1; i < len; ++i) {
-        properties[i].justification = (HB_GetUnicodeCharCategory(chars[i]) == HB_Separator_Space) ?
-                                      ArabicSpace : ArabicNone;
-
-        j = getNkoJoining(chars[i]);
-
-        if (j == JTransparent) {
-            properties[i].shape = XIsolated;
-            continue;
-        }
-
-        properties[lastPos].shape = joining_table[shape][j].form1;
-        shape = joining_table[shape][j].form2;
-
-
-        lastPos = i;
-    }
-    properties[lastPos].shape = joining_table[shape][JNone].form1;
-
-
-    /*
-     for (int i = 0; i < len; ++i)
-         qDebug("nko properties(%d): uc=%x shape=%d, justification=%d", i, chars[i], properties[i].shape, properties[i].justification);
-    */
-}
-
-/*
-// The unicode to unicode shaping codec.
-// does only presentation forms B at the moment, but that should be enough for
-// simple display
-*/
-static const hb_uint16 arabicUnicodeMapping[256][2] = {
-    /* base of shaped forms, and number-1 of them (0 for non shaping,
-       1 for right binding and 3 for dual binding */
-
-    /* These are just the glyphs available in Unicode,
-       some characters are in R class, but have no glyphs in Unicode. */
-
-    { 0x0600, 0 }, /* 0x0600 */
-    { 0x0601, 0 }, /* 0x0601 */
-    { 0x0602, 0 }, /* 0x0602 */
-    { 0x0603, 0 }, /* 0x0603 */
-    { 0x0604, 0 }, /* 0x0604 */
-    { 0x0605, 0 }, /* 0x0605 */
-    { 0x0606, 0 }, /* 0x0606 */
-    { 0x0607, 0 }, /* 0x0607 */
-    { 0x0608, 0 }, /* 0x0608 */
-    { 0x0609, 0 }, /* 0x0609 */
-    { 0x060A, 0 }, /* 0x060A */
-    { 0x060B, 0 }, /* 0x060B */
-    { 0x060C, 0 }, /* 0x060C */
-    { 0x060D, 0 }, /* 0x060D */
-    { 0x060E, 0 }, /* 0x060E */
-    { 0x060F, 0 }, /* 0x060F */
-
-    { 0x0610, 0 }, /* 0x0610 */
-    { 0x0611, 0 }, /* 0x0611 */
-    { 0x0612, 0 }, /* 0x0612 */
-    { 0x0613, 0 }, /* 0x0613 */
-    { 0x0614, 0 }, /* 0x0614 */
-    { 0x0615, 0 }, /* 0x0615 */
-    { 0x0616, 0 }, /* 0x0616 */
-    { 0x0617, 0 }, /* 0x0617 */
-    { 0x0618, 0 }, /* 0x0618 */
-    { 0x0619, 0 }, /* 0x0619 */
-    { 0x061A, 0 }, /* 0x061A */
-    { 0x061B, 0 }, /* 0x061B */
-    { 0x061C, 0 }, /* 0x061C */
-    { 0x061D, 0 }, /* 0x061D */
-    { 0x061E, 0 }, /* 0x061E */
-    { 0x061F, 0 }, /* 0x061F */
-
-    { 0x0620, 0 }, /* 0x0620 */
-    { 0xFE80, 0 }, /* 0x0621            HAMZA */
-    { 0xFE81, 1 }, /* 0x0622    R       ALEF WITH MADDA ABOVE */
-    { 0xFE83, 1 }, /* 0x0623    R       ALEF WITH HAMZA ABOVE */
-    { 0xFE85, 1 }, /* 0x0624    R       WAW WITH HAMZA ABOVE */
-    { 0xFE87, 1 }, /* 0x0625    R       ALEF WITH HAMZA BELOW */
-    { 0xFE89, 3 }, /* 0x0626    D       YEH WITH HAMZA ABOVE */
-    { 0xFE8D, 1 }, /* 0x0627    R       ALEF */
-    { 0xFE8F, 3 }, /* 0x0628    D       BEH */
-    { 0xFE93, 1 }, /* 0x0629    R       TEH MARBUTA */
-    { 0xFE95, 3 }, /* 0x062A    D       TEH */
-    { 0xFE99, 3 }, /* 0x062B    D       THEH */
-    { 0xFE9D, 3 }, /* 0x062C    D       JEEM */
-    { 0xFEA1, 3 }, /* 0x062D    D       HAH */
-    { 0xFEA5, 3 }, /* 0x062E    D       KHAH */
-    { 0xFEA9, 1 }, /* 0x062F    R       DAL */
-
-    { 0xFEAB, 1 }, /* 0x0630    R       THAL */
-    { 0xFEAD, 1 }, /* 0x0631    R       REH */
-    { 0xFEAF, 1 }, /* 0x0632    R       ZAIN */
-    { 0xFEB1, 3 }, /* 0x0633    D       SEEN */
-    { 0xFEB5, 3 }, /* 0x0634    D       SHEEN */
-    { 0xFEB9, 3 }, /* 0x0635    D       SAD */
-    { 0xFEBD, 3 }, /* 0x0636    D       DAD */
-    { 0xFEC1, 3 }, /* 0x0637    D       TAH */
-    { 0xFEC5, 3 }, /* 0x0638    D       ZAH */
-    { 0xFEC9, 3 }, /* 0x0639    D       AIN */
-    { 0xFECD, 3 }, /* 0x063A    D       GHAIN */
-    { 0x063B, 0 }, /* 0x063B */
-    { 0x063C, 0 }, /* 0x063C */
-    { 0x063D, 0 }, /* 0x063D */
-    { 0x063E, 0 }, /* 0x063E */
-    { 0x063F, 0 }, /* 0x063F */
-
-    { 0x0640, 0 }, /* 0x0640    C       TATWEEL // ### Join Causing, only one glyph */
-    { 0xFED1, 3 }, /* 0x0641    D       FEH */
-    { 0xFED5, 3 }, /* 0x0642    D       QAF */
-    { 0xFED9, 3 }, /* 0x0643    D       KAF */
-    { 0xFEDD, 3 }, /* 0x0644    D       LAM */
-    { 0xFEE1, 3 }, /* 0x0645    D       MEEM */
-    { 0xFEE5, 3 }, /* 0x0646    D       NOON */
-    { 0xFEE9, 3 }, /* 0x0647    D       HEH */
-    { 0xFEED, 1 }, /* 0x0648    R       WAW */
-    { 0x0649, 3 }, /* 0x0649            ALEF MAKSURA // ### Dual, glyphs not consecutive, handle in code. */
-    { 0xFEF1, 3 }, /* 0x064A    D       YEH */
-    { 0x064B, 0 }, /* 0x064B */
-    { 0x064C, 0 }, /* 0x064C */
-    { 0x064D, 0 }, /* 0x064D */
-    { 0x064E, 0 }, /* 0x064E */
-    { 0x064F, 0 }, /* 0x064F */
-
-    { 0x0650, 0 }, /* 0x0650 */
-    { 0x0651, 0 }, /* 0x0651 */
-    { 0x0652, 0 }, /* 0x0652 */
-    { 0x0653, 0 }, /* 0x0653 */
-    { 0x0654, 0 }, /* 0x0654 */
-    { 0x0655, 0 }, /* 0x0655 */
-    { 0x0656, 0 }, /* 0x0656 */
-    { 0x0657, 0 }, /* 0x0657 */
-    { 0x0658, 0 }, /* 0x0658 */
-    { 0x0659, 0 }, /* 0x0659 */
-    { 0x065A, 0 }, /* 0x065A */
-    { 0x065B, 0 }, /* 0x065B */
-    { 0x065C, 0 }, /* 0x065C */
-    { 0x065D, 0 }, /* 0x065D */
-    { 0x065E, 0 }, /* 0x065E */
-    { 0x065F, 0 }, /* 0x065F */
-
-    { 0x0660, 0 }, /* 0x0660 */
-    { 0x0661, 0 }, /* 0x0661 */
-    { 0x0662, 0 }, /* 0x0662 */
-    { 0x0663, 0 }, /* 0x0663 */
-    { 0x0664, 0 }, /* 0x0664 */
-    { 0x0665, 0 }, /* 0x0665 */
-    { 0x0666, 0 }, /* 0x0666 */
-    { 0x0667, 0 }, /* 0x0667 */
-    { 0x0668, 0 }, /* 0x0668 */
-    { 0x0669, 0 }, /* 0x0669 */
-    { 0x066A, 0 }, /* 0x066A */
-    { 0x066B, 0 }, /* 0x066B */
-    { 0x066C, 0 }, /* 0x066C */
-    { 0x066D, 0 }, /* 0x066D */
-    { 0x066E, 0 }, /* 0x066E */
-    { 0x066F, 0 }, /* 0x066F */
-
-    { 0x0670, 0 }, /* 0x0670 */
-    { 0xFB50, 1 }, /* 0x0671    R       ALEF WASLA */
-    { 0x0672, 0 }, /* 0x0672 */
-    { 0x0673, 0 }, /* 0x0673 */
-    { 0x0674, 0 }, /* 0x0674 */
-    { 0x0675, 0 }, /* 0x0675 */
-    { 0x0676, 0 }, /* 0x0676 */
-    { 0x0677, 0 }, /* 0x0677 */
-    { 0x0678, 0 }, /* 0x0678 */
-    { 0xFB66, 3 }, /* 0x0679    D       TTEH */
-    { 0xFB5E, 3 }, /* 0x067A    D       TTEHEH */
-    { 0xFB52, 3 }, /* 0x067B    D       BEEH */
-    { 0x067C, 0 }, /* 0x067C */
-    { 0x067D, 0 }, /* 0x067D */
-    { 0xFB56, 3 }, /* 0x067E    D       PEH */
-    { 0xFB62, 3 }, /* 0x067F    D       TEHEH */
-
-    { 0xFB5A, 3 }, /* 0x0680    D       BEHEH */
-    { 0x0681, 0 }, /* 0x0681 */
-    { 0x0682, 0 }, /* 0x0682 */
-    { 0xFB76, 3 }, /* 0x0683    D       NYEH */
-    { 0xFB72, 3 }, /* 0x0684    D       DYEH */
-    { 0x0685, 0 }, /* 0x0685 */
-    { 0xFB7A, 3 }, /* 0x0686    D       TCHEH */
-    { 0xFB7E, 3 }, /* 0x0687    D       TCHEHEH */
-    { 0xFB88, 1 }, /* 0x0688    R       DDAL */
-    { 0x0689, 0 }, /* 0x0689 */
-    { 0x068A, 0 }, /* 0x068A */
-    { 0x068B, 0 }, /* 0x068B */
-    { 0xFB84, 1 }, /* 0x068C    R       DAHAL */
-    { 0xFB82, 1 }, /* 0x068D    R       DDAHAL */
-    { 0xFB86, 1 }, /* 0x068E    R       DUL */
-    { 0x068F, 0 }, /* 0x068F */
-
-    { 0x0690, 0 }, /* 0x0690 */
-    { 0xFB8C, 1 }, /* 0x0691    R       RREH */
-    { 0x0692, 0 }, /* 0x0692 */
-    { 0x0693, 0 }, /* 0x0693 */
-    { 0x0694, 0 }, /* 0x0694 */
-    { 0x0695, 0 }, /* 0x0695 */
-    { 0x0696, 0 }, /* 0x0696 */
-    { 0x0697, 0 }, /* 0x0697 */
-    { 0xFB8A, 1 }, /* 0x0698    R       JEH */
-    { 0x0699, 0 }, /* 0x0699 */
-    { 0x069A, 0 }, /* 0x069A */
-    { 0x069B, 0 }, /* 0x069B */
-    { 0x069C, 0 }, /* 0x069C */
-    { 0x069D, 0 }, /* 0x069D */
-    { 0x069E, 0 }, /* 0x069E */
-    { 0x069F, 0 }, /* 0x069F */
-
-    { 0x06A0, 0 }, /* 0x06A0 */
-    { 0x06A1, 0 }, /* 0x06A1 */
-    { 0x06A2, 0 }, /* 0x06A2 */
-    { 0x06A3, 0 }, /* 0x06A3 */
-    { 0xFB6A, 3 }, /* 0x06A4    D       VEH */
-    { 0x06A5, 0 }, /* 0x06A5 */
-    { 0xFB6E, 3 }, /* 0x06A6    D       PEHEH */
-    { 0x06A7, 0 }, /* 0x06A7 */
-    { 0x06A8, 0 }, /* 0x06A8 */
-    { 0xFB8E, 3 }, /* 0x06A9    D       KEHEH */
-    { 0x06AA, 0 }, /* 0x06AA */
-    { 0x06AB, 0 }, /* 0x06AB */
-    { 0x06AC, 0 }, /* 0x06AC */
-    { 0xFBD3, 3 }, /* 0x06AD    D       NG */
-    { 0x06AE, 0 }, /* 0x06AE */
-    { 0xFB92, 3 }, /* 0x06AF    D       GAF */
-
-    { 0x06B0, 0 }, /* 0x06B0 */
-    { 0xFB9A, 3 }, /* 0x06B1    D       NGOEH */
-    { 0x06B2, 0 }, /* 0x06B2 */
-    { 0xFB96, 3 }, /* 0x06B3    D       GUEH */
-    { 0x06B4, 0 }, /* 0x06B4 */
-    { 0x06B5, 0 }, /* 0x06B5 */
-    { 0x06B6, 0 }, /* 0x06B6 */
-    { 0x06B7, 0 }, /* 0x06B7 */
-    { 0x06B8, 0 }, /* 0x06B8 */
-    { 0x06B9, 0 }, /* 0x06B9 */
-    { 0xFB9E, 1 }, /* 0x06BA    R       NOON GHUNNA */
-    { 0xFBA0, 3 }, /* 0x06BB    D       RNOON */
-    { 0x06BC, 0 }, /* 0x06BC */
-    { 0x06BD, 0 }, /* 0x06BD */
-    { 0xFBAA, 3 }, /* 0x06BE    D       HEH DOACHASHMEE */
-    { 0x06BF, 0 }, /* 0x06BF */
-
-    { 0xFBA4, 1 }, /* 0x06C0    R       HEH WITH YEH ABOVE */
-    { 0xFBA6, 3 }, /* 0x06C1    D       HEH GOAL */
-    { 0x06C2, 0 }, /* 0x06C2 */
-    { 0x06C3, 0 }, /* 0x06C3 */
-    { 0x06C4, 0 }, /* 0x06C4 */
-    { 0xFBE0, 1 }, /* 0x06C5    R       KIRGHIZ OE */
-    { 0xFBD9, 1 }, /* 0x06C6    R       OE */
-    { 0xFBD7, 1 }, /* 0x06C7    R       U */
-    { 0xFBDB, 1 }, /* 0x06C8    R       YU */
-    { 0xFBE2, 1 }, /* 0x06C9    R       KIRGHIZ YU */
-    { 0x06CA, 0 }, /* 0x06CA */
-    { 0xFBDE, 1 }, /* 0x06CB    R       VE */
-    { 0xFBFC, 3 }, /* 0x06CC    D       FARSI YEH */
-    { 0x06CD, 0 }, /* 0x06CD */
-    { 0x06CE, 0 }, /* 0x06CE */
-    { 0x06CF, 0 }, /* 0x06CF */
-
-    { 0xFBE4, 3 }, /* 0x06D0    D       E */
-    { 0x06D1, 0 }, /* 0x06D1 */
-    { 0xFBAE, 1 }, /* 0x06D2    R       YEH BARREE */
-    { 0xFBB0, 1 }, /* 0x06D3    R       YEH BARREE WITH HAMZA ABOVE */
-    { 0x06D4, 0 }, /* 0x06D4 */
-    { 0x06D5, 0 }, /* 0x06D5 */
-    { 0x06D6, 0 }, /* 0x06D6 */
-    { 0x06D7, 0 }, /* 0x06D7 */
-    { 0x06D8, 0 }, /* 0x06D8 */
-    { 0x06D9, 0 }, /* 0x06D9 */
-    { 0x06DA, 0 }, /* 0x06DA */
-    { 0x06DB, 0 }, /* 0x06DB */
-    { 0x06DC, 0 }, /* 0x06DC */
-    { 0x06DD, 0 }, /* 0x06DD */
-    { 0x06DE, 0 }, /* 0x06DE */
-    { 0x06DF, 0 }, /* 0x06DF */
-
-    { 0x06E0, 0 }, /* 0x06E0 */
-    { 0x06E1, 0 }, /* 0x06E1 */
-    { 0x06E2, 0 }, /* 0x06E2 */
-    { 0x06E3, 0 }, /* 0x06E3 */
-    { 0x06E4, 0 }, /* 0x06E4 */
-    { 0x06E5, 0 }, /* 0x06E5 */
-    { 0x06E6, 0 }, /* 0x06E6 */
-    { 0x06E7, 0 }, /* 0x06E7 */
-    { 0x06E8, 0 }, /* 0x06E8 */
-    { 0x06E9, 0 }, /* 0x06E9 */
-    { 0x06EA, 0 }, /* 0x06EA */
-    { 0x06EB, 0 }, /* 0x06EB */
-    { 0x06EC, 0 }, /* 0x06EC */
-    { 0x06ED, 0 }, /* 0x06ED */
-    { 0x06EE, 0 }, /* 0x06EE */
-    { 0x06EF, 0 }, /* 0x06EF */
-
-    { 0x06F0, 0 }, /* 0x06F0 */
-    { 0x06F1, 0 }, /* 0x06F1 */
-    { 0x06F2, 0 }, /* 0x06F2 */
-    { 0x06F3, 0 }, /* 0x06F3 */
-    { 0x06F4, 0 }, /* 0x06F4 */
-    { 0x06F5, 0 }, /* 0x06F5 */
-    { 0x06F6, 0 }, /* 0x06F6 */
-    { 0x06F7, 0 }, /* 0x06F7 */
-    { 0x06F8, 0 }, /* 0x06F8 */
-    { 0x06F9, 0 }, /* 0x06F9 */
-    { 0x06FA, 0 }, /* 0x06FA */
-    { 0x06FB, 0 }, /* 0x06FB */
-    { 0x06FC, 0 }, /* 0x06FC */
-    { 0x06FD, 0 }, /* 0x06FD */
-    { 0x06FE, 0 }, /* 0x06FE */
-    { 0x06FF, 0 }  /* 0x06FF */
-};
-
-/* the arabicUnicodeMapping does not work for U+0649 ALEF MAKSURA, this table does */
-static const hb_uint16 alefMaksura[4] = {0xFEEF, 0xFEF0, 0xFBE8, 0xFBE9};
-
-/*
-// this is a bit tricky. Alef always binds to the right, so the second parameter descibing the shape
-// of the lam can be either initial of medial. So initial maps to the isolated form of the ligature,
-// medial to the final form
-*/
-static const hb_uint16 arabicUnicodeLamAlefMapping[6][4] = {
-    { 0xfffd, 0xfffd, 0xfef5, 0xfef6 }, /* 0x622        R       Alef with Madda above */
-    { 0xfffd, 0xfffd, 0xfef7, 0xfef8 }, /* 0x623        R       Alef with Hamza above */
-    { 0xfffd, 0xfffd, 0xfffd, 0xfffd }, /* 0x624        // Just to fill the table ;-) */
-    { 0xfffd, 0xfffd, 0xfef9, 0xfefa }, /* 0x625        R       Alef with Hamza below */
-    { 0xfffd, 0xfffd, 0xfffd, 0xfffd }, /* 0x626        // Just to fill the table ;-) */
-    { 0xfffd, 0xfffd, 0xfefb, 0xfefc }  /* 0x627        R       Alef */
-};
-
-static int getShape(hb_uint8 cell, int shape)
-{
-    /* the arabicUnicodeMapping does not work for U+0649 ALEF MAKSURA, handle this here */
-    int ch = (cell != 0x49)
-              ? (shape ? arabicUnicodeMapping[cell][0] + shape : 0x600+cell)
-              : alefMaksura[shape] ;
-    return ch;
-}
-
-
-/*
-  Two small helper functions for arabic shaping.
-*/
-static HB_UChar16 prevChar(const HB_UChar16 *str, int pos)
-{
-    /*qDebug("leftChar: pos=%d", pos); */
-    const HB_UChar16 *ch = str + pos - 1;
-    pos--;
-    while(pos > -1) {
-        if(HB_GetUnicodeCharCategory(*ch) != HB_Mark_NonSpacing)
-            return *ch;
-        pos--;
-        ch--;
-    }
-    return ReplacementCharacter;
-}
-
-static HB_UChar16 nextChar(const HB_UChar16 *str, hb_uint32 len, hb_uint32 pos)
-{
-    const HB_UChar16 *ch = str + pos + 1;
-    pos++;
-    while(pos < len) {
-        /*qDebug("rightChar: %d isLetter=%d, joining=%d", pos, ch.isLetter(), ch.joining()); */
-        if(HB_GetUnicodeCharCategory(*ch) != HB_Mark_NonSpacing)
-            return *ch;
-        /* assume it's a transparent char, this might not be 100% correct */
-        pos++;
-        ch++;
-    }
-    return ReplacementCharacter;
-}
-
-static void shapedString(const HB_UChar16 *uc, hb_uint32 stringLength, hb_uint32 from, hb_uint32 len, HB_UChar16 *shapeBuffer, int *shapedLength,
-                         HB_Bool reverse, HB_GlyphAttributes *attributes, unsigned short *logClusters)
-{
-    HB_ArabicProperties *properties;
-    hb_int32 f = from;
-    hb_uint32 l = len;
-    const HB_UChar16 *ch;
-    HB_UChar16 *data;
-    int clusterStart;
-    hb_uint32 i;
-    HB_STACKARRAY(HB_ArabicProperties, props, len + 2);
-    properties = props;
-
-    assert(stringLength >= from + len);
-
-    if(len == 0) {
-        *shapedLength = 0;
-        return;
-    }
-
-    if (from > 0) {
-        --f;
-        ++l;
-        ++properties;
-    }
-    if (f + l < stringLength)
-        ++l;
-    getArabicProperties(uc+f, l, props);
-
-    ch = uc + from;
-    data = shapeBuffer;
-    clusterStart = 0;
-
-    for (i = 0; i < len; i++) {
-        hb_uint8 r = *ch >> 8;
-        int gpos = data - shapeBuffer;
-
-        if (r != 0x06) {
-            if (r == 0x20) {
-                if (*ch == 0x200c || *ch == 0x200d)
-                    /* remove ZWJ and ZWNJ */
-                    goto skip;
-            }
-            if (reverse)
-                *data = HB_GetMirroredChar(*ch);
-            else
-                *data = *ch;
-        } else {
-            hb_uint8 c = *ch & 0xff;
-            int pos = i + from;
-            int shape = properties[i].shape;
-/*            qDebug("mapping U+%x to shape %d glyph=0x%x", ch->unicode(), shape, getShape(c, shape)); */
-            /* take care of lam-alef ligatures (lam right of alef) */
-            hb_uint16 map;
-            switch (c) {
-                case 0x44: { /* lam */
-                    const HB_UChar16 pch = nextChar(uc, stringLength, pos);
-                    if ((pch >> 8) == 0x06) {
-                        switch (pch & 0xff) {
-                            case 0x22:
-                            case 0x23:
-                            case 0x25:
-                            case 0x27:
-/*                                 qDebug(" lam of lam-alef ligature"); */
-                                map = arabicUnicodeLamAlefMapping[(pch & 0xff) - 0x22][shape];
-                                goto next;
-                            default:
-                                break;
-                        }
-                    }
-                    break;
-                }
-                case 0x22: /* alef with madda */
-                case 0x23: /* alef with hamza above */
-                case 0x25: /* alef with hamza below */
-                case 0x27: /* alef */
-                    if (prevChar(uc, pos) == 0x0644) {
-                        /* have a lam alef ligature */
-                        /*qDebug(" alef of lam-alef ligature"); */
-                        goto skip;
-                    }
-                default:
-                    break;
-            }
-            map = getShape(c, shape);
-        next:
-            *data = map;
-        }
-        /* ##### Fixme */
-        /*glyphs[gpos].attributes.zeroWidth = zeroWidth; */
-        if (HB_GetUnicodeCharCategory(*ch) == HB_Mark_NonSpacing) {
-            attributes[gpos].mark = TRUE;
-/*             qDebug("glyph %d (char %d) is mark!", gpos, i); */
-        } else {
-            attributes[gpos].mark = FALSE;
-            clusterStart = data - shapeBuffer;
-        }
-        attributes[gpos].clusterStart = !attributes[gpos].mark;
-        attributes[gpos].combiningClass = HB_GetUnicodeCharCombiningClass(*ch);
-        attributes[gpos].justification = properties[i].justification;
-/*         qDebug("data[%d] = %x (from %x)", gpos, (uint)data->unicode(), ch->unicode());*/
-        data++;
-    skip:
-        ch++;
-        logClusters[i] = clusterStart;
-    }
-    *shapedLength = data - shapeBuffer;
-
-    HB_FREE_STACKARRAY(props);
-}
-
-#ifndef NO_OPENTYPE
-
-static const HB_OpenTypeFeature arabic_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('i', 's', 'o', 'l'), IsolProperty },
-    { HB_MAKE_TAG('f', 'i', 'n', 'a'), FinaProperty },
-    { HB_MAKE_TAG('m', 'e', 'd', 'i'), MediProperty },
-    { HB_MAKE_TAG('i', 'n', 'i', 't'), InitProperty },
-    { HB_MAKE_TAG('r', 'l', 'i', 'g'), RligProperty },
-    { HB_MAKE_TAG('c', 'a', 'l', 't'), CaltProperty },
-    { HB_MAKE_TAG('l', 'i', 'g', 'a'), LigaProperty },
-    { HB_MAKE_TAG('d', 'l', 'i', 'g'), DligProperty },
-    { HB_MAKE_TAG('c', 's', 'w', 'h'), CswhProperty },
-    /* mset is used in old Win95 fonts that don't have a 'mark' positioning table. */
-    { HB_MAKE_TAG('m', 's', 'e', 't'), MsetProperty },
-    {0, 0}
-};
-
-static const HB_OpenTypeFeature syriac_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('i', 's', 'o', 'l'), IsolProperty },
-    { HB_MAKE_TAG('f', 'i', 'n', 'a'), FinaProperty },
-    { HB_MAKE_TAG('f', 'i', 'n', '2'), FinaProperty },
-    { HB_MAKE_TAG('f', 'i', 'n', '3'), FinaProperty },
-    { HB_MAKE_TAG('m', 'e', 'd', 'i'), MediProperty },
-    { HB_MAKE_TAG('m', 'e', 'd', '2'), MediProperty },
-    { HB_MAKE_TAG('i', 'n', 'i', 't'), InitProperty },
-    { HB_MAKE_TAG('r', 'l', 'i', 'g'), RligProperty },
-    { HB_MAKE_TAG('c', 'a', 'l', 't'), CaltProperty },
-    { HB_MAKE_TAG('l', 'i', 'g', 'a'), LigaProperty },
-    { HB_MAKE_TAG('d', 'l', 'i', 'g'), DligProperty },
-    {0, 0}
-};
-
-static HB_Bool arabicSyriacOpenTypeShape(HB_ShaperItem *item, HB_Bool *ot_ok)
-{
-    const HB_UChar16 *uc;
-    const int nglyphs = item->num_glyphs;
-    hb_int32 f;
-    hb_uint32 l;
-    HB_ArabicProperties *properties;
-    HB_DECLARE_STACKARRAY(HB_ArabicProperties, props)
-    HB_DECLARE_STACKARRAY(hb_uint32, apply)
-    HB_Bool shaped;
-    int i = 0;
-
-    *ot_ok = TRUE;
-
-    if (!HB_ConvertStringToGlyphIndices(item))
-        return FALSE;
-    HB_HeuristicSetGlyphAttributes(item);
-
-    HB_INIT_STACKARRAY(HB_ArabicProperties, props, item->item.length + 2);
-    HB_INIT_STACKARRAY(hb_uint32, apply, item->num_glyphs);
-
-    uc = item->string + item->item.pos;
-
-    properties = props;
-    f = 0;
-    l = item->item.length;
-    if (item->item.pos > 0) {
-        --f;
-        ++l;
-        ++properties;
-    }
-    if (f + l + item->item.pos < item->stringLength) {
-        ++l;
-    }
-    if (item->item.script == HB_Script_Nko)
-        getNkoProperties(uc+f, l, props);
-    else
-        getArabicProperties(uc+f, l, props);
-
-    for (i = 0; i < (int)item->num_glyphs; i++) {
-        apply[i] = 0;
-
-        if (properties[i].shape == XIsolated)
-            apply[i] |= MediProperty|FinaProperty|InitProperty;
-        else if (properties[i].shape == XMedial)
-            apply[i] |= IsolProperty|FinaProperty|InitProperty;
-        else if (properties[i].shape == XFinal)
-            apply[i] |= IsolProperty|MediProperty|InitProperty;
-        else if (properties[i].shape == XInitial)
-            apply[i] |= IsolProperty|MediProperty|FinaProperty;
-
-        item->attributes[i].justification = properties[i].justification;
-    }
-
-    HB_FREE_STACKARRAY(props);
-
-    shaped = HB_OpenTypeShape(item, apply);
-
-    HB_FREE_STACKARRAY(apply);
-
-    if (!shaped) {
-        *ot_ok = FALSE;
-        return FALSE;
-    }
-    return HB_OpenTypePosition(item, nglyphs, /*doLogClusters*/TRUE);
-}
-
-#endif
-
-/* #### stil missing: identify invalid character combinations */
-HB_Bool HB_ArabicShape(HB_ShaperItem *item)
-{
-    int slen;
-    HB_Bool haveGlyphs;
-    HB_STACKARRAY(HB_UChar16, shapedChars, item->item.length);
-
-    assert(item->item.script == HB_Script_Arabic || item->item.script == HB_Script_Syriac
-           || item->item.script == HB_Script_Nko);
-
-#ifndef NO_OPENTYPE
-
-    if (HB_SelectScript(item, item->item.script == HB_Script_Arabic ? arabic_features : syriac_features)) {
-        HB_Bool ot_ok;
-        if (arabicSyriacOpenTypeShape(item, &ot_ok)) {
-            HB_FREE_STACKARRAY(shapedChars);
-            return TRUE;
-        }
-        if (ot_ok) {
-            HB_FREE_STACKARRAY(shapedChars);
-            return FALSE;
-            /* fall through to the non OT code*/
-        }
-    }
-#endif
-
-    if (item->item.script != HB_Script_Arabic) {
-        HB_FREE_STACKARRAY(shapedChars);
-        return HB_BasicShape(item);
-    }
-
-    shapedString(item->string, item->stringLength, item->item.pos, item->item.length, shapedChars, &slen,
-                  item->item.bidiLevel % 2,
-                  item->attributes, item->log_clusters);
-
-    haveGlyphs = item->font->klass
-        ->convertStringToGlyphIndices(item->font,
-                                      shapedChars, slen,
-                                      item->glyphs, &item->num_glyphs,
-                                      item->item.bidiLevel % 2);
-
-    HB_FREE_STACKARRAY(shapedChars);
-
-    if (!haveGlyphs)
-        return FALSE;
-
-    HB_HeuristicPosition(item);
-    return TRUE;
-}
-
-
diff --git a/src/hb-old/harfbuzz-buffer-private.h b/src/hb-old/harfbuzz-buffer-private.h
deleted file mode 100644 (file)
index 5065f2e..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2004,2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
- */
-
-#ifndef HARFBUZZ_BUFFER_PRIVATE_H
-#define HARFBUZZ_BUFFER_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-buffer.h"
-
-HB_BEGIN_HEADER
-
-#define HB_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
-
-HB_INTERNAL void
-_hb_buffer_swap( HB_Buffer buffer );
-
-HB_INTERNAL void
-_hb_buffer_clear_output( HB_Buffer buffer );
-
-HB_INTERNAL HB_Error
-_hb_buffer_clear_positions( HB_Buffer buffer );
-
-HB_INTERNAL HB_Error
-_hb_buffer_add_output_glyphs( HB_Buffer  buffer,
-                             HB_UShort  num_in,
-                             HB_UShort  num_out,
-                             HB_UShort *glyph_data,
-                             HB_UShort  component,
-                             HB_UShort  ligID );
-
-HB_INTERNAL HB_Error
-_hb_buffer_add_output_glyph ( HB_Buffer buffer,
-                             HB_UInt   glyph_index,
-                             HB_UShort component,
-                             HB_UShort ligID );
-
-HB_INTERNAL HB_Error
-_hb_buffer_copy_output_glyph ( HB_Buffer buffer );
-
-HB_INTERNAL HB_Error
-_hb_buffer_replace_output_glyph ( HB_Buffer buffer,
-                                 HB_UInt   glyph_index,
-                                 HB_Bool   inplace );
-
-HB_INTERNAL HB_UShort
-_hb_buffer_allocate_ligid( HB_Buffer buffer );
-
-
-/* convenience macros */
-
-#define IN_GLYPH( pos )        (buffer->in_string[(pos)].gindex)
-#define IN_ITEM( pos )         (&buffer->in_string[(pos)])
-#define IN_CURGLYPH()          (buffer->in_string[buffer->in_pos].gindex)
-#define IN_CURITEM()           (&buffer->in_string[buffer->in_pos])
-#define IN_PROPERTIES( pos )   (buffer->in_string[(pos)].properties)
-#define IN_LIGID( pos )        (buffer->in_string[(pos)].ligID)
-#define IN_COMPONENT( pos )    (buffer->in_string[(pos)].component)
-#define POSITION( pos )        (&buffer->positions[(pos)])
-#define OUT_GLYPH( pos )       (buffer->out_string[(pos)].gindex)
-#define OUT_ITEM( pos )        (&buffer->out_string[(pos)])
-
-#define CHECK_Property( gdef, index, flags, property )                                 \
-          ( ( error = _HB_GDEF_Check_Property( (gdef), (index), (flags),               \
-                                      (property) ) ) != HB_Err_Ok )
-
-#define ADD_String( buffer, num_in, num_out, glyph_data, component, ligID )             \
-          ( ( error = _hb_buffer_add_output_glyphs( (buffer),                            \
-                                                   (num_in), (num_out),                \
-                                                    (glyph_data), (component), (ligID)  \
-                                                  ) ) != HB_Err_Ok )
-#define ADD_Glyph( buffer, glyph_index, component, ligID )                             \
-          ( ( error = _hb_buffer_add_output_glyph( (buffer),                             \
-                                                    (glyph_index), (component), (ligID) \
-                                                  ) ) != HB_Err_Ok )
-#define REPLACE_Glyph( buffer, glyph_index, nesting_level )                            \
-          ( ( error = _hb_buffer_replace_output_glyph( (buffer), (glyph_index),                \
-                                                     (nesting_level) == 1 ) ) != HB_Err_Ok )
-#define COPY_Glyph( buffer )                                                           \
-         ( (error = _hb_buffer_copy_output_glyph ( buffer ) ) != HB_Err_Ok )
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_BUFFER_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-buffer.c b/src/hb-old/harfbuzz-buffer.c
deleted file mode 100644 (file)
index a85ee8d..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2004,2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-buffer-private.h"
-#include "harfbuzz-gsub-private.h"
-#include "harfbuzz-gpos-private.h"
-
-/* Here is how the buffer works internally:
- *
- * There are two string pointers: in_string and out_string.  They
- * always have same allocated size, but different length and positions.
- *
- * As an optimization, both in_string and out_string may point to the
- * same piece of memory, which is owned by in_string.  This remains the
- * case as long as:
- *
- *   - copy_glyph() is called
- *   - replace_glyph() is called with inplace=TRUE
- *   - add_output_glyph() and add_output_glyphs() are not called
- *
- * In that case swap(), and copy_glyph(), and replace_glyph() are all
- * mostly no-op.
- *
- * As soon an add_output_glyph[s]() or replace_glyph() with inplace=FALSE is
- * called, out_string is moved over to an alternate buffer (alt_string), and
- * its current contents (out_length entries) are copied to the alt buffer.
- * This should all remain transparent to the user.  swap() then switches
- * in_string and alt_string.  alt_string is not allocated until its needed,
- * but after that it's grown with in_string unconditionally.
- *
- * The buffer->separate_out boolean keeps status of whether out_string points
- * to in_string (FALSE) or alt_string (TRUE).
- */
-
-/* Internal API */
-
-static HB_Error
-HB_Buffer_ensure( HB_Buffer buffer,
-                  HB_UInt   size )
-{
-  HB_UInt new_allocated = buffer->allocated;
-
-  if (size > new_allocated)
-    {
-      HB_Error error;
-
-      while (size > new_allocated)
-       new_allocated += (new_allocated >> 1) + 8;
-      
-      if ( buffer->positions )
-        {
-         if ( REALLOC_ARRAY( buffer->positions, new_allocated, HB_PositionRec ) )
-           return error;
-       }
-
-      if ( REALLOC_ARRAY( buffer->in_string, new_allocated, HB_GlyphItemRec ) )
-       return error;
-
-      if ( buffer->separate_out )
-        {
-         if ( REALLOC_ARRAY( buffer->alt_string, new_allocated, HB_GlyphItemRec ) )
-           return error;
-
-         buffer->out_string = buffer->alt_string;
-       }
-      else
-        {
-         buffer->out_string = buffer->in_string;
-
-         if ( buffer->alt_string )
-           {
-             if ( REALLOC_ARRAY( buffer->alt_string, new_allocated, HB_GlyphItemRec ) )
-               return error;
-           }
-       }
-
-      buffer->allocated = new_allocated;
-    }
-
-  return HB_Err_Ok;
-}
-
-static HB_Error
-HB_Buffer_duplicate_out_buffer( HB_Buffer buffer )
-{
-  if ( !buffer->alt_string )
-    {
-      HB_Error error;
-
-      if ( ALLOC_ARRAY( buffer->alt_string, buffer->allocated, HB_GlyphItemRec ) )
-       return error;
-    }
-
-  buffer->out_string = buffer->alt_string;
-  memcpy( buffer->out_string, buffer->in_string, buffer->out_length * sizeof (buffer->out_string[0]) );
-  buffer->separate_out = TRUE;
-
-  return HB_Err_Ok;
-}
-
-/* Public API */
-
-HB_Error
-HB_Buffer_new( HB_Buffer *pbuffer )
-{
-  HB_Buffer buffer;
-  HB_Error error;
-
-  if ( ALLOC( buffer, sizeof( HB_BufferRec ) ) )
-    return error;
-
-  buffer->allocated = 0;
-  buffer->in_string = NULL;
-  buffer->alt_string = NULL;
-  buffer->positions = NULL;
-
-  HB_Buffer_clear( buffer );
-
-  *pbuffer = buffer;
-
-  return HB_Err_Ok;
-}
-
-void
-HB_Buffer_free( HB_Buffer buffer )
-{
-  FREE( buffer->in_string );
-  FREE( buffer->alt_string );
-  buffer->out_string = NULL;
-  FREE( buffer->positions );
-  FREE( buffer );
-}
-
-void
-HB_Buffer_clear( HB_Buffer buffer )
-{
-  buffer->in_length = 0;
-  buffer->out_length = 0;
-  buffer->in_pos = 0;
-  buffer->out_pos = 0;
-  buffer->out_string = buffer->in_string;
-  buffer->separate_out = FALSE;
-  buffer->max_ligID = 0;
-}
-
-HB_Error
-HB_Buffer_add_glyph( HB_Buffer buffer,
-                     HB_UInt   glyph_index,
-                     HB_UInt   properties,
-                     HB_UInt   cluster )
-{
-  HB_Error error;
-  HB_GlyphItem glyph;
-  
-  error = HB_Buffer_ensure( buffer, buffer->in_length + 1 );
-  if ( error )
-    return error;
-
-  glyph = &buffer->in_string[buffer->in_length];
-  glyph->gindex = glyph_index;
-  glyph->properties = properties;
-  glyph->cluster = cluster;
-  glyph->component = 0;
-  glyph->ligID = 0;
-  glyph->gproperties = HB_GLYPH_PROPERTIES_UNKNOWN;
-  
-  buffer->in_length++;
-
-  return HB_Err_Ok;
-}
-
-/* HarfBuzz-Internal API */
-
-HB_INTERNAL void
-_hb_buffer_clear_output( HB_Buffer buffer )
-{
-  buffer->out_length = 0;
-  buffer->out_pos = 0;
-  buffer->out_string = buffer->in_string;
-  buffer->separate_out = FALSE;
-}
-
-HB_INTERNAL HB_Error
-_hb_buffer_clear_positions( HB_Buffer buffer )
-{
-  if ( !buffer->positions )
-    {
-      HB_Error error;
-
-      if ( ALLOC_ARRAY( buffer->positions, buffer->allocated, HB_PositionRec ) )
-       return error;
-    }
-
-  memset (buffer->positions, 0, sizeof (buffer->positions[0]) * buffer->in_length);
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL void
-_hb_buffer_swap( HB_Buffer buffer )
-{
-  HB_GlyphItem tmp_string;
-  int tmp_length;
-  int tmp_pos;
-
-  if ( buffer->separate_out )
-    {
-      tmp_string = buffer->in_string;
-      buffer->in_string = buffer->out_string;
-      buffer->out_string = tmp_string;
-      buffer->alt_string = buffer->out_string;
-    }
-
-  tmp_length = buffer->in_length;
-  buffer->in_length = buffer->out_length;
-  buffer->out_length = tmp_length;
-
-  tmp_pos = buffer->in_pos;
-  buffer->in_pos = buffer->out_pos;
-  buffer->out_pos = tmp_pos;
-}
-
-/* The following function copies `num_out' elements from `glyph_data'
-   to `buffer->out_string', advancing the in array pointer in the structure
-   by `num_in' elements, and the out array pointer by `num_out' elements.
-   Finally, it sets the `length' field of `out' equal to
-   `pos' of the `out' structure.
-
-   If `component' is 0xFFFF, the component value from buffer->in_pos
-   will copied `num_out' times, otherwise `component' itself will
-   be used to fill the `component' fields.
-
-   If `ligID' is 0xFFFF, the ligID value from buffer->in_pos
-   will copied `num_out' times, otherwise `ligID' itself will
-   be used to fill the `ligID' fields.
-
-   The properties for all replacement glyphs are taken
-   from the glyph at position `buffer->in_pos'.
-
-   The cluster value for the glyph at position buffer->in_pos is used
-   for all replacement glyphs */
-HB_INTERNAL HB_Error
-_hb_buffer_add_output_glyphs( HB_Buffer  buffer,
-                             HB_UShort  num_in,
-                             HB_UShort  num_out,
-                             HB_UShort *glyph_data,
-                             HB_UShort  component,
-                             HB_UShort  ligID )
-{
-  HB_Error  error;
-  HB_UShort i;
-  HB_UInt properties;
-  HB_UInt cluster;
-
-  error = HB_Buffer_ensure( buffer, buffer->out_pos + num_out );
-  if ( error )
-    return error;
-
-  if ( !buffer->separate_out )
-    {
-      error = HB_Buffer_duplicate_out_buffer( buffer );
-      if ( error )
-       return error;
-    }
-
-  properties = buffer->in_string[buffer->in_pos].properties;
-  cluster = buffer->in_string[buffer->in_pos].cluster;
-  if ( component == 0xFFFF )
-    component = buffer->in_string[buffer->in_pos].component;
-  if ( ligID == 0xFFFF )
-    ligID = buffer->in_string[buffer->in_pos].ligID;
-
-  for ( i = 0; i < num_out; i++ )
-  {
-    HB_GlyphItem item = &buffer->out_string[buffer->out_pos + i];
-
-    item->gindex = glyph_data[i];
-    item->properties = properties;
-    item->cluster = cluster;
-    item->component = component;
-    item->ligID = ligID;
-    item->gproperties = HB_GLYPH_PROPERTIES_UNKNOWN;
-  }
-
-  buffer->in_pos  += num_in;
-  buffer->out_pos += num_out;
-
-  buffer->out_length = buffer->out_pos;
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL HB_Error
-_hb_buffer_add_output_glyph( HB_Buffer buffer,
-                            HB_UInt   glyph_index,
-                            HB_UShort component,
-                            HB_UShort ligID )
-{
-  HB_UShort glyph_data =  glyph_index;
-
-  return _hb_buffer_add_output_glyphs ( buffer, 1, 1,
-                                       &glyph_data, component, ligID );
-}
-
-HB_INTERNAL HB_Error
-_hb_buffer_copy_output_glyph ( HB_Buffer buffer )
-{  
-  HB_Error  error;
-
-  error = HB_Buffer_ensure( buffer, buffer->out_pos + 1 );
-  if ( error )
-    return error;
-  
-  if ( buffer->separate_out )
-    {
-      buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
-    }
-
-  buffer->in_pos++;
-  buffer->out_pos++;
-  buffer->out_length = buffer->out_pos;
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL HB_Error
-_hb_buffer_replace_output_glyph( HB_Buffer buffer,
-                                HB_UInt   glyph_index,
-                                HB_Bool   inplace )
-{
-
-  HB_Error error;
-
-  if ( inplace )
-    {
-      error = _hb_buffer_copy_output_glyph ( buffer );
-      if ( error )
-       return error;
-
-      buffer->out_string[buffer->out_pos-1].gindex = glyph_index;
-    }
-  else
-    {
-      return _hb_buffer_add_output_glyph( buffer, glyph_index, 0xFFFF, 0xFFFF );
-    }
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL HB_UShort
-_hb_buffer_allocate_ligid( HB_Buffer buffer )
-{
-  buffer->max_ligID++;
-  if (HB_UNLIKELY (buffer->max_ligID == 0))
-    buffer->max_ligID++;
-
-  return buffer->max_ligID;
-}
diff --git a/src/hb-old/harfbuzz-buffer.h b/src/hb-old/harfbuzz-buffer.h
deleted file mode 100644 (file)
index ea5d404..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2004,2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
- */
-
-#ifndef HARFBUZZ_BUFFER_H
-#define HARFBUZZ_BUFFER_H
-
-#include "harfbuzz-global.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-typedef struct HB_GlyphItemRec_ {
-  HB_UInt     gindex;
-  HB_UInt     properties;
-  HB_UInt     cluster;
-  HB_UShort   component;
-  HB_UShort   ligID;
-  HB_UShort   gproperties;
-} HB_GlyphItemRec, *HB_GlyphItem;
-
-typedef struct HB_PositionRec_ {
-  HB_Fixed   x_pos;
-  HB_Fixed   y_pos;
-  HB_Fixed   x_advance;
-  HB_Fixed   y_advance;
-  HB_UShort  back;            /* number of glyphs to go back
-                                for drawing current glyph   */
-  HB_Short  cursive_chain;   /* character to which this connects,
-                                may be positive or negative; used
-                                only internally                     */
-  HB_Bool    new_advance;     /* if set, the advance width values are
-                                absolute, i.e., they won't be
-                                added to the original glyph's value
-                                but rather replace them.            */
-} HB_PositionRec, *HB_Position;
-
-
-typedef struct HB_BufferRec_{ 
-  HB_UInt    allocated;
-
-  HB_UInt    in_length;
-  HB_UInt    out_length;
-  HB_UInt    in_pos;
-  HB_UInt    out_pos;
-  
-  HB_GlyphItem  in_string;
-  HB_GlyphItem  out_string;
-  HB_GlyphItem  alt_string;
-  HB_Position   positions;
-  HB_UShort      max_ligID;
-  HB_Bool       separate_out;
-} HB_BufferRec, *HB_Buffer;
-
-HB_Error
-HB_Buffer_new( HB_Buffer *buffer );
-
-void
-HB_Buffer_free( HB_Buffer buffer );
-
-void
-HB_Buffer_clear( HB_Buffer buffer );
-
-HB_Error
-HB_Buffer_add_glyph( HB_Buffer buffer,
-                     HB_UInt    glyph_index,
-                     HB_UInt    properties,
-                     HB_UInt    cluster );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_BUFFER_H */
diff --git a/src/hb-old/harfbuzz-external.h b/src/hb-old/harfbuzz-external.h
deleted file mode 100644 (file)
index 13ec15f..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_EXTERNAL_H
-#define HARFBUZZ_EXTERNAL_H
-
-#define HB_H_IN
-#include <hb-unicode.h>
-#include "harfbuzz-global.h"
-
-HB_BEGIN_HEADER
-
-/* This header contains some methods that are not part of
-   Harfbuzz itself, but referenced by it.
-   They need to be provided by the application/library
-*/
-
-
-typedef enum 
-{
-    HB_Mark_NonSpacing         = HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,         /* Mn */
-    HB_Mark_SpacingCombining   = HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK,             /* Mc */
-    HB_Mark_Enclosing          = HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,           /* Me */
-
-    HB_Number_DecimalDigit     = HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,           /* Nd */
-    HB_Number_Letter           = HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,            /* Nl */
-    HB_Number_Other            = HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,             /* No */
-
-    HB_Separator_Space         = HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR,          /* Zs */
-    HB_Separator_Line          = HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,           /* Zl */
-    HB_Separator_Paragraph     = HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,      /* Zp */
-
-    HB_Other_Control           = HB_UNICODE_GENERAL_CATEGORY_CONTROL,                  /* Cc */
-    HB_Other_Format            = HB_UNICODE_GENERAL_CATEGORY_FORMAT,                   /* Cf */
-    HB_Other_Surrogate         = HB_UNICODE_GENERAL_CATEGORY_SURROGATE,                /* Cs */
-    HB_Other_PrivateUse                = HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,              /* Co */
-    HB_Other_NotAssigned       = HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,               /* Cn */
-
-    HB_Letter_Uppercase                = HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,         /* Lu */
-    HB_Letter_Lowercase                = HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,         /* Ll */
-    HB_Letter_Titlecase                = HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,         /* Lt */
-    HB_Letter_Modifier         = HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,          /* Lm */
-    HB_Letter_Other            = HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,             /* Lo */
-
-    HB_Punctuation_Connector   = HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,      /* Pc */
-    HB_Punctuation_Dash                = HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,         /* Pd */
-    HB_Punctuation_Open                = HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,         /* Ps */
-    HB_Punctuation_Close       = HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,        /* Pe */
-    HB_Punctuation_InitialQuote        = HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,      /* Pi */
-    HB_Punctuation_FinalQuote  = HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,        /* Pf */
-    HB_Punctuation_Other       = HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,        /* Po */
-
-    HB_Symbol_Math             = HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,              /* Sm */
-    HB_Symbol_Currency         = HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,          /* Sc */
-    HB_Symbol_Modifier         = HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,          /* Sk */
-    HB_Symbol_Other            = HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL              /* So */
-} HB_CharCategory;
-
-
-static inline HB_CharCategory HB_GetUnicodeCharCategory(HB_UChar32 ch)
-{
-  return (HB_CharCategory) hb_unicode_general_category (hb_unicode_funcs_get_default (), ch);
-}
-
-static inline int HB_GetUnicodeCharCombiningClass(HB_UChar32 ch)
-{
-  return hb_unicode_combining_class (hb_unicode_funcs_get_default (), ch);
-}
-
-static inline HB_UChar16 HB_GetMirroredChar(HB_UChar16 ch)
-{
-  return hb_unicode_mirroring (hb_unicode_funcs_get_default (), ch);
-}
-
-static inline void HB_GetUnicodeCharProperties(HB_UChar32 ch, HB_CharCategory *category, int *combiningClass)
-{
-  if (category)
-    *category = HB_GetUnicodeCharCategory (ch);
-  if (combiningClass)
-    *combiningClass = HB_GetUnicodeCharCombiningClass (ch);
-}
-
-HB_END_HEADER
-
-#endif
diff --git a/src/hb-old/harfbuzz-gdef-private.h b/src/hb-old/harfbuzz-gdef-private.h
deleted file mode 100644 (file)
index 2a6d958..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GDEF_PRIVATE_H
-#define HARFBUZZ_GDEF_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-stream-private.h"
-#include "harfbuzz-buffer-private.h"
-#include "harfbuzz-gdef.h"
-
-HB_BEGIN_HEADER
-
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/* Attachment related structures */
-
-struct  HB_AttachPoint_
-{
-  HB_UShort*  PointIndex;             /* array of contour points      */
-  HB_UShort   PointCount;             /* size of the PointIndex array */
-};
-
-/* Ligature Caret related structures */
-
-struct  HB_CaretValueFormat1_
-{
-  HB_Short  Coordinate;               /* x or y value (in design units) */
-};
-
-typedef struct HB_CaretValueFormat1_  HB_CaretValueFormat1;
-
-
-struct  HB_CaretValueFormat2_
-{
-  HB_UShort  CaretValuePoint;         /* contour point index on glyph */
-};
-
-typedef struct HB_CaretValueFormat2_  HB_CaretValueFormat2;
-
-
-struct  HB_CaretValueFormat3_
-{
-  HB_Device*  Device;                 /* Device table for x or y value  */
-  HB_Short    Coordinate;             /* x or y value (in design units) */
-};
-
-typedef struct HB_CaretValueFormat3_  HB_CaretValueFormat3;
-
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-struct  HB_CaretValueFormat4_
-{
-  HB_UShort  IdCaretValue;            /* metric ID */
-};
-
-typedef struct HB_CaretValueFormat4_  HB_CaretValueFormat4;
-#endif
-
-
-struct  HB_CaretValue_
-{
-  union
-  {
-    HB_CaretValueFormat1  cvf1;
-    HB_CaretValueFormat2  cvf2;
-    HB_CaretValueFormat3  cvf3;
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    HB_CaretValueFormat4  cvf4;
-#endif
-  } cvf;
-
-  HB_Byte  CaretValueFormat;          /* 1, 2, 3, or 4 */
-};
-
-typedef struct HB_CaretValue_  HB_CaretValue;
-
-
-struct  HB_LigGlyph_
-{
-  HB_CaretValue*  CaretValue;        /* array of caret values  */
-  HB_UShort        CaretCount;        /* number of caret values */
-  HB_Bool          loaded;
-};
-
-
-HB_INTERNAL HB_Error
-_HB_GDEF_Add_Glyph_Property( HB_GDEFHeader* gdef,
-                                      HB_UShort        glyphID,
-                                      HB_UShort        property );
-
-HB_INTERNAL HB_Error
-_HB_GDEF_Check_Property( HB_GDEFHeader* gdef,
-                                  HB_GlyphItem    item,
-                                  HB_UShort        flags,
-                                  HB_UShort*       property );
-
-HB_INTERNAL HB_Error
-_HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( HB_GDEFHeader* gdef,
-                                                 HB_Stream      input,
-                                                 HB_Lookup*     lo,
-                                                 HB_UShort      num_lookups );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GDEF_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-gdef.c b/src/hb-old/harfbuzz-gdef.c
deleted file mode 100644 (file)
index 966b167..0000000
+++ /dev/null
@@ -1,1163 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-gdef-private.h"
-#include "harfbuzz-open-private.h"
-
-static HB_Error  Load_AttachList( HB_AttachList*  al,
-                                 HB_Stream        stream );
-static HB_Error  Load_LigCaretList( HB_LigCaretList*  lcl,
-                                   HB_Stream          stream );
-
-static void  Free_AttachList( HB_AttachList*  al);
-static void  Free_LigCaretList( HB_LigCaretList*  lcl);
-
-static void  Free_NewGlyphClasses( HB_GDEFHeader*  gdef);
-
-
-
-/* GDEF glyph classes */
-
-#define UNCLASSIFIED_GLYPH  0
-#define SIMPLE_GLYPH        1
-#define LIGATURE_GLYPH      2
-#define MARK_GLYPH          3
-#define COMPONENT_GLYPH     4
-
-
-
-
-
-
-HB_Error  HB_New_GDEF_Table( HB_GDEFHeader** retptr )
-{
-  HB_Error         error;
-
-  HB_GDEFHeader*  gdef;
-
-  if ( !retptr )
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( ALLOC( gdef, sizeof( *gdef ) ) )
-    return error;
-
-  gdef->GlyphClassDef.loaded = FALSE;
-  gdef->AttachList.loaded = FALSE;
-  gdef->LigCaretList.loaded = FALSE;
-  gdef->MarkAttachClassDef_offset = 0;
-  gdef->MarkAttachClassDef.loaded = FALSE;
-
-  gdef->LastGlyph = 0;
-  gdef->NewGlyphClasses = NULL;
-
-  *retptr = gdef;
-
-  return HB_Err_Ok;
-}
-
-
-HB_Error  HB_Load_GDEF_Table( HB_Stream stream, 
-                             HB_GDEFHeader** retptr )
-{
-  HB_Error         error;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_GDEFHeader*  gdef;
-
-
-  if ( !retptr )
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( GOTO_Table( TTAG_GDEF ) )
-    return error;
-
-  if (( error = HB_New_GDEF_Table ( &gdef ) ))
-    return error;
-
-  base_offset = FILE_Pos();
-
-  /* skip version */
-
-  if ( FILE_Seek( base_offset + 4L ) ||
-       ACCESS_Frame( 2L ) )
-    goto Fail0;
-
-  new_offset = GET_UShort();
-
-  FORGET_Frame();
-
-  /* all GDEF subtables are optional */
-
-  if ( new_offset )
-  {
-    new_offset += base_offset;
-
-    /* only classes 1-4 are allowed here */
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_ClassDefinition( &gdef->GlyphClassDef, 5,
-                                        stream ) ) != HB_Err_Ok )
-      goto Fail0;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail1;
-
-  new_offset = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( new_offset )
-  {
-    new_offset += base_offset;
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_AttachList( &gdef->AttachList,
-                                   stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  new_offset = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( new_offset )
-  {
-    new_offset += base_offset;
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LigCaretList( &gdef->LigCaretList,
-                                     stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  /* OpenType 1.2 has introduced the `MarkAttachClassDef' field.  We
-     first have to scan the LookupFlag values to find out whether we
-     must load it or not.  Here we only store the offset of the table. */
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( new_offset )
-    gdef->MarkAttachClassDef_offset = new_offset + base_offset;
-  else
-    gdef->MarkAttachClassDef_offset = 0;
-
-  *retptr = gdef;
-
-  return HB_Err_Ok;
-
-Fail3:
-  Free_LigCaretList( &gdef->LigCaretList );
-  
-Fail2:
-  Free_AttachList( &gdef->AttachList );
-
-Fail1:
-  _HB_OPEN_Free_ClassDefinition( &gdef->GlyphClassDef );
-
-Fail0:
-  FREE( gdef );
-
-  return error;
-}
-
-
-HB_Error  HB_Done_GDEF_Table ( HB_GDEFHeader* gdef ) 
-{  
-  Free_LigCaretList( &gdef->LigCaretList );
-  Free_AttachList( &gdef->AttachList );
-  _HB_OPEN_Free_ClassDefinition( &gdef->GlyphClassDef );
-  _HB_OPEN_Free_ClassDefinition( &gdef->MarkAttachClassDef );
-  
-  Free_NewGlyphClasses( gdef );
-
-  FREE( gdef );
-
-  return HB_Err_Ok;
-}
-
-
-
-
-/*******************************
- * AttachList related functions
- *******************************/
-
-
-/* AttachPoint */
-
-static HB_Error  Load_AttachPoint( HB_AttachPoint*  ap,
-                                  HB_Stream         stream )
-{
-  HB_Error  error;
-
-  HB_UShort   n, count;
-  HB_UShort*  pi;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ap->PointCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ap->PointIndex = NULL;
-
-  if ( count )
-  {
-    if ( ALLOC_ARRAY( ap->PointIndex, count, HB_UShort ) )
-      return error;
-
-    pi = ap->PointIndex;
-
-    if ( ACCESS_Frame( count * 2L ) )
-    {
-      FREE( pi );
-      return error;
-    }
-
-    for ( n = 0; n < count; n++ )
-      pi[n] = GET_UShort();
-
-    FORGET_Frame();
-  }
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_AttachPoint( HB_AttachPoint*  ap )
-{
-  FREE( ap->PointIndex );
-}
-
-
-/* AttachList */
-
-static HB_Error  Load_AttachList( HB_AttachList*  al,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-
-  HB_UShort         n, m, count;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_AttachPoint*  ap;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &al->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = al->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  al->AttachPoint = NULL;
-
-  if ( ALLOC_ARRAY( al->AttachPoint, count, HB_AttachPoint ) )
-    goto Fail2;
-
-  ap = al->AttachPoint;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_AttachPoint( &ap[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  al->loaded = TRUE;
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_AttachPoint( &ap[m] );
-
-  FREE( ap );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &al->Coverage );
-  return error;
-}
-
-
-static void  Free_AttachList( HB_AttachList*  al)
-{
-  HB_UShort         n, count;
-
-  HB_AttachPoint*  ap;
-
-
-  if ( !al->loaded )
-    return;
-
-  if ( al->AttachPoint )
-  {
-    count = al->GlyphCount;
-    ap    = al->AttachPoint;
-
-    for ( n = 0; n < count; n++ )
-      Free_AttachPoint( &ap[n] );
-
-    FREE( ap );
-  }
-
-  _HB_OPEN_Free_Coverage( &al->Coverage );
-}
-
-
-
-/*********************************
- * LigCaretList related functions
- *********************************/
-
-
-/* CaretValueFormat1 */
-/* CaretValueFormat2 */
-/* CaretValueFormat3 */
-/* CaretValueFormat4 */
-
-static HB_Error  Load_CaretValue( HB_CaretValue*  cv,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-
-  HB_UInt cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cv->CaretValueFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( cv->CaretValueFormat )
-  {
-  case 1:
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    cv->cvf.cvf1.Coordinate = GET_Short();
-
-    FORGET_Frame();
-
-    break;
-
-  case 2:
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    cv->cvf.cvf2.CaretValuePoint = GET_UShort();
-
-    FORGET_Frame();
-
-    break;
-
-  case 3:
-    if ( ACCESS_Frame( 4L ) )
-      return error;
-
-    cv->cvf.cvf3.Coordinate = GET_Short();
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Device( &cv->cvf.cvf3.Device,
-                               stream ) ) != HB_Err_Ok )
-      return error;
-    (void)FILE_Seek( cur_offset );
-
-    break;
-
-  case 4:
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    cv->cvf.cvf4.IdCaretValue = GET_UShort();
-#else
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_CaretValue( HB_CaretValue*  cv)
-{
-  if ( cv->CaretValueFormat == 3 )
-    _HB_OPEN_Free_Device( cv->cvf.cvf3.Device );
-}
-
-
-/* LigGlyph */
-
-static HB_Error  Load_LigGlyph( HB_LigGlyph*  lg,
-                               HB_Stream      stream )
-{
-  HB_Error  error;
-
-  HB_UShort        n, m, count;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_CaretValue*  cv;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = lg->CaretCount = GET_UShort();
-
-  FORGET_Frame();
-
-  lg->CaretValue = NULL;
-
-  if ( ALLOC_ARRAY( lg->CaretValue, count, HB_CaretValue ) )
-    return error;
-
-  cv = lg->CaretValue;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_CaretValue( &cv[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_CaretValue( &cv[m] );
-
-  FREE( cv );
-  return error;
-}
-
-
-static void  Free_LigGlyph( HB_LigGlyph*  lg)
-{
-  HB_UShort        n, count;
-
-  HB_CaretValue*  cv;
-
-
-  if ( lg->CaretValue )
-  {
-    count = lg->CaretCount;
-    cv    = lg->CaretValue;
-
-    for ( n = 0; n < count; n++ )
-      Free_CaretValue( &cv[n] );
-
-    FREE( cv );
-  }
-}
-
-
-/* LigCaretList */
-
-static HB_Error  Load_LigCaretList( HB_LigCaretList*  lcl,
-                                   HB_Stream          stream )
-{
-  HB_Error  error;
-
-  HB_UShort      m, n, count;
-  HB_UInt       cur_offset, new_offset, base_offset;
-
-  HB_LigGlyph*  lg;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &lcl->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = lcl->LigGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  lcl->LigGlyph = NULL;
-
-  if ( ALLOC_ARRAY( lcl->LigGlyph, count, HB_LigGlyph ) )
-    goto Fail2;
-
-  lg = lcl->LigGlyph;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LigGlyph( &lg[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  lcl->loaded = TRUE;
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_LigGlyph( &lg[m] );
-
-  FREE( lg );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &lcl->Coverage );
-  return error;
-}
-
-
-static void  Free_LigCaretList( HB_LigCaretList*  lcl )
-{
-  HB_UShort      n, count;
-
-  HB_LigGlyph*  lg;
-
-
-  if ( !lcl->loaded )
-    return;
-
-  if ( lcl->LigGlyph )
-  {
-    count = lcl->LigGlyphCount;
-    lg    = lcl->LigGlyph;
-
-    for ( n = 0; n < count; n++ )
-      Free_LigGlyph( &lg[n] );
-
-    FREE( lg );
-  }
-
-  _HB_OPEN_Free_Coverage( &lcl->Coverage );
-}
-
-
-
-/***********
- * GDEF API
- ***********/
-
-
-static HB_UShort  Get_New_Class( HB_GDEFHeader*  gdef,
-                                HB_UShort        glyphID,
-                                HB_UShort        index )
-{
-  HB_UShort              glyph_index, array_index, count;
-  HB_UShort              byte, bits;
-  
-  HB_ClassRangeRecord*  gcrr;
-  HB_UShort**            ngc;
-
-
-  if ( glyphID >= gdef->LastGlyph )
-    return 0;
-
-  count = gdef->GlyphClassDef.cd.cd2.ClassRangeCount;
-  gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;
-  ngc  = gdef->NewGlyphClasses;
-
-  if ( index < count && glyphID < gcrr[index].Start )
-  {
-    array_index = index;
-    if ( index == 0 )
-      glyph_index = glyphID;
-    else
-      glyph_index = glyphID - gcrr[index - 1].End - 1;
-  }
-  else
-  {
-    array_index = index + 1;
-    glyph_index = glyphID - gcrr[index].End - 1;
-  }
-
-  byte = ngc[array_index][glyph_index / 4];
-  bits = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );
-
-  return bits & 0x000F;
-}
-
-
-
-HB_Error  HB_GDEF_Get_Glyph_Property( HB_GDEFHeader*  gdef,
-                                     HB_UShort        glyphID,
-                                     HB_UShort*       property )
-{
-  HB_UShort class = 0, index = 0; /* shut compiler up */
-
-  HB_Error  error;
-
-
-  if ( !gdef || !property )
-    return ERR(HB_Err_Invalid_Argument);
-
-  /* first, we check for mark attach classes */
-
-  if ( gdef->MarkAttachClassDef.loaded )
-  {
-    error = _HB_OPEN_Get_Class( &gdef->MarkAttachClassDef, glyphID, &class, &index );
-    if ( error && error != HB_Err_Not_Covered )
-      return error;
-    if ( !error )
-    {
-      *property = class << 8;
-      return HB_Err_Ok;
-    }
-  }
-
-  error = _HB_OPEN_Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );
-  if ( error && error != HB_Err_Not_Covered )
-    return error;
-
-  /* if we have a constructed class table, check whether additional
-     values have been assigned                                      */
-
-  if ( error == HB_Err_Not_Covered && gdef->NewGlyphClasses )
-    class = Get_New_Class( gdef, glyphID, index );
-
-  switch ( class )
-  {
-  default:
-  case UNCLASSIFIED_GLYPH:
-    *property = 0;
-    break;
-
-  case SIMPLE_GLYPH:
-    *property = HB_GDEF_BASE_GLYPH;
-    break;
-
-  case LIGATURE_GLYPH:
-    *property = HB_GDEF_LIGATURE;
-    break;
-
-  case MARK_GLYPH:
-    *property = HB_GDEF_MARK;
-    break;
-
-  case COMPONENT_GLYPH:
-    *property = HB_GDEF_COMPONENT;
-    break;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-static HB_Error  Make_ClassRange( HB_ClassDefinition*  cd,
-                                 HB_UShort             start,
-                                 HB_UShort             end,
-                                 HB_UShort             class )
-{
-  HB_Error               error;
-  HB_UShort              index;
-
-  HB_ClassDefFormat2*   cdf2;
-  HB_ClassRangeRecord*  crr;
-
-
-  cdf2 = &cd->cd.cd2;
-
-  if ( REALLOC_ARRAY( cdf2->ClassRangeRecord,
-                     cdf2->ClassRangeCount + 1 ,
-                     HB_ClassRangeRecord ) )
-    return error;
-
-  cdf2->ClassRangeCount++;
-
-  crr   = cdf2->ClassRangeRecord;
-  index = cdf2->ClassRangeCount - 1;
-
-  crr[index].Start = start;
-  crr[index].End   = end;
-  crr[index].Class = class;
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GDEF_Build_ClassDefinition( HB_GDEFHeader*  gdef,
-                                        HB_UShort        num_glyphs,
-                                        HB_UShort        glyph_count,
-                                        HB_UShort*       glyph_array,
-                                        HB_UShort*       class_array )
-{
-  HB_UShort              start, curr_glyph, curr_class;
-  HB_UShort              n, m, count;
-  HB_Error               error;
-
-  HB_ClassDefinition*   gcd;
-  HB_ClassRangeRecord*  gcrr;
-  HB_UShort**            ngc;
-
-
-  if ( !gdef || !glyph_array || !class_array )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gcd = &gdef->GlyphClassDef;
-
-  /* We build a format 2 table */
-
-  gcd->ClassFormat = 2;
-
-  gcd->cd.cd2.ClassRangeCount  = 0;
-  gcd->cd.cd2.ClassRangeRecord = NULL;
-
-  start      = glyph_array[0];
-  curr_class = class_array[0];
-  curr_glyph = start;
-
-  if ( curr_class >= 5 )
-  {
-    error = ERR(HB_Err_Invalid_Argument);
-    goto Fail4;
-  }
-
-  glyph_count--;
-
-  for ( n = 0; n < glyph_count + 1; n++ )
-  {
-    if ( curr_glyph == glyph_array[n] && curr_class == class_array[n] )
-    {
-      if ( n == glyph_count )
-      {
-       if ( ( error = Make_ClassRange( gcd, start,
-                                       curr_glyph,
-                                       curr_class) ) != HB_Err_Ok )
-         goto Fail3;
-      }
-      else
-      {
-       if ( curr_glyph == 0xFFFF )
-       {
-         error = ERR(HB_Err_Invalid_Argument);
-         goto Fail3;
-       }
-       else
-         curr_glyph++;
-      }
-    }
-    else
-    {
-      if ( ( error = Make_ClassRange( gcd, start,
-                                     curr_glyph - 1,
-                                     curr_class) ) != HB_Err_Ok )
-       goto Fail3;
-
-      if ( curr_glyph > glyph_array[n] )
-      {
-       error = ERR(HB_Err_Invalid_Argument);
-       goto Fail3;
-      }
-
-      start      = glyph_array[n];
-      curr_class = class_array[n];
-      curr_glyph = start;
-
-      if ( curr_class >= 5 )
-      {
-       error = ERR(HB_Err_Invalid_Argument);
-       goto Fail3;
-      }
-
-      if ( n == glyph_count )
-      {
-       if ( ( error = Make_ClassRange( gcd, start,
-                                       curr_glyph,
-                                       curr_class) ) != HB_Err_Ok )
-         goto Fail3;
-      }
-      else
-      {
-       if ( curr_glyph == 0xFFFF )
-       {
-         error = ERR(HB_Err_Invalid_Argument);
-         goto Fail3;
-       }
-       else
-         curr_glyph++;
-      }
-    }
-  }
-
-  /* now prepare the arrays for class values assigned during the lookup
-     process                                                            */
-
-  if ( ALLOC_ARRAY( gdef->NewGlyphClasses,
-                   gcd->cd.cd2.ClassRangeCount + 1, HB_UShort* ) )
-    goto Fail3;
-
-  count = gcd->cd.cd2.ClassRangeCount;
-  gcrr  = gcd->cd.cd2.ClassRangeRecord;
-  ngc   = gdef->NewGlyphClasses;
-
-  /* We allocate arrays for all glyphs not covered by the class range
-     records.  Each element holds four class values.                  */
-
-  if ( count > 0 )
-  {
-      if ( gcrr[0].Start )
-      {
-       if ( ALLOC_ARRAY( ngc[0], ( gcrr[0].Start + 3 ) / 4, HB_UShort ) )
-         goto Fail2;
-      }
-
-      for ( n = 1; n < count; n++ )
-      {
-       if ( gcrr[n].Start - gcrr[n - 1].End > 1 )
-         if ( ALLOC_ARRAY( ngc[n],
-                           ( gcrr[n].Start - gcrr[n - 1].End + 2 ) / 4,
-                           HB_UShort ) )
-           goto Fail1;
-      }
-
-      if ( gcrr[count - 1].End != num_glyphs - 1 )
-      {
-       if ( ALLOC_ARRAY( ngc[count],
-                         ( num_glyphs - gcrr[count - 1].End + 2 ) / 4,
-                         HB_UShort ) )
-           goto Fail1;
-      }
-  }
-  else if ( num_glyphs > 0 )
-  {
-      if ( ALLOC_ARRAY( ngc[count],
-                       ( num_glyphs + 3 ) / 4,
-                       HB_UShort ) )
-         goto Fail2;
-  }
-      
-  gdef->LastGlyph = num_glyphs - 1;
-
-  gdef->MarkAttachClassDef_offset = 0L;
-  gdef->MarkAttachClassDef.loaded = FALSE;
-
-  gcd->loaded = TRUE;
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    FREE( ngc[m] );
-
-Fail2:
-  FREE( gdef->NewGlyphClasses );
-
-Fail3:
-  FREE( gcd->cd.cd2.ClassRangeRecord );
-
-Fail4:
-  return error;
-}
-
-
-static void  Free_NewGlyphClasses( HB_GDEFHeader*  gdef )
-{
-  HB_UShort**  ngc;
-  HB_UShort    n, count;
-
-
-  if ( gdef->NewGlyphClasses )
-  {
-    count = gdef->GlyphClassDef.cd.cd2.ClassRangeCount + 1;
-    ngc   = gdef->NewGlyphClasses;
-
-    for ( n = 0; n < count; n++ )
-      FREE( ngc[n] );
-
-    FREE( ngc );
-  }
-}
-
-
-HB_INTERNAL HB_Error
-_HB_GDEF_Add_Glyph_Property( HB_GDEFHeader* gdef,
-                             HB_UShort        glyphID,
-                             HB_UShort        property )
-{
-  HB_Error               error;
-  HB_UShort              class, new_class, index = 0; /* shut compiler up */
-  HB_UShort              byte, bits, mask;
-  HB_UShort              array_index, glyph_index, count;
-
-  HB_ClassRangeRecord*  gcrr;
-  HB_UShort**            ngc;
-
-
-  error = _HB_OPEN_Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );
-  if ( error && error != HB_Err_Not_Covered )
-    return error;
-
-  /* we don't accept glyphs covered in `GlyphClassDef' */
-
-  if ( !error )
-    return HB_Err_Not_Covered;
-
-  switch ( property )
-  {
-  case 0:
-    new_class = UNCLASSIFIED_GLYPH;
-    break;
-
-  case HB_GDEF_BASE_GLYPH:
-    new_class = SIMPLE_GLYPH;
-    break;
-
-  case HB_GDEF_LIGATURE:
-    new_class = LIGATURE_GLYPH;
-    break;
-
-  case HB_GDEF_MARK:
-    new_class = MARK_GLYPH;
-    break;
-
-  case HB_GDEF_COMPONENT:
-    new_class = COMPONENT_GLYPH;
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_Argument);
-  }
-
-  count = gdef->GlyphClassDef.cd.cd2.ClassRangeCount;
-  gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;
-  ngc  = gdef->NewGlyphClasses;
-
-  if ( index < count && glyphID < gcrr[index].Start )
-  {
-    array_index = index;
-    if ( index == 0 )
-      glyph_index = glyphID;
-    else
-      glyph_index = glyphID - gcrr[index - 1].End - 1;
-  }
-  else
-  {
-    array_index = index + 1;
-    glyph_index = glyphID - gcrr[index].End - 1;
-  }
-
-  byte  = ngc[array_index][glyph_index / 4];
-  bits  = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );
-  class = bits & 0x000F;
-
-  /* we don't overwrite existing entries */
-
-  if ( !class )
-  {
-    bits = new_class << ( 16 - ( glyph_index % 4 + 1 ) * 4 );
-    mask = ~( 0x000F << ( 16 - ( glyph_index % 4 + 1 ) * 4 ) );
-
-    ngc[array_index][glyph_index / 4] &= mask;
-    ngc[array_index][glyph_index / 4] |= bits;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-HB_INTERNAL HB_Error
-_HB_GDEF_Check_Property( HB_GDEFHeader* gdef,
-                         HB_GlyphItem    gitem,
-                         HB_UShort        flags,
-                         HB_UShort*       property )
-{
-  HB_Error  error;
-
-  if ( gdef )
-  {
-    HB_UShort basic_glyph_class;
-    HB_UShort desired_attachment_class;
-
-    if ( gitem->gproperties == HB_GLYPH_PROPERTIES_UNKNOWN )
-    {
-      error = HB_GDEF_Get_Glyph_Property( gdef, gitem->gindex, &gitem->gproperties );
-      if ( error )
-       return error;
-    }
-
-    *property = gitem->gproperties;
-
-    /* If the glyph was found in the MarkAttachmentClass table,
-     * then that class value is the high byte of the result,
-     * otherwise the low byte contains the basic type of the glyph
-     * as defined by the GlyphClassDef table.
-     */
-    if ( *property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS  )
-      basic_glyph_class = HB_GDEF_MARK;
-    else
-      basic_glyph_class = *property;
-
-    /* Return Not_Covered, if, for example, basic_glyph_class
-     * is HB_GDEF_LIGATURE and LookFlags includes HB_LOOKUP_FLAG_IGNORE_LIGATURES
-     */
-    if ( flags & basic_glyph_class )
-      return HB_Err_Not_Covered;
-    
-    /* The high byte of LookupFlags has the meaning
-     * "ignore marks of attachment type different than
-     * the attachment type specified."
-     */
-    desired_attachment_class = flags & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS;
-    if ( desired_attachment_class )
-    {
-      if ( basic_glyph_class == HB_GDEF_MARK &&
-          *property != desired_attachment_class )
-       return HB_Err_Not_Covered;
-    }
-  } else {
-      *property = 0;
-  }
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL HB_Error
-_HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( HB_GDEFHeader* gdef,
-                                                 HB_Stream      stream,
-                                                 HB_Lookup*     lo,
-                                                 HB_UShort      num_lookups)
-{
-  HB_Error   error = HB_Err_Ok;
-  HB_UShort  i;
-
-  /* We now check the LookupFlags for values larger than 0xFF to find
-     out whether we need to load the `MarkAttachClassDef' field of the
-     GDEF table -- this hack is necessary for OpenType 1.2 tables since
-     the version field of the GDEF table hasn't been incremented.
-
-     For constructed GDEF tables, we only load it if
-     `MarkAttachClassDef_offset' is not zero (nevertheless, a build of
-     a constructed mark attach table is not supported currently).       */
-
-  if ( gdef &&
-       gdef->MarkAttachClassDef_offset && !gdef->MarkAttachClassDef.loaded )
-  {
-    for ( i = 0; i < num_lookups; i++ )
-    {
-
-      if ( lo[i].LookupFlag & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS )
-      {
-       if ( FILE_Seek( gdef->MarkAttachClassDef_offset ) ||
-            ( error = _HB_OPEN_Load_ClassDefinition( &gdef->MarkAttachClassDef,
-                                            256, stream ) ) != HB_Err_Ok )
-         goto Done;
-
-       break;
-      }
-    }
-  }
-
-Done:
-  return error;
-}
-
-/* END */
diff --git a/src/hb-old/harfbuzz-gdef.h b/src/hb-old/harfbuzz-gdef.h
deleted file mode 100644 (file)
index f9a03dd..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GDEF_H
-#define HARFBUZZ_GDEF_H
-
-#include "harfbuzz-open.h"
-#include "harfbuzz-stream.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/* GDEF glyph properties.  Note that HB_GDEF_COMPONENT has no corresponding
- * flag in the LookupFlag field.     */
-#define HB_GDEF_BASE_GLYPH  0x0002
-#define HB_GDEF_LIGATURE    0x0004
-#define HB_GDEF_MARK        0x0008
-#define HB_GDEF_COMPONENT   0x0010
-
-
-typedef struct HB_AttachPoint_  HB_AttachPoint;
-
-
-struct  HB_AttachList_
-{
-  HB_AttachPoint*   AttachPoint;      /* array of AttachPoint tables */
-  HB_Coverage       Coverage;         /* Coverage table              */
-  HB_UShort         GlyphCount;       /* number of glyphs with
-                                        attachments                 */
-  HB_Bool           loaded;
-};
-
-typedef struct HB_AttachList_  HB_AttachList;
-
-typedef struct HB_LigGlyph_  HB_LigGlyph;
-
-struct  HB_LigCaretList_
-{
-  HB_LigGlyph*   LigGlyph;            /* array of LigGlyph tables  */
-  HB_Coverage    Coverage;            /* Coverage table            */
-  HB_UShort      LigGlyphCount;       /* number of ligature glyphs */
-  HB_Bool        loaded;
-};
-
-typedef struct HB_LigCaretList_  HB_LigCaretList;
-
-
-
-/* The `NewGlyphClasses' field is not defined in the TTO specification.
-   We use it for fonts with a constructed `GlyphClassDef' structure
-   (i.e., which don't have a GDEF table) to collect glyph classes
-   assigned during the lookup process.  The number of arrays in this
-   pointer array is GlyphClassDef->cd.cd2.ClassRangeCount+1; the nth
-   array then contains the glyph class values of the glyphs not covered
-   by the ClassRangeRecords structures with index n-1 and n.  We store
-   glyph class values for four glyphs in a single array element.
-
-   `LastGlyph' is identical to the number of glyphs minus one in the
-   font; we need it only if `NewGlyphClasses' is not NULL (to have an
-   upper bound for the last array).
-
-   Note that we first store the file offset to the `MarkAttachClassDef'
-   field (which has been introduced in OpenType 1.2) -- since the
-   `Version' field value hasn't been increased to indicate that we have
-   one more field for some obscure reason, we must parse the GSUB table
-   to find out whether class values refer to this table.  Only then we
-   can finally load the MarkAttachClassDef structure if necessary.      */
-
-struct  HB_GDEFHeader_
-{
-  HB_UShort**          NewGlyphClasses;
-  HB_UInt             offset;
-  HB_UInt             MarkAttachClassDef_offset;
-
-  HB_16Dot16             Version;
-
-  HB_ClassDefinition   GlyphClassDef;
-  HB_AttachList        AttachList;
-  HB_LigCaretList      LigCaretList;
-  HB_ClassDefinition   MarkAttachClassDef;        /* new in OT 1.2 */
-
-  HB_UShort            LastGlyph;
-};
-
-typedef struct HB_GDEFHeader_   HB_GDEFHeader;
-typedef struct HB_GDEFHeader_*  HB_GDEF;
-
-
-HB_Error  HB_New_GDEF_Table( HB_GDEFHeader** retptr );
-      
-
-HB_Error  HB_Load_GDEF_Table( HB_Stream       stream,
-                             HB_GDEFHeader** gdef );
-
-
-HB_Error  HB_Done_GDEF_Table ( HB_GDEFHeader* gdef );
-
-
-HB_Error  HB_GDEF_Get_Glyph_Property( HB_GDEFHeader*  gdef,
-                                     HB_UShort        glyphID,
-                                     HB_UShort*       property );
-
-HB_Error  HB_GDEF_Build_ClassDefinition( HB_GDEFHeader*  gdef,
-                                        HB_UShort        num_glyphs,
-                                        HB_UShort        glyph_count,
-                                        HB_UShort*       glyph_array,
-                                        HB_UShort*       class_array );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GDEF_H */
diff --git a/src/hb-old/harfbuzz-global.h b/src/hb-old/harfbuzz-global.h
deleted file mode 100644 (file)
index 9ba5841..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- * Copyright (C) 2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#ifndef HARFBUZZ_GLOBAL_H
-#define HARFBUZZ_GLOBAL_H
-
-#include <stdlib.h>
-#include <string.h>
-
-#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
-# define HB_BEGIN_VISIBILITY _Pragma ("GCC visibility push(hidden)")
-# define HB_END_VISIBILITY _Pragma ("GCC visibility pop")
-#else
-# define HB_BEGIN_VISIBILITY
-# define HB_END_VISIBILITY
-#endif
-#ifdef __cplusplus
-# define HB_BEGIN_HEADER  extern "C" { HB_BEGIN_VISIBILITY
-# define HB_END_HEADER  HB_END_VISIBILITY }
-#else
-# define HB_BEGIN_HEADER  HB_BEGIN_VISIBILITY
-# define HB_END_HEADER  HB_END_VISIBILITY
-#endif
-
-HB_BEGIN_HEADER
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-
-#define HB_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
-          ( ( (HB_UInt)_x1 << 24 ) |     \
-            ( (HB_UInt)_x2 << 16 ) |     \
-            ( (HB_UInt)_x3 <<  8 ) |     \
-              (HB_UInt)_x4         )
-
-typedef char hb_int8;
-typedef unsigned char hb_uint8;
-typedef short hb_int16;
-typedef unsigned short hb_uint16;
-typedef int hb_int32;
-typedef unsigned int hb_uint32;
-
-typedef hb_uint8 HB_Bool;
-
-typedef hb_uint8 HB_Byte;
-typedef hb_uint16 HB_UShort;
-typedef hb_uint32 HB_UInt;
-typedef hb_int8 HB_Char;
-typedef hb_int16 HB_Short;
-typedef hb_int32 HB_Int;
-
-typedef hb_uint16 HB_UChar16;
-typedef hb_uint32 HB_UChar32;
-typedef hb_uint32 HB_Glyph;
-typedef hb_int32 HB_Fixed; /* 26.6 */
-
-#define HB_FIXED_CONSTANT(v) ((v) * 64)
-#define HB_FIXED_ROUND(v) (((v)+32) & -64)
-
-typedef hb_int32 HB_16Dot16; /* 16.16 */
-
-typedef void * HB_Pointer;
-typedef hb_uint32 HB_Tag;
-
-typedef enum {
-  /* no error */
-  HB_Err_Ok                           = 0x0000,
-  HB_Err_Not_Covered                  = 0xFFFF,
-
-  /* _hb_err() is called whenever returning the following errors,
-   * and in a couple places for HB_Err_Not_Covered too. */
-
-  /* programmer error */
-  HB_Err_Invalid_Argument             = 0x1A66,
-
-  /* font error */
-  HB_Err_Invalid_SubTable_Format      = 0x157F,
-  HB_Err_Invalid_SubTable             = 0x1570,
-  HB_Err_Read_Error                   = 0x6EAD,
-
-  /* system error */
-  HB_Err_Out_Of_Memory                = 0xDEAD
-} HB_Error;
-
-typedef struct {
-    HB_Fixed x;
-    HB_Fixed y;
-} HB_FixedPoint;
-
-typedef struct HB_Font_ *HB_Font;
-typedef struct HB_StreamRec_ *HB_Stream;
-typedef struct HB_FaceRec_ *HB_Face;
-
-HB_END_HEADER
-
-#endif
diff --git a/src/hb-old/harfbuzz-gpos-private.h b/src/hb-old/harfbuzz-gpos-private.h
deleted file mode 100644 (file)
index 39f3159..0000000
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GPOS_PRIVATE_H
-#define HARFBUZZ_GPOS_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-stream-private.h"
-#include "harfbuzz-gpos.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/* shared tables */
-
-#define VR_X_PLACEMENT_DEVICE 0
-#define VR_Y_PLACEMENT_DEVICE 1
-#define VR_X_ADVANCE_DEVICE   2
-#define VR_Y_ADVANCE_DEVICE   3
-
-struct  HB_ValueRecord_
-{
-  HB_Short    XPlacement;             /* horizontal adjustment for
-                                        placement                      */
-  HB_Short    YPlacement;             /* vertical adjustment for
-                                        placement                      */
-  HB_Short    XAdvance;               /* horizontal adjustment for
-                                        advance                        */
-  HB_Short    YAdvance;               /* vertical adjustment for
-                                        advance                        */
-
-  HB_Device** DeviceTables;           /* device tables for placement
-                                        and advance                    */
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  HB_UShort   XIdPlacement;           /* horizontal placement metric ID */
-  HB_UShort   YIdPlacement;           /* vertical placement metric ID   */
-  HB_UShort   XIdAdvance;             /* horizontal advance metric ID   */
-  HB_UShort   YIdAdvance;             /* vertical advance metric ID     */
-#endif
-};
-
-typedef struct HB_ValueRecord_  HB_ValueRecord;
-
-
-/* Mask values to scan the value format of the ValueRecord structure.
- We always expand compressed ValueRecords of the font.              */
-
-#define HB_GPOS_FORMAT_HAVE_DEVICE_TABLES       0x00F0
-
-#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT         0x0001
-#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT         0x0002
-#define HB_GPOS_FORMAT_HAVE_X_ADVANCE           0x0004
-#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE           0x0008
-#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE  0x0010
-#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE  0x0020
-#define HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE    0x0040
-#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE    0x0080
-#define HB_GPOS_FORMAT_HAVE_X_ID_PLACEMENT      0x0100
-#define HB_GPOS_FORMAT_HAVE_Y_ID_PLACEMENT      0x0200
-#define HB_GPOS_FORMAT_HAVE_X_ID_ADVANCE        0x0400
-#define HB_GPOS_FORMAT_HAVE_Y_ID_ADVANCE        0x0800
-
-
-struct  HB_AnchorFormat1_
-{
-  HB_Short   XCoordinate;             /* horizontal value */
-  HB_Short   YCoordinate;             /* vertical value   */
-};
-
-typedef struct HB_AnchorFormat1_  HB_AnchorFormat1;
-
-
-struct  HB_AnchorFormat2_
-{
-  HB_Short   XCoordinate;             /* horizontal value             */
-  HB_Short   YCoordinate;             /* vertical value               */
-  HB_UShort  AnchorPoint;             /* index to glyph contour point */
-};
-
-typedef struct HB_AnchorFormat2_  HB_AnchorFormat2;
-
-#define AF3_X_DEVICE_TABLE 0
-#define AF3_Y_DEVICE_TABLE 1
-
-struct  HB_AnchorFormat3_
-{
-  HB_Short    XCoordinate;            /* horizontal value              */
-  HB_Short    YCoordinate;            /* vertical value                */
-  HB_Device** DeviceTables;           /* device tables for coordinates */
-};
-
-typedef struct HB_AnchorFormat3_  HB_AnchorFormat3;
-
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-struct  HB_AnchorFormat4_
-{
-  HB_UShort  XIdAnchor;               /* horizontal metric ID */
-  HB_UShort  YIdAnchor;               /* vertical metric ID   */
-};
-
-typedef struct HB_AnchorFormat4_  HB_AnchorFormat4;
-#endif
-
-
-struct  HB_Anchor_
-{
-  HB_Byte  PosFormat;                 /* 1, 2, 3, or 4 -- 0 indicates
-                                        that there is no Anchor table */
-
-  union
-  {
-    HB_AnchorFormat1  af1;
-    HB_AnchorFormat2  af2;
-    HB_AnchorFormat3  af3;
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    HB_AnchorFormat4  af4;
-#endif
-  } af;
-};
-
-typedef struct HB_Anchor_  HB_Anchor;
-
-
-struct  HB_MarkRecord_
-{
-  HB_UShort   Class;                  /* mark class   */
-  HB_Anchor  MarkAnchor;             /* anchor table */
-};
-
-typedef struct HB_MarkRecord_  HB_MarkRecord;
-
-
-struct  HB_MarkArray_
-{
-  HB_UShort        MarkCount;         /* number of MarkRecord tables */
-  HB_MarkRecord*  MarkRecord;        /* array of MarkRecord tables  */
-};
-
-typedef struct HB_MarkArray_  HB_MarkArray;
-
-
-/* LookupType 1 */
-
-struct  HB_SinglePosFormat1_
-{
-  HB_ValueRecord  Value;             /* ValueRecord for all covered
-                                        glyphs                      */
-};
-
-typedef struct HB_SinglePosFormat1_  HB_SinglePosFormat1;
-
-
-struct  HB_SinglePosFormat2_
-{
-  HB_UShort         ValueCount;       /* number of ValueRecord tables */
-  HB_ValueRecord*  Value;            /* array of ValueRecord tables  */
-};
-
-typedef struct HB_SinglePosFormat2_  HB_SinglePosFormat2;
-
-
-struct  HB_SinglePos_
-{
-  HB_Byte       PosFormat;            /* 1 or 2         */
-  HB_Coverage  Coverage;             /* Coverage table */
-
-  HB_UShort     ValueFormat;          /* format of ValueRecord table */
-
-  union
-  {
-    HB_SinglePosFormat1  spf1;
-    HB_SinglePosFormat2  spf2;
-  } spf;
-};
-
-typedef struct HB_SinglePos_  HB_SinglePos;
-
-
-/* LookupType 2 */
-
-struct  HB_PairValueRecord_
-{
-  HB_UShort        SecondGlyph;       /* glyph ID for second glyph  */
-  HB_ValueRecord  Value1;            /* pos. data for first glyph  */
-  HB_ValueRecord  Value2;            /* pos. data for second glyph */
-};
-
-typedef struct HB_PairValueRecord_  HB_PairValueRecord;
-
-
-struct  HB_PairSet_
-{
-  HB_UShort             PairValueCount;
-                                     /* number of PairValueRecord tables */
-  HB_PairValueRecord*  PairValueRecord;
-                                     /* array of PairValueRecord tables  */
-};
-
-typedef struct HB_PairSet_  HB_PairSet;
-
-
-struct  HB_PairPosFormat1_
-{
-  HB_UShort     PairSetCount;         /* number of PairSet tables    */
-  HB_PairSet*  PairSet;              /* array of PairSet tables     */
-};
-
-typedef struct HB_PairPosFormat1_  HB_PairPosFormat1;
-
-
-struct  HB_Class2Record_
-{
-  HB_ValueRecord  Value1;            /* pos. data for first glyph  */
-  HB_ValueRecord  Value2;            /* pos. data for second glyph */
-};
-
-typedef struct HB_Class2Record_  HB_Class2Record;
-
-
-struct  HB_Class1Record_
-{
-  HB_Class2Record*  Class2Record;    /* array of Class2Record tables */
-};
-
-typedef struct HB_Class1Record_  HB_Class1Record;
-
-
-struct  HB_PairPosFormat2_
-{
-  HB_ClassDefinition  ClassDef1;     /* class def. for first glyph     */
-  HB_ClassDefinition  ClassDef2;     /* class def. for second glyph    */
-  HB_UShort            Class1Count;   /* number of classes in ClassDef1
-                                        table                          */
-  HB_UShort            Class2Count;   /* number of classes in ClassDef2
-                                        table                          */
-  HB_Class1Record*    Class1Record;  /* array of Class1Record tables   */
-};
-
-typedef struct HB_PairPosFormat2_  HB_PairPosFormat2;
-
-
-struct  HB_PairPos_
-{
-  HB_Byte       PosFormat;            /* 1 or 2         */
-  HB_Coverage  Coverage;             /* Coverage table */
-  HB_UShort     ValueFormat1;         /* format of ValueRecord table
-                                        for first glyph             */
-  HB_UShort     ValueFormat2;         /* format of ValueRecord table
-                                        for second glyph            */
-
-  union
-  {
-    HB_PairPosFormat1  ppf1;
-    HB_PairPosFormat2  ppf2;
-  } ppf;
-};
-
-typedef struct HB_PairPos_  HB_PairPos;
-
-
-/* LookupType 3 */
-
-struct  HB_EntryExitRecord_
-{
-  HB_Anchor  EntryAnchor;            /* entry Anchor table */
-  HB_Anchor  ExitAnchor;             /* exit Anchor table  */
-};
-
-
-typedef struct HB_EntryExitRecord_  HB_EntryExitRecord;
-
-struct  HB_CursivePos_
-{
-  HB_UShort             PosFormat;    /* always 1                         */
-  HB_Coverage          Coverage;     /* Coverage table                   */
-  HB_UShort             EntryExitCount;
-                                     /* number of EntryExitRecord tables */
-  HB_EntryExitRecord*  EntryExitRecord;
-                                     /* array of EntryExitRecord tables  */
-};
-
-typedef struct HB_CursivePos_  HB_CursivePos;
-
-
-/* LookupType 4 */
-
-struct  HB_BaseRecord_
-{
-  HB_Anchor*  BaseAnchor;            /* array of base glyph anchor
-                                        tables                     */
-};
-
-typedef struct HB_BaseRecord_  HB_BaseRecord;
-
-
-struct  HB_BaseArray_
-{
-  HB_UShort        BaseCount;         /* number of BaseRecord tables */
-  HB_BaseRecord*  BaseRecord;        /* array of BaseRecord tables  */
-};
-
-typedef struct HB_BaseArray_  HB_BaseArray;
-
-
-struct  HB_MarkBasePos_
-{
-  HB_UShort      PosFormat;           /* always 1                  */
-  HB_Coverage   MarkCoverage;        /* mark glyph coverage table */
-  HB_Coverage   BaseCoverage;        /* base glyph coverage table */
-  HB_UShort      ClassCount;          /* number of mark classes    */
-  HB_MarkArray  MarkArray;           /* mark array table          */
-  HB_BaseArray  BaseArray;           /* base array table          */
-};
-
-typedef struct HB_MarkBasePos_  HB_MarkBasePos;
-
-
-/* LookupType 5 */
-
-struct  HB_ComponentRecord_
-{
-  HB_Anchor*  LigatureAnchor;        /* array of ligature glyph anchor
-                                        tables                         */
-};
-
-typedef struct HB_ComponentRecord_  HB_ComponentRecord;
-
-
-struct  HB_LigatureAttach_
-{
-  HB_UShort             ComponentCount;
-                                     /* number of ComponentRecord tables */
-  HB_ComponentRecord*  ComponentRecord;
-                                     /* array of ComponentRecord tables  */
-};
-
-typedef struct HB_LigatureAttach_  HB_LigatureAttach;
-
-
-struct  HB_LigatureArray_
-{
-  HB_UShort            LigatureCount; /* number of LigatureAttach tables */
-  HB_LigatureAttach*  LigatureAttach;
-                                     /* array of LigatureAttach tables  */
-};
-
-typedef struct HB_LigatureArray_  HB_LigatureArray;
-
-
-struct  HB_MarkLigPos_
-{
-  HB_UShort          PosFormat;       /* always 1                      */
-  HB_Coverage       MarkCoverage;    /* mark glyph coverage table     */
-  HB_Coverage       LigatureCoverage;
-                                     /* ligature glyph coverage table */
-  HB_UShort          ClassCount;      /* number of mark classes        */
-  HB_MarkArray      MarkArray;       /* mark array table              */
-  HB_LigatureArray  LigatureArray;   /* ligature array table          */
-};
-
-typedef struct HB_MarkLigPos_  HB_MarkLigPos;
-
-
-/* LookupType 6 */
-
-struct  HB_Mark2Record_
-{
-  HB_Anchor*  Mark2Anchor;           /* array of mark glyph anchor
-                                        tables                     */
-};
-
-typedef struct HB_Mark2Record_  HB_Mark2Record;
-
-
-struct  HB_Mark2Array_
-{
-  HB_UShort         Mark2Count;       /* number of Mark2Record tables */
-  HB_Mark2Record*  Mark2Record;      /* array of Mark2Record tables  */
-};
-
-typedef struct HB_Mark2Array_  HB_Mark2Array;
-
-
-struct  HB_MarkMarkPos_
-{
-  HB_UShort       PosFormat;          /* always 1                         */
-  HB_Coverage    Mark1Coverage;      /* first mark glyph coverage table  */
-  HB_Coverage    Mark2Coverage;      /* second mark glyph coverave table */
-  HB_UShort       ClassCount;         /* number of combining mark classes */
-  HB_MarkArray   Mark1Array;         /* MarkArray table for first mark   */
-  HB_Mark2Array  Mark2Array;         /* MarkArray table for second mark  */
-};
-
-typedef struct HB_MarkMarkPos_  HB_MarkMarkPos;
-
-
-/* needed by both lookup type 7 and 8 */
-
-struct  HB_PosLookupRecord_
-{
-  HB_UShort  SequenceIndex;           /* index into current
-                                        glyph sequence               */
-  HB_UShort  LookupListIndex;         /* Lookup to apply to that pos. */
-};
-
-typedef struct HB_PosLookupRecord_  HB_PosLookupRecord;
-
-
-/* LookupType 7 */
-
-struct  HB_PosRule_
-{
-  HB_UShort             GlyphCount;   /* total number of input glyphs     */
-  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
-  HB_UShort*            Input;        /* array of input glyph IDs         */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of PosLookupRecord tables  */
-};
-
-typedef struct HB_PosRule_  HB_PosRule;
-
-
-struct  HB_PosRuleSet_
-{
-  HB_UShort     PosRuleCount;         /* number of PosRule tables */
-  HB_PosRule*  PosRule;              /* array of PosRule tables  */
-};
-
-typedef struct HB_PosRuleSet_  HB_PosRuleSet;
-
-
-struct  HB_ContextPosFormat1_
-{
-  HB_Coverage     Coverage;          /* Coverage table              */
-  HB_UShort        PosRuleSetCount;   /* number of PosRuleSet tables */
-  HB_PosRuleSet*  PosRuleSet;        /* array of PosRuleSet tables  */
-};
-
-typedef struct HB_ContextPosFormat1_  HB_ContextPosFormat1;
-
-
-struct  HB_PosClassRule_
-{
-  HB_UShort             GlyphCount;   /* total number of context classes  */
-  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
-  HB_UShort*            Class;        /* array of classes                 */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of PosLookupRecord tables  */
-};
-
-typedef struct HB_PosClassRule_  HB_PosClassRule;
-
-
-struct  HB_PosClassSet_
-{
-  HB_UShort          PosClassRuleCount;
-                                     /* number of PosClassRule tables */
-  HB_PosClassRule*  PosClassRule;    /* array of PosClassRule tables  */
-};
-
-typedef struct HB_PosClassSet_  HB_PosClassSet;
-
-
-/* The `MaxContextLength' field is not defined in the TTO specification
-   but simplifies the implementation of this format.  It holds the
-   maximal context length used in the context rules.                    */
-
-struct  HB_ContextPosFormat2_
-{
-  HB_UShort            MaxContextLength;
-                                     /* maximal context length       */
-  HB_Coverage         Coverage;      /* Coverage table               */
-  HB_ClassDefinition  ClassDef;      /* ClassDef table               */
-  HB_UShort            PosClassSetCount;
-                                     /* number of PosClassSet tables */
-  HB_PosClassSet*     PosClassSet;   /* array of PosClassSet tables  */
-};
-
-typedef struct HB_ContextPosFormat2_  HB_ContextPosFormat2;
-
-
-struct  HB_ContextPosFormat3_
-{
-  HB_UShort             GlyphCount;   /* number of input glyphs           */
-  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
-  HB_Coverage*         Coverage;     /* array of Coverage tables         */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of PosLookupRecord tables  */
-};
-
-typedef struct HB_ContextPosFormat3_  HB_ContextPosFormat3;
-
-
-struct  HB_ContextPos_
-{
-  HB_Byte  PosFormat;                 /* 1, 2, or 3     */
-
-  union
-  {
-    HB_ContextPosFormat1  cpf1;
-    HB_ContextPosFormat2  cpf2;
-    HB_ContextPosFormat3  cpf3;
-  } cpf;
-};
-
-typedef struct HB_ContextPos_  HB_ContextPos;
-
-
-/* LookupType 8 */
-
-struct  HB_ChainPosRule_
-{
-  HB_UShort*            Backtrack;    /* array of backtrack glyph IDs     */
-  HB_UShort*            Input;        /* array of input glyph IDs         */
-  HB_UShort*            Lookahead;    /* array of lookahead glyph IDs     */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of PosLookupRecords       */
-  HB_UShort             BacktrackGlyphCount;
-                                     /* total number of backtrack glyphs */
-  HB_UShort             InputGlyphCount;
-                                     /* total number of input glyphs     */
-  HB_UShort             LookaheadGlyphCount;
-                                     /* total number of lookahead glyphs */
-  HB_UShort             PosCount;     /* number of PosLookupRecords       */
-};
-
-typedef struct HB_ChainPosRule_  HB_ChainPosRule;
-
-
-struct  HB_ChainPosRuleSet_
-{
-  HB_UShort          ChainPosRuleCount;
-                                     /* number of ChainPosRule tables */
-  HB_ChainPosRule*  ChainPosRule;    /* array of ChainPosRule tables  */
-};
-
-typedef struct HB_ChainPosRuleSet_  HB_ChainPosRuleSet;
-
-
-struct  HB_ChainContextPosFormat1_
-{
-  HB_Coverage          Coverage;     /* Coverage table                   */
-  HB_UShort             ChainPosRuleSetCount;
-                                     /* number of ChainPosRuleSet tables */
-  HB_ChainPosRuleSet*  ChainPosRuleSet;
-                                     /* array of ChainPosRuleSet tables  */
-};
-
-typedef struct HB_ChainContextPosFormat1_  HB_ChainContextPosFormat1;
-
-
-struct  HB_ChainPosClassRule_
-{
-  HB_UShort*            Backtrack;    /* array of backtrack classes      */
-  HB_UShort*            Input;        /* array of context classes        */
-  HB_UShort*            Lookahead;    /* array of lookahead classes      */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of substitution lookups   */
-  HB_UShort             BacktrackGlyphCount;
-                                     /* total number of backtrack
-                                        classes                         */
-  HB_UShort             InputGlyphCount;
-                                     /* total number of context classes */
-  HB_UShort             LookaheadGlyphCount;
-                                     /* total number of lookahead
-                                        classes                         */
-  HB_UShort             PosCount;     /* number of PosLookupRecords      */
-};
-
-typedef struct HB_ChainPosClassRule_  HB_ChainPosClassRule;
-
-
-struct  HB_ChainPosClassSet_
-{
-  HB_UShort               ChainPosClassRuleCount;
-                                     /* number of ChainPosClassRule
-                                        tables                      */
-  HB_ChainPosClassRule*  ChainPosClassRule;
-                                     /* array of ChainPosClassRule
-                                        tables                      */
-};
-
-typedef struct HB_ChainPosClassSet_  HB_ChainPosClassSet;
-
-
-/* The `MaxXXXLength' fields are not defined in the TTO specification
-   but simplifies the implementation of this format.  It holds the
-   maximal context length used in the specific context rules.         */
-
-struct  HB_ChainContextPosFormat2_
-{
-  HB_Coverage           Coverage;    /* Coverage table             */
-
-  HB_UShort              MaxBacktrackLength;
-                                     /* maximal backtrack length   */
-  HB_ClassDefinition    BacktrackClassDef;
-                                     /* BacktrackClassDef table    */
-  HB_UShort              MaxInputLength;
-                                     /* maximal input length       */
-  HB_ClassDefinition    InputClassDef;
-                                     /* InputClassDef table        */
-  HB_UShort              MaxLookaheadLength;
-                                     /* maximal lookahead length   */
-  HB_ClassDefinition    LookaheadClassDef;
-                                     /* LookaheadClassDef table    */
-
-  HB_UShort              ChainPosClassSetCount;
-                                     /* number of ChainPosClassSet
-                                        tables                     */
-  HB_ChainPosClassSet*  ChainPosClassSet;
-                                     /* array of ChainPosClassSet
-                                        tables                     */
-};
-
-typedef struct HB_ChainContextPosFormat2_  HB_ChainContextPosFormat2;
-
-
-struct  HB_ChainContextPosFormat3_
-{
-  HB_UShort             BacktrackGlyphCount;
-                                     /* number of backtrack glyphs    */
-  HB_Coverage*         BacktrackCoverage;
-                                     /* array of backtrack Coverage
-                                        tables                        */
-  HB_UShort             InputGlyphCount;
-                                     /* number of input glyphs        */
-  HB_Coverage*         InputCoverage;
-                                     /* array of input coverage
-                                        tables                        */
-  HB_UShort             LookaheadGlyphCount;
-                                     /* number of lookahead glyphs    */
-  HB_Coverage*         LookaheadCoverage;
-                                     /* array of lookahead coverage
-                                        tables                        */
-  HB_UShort             PosCount;     /* number of PosLookupRecords    */
-  HB_PosLookupRecord*  PosLookupRecord;
-                                     /* array of substitution lookups */
-};
-
-typedef struct HB_ChainContextPosFormat3_  HB_ChainContextPosFormat3;
-
-
-struct  HB_ChainContextPos_
-{
-  HB_Byte  PosFormat;               /* 1, 2, or 3 */
-
-  union
-  {
-    HB_ChainContextPosFormat1  ccpf1;
-    HB_ChainContextPosFormat2  ccpf2;
-    HB_ChainContextPosFormat3  ccpf3;
-  } ccpf;
-};
-
-typedef struct HB_ChainContextPos_  HB_ChainContextPos;
-
-
-#if 0
-/* LookupType 10 */
-struct HB_ExtensionPos_
-{
-  HB_UShort      PosFormat;           /* always 1 */
-  HB_UShort      LookuptType;         /* lookup-type of referenced subtable */
-  HB_GPOS_SubTable *subtable;         /* referenced subtable */
-};
-
-typedef struct HB_ExtensionPos_  HB_ExtensionPos;
-#endif
-
-
-union  HB_GPOS_SubTable_
-{
-  HB_SinglePos        single;
-  HB_PairPos          pair;
-  HB_CursivePos       cursive;
-  HB_MarkBasePos      markbase;
-  HB_MarkLigPos       marklig;
-  HB_MarkMarkPos      markmark;
-  HB_ContextPos       context;
-  HB_ChainContextPos  chain;
-};
-
-typedef union HB_GPOS_SubTable_  HB_GPOS_SubTable;
-
-
-
-HB_INTERNAL HB_Error
-_HB_GPOS_Load_SubTable( HB_GPOS_SubTable* st,
-                                 HB_Stream     stream,
-                                 HB_UShort     lookup_type );
-
-HB_INTERNAL void
-_HB_GPOS_Free_SubTable( HB_GPOS_SubTable* st,
-                             HB_UShort     lookup_type );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GPOS_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-gpos.c b/src/hb-old/harfbuzz-gpos.c
deleted file mode 100644 (file)
index e969a01..0000000
+++ /dev/null
@@ -1,6094 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- * Copyright (C) 2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-gpos-private.h"
-#include "harfbuzz-open-private.h"
-#include "harfbuzz-gdef-private.h"
-#include "harfbuzz-shaper.h"
-
-struct  GPOS_Instance_
-{
-  HB_GPOSHeader*  gpos;
-  HB_Font          font;
-  HB_Bool          dvi;
-  HB_UShort        load_flags;  /* how the glyph should be loaded */
-  HB_Bool          r2l;
-
-  HB_UShort        last;        /* the last valid glyph -- used
-                                  with cursive positioning     */
-  HB_Fixed           anchor_x;    /* the coordinates of the anchor point */
-  HB_Fixed           anchor_y;    /* of the last valid glyph             */
-};
-
-typedef struct GPOS_Instance_  GPOS_Instance;
-
-
-static HB_Error  GPOS_Do_Glyph_Lookup( GPOS_Instance*    gpi,
-                                      HB_UShort         lookup_index,
-                                      HB_Buffer        buffer,
-                                      HB_UShort         context_length,
-                                      int               nesting_level );
-
-
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-/* the client application must replace this with something more
-   meaningful if multiple master fonts are to be supported.     */
-
-static HB_Error  default_mmfunc( HB_Font      font,
-                                HB_UShort    metric_id,
-                                HB_Fixed*      metric_value,
-                                void*        data )
-{
-  HB_UNUSED(font);
-  HB_UNUSED(metric_id);
-  HB_UNUSED(metric_value);
-  HB_UNUSED(data);
-  return ERR(HB_Err_Not_Covered); /* ERR() call intended */
-}
-#endif
-
-
-
-HB_Error  HB_Load_GPOS_Table( HB_Stream stream, 
-                             HB_GPOSHeader** retptr,
-                             HB_GDEFHeader*  gdef,
-                             HB_Stream       gdefStream )
-{
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_GPOSHeader*  gpos;
-
-  HB_Error   error;
-
-
-  if ( !retptr )
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( GOTO_Table( TTAG_GPOS ) )
-    return error;
-
-  base_offset = FILE_Pos();
-
-  if ( ALLOC ( gpos, sizeof( *gpos ) ) )
-    return error;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  gpos->mmfunc = default_mmfunc;
-#endif
-
-  /* skip version */
-
-  if ( FILE_Seek( base_offset + 4L ) ||
-       ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_ScriptList( &gpos->ScriptList,
-                                 stream ) ) != HB_Err_Ok )
-    goto Fail4;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_FeatureList( &gpos->FeatureList,
-                                  stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_LookupList( &gpos->LookupList,
-                                 stream, HB_Type_GPOS ) ) != HB_Err_Ok )
-    goto Fail2;
-
-  gpos->gdef = gdef;      /* can be NULL */
-
-  if ( ( error =  _HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( gdef, gdefStream,
-                                                                    gpos->LookupList.Lookup,
-                                                                    gpos->LookupList.LookupCount ) ) )
-    goto Fail1;
-
-  *retptr = gpos;
-
-  return HB_Err_Ok;
-
-Fail1:
-  _HB_OPEN_Free_LookupList( &gpos->LookupList, HB_Type_GPOS );
-
-Fail2:
-  _HB_OPEN_Free_FeatureList( &gpos->FeatureList );
-
-Fail3:
-  _HB_OPEN_Free_ScriptList( &gpos->ScriptList );
-
-Fail4:
-  FREE( gpos );
-
-  return error;
-}
-
-
-HB_Error  HB_Done_GPOS_Table( HB_GPOSHeader* gpos )
-{
-  _HB_OPEN_Free_LookupList( &gpos->LookupList, HB_Type_GPOS );
-  _HB_OPEN_Free_FeatureList( &gpos->FeatureList );
-  _HB_OPEN_Free_ScriptList( &gpos->ScriptList );
-
-  FREE( gpos );
-
-  return HB_Err_Ok;
-}
-
-
-/*****************************
- * SubTable related functions
- *****************************/
-
-/* shared tables */
-
-/* ValueRecord */
-
-/* There is a subtle difference in the specs between a `table' and a
-   `record' -- offsets for device tables in ValueRecords are taken from
-   the parent table and not the parent record.                          */
-
-static HB_Error  Load_ValueRecord( HB_ValueRecord*  vr,
-                                  HB_UShort         format,
-                                  HB_UInt          base_offset,
-                                  HB_Stream         stream )
-{
-  HB_Error  error;
-
-  HB_UInt cur_offset, new_offset;
-
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_PLACEMENT )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    vr->XPlacement = GET_Short();
-
-    FORGET_Frame();
-  }
-  else
-    vr->XPlacement = 0;
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_PLACEMENT )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    vr->YPlacement = GET_Short();
-
-    FORGET_Frame();
-  }
-  else
-    vr->YPlacement = 0;
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ADVANCE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    vr->XAdvance = GET_Short();
-
-    FORGET_Frame();
-  }
-  else
-    vr->XAdvance = 0;
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ADVANCE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    vr->YAdvance = GET_Short();
-
-    FORGET_Frame();
-  }
-  else
-    vr->YAdvance = 0;
-
-  if ( format & HB_GPOS_FORMAT_HAVE_DEVICE_TABLES )
-  {
-    if ( ALLOC_ARRAY( vr->DeviceTables, 4, HB_Device ) )
-      return error;
-    vr->DeviceTables[VR_X_ADVANCE_DEVICE] = 0;
-    vr->DeviceTables[VR_Y_ADVANCE_DEVICE] = 0;
-    vr->DeviceTables[VR_X_PLACEMENT_DEVICE] = 0;
-    vr->DeviceTables[VR_Y_PLACEMENT_DEVICE] = 0;
-  }
-  else
-  {
-    vr->DeviceTables = 0;
-  }
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail4;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &vr->DeviceTables[VR_X_PLACEMENT_DEVICE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail4;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail3;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &vr->DeviceTables[VR_Y_PLACEMENT_DEVICE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail3;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &vr->DeviceTables[VR_X_ADVANCE_DEVICE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail2;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &vr->DeviceTables[VR_Y_ADVANCE_DEVICE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ID_PLACEMENT )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    vr->XIdPlacement = GET_UShort();
-#else
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-  }
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  else
-    vr->XIdPlacement = 0;
-#endif
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ID_PLACEMENT )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    vr->YIdPlacement = GET_UShort();
-#else
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-  }
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  else
-    vr->YIdPlacement = 0;
-#endif
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ID_ADVANCE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    vr->XIdAdvance = GET_UShort();
-#else
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-  }
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  else
-    vr->XIdAdvance = 0;
-#endif
-
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ID_ADVANCE )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    vr->YIdAdvance = GET_UShort();
-#else
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-  }
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  else
-    vr->YIdAdvance = 0;
-#endif
-
-  return HB_Err_Ok;
-
-Fail1:
-  if ( vr->DeviceTables )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_Y_ADVANCE_DEVICE] );
-
-Fail2:
-  if ( vr->DeviceTables )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_X_ADVANCE_DEVICE] );
-
-Fail3:
-  if ( vr->DeviceTables )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_Y_PLACEMENT_DEVICE] );
-
-Fail4:
-  FREE( vr->DeviceTables );
-  return error;
-}
-
-
-static void  Free_ValueRecord( HB_ValueRecord*  vr,
-                              HB_UShort         format )
-{
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_Y_ADVANCE_DEVICE] );
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_X_ADVANCE_DEVICE] );
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_Y_PLACEMENT_DEVICE] );
-  if ( format & HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE )
-    _HB_OPEN_Free_Device( vr->DeviceTables[VR_X_PLACEMENT_DEVICE] );
-  FREE( vr->DeviceTables );
-}
-
-
-static HB_Error  Get_ValueRecord( GPOS_Instance*    gpi,
-                                 HB_ValueRecord*  vr,
-                                 HB_UShort         format,
-                                 HB_Position      gd )
-{
-  HB_Short         pixel_value;
-  HB_Error         error = HB_Err_Ok;
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_Fixed           value;
-#endif
-
-  HB_UShort  x_ppem, y_ppem;
-  HB_16Dot16   x_scale, y_scale;
-
-
-  if ( !format )
-    return HB_Err_Ok;
-
-  x_ppem  = gpi->font->x_ppem;
-  y_ppem  = gpi->font->y_ppem;
-  x_scale = gpi->font->x_scale;
-  y_scale = gpi->font->y_scale;
-
-  /* design units -> fractional pixel */
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_PLACEMENT )
-    gd->x_pos += x_scale * vr->XPlacement / 0x10000;
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_PLACEMENT )
-    gd->y_pos += y_scale * vr->YPlacement / 0x10000;
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ADVANCE )
-    gd->x_advance += x_scale * vr->XAdvance / 0x10000;
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ADVANCE )
-    gd->y_advance += y_scale * vr->YAdvance / 0x10000;
-
-  if ( !gpi->dvi )
-  {
-    /* pixel -> fractional pixel */
-
-    if ( format & HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE )
-    {
-      _HB_OPEN_Get_Device( vr->DeviceTables[VR_X_PLACEMENT_DEVICE], x_ppem, &pixel_value );
-      gd->x_pos += pixel_value << 6;
-    }
-    if ( format & HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE )
-    {
-      _HB_OPEN_Get_Device( vr->DeviceTables[VR_Y_PLACEMENT_DEVICE], y_ppem, &pixel_value );
-      gd->y_pos += pixel_value << 6;
-    }
-    if ( format & HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE )
-    {
-      _HB_OPEN_Get_Device( vr->DeviceTables[VR_X_ADVANCE_DEVICE], x_ppem, &pixel_value );
-      gd->x_advance += pixel_value << 6;
-    }
-    if ( format & HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE )
-    {
-      _HB_OPEN_Get_Device( vr->DeviceTables[VR_Y_ADVANCE_DEVICE], y_ppem, &pixel_value );
-      gd->y_advance += pixel_value << 6;
-    }
-  }
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  /* values returned from mmfunc() are already in fractional pixels */
-
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ID_PLACEMENT )
-  {
-    error = (gpos->mmfunc)( gpi->font, vr->XIdPlacement,
-                           &value, gpos->data );
-    if ( error )
-      return error;
-    gd->x_pos += value;
-  }
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ID_PLACEMENT )
-  {
-    error = (gpos->mmfunc)( gpi->font, vr->YIdPlacement,
-                           &value, gpos->data );
-    if ( error )
-      return error;
-    gd->y_pos += value;
-  }
-  if ( format & HB_GPOS_FORMAT_HAVE_X_ID_ADVANCE )
-  {
-    error = (gpos->mmfunc)( gpi->font, vr->XIdAdvance,
-                           &value, gpos->data );
-    if ( error )
-      return error;
-    gd->x_advance += value;
-  }
-  if ( format & HB_GPOS_FORMAT_HAVE_Y_ID_ADVANCE )
-  {
-    error = (gpos->mmfunc)( gpi->font, vr->YIdAdvance,
-                           &value, gpos->data );
-    if ( error )
-      return error;
-    gd->y_advance += value;
-  }
-#endif
-
-  return error;
-}
-
-
-/* AnchorFormat1 */
-/* AnchorFormat2 */
-/* AnchorFormat3 */
-/* AnchorFormat4 */
-
-static HB_Error  Load_Anchor( HB_Anchor*  an,
-                             HB_Stream    stream )
-{
-  HB_Error  error;
-
-  HB_UInt cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  an->PosFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( an->PosFormat )
-  {
-  case 1:
-    if ( ACCESS_Frame( 4L ) )
-      return error;
-
-    an->af.af1.XCoordinate = GET_Short();
-    an->af.af1.YCoordinate = GET_Short();
-
-    FORGET_Frame();
-    break;
-
-  case 2:
-    if ( ACCESS_Frame( 6L ) )
-      return error;
-
-    an->af.af2.XCoordinate = GET_Short();
-    an->af.af2.YCoordinate = GET_Short();
-    an->af.af2.AnchorPoint = GET_UShort();
-
-    FORGET_Frame();
-    break;
-
-  case 3:
-    if ( ACCESS_Frame( 6L ) )
-      return error;
-
-    an->af.af3.XCoordinate = GET_Short();
-    an->af.af3.YCoordinate = GET_Short();
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      if ( ALLOC_ARRAY( an->af.af3.DeviceTables, 2, HB_Device ) )
-        return error;
-
-      an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE] = 0;
-      an->af.af3.DeviceTables[AF3_Y_DEVICE_TABLE] = 0;
-
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail2;
-      (void)FILE_Seek( cur_offset );
-    }
-
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      if ( !an->af.af3.DeviceTables )
-      {
-        if ( ALLOC_ARRAY( an->af.af3.DeviceTables, 2, HB_Device ) )
-          return error;
-
-        an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE] = 0;
-        an->af.af3.DeviceTables[AF3_Y_DEVICE_TABLE] = 0;
-      }
-
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = _HB_OPEN_Load_Device( &an->af.af3.DeviceTables[AF3_Y_DEVICE_TABLE],
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail;
-      (void)FILE_Seek( cur_offset );
-    }
-    break;
-
-  case 4:
-    if ( ACCESS_Frame( 4L ) )
-      return error;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    an->af.af4.XIdAnchor = GET_UShort();
-    an->af.af4.YIdAnchor = GET_UShort();
-#else
-    (void) GET_UShort();
-    (void) GET_UShort();
-#endif
-
-    FORGET_Frame();
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  if ( an->af.af3.DeviceTables )
-    _HB_OPEN_Free_Device( an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE] );
-
-Fail2:
-  FREE( an->af.af3.DeviceTables );
-  return error;
-}
-
-
-static void  Free_Anchor( HB_Anchor*  an)
-{
-  if ( an->PosFormat == 3 && an->af.af3.DeviceTables )
-  {
-    _HB_OPEN_Free_Device( an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE] );
-    _HB_OPEN_Free_Device( an->af.af3.DeviceTables[AF3_Y_DEVICE_TABLE] );
-    FREE( an->af.af3.DeviceTables );
-  }
-}
-
-
-static HB_Error  Get_Anchor( GPOS_Instance*   gpi,
-                            HB_Anchor*      an,
-                            HB_UShort        glyph_index,
-                            HB_Fixed*          x_value,
-                            HB_Fixed*          y_value )
-{
-  HB_Error  error = HB_Err_Ok;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  HB_GPOSHeader*  gpos = gpi->gpos;
-#endif
-  HB_UShort        ap;
-
-  HB_Short         pixel_value;
-
-  HB_UShort        x_ppem, y_ppem;
-  HB_16Dot16         x_scale, y_scale;
-
-
-  x_ppem  = gpi->font->x_ppem;
-  y_ppem  = gpi->font->y_ppem;
-  x_scale = gpi->font->x_scale;
-  y_scale = gpi->font->y_scale;
-
-  switch ( an->PosFormat )
-  {
-  case 0:
-    /* The special case of an empty AnchorTable */
-  default:
-
-    return HB_Err_Not_Covered;
-
-  case 1:
-    *x_value = x_scale * an->af.af1.XCoordinate / 0x10000;
-    *y_value = y_scale * an->af.af1.YCoordinate / 0x10000;
-    break;
-
-  case 2:
-    if ( !gpi->dvi )
-    {
-      hb_uint32 n_points = 0;
-      ap = an->af.af2.AnchorPoint;
-      if (!gpi->font->klass->getPointInOutline)
-          goto no_contour_point;
-      error = gpi->font->klass->getPointInOutline(gpi->font, glyph_index, gpi->load_flags, ap, x_value, y_value, &n_points);
-      if (error)
-          return error;
-      /* if n_points is set to zero, we use the design coordinate value pair.
-       * This can happen e.g. for sbit glyphs. */
-      if (!n_points)
-          goto no_contour_point;
-    }
-    else
-    {
-    no_contour_point:
-      *x_value = x_scale * an->af.af3.XCoordinate / 0x10000;
-      *y_value = y_scale * an->af.af3.YCoordinate / 0x10000;
-    }
-    break;
-
-  case 3:
-    if ( !gpi->dvi )
-    {
-      _HB_OPEN_Get_Device( an->af.af3.DeviceTables[AF3_X_DEVICE_TABLE], x_ppem, &pixel_value );
-      *x_value = pixel_value << 6;
-      _HB_OPEN_Get_Device( an->af.af3.DeviceTables[AF3_Y_DEVICE_TABLE], y_ppem, &pixel_value );
-      *y_value = pixel_value << 6;
-    }
-    else
-      *x_value = *y_value = 0;
-
-    *x_value += x_scale * an->af.af3.XCoordinate / 0x10000;
-    *y_value += y_scale * an->af.af3.YCoordinate / 0x10000;
-    break;
-
-  case 4:
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-    error = (gpos->mmfunc)( gpi->font, an->af.af4.XIdAnchor,
-                           x_value, gpos->data );
-    if ( error )
-      return error;
-
-    error = (gpos->mmfunc)( gpi->font, an->af.af4.YIdAnchor,
-                           y_value, gpos->data );
-    if ( error )
-      return error;
-    break;
-#else
-    return ERR(HB_Err_Not_Covered);
-#endif
-  }
-
-  return error;
-}
-
-
-/* MarkArray */
-
-static HB_Error  Load_MarkArray ( HB_MarkArray*  ma,
-                                 HB_Stream       stream )
-{
-  HB_Error  error;
-
-  HB_UShort        n, m, count;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_MarkRecord*  mr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ma->MarkCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ma->MarkRecord = NULL;
-
-  if ( ALLOC_ARRAY( ma->MarkRecord, count, HB_MarkRecord ) )
-    return error;
-
-  mr = ma->MarkRecord;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 4L ) )
-      goto Fail;
-
-    mr[n].Class = GET_UShort();
-    new_offset  = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_Anchor( &mr[n].MarkAnchor, stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_Anchor( &mr[m].MarkAnchor );
-
-  FREE( mr );
-  return error;
-}
-
-
-static void  Free_MarkArray( HB_MarkArray*  ma )
-{
-  HB_UShort        n, count;
-
-  HB_MarkRecord*  mr;
-
-
-  if ( ma->MarkRecord )
-  {
-    count = ma->MarkCount;
-    mr    = ma->MarkRecord;
-
-    for ( n = 0; n < count; n++ )
-      Free_Anchor( &mr[n].MarkAnchor );
-
-    FREE( mr );
-  }
-}
-
-
-/* LookupType 1 */
-
-/* SinglePosFormat1 */
-/* SinglePosFormat2 */
-
-static HB_Error  Load_SinglePos( HB_GPOS_SubTable* st,
-                                HB_Stream       stream )
-{
-  HB_Error  error;
-  HB_SinglePos*   sp = &st->single;
-
-  HB_UShort         n, m, count, format;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_ValueRecord*  vr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 6L ) )
-    return error;
-
-  sp->PosFormat = GET_UShort();
-  new_offset    = GET_UShort() + base_offset;
-
-  format = sp->ValueFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( !format )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &sp->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  switch ( sp->PosFormat )
-  {
-  case 1:
-    error = Load_ValueRecord( &sp->spf.spf1.Value, format,
-                             base_offset, stream );
-    if ( error )
-      goto Fail2;
-    break;
-
-  case 2:
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    count = sp->spf.spf2.ValueCount = GET_UShort();
-
-    FORGET_Frame();
-
-    sp->spf.spf2.Value = NULL;
-
-    if ( ALLOC_ARRAY( sp->spf.spf2.Value, count, HB_ValueRecord ) )
-      goto Fail2;
-
-    vr = sp->spf.spf2.Value;
-
-    for ( n = 0; n < count; n++ )
-    {
-      error = Load_ValueRecord( &vr[n], format, base_offset, stream );
-      if ( error )
-       goto Fail1;
-    }
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_ValueRecord( &vr[m], format );
-
-  FREE( vr );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &sp->Coverage );
-  return error;
-}
-
-
-static void  Free_SinglePos( HB_GPOS_SubTable* st )
-{
-  HB_UShort         n, count, format;
-  HB_SinglePos*   sp = &st->single;
-
-  HB_ValueRecord*  v;
-
-
-  format = sp->ValueFormat;
-
-  switch ( sp->PosFormat )
-  {
-  case 1:
-    Free_ValueRecord( &sp->spf.spf1.Value, format );
-    break;
-
-  case 2:
-    if ( sp->spf.spf2.Value )
-    {
-      count = sp->spf.spf2.ValueCount;
-      v     = sp->spf.spf2.Value;
-
-      for ( n = 0; n < count; n++ )
-       Free_ValueRecord( &v[n], format );
-
-      FREE( v );
-    }
-    break;
-  default:
-    break;
-  }
-
-  _HB_OPEN_Free_Coverage( &sp->Coverage );
-}
-
-static HB_Error  Lookup_SinglePos( GPOS_Instance*    gpi,
-                                  HB_GPOS_SubTable* st,
-                                  HB_Buffer        buffer,
-                                  HB_UShort         flags,
-                                  HB_UShort         context_length,
-                                  int               nesting_level )
-{
-  HB_UShort        index, property;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_SinglePos*   sp = &st->single;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &sp->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  switch ( sp->PosFormat )
-  {
-  case 1:
-    error = Get_ValueRecord( gpi, &sp->spf.spf1.Value,
-                            sp->ValueFormat, POSITION( buffer->in_pos ) );
-    if ( error )
-      return error;
-    break;
-
-  case 2:
-    if ( index >= sp->spf.spf2.ValueCount )
-      return ERR(HB_Err_Invalid_SubTable);
-    error = Get_ValueRecord( gpi, &sp->spf.spf2.Value[index],
-                            sp->ValueFormat, POSITION( buffer->in_pos ) );
-    if ( error )
-      return error;
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable);
-  }
-
-  (buffer->in_pos)++;
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 2 */
-
-/* PairSet */
-
-static HB_Error  Load_PairSet ( HB_PairSet*  ps,
-                               HB_UShort     format1,
-                               HB_UShort     format2,
-                               HB_Stream     stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, m, count;
-  HB_UInt              base_offset;
-
-  HB_PairValueRecord*  pvr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ps->PairValueCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ps->PairValueRecord = NULL;
-
-  if ( ALLOC_ARRAY( ps->PairValueRecord, count, HB_PairValueRecord ) )
-    return error;
-
-  pvr = ps->PairValueRecord;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    pvr[n].SecondGlyph = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( format1 )
-    {
-      error = Load_ValueRecord( &pvr[n].Value1, format1,
-                               base_offset, stream );
-      if ( error )
-       goto Fail;
-    }
-    if ( format2 )
-    {
-      error = Load_ValueRecord( &pvr[n].Value2, format2,
-                               base_offset, stream );
-      if ( error )
-      {
-       if ( format1 )
-         Free_ValueRecord( &pvr[n].Value1, format1 );
-       goto Fail;
-      }
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-  {
-    if ( format1 )
-      Free_ValueRecord( &pvr[m].Value1, format1 );
-    if ( format2 )
-      Free_ValueRecord( &pvr[m].Value2, format2 );
-  }
-
-  FREE( pvr );
-  return error;
-}
-
-
-static void  Free_PairSet( HB_PairSet*  ps,
-                          HB_UShort     format1,
-                          HB_UShort     format2 )
-{
-  HB_UShort             n, count;
-
-  HB_PairValueRecord*  pvr;
-
-
-  if ( ps->PairValueRecord )
-  {
-    count = ps->PairValueCount;
-    pvr   = ps->PairValueRecord;
-
-    for ( n = 0; n < count; n++ )
-    {
-      if ( format1 )
-       Free_ValueRecord( &pvr[n].Value1, format1 );
-      if ( format2 )
-       Free_ValueRecord( &pvr[n].Value2, format2 );
-    }
-
-    FREE( pvr );
-  }
-}
-
-
-/* PairPosFormat1 */
-
-static HB_Error  Load_PairPos1( HB_PairPosFormat1*  ppf1,
-                               HB_UShort            format1,
-                               HB_UShort            format2,
-                               HB_Stream            stream )
-{
-  HB_Error  error;
-
-  HB_UShort     n, m, count;
-  HB_UInt      cur_offset, new_offset, base_offset;
-
-  HB_PairSet*  ps;
-
-
-  base_offset = FILE_Pos() - 8L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ppf1->PairSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ppf1->PairSet = NULL;
-
-  if ( ALLOC_ARRAY( ppf1->PairSet, count, HB_PairSet ) )
-    return error;
-
-  ps = ppf1->PairSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_PairSet( &ps[n], format1,
-                                format2, stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_PairSet( &ps[m], format1, format2 );
-
-  FREE( ps );
-  return error;
-}
-
-
-static void  Free_PairPos1( HB_PairPosFormat1*  ppf1,
-                           HB_UShort            format1,
-                           HB_UShort            format2 )
-{
-  HB_UShort     n, count;
-
-  HB_PairSet*  ps;
-
-
-  if ( ppf1->PairSet )
-  {
-    count = ppf1->PairSetCount;
-    ps    = ppf1->PairSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_PairSet( &ps[n], format1, format2 );
-
-    FREE( ps );
-  }
-}
-
-
-/* PairPosFormat2 */
-
-static HB_Error  Load_PairPos2( HB_PairPosFormat2*  ppf2,
-                               HB_UShort            format1,
-                               HB_UShort            format2,
-                               HB_Stream            stream )
-{
-  HB_Error  error;
-
-  HB_UShort          m, n, k, count1, count2;
-  HB_UInt           cur_offset, new_offset1, new_offset2, base_offset;
-
-  HB_Class1Record*  c1r;
-  HB_Class2Record*  c2r;
-
-
-  base_offset = FILE_Pos() - 8L;
-
-  if ( ACCESS_Frame( 8L ) )
-    return error;
-
-  new_offset1 = GET_UShort() + base_offset;
-  new_offset2 = GET_UShort() + base_offset;
-
-  /* `Class1Count' and `Class2Count' are the upper limits for class
-     values, thus we read it now to make additional safety checks.  */
-
-  count1 = ppf2->Class1Count = GET_UShort();
-  count2 = ppf2->Class2Count = GET_UShort();
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset1 ) ||
-       ( error = _HB_OPEN_Load_ClassDefinition( &ppf2->ClassDef1, count1,
-                                      stream ) ) != HB_Err_Ok )
-    return error;
-  if ( FILE_Seek( new_offset2 ) ||
-       ( error = _HB_OPEN_Load_ClassDefinition( &ppf2->ClassDef2, count2,
-                                      stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  ppf2->Class1Record = NULL;
-
-  if ( ALLOC_ARRAY( ppf2->Class1Record, count1, HB_Class1Record ) )
-    goto Fail2;
-
-  c1r = ppf2->Class1Record;
-
-  for ( m = 0; m < count1; m++ )
-  {
-    c1r[m].Class2Record = NULL;
-
-    if ( ALLOC_ARRAY( c1r[m].Class2Record, count2, HB_Class2Record ) )
-      goto Fail1;
-
-    c2r = c1r[m].Class2Record;
-
-    for ( n = 0; n < count2; n++ )
-    {
-      if ( format1 )
-      {
-       error = Load_ValueRecord( &c2r[n].Value1, format1,
-                                 base_offset, stream );
-       if ( error )
-         goto Fail0;
-      }
-      if ( format2 )
-      {
-       error = Load_ValueRecord( &c2r[n].Value2, format2,
-                                 base_offset, stream );
-       if ( error )
-       {
-         if ( format1 )
-           Free_ValueRecord( &c2r[n].Value1, format1 );
-         goto Fail0;
-       }
-      }
-    }
-
-    continue;
-
-  Fail0:
-    for ( k = 0; k < n; k++ )
-    {
-      if ( format1 )
-       Free_ValueRecord( &c2r[k].Value1, format1 );
-      if ( format2 )
-       Free_ValueRecord( &c2r[k].Value2, format2 );
-    }
-    goto Fail1;
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( k = 0; k < m; k++ )
-  {
-    c2r = c1r[k].Class2Record;
-
-    for ( n = 0; n < count2; n++ )
-    {
-      if ( format1 )
-       Free_ValueRecord( &c2r[n].Value1, format1 );
-      if ( format2 )
-       Free_ValueRecord( &c2r[n].Value2, format2 );
-    }
-
-    FREE( c2r );
-  }
-
-  FREE( c1r );
-Fail2:
-
-  _HB_OPEN_Free_ClassDefinition( &ppf2->ClassDef2 );
-
-Fail3:
-  _HB_OPEN_Free_ClassDefinition( &ppf2->ClassDef1 );
-  return error;
-}
-
-
-static void  Free_PairPos2( HB_PairPosFormat2*  ppf2,
-                           HB_UShort            format1,
-                           HB_UShort            format2)
-{
-  HB_UShort          m, n, count1, count2;
-
-  HB_Class1Record*  c1r;
-  HB_Class2Record*  c2r;
-
-
-  if ( ppf2->Class1Record )
-  {
-    c1r    = ppf2->Class1Record;
-    count1 = ppf2->Class1Count;
-    count2 = ppf2->Class2Count;
-
-    for ( m = 0; m < count1; m++ )
-    {
-      c2r = c1r[m].Class2Record;
-
-      for ( n = 0; n < count2; n++ )
-      {
-       if ( format1 )
-         Free_ValueRecord( &c2r[n].Value1, format1 );
-       if ( format2 )
-         Free_ValueRecord( &c2r[n].Value2, format2 );
-      }
-
-      FREE( c2r );
-    }
-
-    FREE( c1r );
-
-    _HB_OPEN_Free_ClassDefinition( &ppf2->ClassDef2 );
-    _HB_OPEN_Free_ClassDefinition( &ppf2->ClassDef1 );
-  }
-}
-
-
-static HB_Error  Load_PairPos( HB_GPOS_SubTable* st,
-                              HB_Stream     stream )
-{
-  HB_Error  error;
-  HB_PairPos*     pp = &st->pair;
-
-  HB_UShort         format1, format2;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 8L ) )
-    return error;
-
-  pp->PosFormat = GET_UShort();
-  new_offset    = GET_UShort() + base_offset;
-
-  format1 = pp->ValueFormat1 = GET_UShort();
-  format2 = pp->ValueFormat2 = GET_UShort();
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &pp->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  switch ( pp->PosFormat )
-  {
-  case 1:
-    error = Load_PairPos1( &pp->ppf.ppf1, format1, format2, stream );
-    if ( error )
-      goto Fail;
-    break;
-
-  case 2:
-    error = Load_PairPos2( &pp->ppf.ppf2, format1, format2, stream );
-    if ( error )
-      goto Fail;
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  _HB_OPEN_Free_Coverage( &pp->Coverage );
-  return error;
-}
-
-
-static void  Free_PairPos( HB_GPOS_SubTable* st )
-{
-  HB_UShort  format1, format2;
-  HB_PairPos*     pp = &st->pair;
-
-
-  format1 = pp->ValueFormat1;
-  format2 = pp->ValueFormat2;
-
-  switch ( pp->PosFormat )
-  {
-  case 1:
-    Free_PairPos1( &pp->ppf.ppf1, format1, format2 );
-    break;
-
-  case 2:
-    Free_PairPos2( &pp->ppf.ppf2, format1, format2 );
-    break;
-
-  default:
-    break;
-  }
-
-  _HB_OPEN_Free_Coverage( &pp->Coverage );
-}
-
-
-static HB_Error  Lookup_PairPos1( GPOS_Instance*       gpi,
-                                 HB_PairPosFormat1*  ppf1,
-                                 HB_Buffer           buffer,
-                                 HB_UInt              first_pos,
-                                 HB_UShort            index,
-                                 HB_UShort            format1,
-                                 HB_UShort            format2 )
-{
-  HB_Error              error;
-  HB_UShort             numpvr, glyph2;
-
-  HB_PairValueRecord*  pvr;
-
-
-  if ( index >= ppf1->PairSetCount )
-     return ERR(HB_Err_Invalid_SubTable);
-
-  pvr = ppf1->PairSet[index].PairValueRecord;
-  if ( !pvr )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  glyph2 = IN_CURGLYPH();
-
-  for ( numpvr = ppf1->PairSet[index].PairValueCount;
-       numpvr;
-       numpvr--, pvr++ )
-  {
-    if ( glyph2 == pvr->SecondGlyph )
-    {
-      error = Get_ValueRecord( gpi, &pvr->Value1, format1,
-                              POSITION( first_pos ) );
-      if ( error )
-       return error;
-      return Get_ValueRecord( gpi, &pvr->Value2, format2,
-                             POSITION( buffer->in_pos ) );
-    }
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Lookup_PairPos2( GPOS_Instance*       gpi,
-                                 HB_PairPosFormat2*  ppf2,
-                                 HB_Buffer           buffer,
-                                 HB_UInt              first_pos,
-                                 HB_UShort            format1,
-                                 HB_UShort            format2 )
-{
-  HB_Error           error;
-  HB_UShort          cl1 = 0, cl2 = 0; /* shut compiler up */
-
-  HB_Class1Record*  c1r;
-  HB_Class2Record*  c2r;
-
-
-  error = _HB_OPEN_Get_Class( &ppf2->ClassDef1, IN_GLYPH( first_pos ),
-                    &cl1, NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    return error;
-  error = _HB_OPEN_Get_Class( &ppf2->ClassDef2, IN_CURGLYPH(),
-                    &cl2, NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    return error;
-
-  c1r = &ppf2->Class1Record[cl1];
-  if ( !c1r )
-    return ERR(HB_Err_Invalid_SubTable);
-  c2r = &c1r->Class2Record[cl2];
-
-  error = Get_ValueRecord( gpi, &c2r->Value1, format1, POSITION( first_pos ) );
-  if ( error )
-    return error;
-  return Get_ValueRecord( gpi, &c2r->Value2, format2, POSITION( buffer->in_pos ) );
-}
-
-
-static HB_Error  Lookup_PairPos( GPOS_Instance*    gpi,
-                                HB_GPOS_SubTable* st,
-                                HB_Buffer        buffer,
-                                HB_UShort         flags,
-                                HB_UShort         context_length,
-                                int               nesting_level )
-{
-  HB_Error         error;
-  HB_UShort        index, property;
-  HB_UInt          first_pos;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_PairPos*     pp = &st->pair;
-
-  HB_UNUSED(nesting_level);
-
-  if ( buffer->in_pos >= buffer->in_length - 1 )
-    return HB_Err_Not_Covered;           /* Not enough glyphs in stream */
-
-  if ( context_length != 0xFFFF && context_length < 2 )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &pp->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  /* second glyph */
-
-  first_pos = buffer->in_pos;
-  (buffer->in_pos)++;
-
-  while ( CHECK_Property( gpos->gdef, IN_CURITEM(),
-                         flags, &property ) )
-  {
-    if ( error && error != HB_Err_Not_Covered )
-      return error;
-
-    if ( buffer->in_pos == buffer->in_length )
-      {
-       buffer->in_pos = first_pos;
-        return HB_Err_Not_Covered;
-      }
-    (buffer->in_pos)++;
-
-  }
-
-  switch ( pp->PosFormat )
-  {
-  case 1:
-    error = Lookup_PairPos1( gpi, &pp->ppf.ppf1, buffer,
-                            first_pos, index,
-                            pp->ValueFormat1, pp->ValueFormat2 );
-    break;
-
-  case 2:
-    error = Lookup_PairPos2( gpi, &pp->ppf.ppf2, buffer, first_pos,
-                            pp->ValueFormat1, pp->ValueFormat2 );
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  /* if we don't have coverage for the second glyph don't skip it for
-     further lookups but reset in_pos back to the first_glyph and let
-     the caller in Do_String_Lookup increment in_pos */
-  if ( error == HB_Err_Not_Covered )
-      buffer->in_pos = first_pos;
-
-  /* adjusting the `next' glyph */
-
-  if ( pp->ValueFormat2 )
-    (buffer->in_pos)++;
-
-  return error;
-}
-
-
-/* LookupType 3 */
-
-/* CursivePosFormat1 */
-
-static HB_Error  Load_CursivePos( HB_GPOS_SubTable* st,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-  HB_CursivePos*  cp = &st->cursive;
-
-  HB_UShort             n, m, count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_EntryExitRecord*  eer;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  cp->PosFormat = GET_UShort();
-  new_offset    = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &cp->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = cp->EntryExitCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cp->EntryExitRecord = NULL;
-
-  if ( ALLOC_ARRAY( cp->EntryExitRecord, count, HB_EntryExitRecord ) )
-    goto Fail2;
-
-  eer = cp->EntryExitRecord;
-
-  for ( n = 0; n < count; n++ )
-  {
-    HB_UInt entry_offset;
-
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    entry_offset = new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_Anchor( &eer[n].EntryAnchor,
-                                 stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-      eer[n].EntryAnchor.PosFormat   = 0;
-
-    if ( ACCESS_Frame( 2L ) )
-      return error;
-
-    new_offset = GET_UShort();
-
-    FORGET_Frame();
-
-    if ( new_offset )
-    {
-      new_offset += base_offset;
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_Anchor( &eer[n].ExitAnchor,
-                                 stream ) ) != HB_Err_Ok )
-      {
-       if ( entry_offset )
-         Free_Anchor( &eer[n].EntryAnchor );
-       goto Fail1;
-      }
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-      eer[n].ExitAnchor.PosFormat   = 0;
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-  {
-    Free_Anchor( &eer[m].EntryAnchor );
-    Free_Anchor( &eer[m].ExitAnchor );
-  }
-
-  FREE( eer );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &cp->Coverage );
-  return error;
-}
-
-
-static void  Free_CursivePos( HB_GPOS_SubTable* st )
-{
-  HB_UShort             n, count;
-  HB_CursivePos*  cp = &st->cursive;
-
-  HB_EntryExitRecord*  eer;
-
-
-  if ( cp->EntryExitRecord )
-  {
-    count = cp->EntryExitCount;
-    eer   = cp->EntryExitRecord;
-
-    for ( n = 0; n < count; n++ )
-    {
-      Free_Anchor( &eer[n].EntryAnchor );
-      Free_Anchor( &eer[n].ExitAnchor );
-    }
-
-    FREE( eer );
-  }
-
-  _HB_OPEN_Free_Coverage( &cp->Coverage );
-}
-
-
-static HB_Error  Lookup_CursivePos( GPOS_Instance*    gpi,
-                                   HB_GPOS_SubTable* st,
-                                   HB_Buffer        buffer,
-                                   HB_UShort         flags,
-                                   HB_UShort         context_length,
-                                   int               nesting_level )
-{
-  HB_UShort        index, property;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_CursivePos*  cp = &st->cursive;
-
-  HB_EntryExitRecord*  eer;
-  HB_Fixed                entry_x, entry_y;
-  HB_Fixed                exit_x, exit_y;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-  {
-    gpi->last = 0xFFFF;
-    return HB_Err_Not_Covered;
-  }
-
-  /* Glyphs not having the right GDEF properties will be ignored, i.e.,
-     gpi->last won't be reset (contrary to user defined properties). */
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  /* We don't handle mark glyphs here.  According to Andrei, this isn't
-     possible, but who knows...                                         */
-
-  if ( property == HB_GDEF_MARK )
-  {
-    gpi->last = 0xFFFF;
-    return HB_Err_Not_Covered;
-  }
-
-  error = _HB_OPEN_Coverage_Index( &cp->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-  {
-    gpi->last = 0xFFFF;
-    return error;
-  }
-
-  if ( index >= cp->EntryExitCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  eer = &cp->EntryExitRecord[index];
-
-  /* Now comes the messiest part of the whole OpenType
-     specification.  At first glance, cursive connections seem easy
-     to understand, but there are pitfalls!  The reason is that
-     the specs don't mention how to compute the advance values
-     resp. glyph offsets.  I was told it would be an omission, to
-     be fixed in the next OpenType version...  Again many thanks to
-     Andrei Burago <andreib@microsoft.com> for clarifications.
-
-     Consider the following example:
-
-                     |  xadv1    |
-                      +---------+
-                      |         |
-                +-----+--+ 1    |
-                |     | .|      |
-                |    0+--+------+
-                |   2    |
-                |        |
-               0+--------+
-               |  xadv2   |
-
-       glyph1: advance width = 12
-              anchor point = (3,1)
-
-       glyph2: advance width = 11
-              anchor point = (9,4)
-
-       LSB is 1 for both glyphs (so the boxes drawn above are glyph
-       bboxes).  Writing direction is R2L; `0' denotes the glyph's
-       coordinate origin.
-
-     Now the surprising part: The advance width of the *left* glyph
-     (resp. of the *bottom* glyph) will be modified, no matter
-     whether the writing direction is L2R or R2L (resp. T2B or
-     B2T)!  This assymetry is caused by the fact that the glyph's
-     coordinate origin is always the lower left corner for all
-     writing directions.
-
-     Continuing the above example, we can compute the new
-     (horizontal) advance width of glyph2 as
-
-       9 - 3 = 6  ,
-
-     and the new vertical offset of glyph2 as
-
-       1 - 4 = -3  .
-
-
-     Vertical writing direction is far more complicated:
-
-     a) Assuming that we recompute the advance height of the lower glyph:
-
-                                 --
-                      +---------+
-             --       |         |
-                +-----+--+ 1    | yadv1
-                |     | .|      |
-          yadv2 |    0+--+------+        -- BSB1  --
-                |   2    |       --      --        y_offset
-                |        |
-   BSB2 --      0+--------+                        --
-       --    --
-
-       glyph1: advance height = 6
-              anchor point = (3,1)
-
-       glyph2: advance height = 7
-              anchor point = (9,4)
-
-       TSB is 1 for both glyphs; writing direction is T2B.
-
-
-        BSB1     = yadv1 - (TSB1 + ymax1)
-        BSB2     = yadv2 - (TSB2 + ymax2)
-        y_offset = y2 - y1
-
-       vertical advance width of glyph2
-        = y_offset + BSB2 - BSB1
-        = (y2 - y1) + (yadv2 - (TSB2 + ymax2)) - (yadv1 - (TSB1 + ymax1))
-        = y2 - y1 + yadv2 - TSB2 - ymax2 - (yadv1 - TSB1 - ymax1)
-        = y2 - y1 + yadv2 - TSB2 - ymax2 - yadv1 + TSB1 + ymax1
-
-
-     b) Assuming that we recompute the advance height of the upper glyph:
-
-                                 --      --
-                      +---------+        -- TSB1
-       --    --       |         |
-   TSB2 --       +-----+--+ 1    | yadv1   ymax1
-                |     | .|      |
-          yadv2 |    0+--+------+        --       --
-    ymax2        |   2    |       --                y_offset
-                |        |
-       --      0+--------+                        --
-             --
-
-       glyph1: advance height = 6
-              anchor point = (3,1)
-
-       glyph2: advance height = 7
-              anchor point = (9,4)
-
-       TSB is 1 for both glyphs; writing direction is T2B.
-
-       y_offset = y2 - y1
-
-       vertical advance width of glyph2
-        = TSB1 + ymax1 + y_offset - (TSB2 + ymax2)
-        = TSB1 + ymax1 + y2 - y1 - TSB2 - ymax2
-
-
-     Comparing a) with b) shows that b) is easier to compute.  I'll wait
-     for a reply from Andrei to see what should really be implemented...
-
-     Since horizontal advance widths or vertical advance heights
-     can be used alone but not together, no ambiguity occurs.        */
-
-  if ( gpi->last == 0xFFFF )
-    goto end;
-
-  /* Get_Anchor() returns HB_Err_Not_Covered if there is no anchor
-     table.                                                         */
-
-  error = Get_Anchor( gpi, &eer->EntryAnchor, IN_CURGLYPH(),
-                     &entry_x, &entry_y );
-  if ( error == HB_Err_Not_Covered )
-    goto end;
-  if ( error )
-    return error;
-
-  if ( gpi->r2l )
-  {
-    POSITION( buffer->in_pos )->x_advance   = entry_x - gpi->anchor_x;
-    POSITION( buffer->in_pos )->new_advance = TRUE;
-  }
-  else
-  {
-    POSITION( gpi->last )->x_advance   = gpi->anchor_x - entry_x;
-    POSITION( gpi->last )->new_advance = TRUE;
-  }
-
-  if ( flags & HB_LOOKUP_FLAG_RIGHT_TO_LEFT )
-  {
-    POSITION( gpi->last )->cursive_chain = gpi->last - buffer->in_pos;
-    POSITION( gpi->last )->y_pos = entry_y - gpi->anchor_y;
-  }
-  else
-  {
-    POSITION( buffer->in_pos )->cursive_chain = buffer->in_pos - gpi->last;
-    POSITION( buffer->in_pos )->y_pos = gpi->anchor_y - entry_y;
-  }
-
-end:
-  error = Get_Anchor( gpi, &eer->ExitAnchor, IN_CURGLYPH(),
-                     &exit_x, &exit_y );
-  if ( error == HB_Err_Not_Covered )
-    gpi->last = 0xFFFF;
-  else
-  {
-    gpi->last     = buffer->in_pos;
-    gpi->anchor_x = exit_x;
-    gpi->anchor_y = exit_y;
-  }
-  if ( error )
-    return error;
-
-  (buffer->in_pos)++;
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 4 */
-
-/* BaseArray */
-
-static HB_Error  Load_BaseArray( HB_BaseArray*  ba,
-                                HB_UShort       num_classes,
-                                HB_Stream       stream )
-{
-  HB_Error  error;
-
-  HB_UShort       m, n, count;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_BaseRecord  *br;
-  HB_Anchor      *ban, *bans;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ba->BaseCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ba->BaseRecord = NULL;
-
-  if ( ALLOC_ARRAY( ba->BaseRecord, count, HB_BaseRecord ) )
-    return error;
-
-  br = ba->BaseRecord;
-
-  bans = NULL;
-
-  if ( ALLOC_ARRAY( bans, count * num_classes, HB_Anchor ) )
-    goto Fail;
-
-  for ( m = 0; m < count; m++ )
-  {
-    br[m].BaseAnchor = NULL;
-
-    ban = br[m].BaseAnchor = bans + m * num_classes;
-
-    for ( n = 0; n < num_classes; n++ )
-    {
-      if ( ACCESS_Frame( 2L ) )
-       goto Fail;
-
-      new_offset = GET_UShort() + base_offset;
-
-      FORGET_Frame();
-
-      if (new_offset == base_offset) {
-       /* XXX
-        * Doulos SIL Regular is buggy and has zero offsets here.
-        * Skip it
-        */
-       ban[n].PosFormat = 0;
-       continue;
-      }
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_Anchor( &ban[n], stream ) ) != HB_Err_Ok )
-       goto Fail;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  FREE( bans );
-  FREE( br );
-  return error;
-}
-
-
-static void  Free_BaseArray( HB_BaseArray*  ba,
-                            HB_UShort       num_classes )
-{
-  HB_BaseRecord  *br;
-  HB_Anchor      *bans;
-
-  if ( ba->BaseRecord )
-  {
-    br    = ba->BaseRecord;
-
-    if ( ba->BaseCount )
-    {
-      HB_UShort i, count;
-      count = num_classes * ba->BaseCount;
-      bans = br[0].BaseAnchor;
-      for (i = 0; i < count; i++)
-        Free_Anchor (&bans[i]);
-      FREE( bans );
-    }
-
-    FREE( br );
-  }
-}
-
-
-/* MarkBasePosFormat1 */
-
-static HB_Error  Load_MarkBasePos( HB_GPOS_SubTable* st,
-                                  HB_Stream         stream )
-{
-  HB_Error  error;
-  HB_MarkBasePos* mbp = &st->markbase;
-
-  HB_UInt  cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  mbp->PosFormat = GET_UShort();
-  new_offset     = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  if (mbp->PosFormat != 1)
-    return ERR(HB_Err_Invalid_SubTable_Format);
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mbp->MarkCoverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mbp->BaseCoverage, stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 4L ) )
-    goto Fail2;
-
-  mbp->ClassCount = GET_UShort();
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_MarkArray( &mbp->MarkArray, stream ) ) != HB_Err_Ok )
-    goto Fail2;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail1;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_BaseArray( &mbp->BaseArray, mbp->ClassCount,
-                                stream ) ) != HB_Err_Ok )
-    goto Fail1;
-
-  return HB_Err_Ok;
-
-Fail1:
-  Free_MarkArray( &mbp->MarkArray );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &mbp->BaseCoverage );
-
-Fail3:
-  _HB_OPEN_Free_Coverage( &mbp->MarkCoverage );
-  return error;
-}
-
-
-static void  Free_MarkBasePos( HB_GPOS_SubTable* st )
-{
-  HB_MarkBasePos* mbp = &st->markbase;
-
-  Free_BaseArray( &mbp->BaseArray, mbp->ClassCount );
-  Free_MarkArray( &mbp->MarkArray );
-  _HB_OPEN_Free_Coverage( &mbp->BaseCoverage );
-  _HB_OPEN_Free_Coverage( &mbp->MarkCoverage );
-}
-
-
-static HB_Error  Lookup_MarkBasePos( GPOS_Instance*    gpi,
-                                    HB_GPOS_SubTable* st,
-                                    HB_Buffer        buffer,
-                                    HB_UShort         flags,
-                                    HB_UShort         context_length,
-                                    int               nesting_level )
-{
-  HB_UShort        i, j, mark_index, base_index, property, class;
-  HB_Fixed           x_mark_value, y_mark_value, x_base_value, y_base_value;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_MarkBasePos* mbp = &st->markbase;
-
-  HB_MarkArray*   ma;
-  HB_BaseArray*   ba;
-  HB_BaseRecord*  br;
-  HB_Anchor*      mark_anchor;
-  HB_Anchor*      base_anchor;
-
-  HB_Position     o;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( flags & HB_LOOKUP_FLAG_IGNORE_BASE_GLYPHS )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(),
-                      flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &mbp->MarkCoverage, IN_CURGLYPH(),
-                         &mark_index );
-  if ( error )
-    return error;
-
-  /* now we search backwards for a non-mark glyph */
-
-  i = 1;
-  j = buffer->in_pos - 1;
-
-  while ( i <= buffer->in_pos )
-  {
-    error = HB_GDEF_Get_Glyph_Property( gpos->gdef, IN_GLYPH( j ),
-                                       &property );
-    if ( error )
-      return error;
-
-    if ( !( property == HB_GDEF_MARK || property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS ) )
-      break;
-
-    i++;
-    j--;
-  }
-
-  /* The following assertion is too strong -- at least for mangal.ttf. */
-#if 0
-  if ( property != HB_GDEF_BASE_GLYPH )
-    return HB_Err_Not_Covered;
-#endif
-
-  if ( i > buffer->in_pos )
-    return HB_Err_Not_Covered;
-
-  error = _HB_OPEN_Coverage_Index( &mbp->BaseCoverage, IN_GLYPH( j ),
-                         &base_index );
-  if ( error )
-    return error;
-
-  ma = &mbp->MarkArray;
-
-  if ( mark_index >= ma->MarkCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  class       = ma->MarkRecord[mark_index].Class;
-  mark_anchor = &ma->MarkRecord[mark_index].MarkAnchor;
-
-  if ( class >= mbp->ClassCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  ba = &mbp->BaseArray;
-
-  if ( base_index >= ba->BaseCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  br          = &ba->BaseRecord[base_index];
-  base_anchor = &br->BaseAnchor[class];
-
-  error = Get_Anchor( gpi, mark_anchor, IN_CURGLYPH(),
-                     &x_mark_value, &y_mark_value );
-  if ( error )
-    return error;
-
-  error = Get_Anchor( gpi, base_anchor, IN_GLYPH( j ),
-                     &x_base_value, &y_base_value );
-  if ( error )
-    return error;
-
-  /* anchor points are not cumulative */
-
-  o = POSITION( buffer->in_pos );
-
-  o->x_pos     = x_base_value - x_mark_value;
-  o->y_pos     = y_base_value - y_mark_value;
-  o->x_advance = 0;
-  o->y_advance = 0;
-  o->back      = i;
-
-  (buffer->in_pos)++;
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 5 */
-
-/* LigatureAttach */
-
-static HB_Error  Load_LigatureAttach( HB_LigatureAttach*  lat,
-                                     HB_UShort            num_classes,
-                                     HB_Stream            stream )
-{
-  HB_Error  error;
-
-  HB_UShort             m, n, k, count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_ComponentRecord*  cr;
-  HB_Anchor*           lan;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = lat->ComponentCount = GET_UShort();
-
-  FORGET_Frame();
-
-  lat->ComponentRecord = NULL;
-
-  if ( ALLOC_ARRAY( lat->ComponentRecord, count, HB_ComponentRecord ) )
-    return error;
-
-  cr = lat->ComponentRecord;
-
-  for ( m = 0; m < count; m++ )
-  {
-    cr[m].LigatureAnchor = NULL;
-
-    if ( ALLOC_ARRAY( cr[m].LigatureAnchor, num_classes, HB_Anchor ) )
-      goto Fail;
-
-    lan = cr[m].LigatureAnchor;
-
-    for ( n = 0; n < num_classes; n++ )
-    {
-      if ( ACCESS_Frame( 2L ) )
-       goto Fail0;
-
-      new_offset = GET_UShort();
-
-      FORGET_Frame();
-
-      if ( new_offset )
-      {
-       new_offset += base_offset;
-
-       cur_offset = FILE_Pos();
-       if ( FILE_Seek( new_offset ) ||
-            ( error = Load_Anchor( &lan[n], stream ) ) != HB_Err_Ok )
-         goto Fail0;
-       (void)FILE_Seek( cur_offset );
-      }
-      else
-       lan[n].PosFormat = 0;
-    }
-
-    continue;
-  Fail0:
-    for ( k = 0; k < n; k++ )
-      Free_Anchor( &lan[k] );
-    goto Fail;
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( k = 0; k < m; k++ )
-  {
-    lan = cr[k].LigatureAnchor;
-
-    for ( n = 0; n < num_classes; n++ )
-      Free_Anchor( &lan[n] );
-
-    FREE( lan );
-  }
-
-  FREE( cr );
-  return error;
-}
-
-
-static void  Free_LigatureAttach( HB_LigatureAttach*  lat,
-                                 HB_UShort            num_classes )
-{
-  HB_UShort        m, n, count;
-
-  HB_ComponentRecord*  cr;
-  HB_Anchor*           lan;
-
-
-  if ( lat->ComponentRecord )
-  {
-    count = lat->ComponentCount;
-    cr    = lat->ComponentRecord;
-
-    for ( m = 0; m < count; m++ )
-    {
-      lan = cr[m].LigatureAnchor;
-
-      for ( n = 0; n < num_classes; n++ )
-       Free_Anchor( &lan[n] );
-
-      FREE( lan );
-    }
-
-    FREE( cr );
-  }
-}
-
-
-/* LigatureArray */
-
-static HB_Error  Load_LigatureArray( HB_LigatureArray*  la,
-                                    HB_UShort           num_classes,
-                                    HB_Stream           stream )
-{
-  HB_Error  error;
-
-  HB_UShort            n, m, count;
-  HB_UInt             cur_offset, new_offset, base_offset;
-
-  HB_LigatureAttach*  lat;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = la->LigatureCount = GET_UShort();
-
-  FORGET_Frame();
-
-  la->LigatureAttach = NULL;
-
-  if ( ALLOC_ARRAY( la->LigatureAttach, count, HB_LigatureAttach ) )
-    return error;
-
-  lat = la->LigatureAttach;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LigatureAttach( &lat[n], num_classes,
-                                       stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_LigatureAttach( &lat[m], num_classes );
-
-  FREE( lat );
-  return error;
-}
-
-
-static void  Free_LigatureArray( HB_LigatureArray*  la,
-                                HB_UShort           num_classes )
-{
-  HB_UShort            n, count;
-
-  HB_LigatureAttach*  lat;
-
-
-  if ( la->LigatureAttach )
-  {
-    count = la->LigatureCount;
-    lat   = la->LigatureAttach;
-
-    for ( n = 0; n < count; n++ )
-      Free_LigatureAttach( &lat[n], num_classes );
-
-    FREE( lat );
-  }
-}
-
-
-/* MarkLigPosFormat1 */
-
-static HB_Error  Load_MarkLigPos( HB_GPOS_SubTable* st,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-  HB_MarkLigPos*  mlp = &st->marklig;
-
-  HB_UInt  cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  mlp->PosFormat = GET_UShort();
-  new_offset     = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mlp->MarkCoverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mlp->LigatureCoverage,
-                               stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 4L ) )
-    goto Fail2;
-
-  mlp->ClassCount = GET_UShort();
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_MarkArray( &mlp->MarkArray, stream ) ) != HB_Err_Ok )
-    goto Fail2;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail1;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_LigatureArray( &mlp->LigatureArray, mlp->ClassCount,
-                                    stream ) ) != HB_Err_Ok )
-    goto Fail1;
-
-  return HB_Err_Ok;
-
-Fail1:
-  Free_MarkArray( &mlp->MarkArray );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &mlp->LigatureCoverage );
-
-Fail3:
-  _HB_OPEN_Free_Coverage( &mlp->MarkCoverage );
-  return error;
-}
-
-
-static void  Free_MarkLigPos( HB_GPOS_SubTable* st)
-{
-  HB_MarkLigPos*  mlp = &st->marklig;
-
-  Free_LigatureArray( &mlp->LigatureArray, mlp->ClassCount );
-  Free_MarkArray( &mlp->MarkArray );
-  _HB_OPEN_Free_Coverage( &mlp->LigatureCoverage );
-  _HB_OPEN_Free_Coverage( &mlp->MarkCoverage );
-}
-
-
-static HB_Error  Lookup_MarkLigPos( GPOS_Instance*    gpi,
-                                   HB_GPOS_SubTable* st,
-                                   HB_Buffer        buffer,
-                                   HB_UShort         flags,
-                                   HB_UShort         context_length,
-                                   int               nesting_level )
-{
-  HB_UShort        i, j, mark_index, lig_index, property, class;
-  HB_UShort        mark_glyph;
-  HB_Fixed           x_mark_value, y_mark_value, x_lig_value, y_lig_value;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_MarkLigPos*  mlp = &st->marklig;
-
-  HB_MarkArray*        ma;
-  HB_LigatureArray*    la;
-  HB_LigatureAttach*   lat;
-  HB_ComponentRecord*  cr;
-  HB_UShort             comp_index;
-  HB_Anchor*           mark_anchor;
-  HB_Anchor*           lig_anchor;
-
-  HB_Position    o;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( flags & HB_LOOKUP_FLAG_IGNORE_LIGATURES )
-    return HB_Err_Not_Covered;
-
-  mark_glyph = IN_CURGLYPH();
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &mlp->MarkCoverage, mark_glyph, &mark_index );
-  if ( error )
-    return error;
-
-  /* now we search backwards for a non-mark glyph */
-
-  i = 1;
-  j = buffer->in_pos - 1;
-
-  while ( i <= buffer->in_pos )
-  {
-    error = HB_GDEF_Get_Glyph_Property( gpos->gdef, IN_GLYPH( j ),
-                                       &property );
-    if ( error )
-      return error;
-
-    if ( !( property == HB_GDEF_MARK || property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS ) )
-      break;
-
-    i++;
-    j--;
-  }
-
-  /* Similar to Lookup_MarkBasePos(), I suspect that this assertion is
-     too strong, thus it is commented out.                             */
-#if 0
-  if ( property != HB_GDEF_LIGATURE )
-    return HB_Err_Not_Covered;
-#endif
-
-  if ( i > buffer->in_pos )
-    return HB_Err_Not_Covered;
-
-  error = _HB_OPEN_Coverage_Index( &mlp->LigatureCoverage, IN_GLYPH( j ),
-                         &lig_index );
-  if ( error )
-    return error;
-
-  ma = &mlp->MarkArray;
-
-  if ( mark_index >= ma->MarkCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  class       = ma->MarkRecord[mark_index].Class;
-  mark_anchor = &ma->MarkRecord[mark_index].MarkAnchor;
-
-  if ( class >= mlp->ClassCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  la = &mlp->LigatureArray;
-
-  if ( lig_index >= la->LigatureCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  lat = &la->LigatureAttach[lig_index];
-
-  /* We must now check whether the ligature ID of the current mark glyph
-     is identical to the ligature ID of the found ligature.  If yes, we
-     can directly use the component index.  If not, we attach the mark
-     glyph to the last component of the ligature.                        */
-
-  if ( IN_LIGID( j ) == IN_LIGID( buffer->in_pos) )
-  {
-    comp_index = IN_COMPONENT( buffer->in_pos );
-    if ( comp_index >= lat->ComponentCount )
-      return HB_Err_Not_Covered;
-  }
-  else
-    comp_index = lat->ComponentCount - 1;
-
-  cr         = &lat->ComponentRecord[comp_index];
-  lig_anchor = &cr->LigatureAnchor[class];
-
-  error = Get_Anchor( gpi, mark_anchor, IN_CURGLYPH(),
-                     &x_mark_value, &y_mark_value );
-  if ( error )
-    return error;
-  error = Get_Anchor( gpi, lig_anchor, IN_GLYPH( j ),
-                     &x_lig_value, &y_lig_value );
-  if ( error )
-    return error;
-
-  /* anchor points are not cumulative */
-
-  o = POSITION( buffer->in_pos );
-
-  o->x_pos     = x_lig_value - x_mark_value;
-  o->y_pos     = y_lig_value - y_mark_value;
-  o->x_advance = 0;
-  o->y_advance = 0;
-  o->back      = i;
-
-  (buffer->in_pos)++;
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 6 */
-
-/* Mark2Array */
-
-static HB_Error  Load_Mark2Array( HB_Mark2Array*  m2a,
-                                 HB_UShort        num_classes,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-
-  HB_UShort        m, n, count;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_Mark2Record  *m2r;
-  HB_Anchor       *m2an, *m2ans;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = m2a->Mark2Count = GET_UShort();
-
-  FORGET_Frame();
-
-  m2a->Mark2Record = NULL;
-
-  if ( ALLOC_ARRAY( m2a->Mark2Record, count, HB_Mark2Record ) )
-    return error;
-
-  m2r = m2a->Mark2Record;
-
-  m2ans = NULL;
-
-  if ( ALLOC_ARRAY( m2ans, count * num_classes, HB_Anchor ) )
-    goto Fail;
-
-  for ( m = 0; m < count; m++ )
-  {
-    m2an = m2r[m].Mark2Anchor = m2ans + m * num_classes;
-
-    for ( n = 0; n < num_classes; n++ )
-    {
-      if ( ACCESS_Frame( 2L ) )
-       goto Fail;
-
-      new_offset = GET_UShort() + base_offset;
-
-      FORGET_Frame();
-
-      if (new_offset == base_offset) {
-        /* Anchor table not provided.  Skip loading.
-        * Some versions of FreeSans hit this. */
-        m2an[n].PosFormat = 0;
-       continue;
-      }
-
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_Anchor( &m2an[n], stream ) ) != HB_Err_Ok )
-       goto Fail;
-      (void)FILE_Seek( cur_offset );
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  FREE( m2ans );
-  FREE( m2r );
-  return error;
-}
-
-
-static void  Free_Mark2Array( HB_Mark2Array*  m2a,
-                             HB_UShort        num_classes )
-{
-  HB_Mark2Record  *m2r;
-  HB_Anchor       *m2ans;
-
-  HB_UNUSED(num_classes);
-
-  if ( m2a->Mark2Record )
-  {
-    m2r   = m2a->Mark2Record;
-
-    if ( m2a->Mark2Count )
-    {
-      m2ans = m2r[0].Mark2Anchor;
-      FREE( m2ans );
-    }
-
-    FREE( m2r );
-  }
-}
-
-
-/* MarkMarkPosFormat1 */
-
-static HB_Error  Load_MarkMarkPos( HB_GPOS_SubTable* st,
-                                  HB_Stream         stream )
-{
-  HB_Error  error;
-  HB_MarkMarkPos* mmp = &st->markmark;
-
-  HB_UInt  cur_offset, new_offset, base_offset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  mmp->PosFormat = GET_UShort();
-  new_offset     = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mmp->Mark1Coverage,
-                               stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &mmp->Mark2Coverage,
-                               stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 4L ) )
-    goto Fail2;
-
-  mmp->ClassCount = GET_UShort();
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_MarkArray( &mmp->Mark1Array, stream ) ) != HB_Err_Ok )
-    goto Fail2;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail1;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = Load_Mark2Array( &mmp->Mark2Array, mmp->ClassCount,
-                                 stream ) ) != HB_Err_Ok )
-    goto Fail1;
-
-  return HB_Err_Ok;
-
-Fail1:
-  Free_MarkArray( &mmp->Mark1Array );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &mmp->Mark2Coverage );
-
-Fail3:
-  _HB_OPEN_Free_Coverage( &mmp->Mark1Coverage );
-  return error;
-}
-
-
-static void  Free_MarkMarkPos( HB_GPOS_SubTable* st)
-{
-  HB_MarkMarkPos* mmp = &st->markmark;
-
-  Free_Mark2Array( &mmp->Mark2Array, mmp->ClassCount );
-  Free_MarkArray( &mmp->Mark1Array );
-  _HB_OPEN_Free_Coverage( &mmp->Mark2Coverage );
-  _HB_OPEN_Free_Coverage( &mmp->Mark1Coverage );
-}
-
-
-static HB_Error  Lookup_MarkMarkPos( GPOS_Instance*    gpi,
-                                    HB_GPOS_SubTable* st,
-                                    HB_Buffer        buffer,
-                                    HB_UShort         flags,
-                                    HB_UShort         context_length,
-                                    int               nesting_level )
-{
-  HB_UShort        i, j, mark1_index, mark2_index, property, class;
-  HB_Fixed           x_mark1_value, y_mark1_value,
-                  x_mark2_value, y_mark2_value;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-  HB_MarkMarkPos* mmp = &st->markmark;
-
-  HB_MarkArray*    ma1;
-  HB_Mark2Array*   ma2;
-  HB_Mark2Record*  m2r;
-  HB_Anchor*       mark1_anchor;
-  HB_Anchor*       mark2_anchor;
-
-  HB_Position    o;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( flags & HB_LOOKUP_FLAG_IGNORE_MARKS )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gpos->gdef, IN_CURITEM(),
-                      flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &mmp->Mark1Coverage, IN_CURGLYPH(),
-                         &mark1_index );
-  if ( error )
-    return error;
-
-  /* now we search backwards for a suitable mark glyph until a non-mark
-     glyph                                                */
-
-  if ( buffer->in_pos == 0 )
-    return HB_Err_Not_Covered;
-
-  i = 1;
-  j = buffer->in_pos - 1;
-  while ( i <= buffer->in_pos )
-  {
-    error = HB_GDEF_Get_Glyph_Property( gpos->gdef, IN_GLYPH( j ),
-                                       &property );
-    if ( error )
-      return error;
-
-    if ( !( property == HB_GDEF_MARK || property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS ) )
-      return HB_Err_Not_Covered;
-
-    if ( flags & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS )
-    {
-      if ( property == (flags & 0xFF00) )
-        break;
-    }
-    else
-      break;
-
-    i++;
-    j--;
-  }
-
-  if ( i > buffer->in_pos )
-    return HB_Err_Not_Covered;
-
-  error = _HB_OPEN_Coverage_Index( &mmp->Mark2Coverage, IN_GLYPH( j ),
-                         &mark2_index );
-  if ( error )
-    return error;
-
-  ma1 = &mmp->Mark1Array;
-
-  if ( mark1_index >= ma1->MarkCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  class        = ma1->MarkRecord[mark1_index].Class;
-  mark1_anchor = &ma1->MarkRecord[mark1_index].MarkAnchor;
-
-  if ( class >= mmp->ClassCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  ma2 = &mmp->Mark2Array;
-
-  if ( mark2_index >= ma2->Mark2Count )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  m2r          = &ma2->Mark2Record[mark2_index];
-  mark2_anchor = &m2r->Mark2Anchor[class];
-
-  error = Get_Anchor( gpi, mark1_anchor, IN_CURGLYPH(),
-                     &x_mark1_value, &y_mark1_value );
-  if ( error )
-    return error;
-  error = Get_Anchor( gpi, mark2_anchor, IN_GLYPH( j ),
-                     &x_mark2_value, &y_mark2_value );
-  if ( error )
-    return error;
-
-  /* anchor points are not cumulative */
-
-  o = POSITION( buffer->in_pos );
-
-  o->x_pos     = x_mark2_value - x_mark1_value;
-  o->y_pos     = y_mark2_value - y_mark1_value;
-  o->x_advance = 0;
-  o->y_advance = 0;
-  o->back      = 1;
-
-  (buffer->in_pos)++;
-
-  return HB_Err_Ok;
-}
-
-
-/* Do the actual positioning for a context positioning (either format
-   7 or 8).  This is only called after we've determined that the stream
-   matches the subrule.                                                 */
-
-static HB_Error  Do_ContextPos( GPOS_Instance*        gpi,
-                               HB_UShort             GlyphCount,
-                               HB_UShort             PosCount,
-                               HB_PosLookupRecord*  pos,
-                               HB_Buffer            buffer,
-                               int                   nesting_level )
-{
-  HB_Error  error;
-  HB_UInt   i, old_pos;
-
-
-  i = 0;
-
-  while ( i < GlyphCount )
-  {
-    if ( PosCount && i == pos->SequenceIndex )
-    {
-      old_pos = buffer->in_pos;
-
-      /* Do a positioning */
-
-      error = GPOS_Do_Glyph_Lookup( gpi, pos->LookupListIndex, buffer,
-                                   GlyphCount, nesting_level );
-
-      if ( error )
-       return error;
-
-      pos++;
-      PosCount--;
-      i += buffer->in_pos - old_pos;
-    }
-    else
-    {
-      i++;
-      (buffer->in_pos)++;
-    }
-  }
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 7 */
-
-/* PosRule */
-
-static HB_Error  Load_PosRule( HB_PosRule*  pr,
-                              HB_Stream     stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, count;
-  HB_UShort*            i;
-
-  HB_PosLookupRecord*  plr;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  pr->GlyphCount = GET_UShort();
-  pr->PosCount   = GET_UShort();
-
-  FORGET_Frame();
-
-  pr->Input = NULL;
-
-  count = pr->GlyphCount - 1;         /* only GlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( pr->Input, count, HB_UShort ) )
-    return error;
-
-  i = pr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  pr->PosLookupRecord = NULL;
-
-  count = pr->PosCount;
-
-  if ( ALLOC_ARRAY( pr->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = pr->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  FREE( i );
-  return error;
-}
-
-
-static void  Free_PosRule( HB_PosRule*  pr )
-{
-  FREE( pr->PosLookupRecord );
-  FREE( pr->Input );
-}
-
-
-/* PosRuleSet */
-
-static HB_Error  Load_PosRuleSet( HB_PosRuleSet*  prs,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-
-  HB_UShort     n, m, count;
-  HB_UInt      cur_offset, new_offset, base_offset;
-
-  HB_PosRule*  pr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = prs->PosRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  prs->PosRule = NULL;
-
-  if ( ALLOC_ARRAY( prs->PosRule, count, HB_PosRule ) )
-    return error;
-
-  pr = prs->PosRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_PosRule( &pr[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_PosRule( &pr[m] );
-
-  FREE( pr );
-  return error;
-}
-
-
-static void  Free_PosRuleSet( HB_PosRuleSet*  prs )
-{
-  HB_UShort     n, count;
-
-  HB_PosRule*  pr;
-
-
-  if ( prs->PosRule )
-  {
-    count = prs->PosRuleCount;
-    pr    = prs->PosRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_PosRule( &pr[n] );
-
-    FREE( pr );
-  }
-}
-
-
-/* ContextPosFormat1 */
-
-static HB_Error  Load_ContextPos1( HB_ContextPosFormat1*  cpf1,
-                                  HB_Stream               stream )
-{
-  HB_Error  error;
-
-  HB_UShort        n, m, count;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_PosRuleSet*  prs;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &cpf1->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = cpf1->PosRuleSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpf1->PosRuleSet = NULL;
-
-  if ( ALLOC_ARRAY( cpf1->PosRuleSet, count, HB_PosRuleSet ) )
-    goto Fail2;
-
-  prs = cpf1->PosRuleSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_PosRuleSet( &prs[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_PosRuleSet( &prs[m] );
-
-  FREE( prs );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &cpf1->Coverage );
-  return error;
-}
-
-
-static void  Free_ContextPos1( HB_ContextPosFormat1*  cpf1 )
-{
-  HB_UShort        n, count;
-
-  HB_PosRuleSet*  prs;
-
-
-  if ( cpf1->PosRuleSet )
-  {
-    count = cpf1->PosRuleSetCount;
-    prs   = cpf1->PosRuleSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_PosRuleSet( &prs[n] );
-
-    FREE( prs );
-  }
-
-  _HB_OPEN_Free_Coverage( &cpf1->Coverage );
-}
-
-
-/* PosClassRule */
-
-static HB_Error  Load_PosClassRule( HB_ContextPosFormat2*  cpf2,
-                                   HB_PosClassRule*       pcr,
-                                   HB_Stream               stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, count;
-
-  HB_UShort*            c;
-  HB_PosLookupRecord*  plr;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  pcr->GlyphCount = GET_UShort();
-  pcr->PosCount   = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( pcr->GlyphCount > cpf2->MaxContextLength )
-    cpf2->MaxContextLength = pcr->GlyphCount;
-
-  pcr->Class = NULL;
-
-  count = pcr->GlyphCount - 1;        /* only GlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( pcr->Class, count, HB_UShort ) )
-    return error;
-
-  c = pcr->Class;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    c[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  pcr->PosLookupRecord = NULL;
-
-  count = pcr->PosCount;
-
-  if ( ALLOC_ARRAY( pcr->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = pcr->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  FREE( c );
-  return error;
-}
-
-
-static void  Free_PosClassRule( HB_PosClassRule*  pcr )
-{
-  FREE( pcr->PosLookupRecord );
-  FREE( pcr->Class );
-}
-
-
-/* PosClassSet */
-
-static HB_Error  Load_PosClassSet( HB_ContextPosFormat2*  cpf2,
-                                  HB_PosClassSet*        pcs,
-                                  HB_Stream               stream )
-{
-  HB_Error  error;
-
-  HB_UShort          n, m, count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_PosClassRule*  pcr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = pcs->PosClassRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  pcs->PosClassRule = NULL;
-
-  if ( ALLOC_ARRAY( pcs->PosClassRule, count, HB_PosClassRule ) )
-    return error;
-
-  pcr = pcs->PosClassRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_PosClassRule( cpf2, &pcr[n],
-                                     stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_PosClassRule( &pcr[m] );
-
-  FREE( pcr );
-  return error;
-}
-
-
-static void  Free_PosClassSet( HB_PosClassSet*  pcs )
-{
-  HB_UShort          n, count;
-
-  HB_PosClassRule*  pcr;
-
-
-  if ( pcs->PosClassRule )
-  {
-    count = pcs->PosClassRuleCount;
-    pcr   = pcs->PosClassRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_PosClassRule( &pcr[n] );
-
-    FREE( pcr );
-  }
-}
-
-
-/* ContextPosFormat2 */
-
-static HB_Error  Load_ContextPos2( HB_ContextPosFormat2*  cpf2,
-                                  HB_Stream               stream )
-{
-  HB_Error  error;
-
-  HB_UShort         n, m, count;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_PosClassSet*  pcs;
-
-
-  base_offset = FILE_Pos() - 2;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &cpf2->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 4L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  /* `PosClassSetCount' is the upper limit for class values, thus we
-     read it now to make an additional safety check.                 */
-
-  count = cpf2->PosClassSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_ClassDefinition( &cpf2->ClassDef, count,
-                                      stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  cpf2->PosClassSet      = NULL;
-  cpf2->MaxContextLength = 0;
-
-  if ( ALLOC_ARRAY( cpf2->PosClassSet, count, HB_PosClassSet ) )
-    goto Fail2;
-
-  pcs = cpf2->PosClassSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    if ( new_offset != base_offset )      /* not a NULL offset */
-    {
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_PosClassSet( cpf2, &pcs[n],
-                                      stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-    {
-      /* we create a PosClassSet table with no entries */
-
-      cpf2->PosClassSet[n].PosClassRuleCount = 0;
-      cpf2->PosClassSet[n].PosClassRule      = NULL;
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; n++ )
-    Free_PosClassSet( &pcs[m] );
-
-  FREE( pcs );
-
-Fail2:
-  _HB_OPEN_Free_ClassDefinition( &cpf2->ClassDef );
-
-Fail3:
-  _HB_OPEN_Free_Coverage( &cpf2->Coverage );
-  return error;
-}
-
-
-static void  Free_ContextPos2( HB_ContextPosFormat2*  cpf2 )
-{
-  HB_UShort         n, count;
-
-  HB_PosClassSet*  pcs;
-
-
-  if ( cpf2->PosClassSet )
-  {
-    count = cpf2->PosClassSetCount;
-    pcs   = cpf2->PosClassSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_PosClassSet( &pcs[n] );
-
-    FREE( pcs );
-  }
-
-  _HB_OPEN_Free_ClassDefinition( &cpf2->ClassDef );
-  _HB_OPEN_Free_Coverage( &cpf2->Coverage );
-}
-
-
-/* ContextPosFormat3 */
-
-static HB_Error  Load_ContextPos3( HB_ContextPosFormat3*  cpf3,
-                                  HB_Stream               stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_Coverage*         c;
-  HB_PosLookupRecord*  plr;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  cpf3->GlyphCount = GET_UShort();
-  cpf3->PosCount   = GET_UShort();
-
-  FORGET_Frame();
-
-  cpf3->Coverage = NULL;
-
-  count = cpf3->GlyphCount;
-
-  if ( ALLOC_ARRAY( cpf3->Coverage, count, HB_Coverage ) )
-    return error;
-
-  c = cpf3->Coverage;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &c[n], stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  cpf3->PosLookupRecord = NULL;
-
-  count = cpf3->PosCount;
-
-  if ( ALLOC_ARRAY( cpf3->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = cpf3->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  for ( n = 0; n < count; n++ )
-    _HB_OPEN_Free_Coverage( &c[n] );
-
-  FREE( c );
-  return error;
-}
-
-
-static void  Free_ContextPos3( HB_ContextPosFormat3*  cpf3 )
-{
-  HB_UShort      n, count;
-
-  HB_Coverage*  c;
-
-
-  FREE( cpf3->PosLookupRecord );
-
-  if ( cpf3->Coverage )
-  {
-    count = cpf3->GlyphCount;
-    c     = cpf3->Coverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-}
-
-
-/* ContextPos */
-
-static HB_Error  Load_ContextPos( HB_GPOS_SubTable* st,
-                                 HB_Stream        stream )
-{
-  HB_Error  error;
-  HB_ContextPos*   cp = &st->context;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cp->PosFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( cp->PosFormat )
-  {
-  case 1:
-    return Load_ContextPos1( &cp->cpf.cpf1, stream );
-
-  case 2:
-    return Load_ContextPos2( &cp->cpf.cpf2, stream );
-
-  case 3:
-    return Load_ContextPos3( &cp->cpf.cpf3, stream );
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-static void  Free_ContextPos( HB_GPOS_SubTable* st )
-{
-  HB_ContextPos*   cp = &st->context;
-
-  switch ( cp->PosFormat )
-  {
-  case 1:  Free_ContextPos1( &cp->cpf.cpf1 ); break;
-  case 2:  Free_ContextPos2( &cp->cpf.cpf2 ); break;
-  case 3:  Free_ContextPos3( &cp->cpf.cpf3 ); break;
-  default:                                           break;
-  }
-}
-
-
-static HB_Error  Lookup_ContextPos1( GPOS_Instance*          gpi,
-                                    HB_ContextPosFormat1*  cpf1,
-                                    HB_Buffer              buffer,
-                                    HB_UShort               flags,
-                                    HB_UShort               context_length,
-                                    int                     nesting_level )
-{
-  HB_UShort        index, property;
-  HB_UShort        i, j, k, numpr;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-
-  HB_PosRule*     pr;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &cpf1->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  pr    = cpf1->PosRuleSet[index].PosRule;
-  numpr = cpf1->PosRuleSet[index].PosRuleCount;
-
-  for ( k = 0; k < numpr; k++ )
-  {
-    if ( context_length != 0xFFFF && context_length < pr[k].GlyphCount )
-      goto next_posrule;
-
-    if ( buffer->in_pos + pr[k].GlyphCount > buffer->in_length )
-      goto next_posrule;                       /* context is too long */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < pr[k].GlyphCount; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + pr[k].GlyphCount - i == (HB_Int)buffer->in_length )
-         goto next_posrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != pr[k].Input[i - 1] )
-       goto next_posrule;
-    }
-
-    return Do_ContextPos( gpi, pr[k].GlyphCount,
-                         pr[k].PosCount, pr[k].PosLookupRecord,
-                         buffer,
-                         nesting_level );
-
-    next_posrule:
-      ;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Lookup_ContextPos2( GPOS_Instance*          gpi,
-                                    HB_ContextPosFormat2*  cpf2,
-                                    HB_Buffer              buffer,
-                                    HB_UShort               flags,
-                                    HB_UShort               context_length,
-                                    int                     nesting_level )
-{
-  HB_UShort          index, property;
-  HB_Error           error;
-  HB_UShort          i, j, k, known_classes;
-
-  HB_UShort*         classes;
-  HB_UShort*         cl;
-  HB_GPOSHeader*    gpos = gpi->gpos;
-
-  HB_PosClassSet*   pcs;
-  HB_PosClassRule*  pr;
-  HB_GDEFHeader*    gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  /* Note: The coverage table in format 2 doesn't give an index into
-          anything.  It just lets us know whether or not we need to
-          do any lookup at all.                                     */
-
-  error = _HB_OPEN_Coverage_Index( &cpf2->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if (cpf2->MaxContextLength < 1)
-    return HB_Err_Not_Covered;
-
-  if ( ALLOC_ARRAY( classes, cpf2->MaxContextLength, HB_UShort ) )
-    return error;
-
-  error = _HB_OPEN_Get_Class( &cpf2->ClassDef, IN_CURGLYPH(),
-                    &classes[0], NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    goto End;
-  known_classes = 0;
-
-  pcs = &cpf2->PosClassSet[classes[0]];
-  if ( !pcs )
-  {
-    error = ERR(HB_Err_Invalid_SubTable);
-    goto End;
-  }
-
-  for ( k = 0; k < pcs->PosClassRuleCount; k++ )
-  {
-    pr = &pcs->PosClassRule[k];
-
-    if ( context_length != 0xFFFF && context_length < pr->GlyphCount )
-      goto next_posclassrule;
-
-    if ( buffer->in_pos + pr->GlyphCount > buffer->in_length )
-      goto next_posclassrule;                /* context is too long */
-
-    cl   = pr->Class;
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < pr->GlyphCount; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End;
-
-       if ( j + pr->GlyphCount - i == (HB_Int)buffer->in_length )
-         goto next_posclassrule;
-       j++;
-      }
-
-      if ( i > known_classes )
-      {
-       /* Keeps us from having to do this for each rule */
-
-       error = _HB_OPEN_Get_Class( &cpf2->ClassDef, IN_GLYPH( j ), &classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End;
-       known_classes = i;
-      }
-
-      if ( cl[i - 1] != classes[i] )
-       goto next_posclassrule;
-    }
-
-    error = Do_ContextPos( gpi, pr->GlyphCount,
-                          pr->PosCount, pr->PosLookupRecord,
-                          buffer,
-                          nesting_level );
-    goto End;
-
-  next_posclassrule:
-    ;
-  }
-
-  error = HB_Err_Not_Covered;
-
-End:
-  FREE( classes );
-  return error;
-}
-
-
-static HB_Error  Lookup_ContextPos3( GPOS_Instance*          gpi,
-                                    HB_ContextPosFormat3*  cpf3,
-                                    HB_Buffer              buffer,
-                                    HB_UShort               flags,
-                                    HB_UShort               context_length,
-                                    int                     nesting_level )
-{
-  HB_Error         error;
-  HB_UShort        index, i, j, property;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-
-  HB_Coverage*    c;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  if ( context_length != 0xFFFF && context_length < cpf3->GlyphCount )
-    return HB_Err_Not_Covered;
-
-  if ( buffer->in_pos + cpf3->GlyphCount > buffer->in_length )
-    return HB_Err_Not_Covered;         /* context is too long */
-
-  c    = cpf3->Coverage;
-
-  for ( i = 1, j = 1; i < cpf3->GlyphCount; i++, j++ )
-  {
-    while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + cpf3->GlyphCount - i == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &c[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  return Do_ContextPos( gpi, cpf3->GlyphCount,
-                       cpf3->PosCount, cpf3->PosLookupRecord,
-                       buffer,
-                       nesting_level );
-}
-
-
-static HB_Error  Lookup_ContextPos( GPOS_Instance*    gpi,
-                                   HB_GPOS_SubTable* st,
-                                   HB_Buffer        buffer,
-                                   HB_UShort         flags,
-                                   HB_UShort         context_length,
-                                   int               nesting_level )
-{
-  HB_ContextPos*   cp = &st->context;
-
-  switch ( cp->PosFormat )
-  {
-  case 1:
-    return Lookup_ContextPos1( gpi, &cp->cpf.cpf1, buffer,
-                              flags, context_length, nesting_level );
-
-  case 2:
-    return Lookup_ContextPos2( gpi, &cp->cpf.cpf2, buffer,
-                              flags, context_length, nesting_level );
-
-  case 3:
-    return Lookup_ContextPos3( gpi, &cp->cpf.cpf3, buffer,
-                              flags, context_length, nesting_level );
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-/* LookupType 8 */
-
-/* ChainPosRule */
-
-static HB_Error  Load_ChainPosRule( HB_ChainPosRule*  cpr,
-                                   HB_Stream          stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, count;
-  HB_UShort*            b;
-  HB_UShort*            i;
-  HB_UShort*            l;
-
-  HB_PosLookupRecord*  plr;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cpr->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpr->Backtrack = NULL;
-
-  count = cpr->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( cpr->Backtrack, count, HB_UShort ) )
-    return error;
-
-  b = cpr->Backtrack;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail4;
-
-  for ( n = 0; n < count; n++ )
-    b[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  cpr->InputGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpr->Input = NULL;
-
-  count = cpr->InputGlyphCount - 1;  /* only InputGlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( cpr->Input, count, HB_UShort ) )
-    goto Fail4;
-
-  i = cpr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail3;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  cpr->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpr->Lookahead = NULL;
-
-  count = cpr->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( cpr->Lookahead, count, HB_UShort ) )
-    goto Fail3;
-
-  l = cpr->Lookahead;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    l[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  cpr->PosCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpr->PosLookupRecord = NULL;
-
-  count = cpr->PosCount;
-
-  if ( ALLOC_ARRAY( cpr->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = cpr->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  FREE( l );
-
-Fail3:
-  FREE( i );
-
-Fail4:
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainPosRule( HB_ChainPosRule*  cpr )
-{
-  FREE( cpr->PosLookupRecord );
-  FREE( cpr->Lookahead );
-  FREE( cpr->Input );
-  FREE( cpr->Backtrack );
-}
-
-
-/* ChainPosRuleSet */
-
-static HB_Error  Load_ChainPosRuleSet( HB_ChainPosRuleSet*  cprs,
-                                      HB_Stream             stream )
-{
-  HB_Error  error;
-
-  HB_UShort          n, m, count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_ChainPosRule*  cpr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = cprs->ChainPosRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cprs->ChainPosRule = NULL;
-
-  if ( ALLOC_ARRAY( cprs->ChainPosRule, count, HB_ChainPosRule ) )
-    return error;
-
-  cpr = cprs->ChainPosRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainPosRule( &cpr[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_ChainPosRule( &cpr[m] );
-
-  FREE( cpr );
-  return error;
-}
-
-
-static void  Free_ChainPosRuleSet( HB_ChainPosRuleSet*  cprs )
-{
-  HB_UShort          n, count;
-
-  HB_ChainPosRule*  cpr;
-
-
-  if ( cprs->ChainPosRule )
-  {
-    count = cprs->ChainPosRuleCount;
-    cpr   = cprs->ChainPosRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainPosRule( &cpr[n] );
-
-    FREE( cpr );
-  }
-}
-
-
-/* ChainContextPosFormat1 */
-
-static HB_Error  Load_ChainContextPos1( HB_ChainContextPosFormat1*  ccpf1,
-                                       HB_Stream                    stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, m, count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_ChainPosRuleSet*  cprs;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ccpf1->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = ccpf1->ChainPosRuleSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccpf1->ChainPosRuleSet = NULL;
-
-  if ( ALLOC_ARRAY( ccpf1->ChainPosRuleSet, count, HB_ChainPosRuleSet ) )
-    goto Fail2;
-
-  cprs = ccpf1->ChainPosRuleSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainPosRuleSet( &cprs[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_ChainPosRuleSet( &cprs[m] );
-
-  FREE( cprs );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &ccpf1->Coverage );
-  return error;
-}
-
-
-static void  Free_ChainContextPos1( HB_ChainContextPosFormat1*  ccpf1 )
-{
-  HB_UShort             n, count;
-
-  HB_ChainPosRuleSet*  cprs;
-
-
-  if ( ccpf1->ChainPosRuleSet )
-  {
-    count = ccpf1->ChainPosRuleSetCount;
-    cprs  = ccpf1->ChainPosRuleSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainPosRuleSet( &cprs[n] );
-
-    FREE( cprs );
-  }
-
-  _HB_OPEN_Free_Coverage( &ccpf1->Coverage );
-}
-
-
-/* ChainPosClassRule */
-
-static HB_Error  Load_ChainPosClassRule(
-                  HB_ChainContextPosFormat2*  ccpf2,
-                  HB_ChainPosClassRule*       cpcr,
-                  HB_Stream                    stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, count;
-
-  HB_UShort*            b;
-  HB_UShort*            i;
-  HB_UShort*            l;
-  HB_PosLookupRecord*  plr;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cpcr->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( cpcr->BacktrackGlyphCount > ccpf2->MaxBacktrackLength )
-    ccpf2->MaxBacktrackLength = cpcr->BacktrackGlyphCount;
-
-  cpcr->Backtrack = NULL;
-
-  count = cpcr->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( cpcr->Backtrack, count, HB_UShort ) )
-    return error;
-
-  b = cpcr->Backtrack;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail4;
-
-  for ( n = 0; n < count; n++ )
-    b[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  cpcr->InputGlyphCount = GET_UShort();
-
-  if ( cpcr->InputGlyphCount > ccpf2->MaxInputLength )
-    ccpf2->MaxInputLength = cpcr->InputGlyphCount;
-
-  FORGET_Frame();
-
-  cpcr->Input = NULL;
-
-  count = cpcr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( cpcr->Input, count, HB_UShort ) )
-    goto Fail4;
-
-  i = cpcr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail3;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  cpcr->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( cpcr->LookaheadGlyphCount > ccpf2->MaxLookaheadLength )
-    ccpf2->MaxLookaheadLength = cpcr->LookaheadGlyphCount;
-
-  cpcr->Lookahead = NULL;
-
-  count = cpcr->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( cpcr->Lookahead, count, HB_UShort ) )
-    goto Fail3;
-
-  l = cpcr->Lookahead;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    l[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  cpcr->PosCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpcr->PosLookupRecord = NULL;
-
-  count = cpcr->PosCount;
-
-  if ( ALLOC_ARRAY( cpcr->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = cpcr->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  FREE( l );
-
-Fail3:
-  FREE( i );
-
-Fail4:
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainPosClassRule( HB_ChainPosClassRule*  cpcr )
-{
-  FREE( cpcr->PosLookupRecord );
-  FREE( cpcr->Lookahead );
-  FREE( cpcr->Input );
-  FREE( cpcr->Backtrack );
-}
-
-
-/* PosClassSet */
-
-static HB_Error  Load_ChainPosClassSet(
-                  HB_ChainContextPosFormat2*  ccpf2,
-                  HB_ChainPosClassSet*        cpcs,
-                  HB_Stream                    stream )
-{
-  HB_Error  error;
-
-  HB_UShort               n, m, count;
-  HB_UInt                cur_offset, new_offset, base_offset;
-
-  HB_ChainPosClassRule*  cpcr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = cpcs->ChainPosClassRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cpcs->ChainPosClassRule = NULL;
-
-  if ( ALLOC_ARRAY( cpcs->ChainPosClassRule, count,
-                   HB_ChainPosClassRule ) )
-    return error;
-
-  cpcr = cpcs->ChainPosClassRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainPosClassRule( ccpf2, &cpcr[n],
-                                          stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_ChainPosClassRule( &cpcr[m] );
-
-  FREE( cpcr );
-  return error;
-}
-
-
-static void  Free_ChainPosClassSet( HB_ChainPosClassSet*  cpcs )
-{
-  HB_UShort               n, count;
-
-  HB_ChainPosClassRule*  cpcr;
-
-
-  if ( cpcs->ChainPosClassRule )
-  {
-    count = cpcs->ChainPosClassRuleCount;
-    cpcr  = cpcs->ChainPosClassRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainPosClassRule( &cpcr[n] );
-
-    FREE( cpcr );
-  }
-}
-
-
-/* ChainContextPosFormat2 */
-
-static HB_Error  Load_ChainContextPos2( HB_ChainContextPosFormat2*  ccpf2,
-                                       HB_Stream                    stream )
-{
-  HB_Error  error;
-
-  HB_UShort              n, m, count;
-  HB_UInt               cur_offset, new_offset, base_offset;
-  HB_UInt               backtrack_offset, input_offset, lookahead_offset;
-
-  HB_ChainPosClassSet*  cpcs;
-
-
-  base_offset = FILE_Pos() - 2;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ccpf2->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 8L ) )
-    goto Fail5;
-
-  backtrack_offset = GET_UShort();
-  input_offset     = GET_UShort();
-  lookahead_offset = GET_UShort();
-
-  /* `ChainPosClassSetCount' is the upper limit for input class values,
-     thus we read it now to make an additional safety check. No limit
-     is known or needed for the other two class definitions          */
-
-  count = ccpf2->ChainPosClassSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccpf2->BacktrackClassDef, 65535,
-                                                      backtrack_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-    goto Fail5;
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccpf2->InputClassDef, count,
-                                                      input_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-    goto Fail4;
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccpf2->LookaheadClassDef, 65535,
-                                                      lookahead_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-    goto Fail3;
-
-  ccpf2->ChainPosClassSet   = NULL;
-  ccpf2->MaxBacktrackLength = 0;
-  ccpf2->MaxInputLength     = 0;
-  ccpf2->MaxLookaheadLength = 0;
-
-  if ( ALLOC_ARRAY( ccpf2->ChainPosClassSet, count, HB_ChainPosClassSet ) )
-    goto Fail2;
-
-  cpcs = ccpf2->ChainPosClassSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    if ( new_offset != base_offset )      /* not a NULL offset */
-    {
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_ChainPosClassSet( ccpf2, &cpcs[n],
-                                           stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-    {
-      /* we create a ChainPosClassSet table with no entries */
-
-      ccpf2->ChainPosClassSet[n].ChainPosClassRuleCount = 0;
-      ccpf2->ChainPosClassSet[n].ChainPosClassRule      = NULL;
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_ChainPosClassSet( &cpcs[m] );
-
-  FREE( cpcs );
-
-Fail2:
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->LookaheadClassDef );
-
-Fail3:
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->InputClassDef );
-
-Fail4:
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->BacktrackClassDef );
-
-Fail5:
-  _HB_OPEN_Free_Coverage( &ccpf2->Coverage );
-  return error;
-}
-
-
-static void  Free_ChainContextPos2( HB_ChainContextPosFormat2*  ccpf2 )
-{
-  HB_UShort              n, count;
-
-  HB_ChainPosClassSet*  cpcs;
-
-
-  if ( ccpf2->ChainPosClassSet )
-  {
-    count = ccpf2->ChainPosClassSetCount;
-    cpcs  = ccpf2->ChainPosClassSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainPosClassSet( &cpcs[n] );
-
-    FREE( cpcs );
-  }
-
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->LookaheadClassDef );
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->InputClassDef );
-  _HB_OPEN_Free_ClassDefinition( &ccpf2->BacktrackClassDef );
-
-  _HB_OPEN_Free_Coverage( &ccpf2->Coverage );
-}
-
-
-/* ChainContextPosFormat3 */
-
-static HB_Error  Load_ChainContextPos3( HB_ChainContextPosFormat3*  ccpf3,
-                                       HB_Stream                    stream )
-{
-  HB_Error  error;
-
-  HB_UShort             n, nb, ni, nl, m, count;
-  HB_UShort             backtrack_count, input_count, lookahead_count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_Coverage*         b;
-  HB_Coverage*         i;
-  HB_Coverage*         l;
-  HB_PosLookupRecord*  plr;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  ccpf3->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccpf3->BacktrackCoverage = NULL;
-
-  backtrack_count = ccpf3->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( ccpf3->BacktrackCoverage, backtrack_count,
-                   HB_Coverage ) )
-    return error;
-
-  b = ccpf3->BacktrackCoverage;
-
-  for ( nb = 0; nb < backtrack_count; nb++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail4;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &b[nb], stream ) ) != HB_Err_Ok )
-      goto Fail4;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  ccpf3->InputGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccpf3->InputCoverage = NULL;
-
-  input_count = ccpf3->InputGlyphCount;
-
-  if ( ALLOC_ARRAY( ccpf3->InputCoverage, input_count, HB_Coverage ) )
-    goto Fail4;
-
-  i = ccpf3->InputCoverage;
-
-  for ( ni = 0; ni < input_count; ni++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail3;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &i[ni], stream ) ) != HB_Err_Ok )
-      goto Fail3;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  ccpf3->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccpf3->LookaheadCoverage = NULL;
-
-  lookahead_count = ccpf3->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( ccpf3->LookaheadCoverage, lookahead_count,
-                   HB_Coverage ) )
-    goto Fail3;
-
-  l = ccpf3->LookaheadCoverage;
-
-  for ( nl = 0; nl < lookahead_count; nl++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &l[nl], stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  ccpf3->PosCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccpf3->PosLookupRecord = NULL;
-
-  count = ccpf3->PosCount;
-
-  if ( ALLOC_ARRAY( ccpf3->PosLookupRecord, count, HB_PosLookupRecord ) )
-    goto Fail2;
-
-  plr = ccpf3->PosLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    plr[n].SequenceIndex   = GET_UShort();
-    plr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( plr );
-
-Fail2:
-  for ( m = 0; m < nl; m++ )
-    _HB_OPEN_Free_Coverage( &l[m] );
-
-  FREE( l );
-
-Fail3:
-  for ( m = 0; m < ni; m++ )
-    _HB_OPEN_Free_Coverage( &i[m] );
-
-  FREE( i );
-
-Fail4:
-  for ( m = 0; m < nb; m++ )
-    _HB_OPEN_Free_Coverage( &b[m] );
-
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainContextPos3( HB_ChainContextPosFormat3*  ccpf3 )
-{
-  HB_UShort      n, count;
-
-  HB_Coverage*  c;
-
-
-  FREE( ccpf3->PosLookupRecord );
-
-  if ( ccpf3->LookaheadCoverage )
-  {
-    count = ccpf3->LookaheadGlyphCount;
-    c     = ccpf3->LookaheadCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  if ( ccpf3->InputCoverage )
-  {
-    count = ccpf3->InputGlyphCount;
-    c     = ccpf3->InputCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  if ( ccpf3->BacktrackCoverage )
-  {
-    count = ccpf3->BacktrackGlyphCount;
-    c     = ccpf3->BacktrackCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-}
-
-
-/* ChainContextPos */
-
-static HB_Error  Load_ChainContextPos( HB_GPOS_SubTable* st,
-                                      HB_Stream             stream )
-{
-  HB_Error  error;
-  HB_ChainContextPos*  ccp = &st->chain;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  ccp->PosFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( ccp->PosFormat )
-  {
-  case 1:
-    return Load_ChainContextPos1( &ccp->ccpf.ccpf1, stream );
-
-  case 2:
-    return Load_ChainContextPos2( &ccp->ccpf.ccpf2, stream );
-
-  case 3:
-    return Load_ChainContextPos3( &ccp->ccpf.ccpf3, stream );
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-static void  Free_ChainContextPos( HB_GPOS_SubTable* st )
-{
-  HB_ChainContextPos*  ccp = &st->chain;
-
-  switch ( ccp->PosFormat )
-  {
-  case 1:  Free_ChainContextPos1( &ccp->ccpf.ccpf1 ); break;
-  case 2:  Free_ChainContextPos2( &ccp->ccpf.ccpf2 ); break;
-  case 3:  Free_ChainContextPos3( &ccp->ccpf.ccpf3 ); break;
-  default:                                                   break;
-  }
-}
-
-
-static HB_Error  Lookup_ChainContextPos1(
-                  GPOS_Instance*               gpi,
-                  HB_ChainContextPosFormat1*  ccpf1,
-                  HB_Buffer                   buffer,
-                  HB_UShort                    flags,
-                  HB_UShort                    context_length,
-                  int                          nesting_level )
-{
-  HB_UShort          index, property;
-  HB_UShort          i, j, k, num_cpr;
-  HB_UShort          bgc, igc, lgc;
-  HB_Error           error;
-  HB_GPOSHeader*    gpos = gpi->gpos;
-
-  HB_ChainPosRule*  cpr;
-  HB_ChainPosRule   curr_cpr;
-  HB_GDEFHeader*    gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &ccpf1->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  cpr     = ccpf1->ChainPosRuleSet[index].ChainPosRule;
-  num_cpr = ccpf1->ChainPosRuleSet[index].ChainPosRuleCount;
-
-  for ( k = 0; k < num_cpr; k++ )
-  {
-    curr_cpr = cpr[k];
-    bgc      = curr_cpr.BacktrackGlyphCount;
-    igc      = curr_cpr.InputGlyphCount;
-    lgc      = curr_cpr.LookaheadGlyphCount;
-
-    if ( context_length != 0xFFFF && context_length < igc )
-      goto next_chainposrule;
-
-    /* check whether context is too long; it is a first guess only */
-
-    if ( bgc > buffer->in_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-      goto next_chainposrule;
-
-    if ( bgc )
-    {
-      /* Since we don't know in advance the number of glyphs to inspect,
-        we search backwards for matches in the backtrack glyph array    */
-
-      for ( i = 0, j = buffer->in_pos - 1; i < bgc; i++, j-- )
-      {
-       while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-       {
-         if ( error && error != HB_Err_Not_Covered )
-           return error;
-
-         if ( j + 1 == bgc - i )
-           goto next_chainposrule;
-         j--;
-       }
-
-       /* In OpenType 1.3, it is undefined whether the offsets of
-          backtrack glyphs is in logical order or not.  Version 1.4
-          will clarify this:
-
-            Logical order -      a  b  c  d  e  f  g  h  i  j
-                                             i
-            Input offsets -                  0  1
-            Backtrack offsets -  3  2  1  0
-            Lookahead offsets -                    0  1  2  3           */
-
-       if ( IN_GLYPH( j ) != curr_cpr.Backtrack[i] )
-         goto next_chainposrule;
-      }
-    }
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < igc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-         goto next_chainposrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != curr_cpr.Input[i - 1] )
-       goto next_chainposrule;
-    }
-
-    /* we are starting to check for lookahead glyphs right after the
-       last context glyph                                            */
-
-    for ( i = 0; i < lgc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + lgc - i == (HB_Int)buffer->in_length )
-         goto next_chainposrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != curr_cpr.Lookahead[i] )
-       goto next_chainposrule;
-    }
-
-    return Do_ContextPos( gpi, igc,
-                         curr_cpr.PosCount,
-                         curr_cpr.PosLookupRecord,
-                         buffer,
-                         nesting_level );
-
-  next_chainposrule:
-    ;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Lookup_ChainContextPos2(
-                  GPOS_Instance*               gpi,
-                  HB_ChainContextPosFormat2*  ccpf2,
-                  HB_Buffer                   buffer,
-                  HB_UShort                    flags,
-                  HB_UShort                    context_length,
-                  int                          nesting_level )
-{
-  HB_UShort              index, property;
-  HB_Error               error;
-  HB_UShort              i, j, k;
-  HB_UShort              bgc, igc, lgc;
-  HB_UShort              known_backtrack_classes,
-                        known_input_classes,
-                        known_lookahead_classes;
-
-  HB_UShort*             backtrack_classes;
-  HB_UShort*             input_classes;
-  HB_UShort*             lookahead_classes;
-
-  HB_UShort*             bc;
-  HB_UShort*             ic;
-  HB_UShort*             lc;
-  HB_GPOSHeader*        gpos = gpi->gpos;
-
-  HB_ChainPosClassSet*  cpcs;
-  HB_ChainPosClassRule  cpcr;
-  HB_GDEFHeader*        gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  /* Note: The coverage table in format 2 doesn't give an index into
-          anything.  It just lets us know whether or not we need to
-          do any lookup at all.                                     */
-
-  error = _HB_OPEN_Coverage_Index( &ccpf2->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if (ccpf2->MaxInputLength < 1)
-    return HB_Err_Not_Covered;
-
-  if ( ALLOC_ARRAY( backtrack_classes, ccpf2->MaxBacktrackLength, HB_UShort ) )
-    return error;
-  known_backtrack_classes = 0;
-
-  if ( ALLOC_ARRAY( input_classes, ccpf2->MaxInputLength, HB_UShort ) )
-    goto End3;
-  known_input_classes = 1;
-
-  if ( ALLOC_ARRAY( lookahead_classes, ccpf2->MaxLookaheadLength, HB_UShort ) )
-    goto End2;
-  known_lookahead_classes = 0;
-
-  error = _HB_OPEN_Get_Class( &ccpf2->InputClassDef, IN_CURGLYPH(),
-                    &input_classes[0], NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    goto End1;
-
-  cpcs = &ccpf2->ChainPosClassSet[input_classes[0]];
-  if ( !cpcs )
-  {
-    error = ERR(HB_Err_Invalid_SubTable);
-    goto End1;
-  }
-
-  for ( k = 0; k < cpcs->ChainPosClassRuleCount; k++ )
-  {
-    cpcr = cpcs->ChainPosClassRule[k];
-    bgc  = cpcr.BacktrackGlyphCount;
-    igc  = cpcr.InputGlyphCount;
-    lgc  = cpcr.LookaheadGlyphCount;
-
-    if ( context_length != 0xFFFF && context_length < igc )
-      goto next_chainposclassrule;
-
-    /* check whether context is too long; it is a first guess only */
-
-    if ( bgc > buffer->in_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-      goto next_chainposclassrule;
-
-    if ( bgc )
-    {
-      /* Since we don't know in advance the number of glyphs to inspect,
-        we search backwards for matches in the backtrack glyph array.
-        Note that `known_backtrack_classes' starts at index 0.         */
-
-      bc       = cpcr.Backtrack;
-
-      for ( i = 0, j = buffer->in_pos - 1; i < bgc; i++, j-- )
-      {
-       while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-       {
-         if ( error && error != HB_Err_Not_Covered )
-           goto End1;
-
-         if ( j + 1 == bgc - i )
-           goto next_chainposclassrule;
-         j++;
-       }
-
-       if ( i >= known_backtrack_classes )
-       {
-         /* Keeps us from having to do this for each rule */
-
-         error = _HB_OPEN_Get_Class( &ccpf2->BacktrackClassDef, IN_GLYPH( j ),
-                            &backtrack_classes[i], NULL );
-         if ( error && error != HB_Err_Not_Covered )
-           goto End1;
-         known_backtrack_classes = i;
-       }
-
-       if ( bc[i] != backtrack_classes[i] )
-         goto next_chainposclassrule;
-      }
-    }
-
-    ic       = cpcr.Input;
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < igc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-
-       if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-         goto next_chainposclassrule;
-       j++;
-      }
-
-      if ( i >= known_input_classes )
-      {
-       error = _HB_OPEN_Get_Class( &ccpf2->InputClassDef, IN_GLYPH( j ),
-                          &input_classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-       known_input_classes = i;
-      }
-
-      if ( ic[i - 1] != input_classes[i] )
-       goto next_chainposclassrule;
-    }
-
-    /* we are starting to check for lookahead glyphs right after the
-       last context glyph                                            */
-
-    lc       = cpcr.Lookahead;
-
-    for ( i = 0; i < lgc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-
-       if ( j + lgc - i == (HB_Int)buffer->in_length )
-         goto next_chainposclassrule;
-       j++;
-      }
-
-      if ( i >= known_lookahead_classes )
-      {
-       error = _HB_OPEN_Get_Class( &ccpf2->LookaheadClassDef, IN_GLYPH( j ),
-                          &lookahead_classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-       known_lookahead_classes = i;
-      }
-
-      if ( lc[i] != lookahead_classes[i] )
-       goto next_chainposclassrule;
-    }
-
-    error = Do_ContextPos( gpi, igc,
-                          cpcr.PosCount,
-                          cpcr.PosLookupRecord,
-                          buffer,
-                          nesting_level );
-    goto End1;
-
-  next_chainposclassrule:
-    ;
-  }
-
-  error = HB_Err_Not_Covered;
-
-End1:
-  FREE( lookahead_classes );
-
-End2:
-  FREE( input_classes );
-
-End3:
-  FREE( backtrack_classes );
-  return error;
-}
-
-
-static HB_Error  Lookup_ChainContextPos3(
-                  GPOS_Instance*               gpi,
-                  HB_ChainContextPosFormat3*  ccpf3,
-                  HB_Buffer                   buffer,
-                  HB_UShort                    flags,
-                  HB_UShort                    context_length,
-                  int                          nesting_level )
-{
-  HB_UShort        index, i, j, property;
-  HB_UShort        bgc, igc, lgc;
-  HB_Error         error;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-
-  HB_Coverage*    bc;
-  HB_Coverage*    ic;
-  HB_Coverage*    lc;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gpos->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  bgc = ccpf3->BacktrackGlyphCount;
-  igc = ccpf3->InputGlyphCount;
-  lgc = ccpf3->LookaheadGlyphCount;
-
-  if ( context_length != 0xFFFF && context_length < igc )
-    return HB_Err_Not_Covered;
-
-  /* check whether context is too long; it is a first guess only */
-
-  if ( bgc > buffer->in_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-    return HB_Err_Not_Covered;
-
-  if ( bgc )
-  {
-    /* Since we don't know in advance the number of glyphs to inspect,
-       we search backwards for matches in the backtrack glyph array    */
-
-    bc       = ccpf3->BacktrackCoverage;
-
-    for ( i = 0, j = buffer->in_pos - 1; i < bgc; i++, j-- )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + 1 == bgc - i )
-         return HB_Err_Not_Covered;
-       j--;
-      }
-
-      error = _HB_OPEN_Coverage_Index( &bc[i], IN_GLYPH( j ), &index );
-      if ( error )
-       return error;
-    }
-  }
-
-  ic       = ccpf3->InputCoverage;
-
-  for ( i = 0, j = buffer->in_pos; i < igc; i++, j++ )
-  {
-    /* We already called CHECK_Property for IN_GLYPH ( buffer->in_pos ) */
-    while ( j > buffer->in_pos && CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &ic[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  /* we are starting to check for lookahead glyphs right after the
-     last context glyph                                            */
-
-  lc       = ccpf3->LookaheadCoverage;
-
-  for ( i = 0; i < lgc; i++, j++ )
-  {
-    while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + lgc - i == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &lc[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  return Do_ContextPos( gpi, igc,
-                       ccpf3->PosCount,
-                       ccpf3->PosLookupRecord,
-                       buffer,
-                       nesting_level );
-}
-
-
-static HB_Error  Lookup_ChainContextPos(
-                  GPOS_Instance*        gpi,
-                  HB_GPOS_SubTable* st,
-                  HB_Buffer            buffer,
-                  HB_UShort             flags,
-                  HB_UShort             context_length,
-                  int                   nesting_level )
-{
-  HB_ChainContextPos*  ccp = &st->chain;
-
-  switch ( ccp->PosFormat )
-  {
-  case 1:
-    return Lookup_ChainContextPos1( gpi, &ccp->ccpf.ccpf1, buffer,
-                                   flags, context_length,
-                                   nesting_level );
-
-  case 2:
-    return Lookup_ChainContextPos2( gpi, &ccp->ccpf.ccpf2, buffer,
-                                   flags, context_length,
-                                   nesting_level );
-
-  case 3:
-    return Lookup_ChainContextPos3( gpi, &ccp->ccpf.ccpf3, buffer,
-                                   flags, context_length,
-                                   nesting_level );
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-
-/***********
- * GPOS API
- ***********/
-
-
-
-HB_Error  HB_GPOS_Select_Script( HB_GPOSHeader*  gpos,
-                                HB_UInt         script_tag,
-                                HB_UShort*       script_index )
-{
-  HB_UShort          n;
-
-  HB_ScriptList*    sl;
-  HB_ScriptRecord*  sr;
-
-
-  if ( !gpos || !script_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  for ( n = 0; n < sl->ScriptCount; n++ )
-    if ( script_tag == sr[n].ScriptTag )
-    {
-      *script_index = n;
-
-      return HB_Err_Ok;
-    }
-
-  return HB_Err_Not_Covered;
-}
-
-
-
-HB_Error  HB_GPOS_Select_Language( HB_GPOSHeader*  gpos,
-                                  HB_UInt         language_tag,
-                                  HB_UShort        script_index,
-                                  HB_UShort*       language_index,
-                                  HB_UShort*       req_feature_index )
-{
-  HB_UShort           n;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*         s;
-  HB_LangSysRecord*  lsr;
-
-
-  if ( !gpos || !language_index || !req_feature_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  for ( n = 0; n < s->LangSysCount; n++ )
-    if ( language_tag == lsr[n].LangSysTag )
-    {
-      *language_index = n;
-      *req_feature_index = lsr[n].LangSys.ReqFeatureIndex;
-
-      return HB_Err_Ok;
-    }
-
-  return HB_Err_Not_Covered;
-}
-
-
-/* selecting 0xFFFF for language_index asks for the values of the
-   default language (DefaultLangSys)                              */
-
-
-HB_Error  HB_GPOS_Select_Feature( HB_GPOSHeader*  gpos,
-                                 HB_UInt         feature_tag,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UShort*       feature_index )
-{
-  HB_UShort           n;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*         s;
-  HB_LangSysRecord*  lsr;
-  HB_LangSys*        ls;
-  HB_UShort*          fi;
-
-  HB_FeatureList*    fl;
-  HB_FeatureRecord*  fr;
-
-
-  if ( !gpos || !feature_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  fl = &gpos->FeatureList;
-  fr = fl->FeatureRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( language_index == 0xFFFF )
-    ls = &s->DefaultLangSys;
-  else
-  {
-    if ( language_index >= s->LangSysCount )
-      return ERR(HB_Err_Invalid_Argument);
-
-    ls = &lsr[language_index].LangSys;
-  }
-
-  fi = ls->FeatureIndex;
-
-  for ( n = 0; n < ls->FeatureCount; n++ )
-  {
-    if ( fi[n] >= fl->FeatureCount )
-      return ERR(HB_Err_Invalid_SubTable_Format);
-
-    if ( feature_tag == fr[fi[n]].FeatureTag )
-    {
-      *feature_index = fi[n];
-
-      return HB_Err_Ok;
-    }
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-/* The next three functions return a null-terminated list */
-
-
-HB_Error  HB_GPOS_Query_Scripts( HB_GPOSHeader*  gpos,
-                                HB_UInt**       script_tag_list )
-{
-  HB_Error           error;
-  HB_UShort          n;
-  HB_UInt*          stl;
-
-  HB_ScriptList*    sl;
-  HB_ScriptRecord*  sr;
-
-
-  if ( !gpos || !script_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( ALLOC_ARRAY( stl, sl->ScriptCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < sl->ScriptCount; n++ )
-    stl[n] = sr[n].ScriptTag;
-  stl[n] = 0;
-
-  *script_tag_list = stl;
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GPOS_Query_Languages( HB_GPOSHeader*  gpos,
-                                  HB_UShort        script_index,
-                                  HB_UInt**       language_tag_list )
-{
-  HB_Error            error;
-  HB_UShort           n;
-  HB_UInt*           ltl;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-
-
-  if ( !gpos || !language_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( ALLOC_ARRAY( ltl, s->LangSysCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < s->LangSysCount; n++ )
-    ltl[n] = lsr[n].LangSysTag;
-  ltl[n] = 0;
-
-  *language_tag_list = ltl;
-
-  return HB_Err_Ok;
-}
-
-
-/* selecting 0xFFFF for language_index asks for the values of the
-   default language (DefaultLangSys)                              */
-
-
-HB_Error  HB_GPOS_Query_Features( HB_GPOSHeader*  gpos,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UInt**       feature_tag_list )
-{
-  HB_UShort           n;
-  HB_Error            error;
-  HB_UInt*           ftl;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-  HB_LangSys*        ls;
-  HB_UShort*          fi;
-
-  HB_FeatureList*    fl;
-  HB_FeatureRecord*  fr;
-
-
-  if ( !gpos || !feature_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gpos->ScriptList;
-  sr = sl->ScriptRecord;
-
-  fl = &gpos->FeatureList;
-  fr = fl->FeatureRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( language_index == 0xFFFF )
-    ls = &s->DefaultLangSys;
-  else
-  {
-    if ( language_index >= s->LangSysCount )
-      return ERR(HB_Err_Invalid_Argument);
-
-    ls = &lsr[language_index].LangSys;
-  }
-
-  fi = ls->FeatureIndex;
-
-  if ( ALLOC_ARRAY( ftl, ls->FeatureCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < ls->FeatureCount; n++ )
-  {
-    if ( fi[n] >= fl->FeatureCount )
-    {
-      FREE( ftl );
-      return ERR(HB_Err_Invalid_SubTable_Format);
-    }
-    ftl[n] = fr[fi[n]].FeatureTag;
-  }
-  ftl[n] = 0;
-
-  *feature_tag_list = ftl;
-
-  return HB_Err_Ok;
-}
-
-
-/* Do an individual subtable lookup.  Returns HB_Err_Ok if positioning
-   has been done, or HB_Err_Not_Covered if not.                        */
-static HB_Error  GPOS_Do_Glyph_Lookup( GPOS_Instance*    gpi,
-                                      HB_UShort         lookup_index,
-                                      HB_Buffer        buffer,
-                                      HB_UShort         context_length,
-                                      int               nesting_level )
-{
-  HB_Error             error = HB_Err_Not_Covered;
-  HB_UShort            i, flags, lookup_count;
-  HB_GPOSHeader*       gpos = gpi->gpos;
-  HB_Lookup*           lo;
-  int                 lookup_type;
-
-
-  nesting_level++;
-
-  if ( nesting_level > HB_MAX_NESTING_LEVEL )
-    return ERR(HB_Err_Not_Covered); /* ERR() call intended */
-
-  lookup_count = gpos->LookupList.LookupCount;
-  if (lookup_index >= lookup_count)
-    return error;
-
-  lo    = &gpos->LookupList.Lookup[lookup_index];
-  flags = lo->LookupFlag;
-  lookup_type = lo->LookupType;
-
-  for ( i = 0; i < lo->SubTableCount; i++ )
-  {
-    HB_GPOS_SubTable *st = &lo->SubTable[i].st.gpos;
-
-    switch (lookup_type) {
-      case HB_GPOS_LOOKUP_SINGLE:
-        error = Lookup_SinglePos       ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_PAIR:
-       error = Lookup_PairPos          ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_CURSIVE:
-       error = Lookup_CursivePos       ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_MARKBASE:
-       error = Lookup_MarkBasePos      ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_MARKLIG:
-       error = Lookup_MarkLigPos       ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_MARKMARK:
-       error = Lookup_MarkMarkPos      ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_CONTEXT:
-       error = Lookup_ContextPos       ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GPOS_LOOKUP_CHAIN:
-       error = Lookup_ChainContextPos  ( gpi, st, buffer, flags, context_length, nesting_level ); break;
-    /*case HB_GPOS_LOOKUP_EXTENSION:
-       error = Lookup_ExtensionPos     ( gpi, st, buffer, flags, context_length, nesting_level ); break;*/
-      default:
-       error = HB_Err_Not_Covered;
-    }
-
-    /* Check whether we have a successful positioning or an error other
-       than HB_Err_Not_Covered                                         */
-    if ( error != HB_Err_Not_Covered )
-      return error;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-HB_INTERNAL HB_Error
-_HB_GPOS_Load_SubTable( HB_GPOS_SubTable* st,
-                       HB_Stream         stream,
-                       HB_UShort         lookup_type )
-{
-  switch ( lookup_type ) {
-    case HB_GPOS_LOOKUP_SINGLE:                return Load_SinglePos           ( st, stream );
-    case HB_GPOS_LOOKUP_PAIR:          return Load_PairPos             ( st, stream );
-    case HB_GPOS_LOOKUP_CURSIVE:       return Load_CursivePos          ( st, stream );
-    case HB_GPOS_LOOKUP_MARKBASE:      return Load_MarkBasePos         ( st, stream );
-    case HB_GPOS_LOOKUP_MARKLIG:       return Load_MarkLigPos          ( st, stream );
-    case HB_GPOS_LOOKUP_MARKMARK:      return Load_MarkMarkPos         ( st, stream );
-    case HB_GPOS_LOOKUP_CONTEXT:       return Load_ContextPos          ( st, stream );
-    case HB_GPOS_LOOKUP_CHAIN:         return Load_ChainContextPos     ( st, stream );
-  /*case HB_GPOS_LOOKUP_EXTENSION:     return Load_ExtensionPos        ( st, stream );*/
-    default:                           return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-}
-
-
-HB_INTERNAL void
-_HB_GPOS_Free_SubTable( HB_GPOS_SubTable* st,
-                       HB_UShort         lookup_type )
-{
-  switch ( lookup_type ) {
-    case HB_GPOS_LOOKUP_SINGLE:                Free_SinglePos          ( st ); return;
-    case HB_GPOS_LOOKUP_PAIR:          Free_PairPos            ( st ); return;
-    case HB_GPOS_LOOKUP_CURSIVE:       Free_CursivePos         ( st ); return;
-    case HB_GPOS_LOOKUP_MARKBASE:      Free_MarkBasePos        ( st ); return;
-    case HB_GPOS_LOOKUP_MARKLIG:       Free_MarkLigPos         ( st ); return;
-    case HB_GPOS_LOOKUP_MARKMARK:      Free_MarkMarkPos        ( st ); return;
-    case HB_GPOS_LOOKUP_CONTEXT:       Free_ContextPos         ( st ); return;
-    case HB_GPOS_LOOKUP_CHAIN:         Free_ChainContextPos    ( st ); return;
-  /*case HB_GPOS_LOOKUP_EXTENSION:     Free_ExtensionPos       ( st ); return;*/
-    default:                                                                   return;
-  }
-}
-
-
-/* apply one lookup to the input string object */
-
-static HB_Error  GPOS_Do_String_Lookup( GPOS_Instance*    gpi,
-                                  HB_UShort         lookup_index,
-                                  HB_Buffer        buffer )
-{
-  HB_Error         error, retError = HB_Err_Not_Covered;
-  HB_GPOSHeader*  gpos = gpi->gpos;
-
-  HB_UInt*  properties = gpos->LookupList.Properties;
-
-  const int       nesting_level = 0;
-  /* 0xFFFF indicates that we don't have a context length yet */
-  const HB_UShort context_length = 0xFFFF;
-
-
-  gpi->last  = 0xFFFF;     /* no last valid glyph for cursive pos. */
-
-  buffer->in_pos = 0;
-  while ( buffer->in_pos < buffer->in_length )
-  {
-    if ( ~IN_PROPERTIES( buffer->in_pos ) & properties[lookup_index] )
-    {
-      /* Note that the connection between mark and base glyphs hold
-        exactly one (string) lookup.  For example, it would be possible
-        that in the first lookup, mark glyph X is attached to base
-        glyph A, and in the next lookup it is attached to base glyph B.
-        It is up to the font designer to provide meaningful lookups and
-        lookup order.                                                   */
-
-      error = GPOS_Do_Glyph_Lookup( gpi, lookup_index, buffer, context_length, nesting_level );
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-    }
-    else
-    {
-      /* Contrary to properties defined in GDEF, user-defined properties
-        will always stop a possible cursive positioning.                */
-      gpi->last = 0xFFFF;
-
-      error = HB_Err_Not_Covered;
-    }
-
-    if ( error == HB_Err_Not_Covered )
-      (buffer->in_pos)++;
-    else
-      retError = error;
-  }
-
-  return retError;
-}
-
-
-static HB_Error  Position_CursiveChain ( HB_Buffer     buffer )
-{
-  HB_UInt   i, j;
-  HB_Position positions = buffer->positions;
-
-  /* First handle all left-to-right connections */
-  for (j = 0; j < buffer->in_length; j++)
-  {
-    if (positions[j].cursive_chain > 0)
-      positions[j].y_pos += positions[j - positions[j].cursive_chain].y_pos;
-  }
-
-  /* Then handle all right-to-left connections */
-  for (i = buffer->in_length; i > 0; i--)
-  {
-    j = i - 1;
-
-    if (positions[j].cursive_chain < 0)
-      positions[j].y_pos += positions[j - positions[j].cursive_chain].y_pos;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-HB_Error  HB_GPOS_Add_Feature( HB_GPOSHeader*  gpos,
-                              HB_UShort        feature_index,
-                              HB_UInt          property )
-{
-  HB_UShort    i;
-
-  HB_Feature  feature;
-  HB_UInt*     properties;
-  HB_UShort*   index;
-  HB_UShort    lookup_count;
-
-  /* Each feature can only be added once */
-
-  if ( !gpos ||
-       feature_index >= gpos->FeatureList.FeatureCount ||
-       gpos->FeatureList.ApplyCount == gpos->FeatureList.FeatureCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gpos->FeatureList.ApplyOrder[gpos->FeatureList.ApplyCount++] = feature_index;
-
-  properties = gpos->LookupList.Properties;
-
-  feature = gpos->FeatureList.FeatureRecord[feature_index].Feature;
-  index   = feature.LookupListIndex;
-  lookup_count = gpos->LookupList.LookupCount;
-
-  for ( i = 0; i < feature.LookupListCount; i++ )
-  {
-    HB_UShort lookup_index = index[i];
-    if (lookup_index < lookup_count)
-      properties[lookup_index] |= property;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GPOS_Clear_Features( HB_GPOSHeader*  gpos )
-{
-  HB_UShort i;
-
-  HB_UInt*  properties;
-
-
-  if ( !gpos )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gpos->FeatureList.ApplyCount = 0;
-
-  properties = gpos->LookupList.Properties;
-
-  for ( i = 0; i < gpos->LookupList.LookupCount; i++ )
-    properties[i] = 0;
-
-  return HB_Err_Ok;
-}
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-HB_Error  HB_GPOS_Register_MM_Function( HB_GPOSHeader*  gpos,
-                                       HB_MMFunction   mmfunc,
-                                       void*            data )
-{
-  if ( !gpos )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gpos->mmfunc = mmfunc;
-  gpos->data   = data;
-
-  return HB_Err_Ok;
-}
-#endif
-
-/* If `dvi' is TRUE, glyph contour points for anchor points and device
-   tables are ignored -- you will get device independent values.         */
-
-
-HB_Error  HB_GPOS_Apply_String( HB_Font            font,
-                               HB_GPOSHeader*    gpos,
-                               HB_UShort          load_flags,
-                               HB_Buffer         buffer,
-                               HB_Bool            dvi,
-                               HB_Bool            r2l )
-{
-  HB_Error       error, retError = HB_Err_Not_Covered;
-  GPOS_Instance  gpi;
-  int            i, j, lookup_count, num_features;
-
-  if ( !font || !gpos || !buffer )
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( buffer->in_length == 0 )
-    return HB_Err_Not_Covered;
-
-  gpi.font       = font;
-  gpi.gpos       = gpos;
-  gpi.load_flags = load_flags;
-  gpi.r2l        = r2l;
-  gpi.dvi        = dvi;
-
-  lookup_count = gpos->LookupList.LookupCount;
-  num_features = gpos->FeatureList.ApplyCount;
-
-  if ( num_features )
-    {
-      error = _hb_buffer_clear_positions( buffer );
-      if ( error )
-       return error;
-    }
-
-  for ( i = 0; i < num_features; i++ )
-  {
-    HB_UShort  feature_index = gpos->FeatureList.ApplyOrder[i];
-    HB_Feature feature = gpos->FeatureList.FeatureRecord[feature_index].Feature;
-
-    for ( j = 0; j < feature.LookupListCount; j++ )
-    {
-      HB_UShort lookup_index = feature.LookupListIndex[j];
-
-      /* Skip nonexistant lookups */
-      if (lookup_index >= lookup_count)
-       continue;
-
-      error = GPOS_Do_String_Lookup( &gpi, lookup_index, buffer );
-      if ( error )
-      {
-       if ( error != HB_Err_Not_Covered )
-         return error;
-      }
-      else
-       retError = error;
-    }
-  }
-
-  if ( num_features )
-    {
-  error = Position_CursiveChain ( buffer );
-  if ( error )
-    return error;
-    }
-
-  return retError;
-}
-
-/* END */
diff --git a/src/hb-old/harfbuzz-gpos.h b/src/hb-old/harfbuzz-gpos.h
deleted file mode 100644 (file)
index 92bff84..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GPOS_H
-#define HARFBUZZ_GPOS_H
-
-#include "harfbuzz-gdef.h"
-#include "harfbuzz-buffer.h"
-
-HB_BEGIN_HEADER
-
-
-/* Lookup types for glyph positioning */
-
-#define HB_GPOS_LOOKUP_SINGLE     1
-#define HB_GPOS_LOOKUP_PAIR       2
-#define HB_GPOS_LOOKUP_CURSIVE    3
-#define HB_GPOS_LOOKUP_MARKBASE   4
-#define HB_GPOS_LOOKUP_MARKLIG    5
-#define HB_GPOS_LOOKUP_MARKMARK   6
-#define HB_GPOS_LOOKUP_CONTEXT    7
-#define HB_GPOS_LOOKUP_CHAIN      8
-#define HB_GPOS_LOOKUP_EXTENSION  9
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-/* A pointer to a function which accesses the PostScript interpreter.
-   Multiple Master fonts need this interface to convert a metric ID
-   (as stored in an OpenType font version 1.2 or higher) `metric_id'
-   into a metric value (returned in `metric_value').
-
-   `data' points to the user-defined structure specified during a
-   call to HB_GPOS_Register_MM_Function().
-
-   `metric_value' must be returned as a scaled value (but shouldn't
-   be rounded).                                                       */
-
-typedef HB_Error  (*HB_MMFunction)(HB_Font       font,
-                                   HB_UShort    metric_id,
-                                   HB_Fixed*      metric_value,
-                                   void*        data );
-#endif
-
-
-struct  HB_GPOSHeader_
-{
-  HB_16Dot16           Version;
-
-  HB_ScriptList     ScriptList;
-  HB_FeatureList    FeatureList;
-  HB_LookupList     LookupList;
-
-  HB_GDEFHeader*    gdef;
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-  /* this is OpenType 1.2 -- Multiple Master fonts need this
-     callback function to get various metric values from the
-     PostScript interpreter.                                 */
-
-  HB_MMFunction     mmfunc;
-  void*              data;
-#endif
-};
-
-typedef struct HB_GPOSHeader_  HB_GPOSHeader;
-typedef HB_GPOSHeader* HB_GPOS;
-
-
-HB_Error  HB_Load_GPOS_Table( HB_Stream stream, 
-                              HB_GPOSHeader** gpos,
-                             HB_GDEFHeader*  gdef,
-                              HB_Stream       gdefStream );
-
-
-HB_Error  HB_Done_GPOS_Table( HB_GPOSHeader* gpos );
-
-
-HB_Error  HB_GPOS_Select_Script( HB_GPOSHeader*  gpos,
-                                HB_UInt         script_tag,
-                                HB_UShort*       script_index );
-
-HB_Error  HB_GPOS_Select_Language( HB_GPOSHeader*  gpos,
-                                  HB_UInt         language_tag,
-                                  HB_UShort        script_index,
-                                  HB_UShort*       language_index,
-                                  HB_UShort*       req_feature_index );
-
-HB_Error  HB_GPOS_Select_Feature( HB_GPOSHeader*  gpos,
-                                 HB_UInt         feature_tag,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UShort*       feature_index );
-
-
-HB_Error  HB_GPOS_Query_Scripts( HB_GPOSHeader*  gpos,
-                                HB_UInt**       script_tag_list );
-
-HB_Error  HB_GPOS_Query_Languages( HB_GPOSHeader*  gpos,
-                                  HB_UShort        script_index,
-                                  HB_UInt**       language_tag_list );
-
-HB_Error  HB_GPOS_Query_Features( HB_GPOSHeader*  gpos,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UInt**       feature_tag_list );
-
-
-HB_Error  HB_GPOS_Add_Feature( HB_GPOSHeader*  gpos,
-                              HB_UShort        feature_index,
-                              HB_UInt          property );
-
-HB_Error  HB_GPOS_Clear_Features( HB_GPOSHeader*  gpos );
-
-
-#ifdef HB_SUPPORT_MULTIPLE_MASTER
-HB_Error  HB_GPOS_Register_MM_Function( HB_GPOSHeader*  gpos,
-                                       HB_MMFunction   mmfunc,
-                                       void*            data );
-#endif
-
-/* If `dvi' is TRUE, glyph contour points for anchor points and device
-   tables are ignored -- you will get device independent values.         */
-
-
-HB_Error  HB_GPOS_Apply_String( HB_Font           font,
-                               HB_GPOSHeader*   gpos,
-                               HB_UShort         load_flags,
-                               HB_Buffer        buffer,
-                               HB_Bool           dvi,
-                               HB_Bool           r2l );
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GPOS_H */
diff --git a/src/hb-old/harfbuzz-greek.c b/src/hb-old/harfbuzz-greek.c
deleted file mode 100644 (file)
index 2e9b858..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-#include <assert.h>
-
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature greek_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('l', 'i', 'g', 'a'), CcmpProperty },
-    { HB_MAKE_TAG('c', 'l', 'i', 'g'), CcmpProperty },
-    {0, 0}
-};
-#endif
-
-/*
-  Greek decompositions
-*/
-
-
-typedef struct _hb_greek_decomposition {
-    HB_UChar16 composed;
-    HB_UChar16 base;
-} hb_greek_decomposition;
-
-static const hb_greek_decomposition decompose_0x300[] = {
-    { 0x1FBA, 0x0391 },
-    { 0x1FC8, 0x0395 },
-    { 0x1FCA, 0x0397 },
-    { 0x1FDA, 0x0399 },
-    { 0x1FF8, 0x039F },
-    { 0x1FEA, 0x03A5 },
-    { 0x1FFA, 0x03A9 },
-    { 0x1F70, 0x03B1 },
-    { 0x1F72, 0x03B5 },
-    { 0x1F74, 0x03B7 },
-    { 0x1F76, 0x03B9 },
-    { 0x1F78, 0x03BF },
-    { 0x1F7A, 0x03C5 },
-    { 0x1F7C, 0x03C9 },
-    { 0x1FD2, 0x03CA },
-    { 0x1FE2, 0x03CB },
-    { 0x1F02, 0x1F00 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x300(HB_UChar16 base)
-{
-    if ((base ^ 0x1f00) < 0x100) {
-        if (base <= 0x1f69 && !(base & 0x6))
-            return base + 2;
-        if (base == 0x1fbf)
-            return 0x1fcd;
-        if (base == 0x1ffe)
-            return 0x1fdd;
-        return 0;
-    }
-    {
-        const hb_greek_decomposition *d = decompose_0x300;
-        while (d->base && d->base != base)
-            ++d;
-        return d->composed;
-    }
-}
-
-static const hb_greek_decomposition decompose_0x301[] = {
-    { 0x0386, 0x0391 },
-    { 0x0388, 0x0395 },
-    { 0x0389, 0x0397 },
-    { 0x038A, 0x0399 },
-    { 0x038C, 0x039F },
-    { 0x038E, 0x03A5 },
-    { 0x038F, 0x03A9 },
-    { 0x03AC, 0x03B1 },
-    { 0x03AD, 0x03B5 },
-    { 0x03AE, 0x03B7 },
-    { 0x03AF, 0x03B9 },
-    { 0x03CC, 0x03BF },
-    { 0x03CD, 0x03C5 },
-    { 0x03CE, 0x03C9 },
-    { 0x0390, 0x03CA },
-    { 0x03B0, 0x03CB },
-    { 0x03D3, 0x03D2 },
-    { 0, 0 }
-};
-
-
-static HB_UChar16 compose_0x301(HB_UChar16 base)
-{
-    if ((base ^ 0x1f00) < 0x100) {
-        if (base <= 0x1f69 && !(base & 0x6))
-            return base + 4;
-        if (base == 0x1fbf)
-            return 0x1fce;
-        if (base == 0x1ffe)
-            return 0x1fde;
-    }
-    {
-        const hb_greek_decomposition *d = decompose_0x301;
-        while (d->base && d->base != base)
-            ++d;
-        return d->composed;
-    }
-}
-
-static const hb_greek_decomposition decompose_0x304[] = {
-    { 0x1FB9, 0x0391 },
-    { 0x1FD9, 0x0399 },
-    { 0x1FE9, 0x03A5 },
-    { 0x1FB1, 0x03B1 },
-    { 0x1FD1, 0x03B9 },
-    { 0x1FE1, 0x03C5 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x304(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x304;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-static const hb_greek_decomposition decompose_0x306[] = {
-    { 0x1FB8, 0x0391 },
-    { 0x1FD8, 0x0399 },
-    { 0x1FE8, 0x03A5 },
-    { 0x1FB0, 0x03B1 },
-    { 0x1FD0, 0x03B9 },
-    { 0x1FE0, 0x03C5 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x306(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x306;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-static const hb_greek_decomposition decompose_0x308[] = {
-    { 0x03AA, 0x0399  },
-    { 0x03AB, 0x03A5  },
-    { 0x03CA, 0x03B9  },
-    { 0x03CB, 0x03C5  },
-    { 0x03D4, 0x03D2  },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x308(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x308;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-
-static const hb_greek_decomposition decompose_0x313[] = {
-    { 0x1F08, 0x0391 },
-    { 0x1F18, 0x0395 },
-    { 0x1F28, 0x0397 },
-    { 0x1F38, 0x0399 },
-    { 0x1F48, 0x039F },
-    { 0x1F68, 0x03A9 },
-    { 0x1F00, 0x03B1 },
-    { 0x1F10, 0x03B5 },
-    { 0x1F20, 0x03B7 },
-    { 0x1F30, 0x03B9 },
-    { 0x1F40, 0x03BF },
-    { 0x1FE4, 0x03C1 },
-    { 0x1F50, 0x03C5 },
-    { 0x1F60, 0x03C9 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x313(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x313;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-static const hb_greek_decomposition decompose_0x314[] = {
-    { 0x1F09, 0x0391 },
-    { 0x1F19, 0x0395 },
-    { 0x1F29, 0x0397 },
-    { 0x1F39, 0x0399 },
-    { 0x1F49, 0x039F },
-    { 0x1FEC, 0x03A1 },
-    { 0x1F59, 0x03A5 },
-    { 0x1F69, 0x03A9 },
-    { 0x1F01, 0x03B1 },
-    { 0x1F11, 0x03B5 },
-    { 0x1F21, 0x03B7 },
-    { 0x1F31, 0x03B9 },
-    { 0x1F41, 0x03BF },
-    { 0x1FE5, 0x03C1 },
-    { 0x1F51, 0x03C5 },
-    { 0x1F61, 0x03C9 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x314(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x314;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-static const hb_greek_decomposition decompose_0x342[] = {
-    { 0x1FB6, 0x03B1 },
-    { 0x1FC6, 0x03B7 },
-    { 0x1FD6, 0x03B9 },
-    { 0x1FE6, 0x03C5 },
-    { 0x1FF6, 0x03C9 },
-    { 0x1FD7, 0x03CA },
-    { 0x1FE7, 0x03CB },
-    { 0x1F06, 0x1F00 },
-    { 0x1F07, 0x1F01 },
-    { 0x1F0E, 0x1F08 },
-    { 0x1F0F, 0x1F09 },
-    { 0x1F26, 0x1F20 },
-    { 0x1F27, 0x1F21 },
-    { 0x1F2E, 0x1F28 },
-    { 0x1F2F, 0x1F29 },
-    { 0x1F36, 0x1F30 },
-    { 0x1F37, 0x1F31 },
-    { 0x1F3E, 0x1F38 },
-    { 0x1F3F, 0x1F39 },
-    { 0x1F56, 0x1F50 },
-    { 0x1F57, 0x1F51 },
-    { 0x1F5F, 0x1F59 },
-    { 0x1F66, 0x1F60 },
-    { 0x1F67, 0x1F61 },
-    { 0x1F6E, 0x1F68 },
-    { 0x1F6F, 0x1F69 },
-    { 0x1FCF, 0x1FBF },
-    { 0x1FDF, 0x1FFE },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x342(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x342;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-static const hb_greek_decomposition decompose_0x345[] = {
-    { 0x1FBC, 0x0391 },
-    { 0x1FCC, 0x0397 },
-    { 0x1FFC, 0x03A9 },
-    { 0x1FB4, 0x03AC },
-    { 0x1FC4, 0x03AE },
-    { 0x1FB3, 0x03B1 },
-    { 0x1FC3, 0x03B7 },
-    { 0x1FF3, 0x03C9 },
-    { 0x1FF4, 0x03CE },
-    { 0x1F80, 0x1F00 },
-    { 0x1F81, 0x1F01 },
-    { 0x1F82, 0x1F02 },
-    { 0x1F83, 0x1F03 },
-    { 0x1F84, 0x1F04 },
-    { 0x1F85, 0x1F05 },
-    { 0x1F86, 0x1F06 },
-    { 0x1F87, 0x1F07 },
-    { 0x1F88, 0x1F08 },
-    { 0x1F89, 0x1F09 },
-    { 0x1F8A, 0x1F0A },
-    { 0x1F8B, 0x1F0B },
-    { 0x1F8C, 0x1F0C },
-    { 0x1F8D, 0x1F0D },
-    { 0x1F8E, 0x1F0E },
-    { 0x1F8F, 0x1F0F },
-    { 0x1F90, 0x1F20 },
-    { 0x1F91, 0x1F21 },
-    { 0x1F92, 0x1F22 },
-    { 0x1F93, 0x1F23 },
-    { 0x1F94, 0x1F24 },
-    { 0x1F95, 0x1F25 },
-    { 0x1F96, 0x1F26 },
-    { 0x1F97, 0x1F27 },
-    { 0x1F98, 0x1F28 },
-    { 0x1F99, 0x1F29 },
-    { 0x1F9A, 0x1F2A },
-    { 0x1F9B, 0x1F2B },
-    { 0x1F9C, 0x1F2C },
-    { 0x1F9D, 0x1F2D },
-    { 0x1F9E, 0x1F2E },
-    { 0x1F9F, 0x1F2F },
-    { 0x1FA0, 0x1F60 },
-    { 0x1FA1, 0x1F61 },
-    { 0x1FA2, 0x1F62 },
-    { 0x1FA3, 0x1F63 },
-    { 0x1FA4, 0x1F64 },
-    { 0x1FA5, 0x1F65 },
-    { 0x1FA6, 0x1F66 },
-    { 0x1FA7, 0x1F67 },
-    { 0x1FA8, 0x1F68 },
-    { 0x1FA9, 0x1F69 },
-    { 0x1FAA, 0x1F6A },
-    { 0x1FAB, 0x1F6B },
-    { 0x1FAC, 0x1F6C },
-    { 0x1FAD, 0x1F6D },
-    { 0x1FAE, 0x1F6E },
-    { 0x1FAF, 0x1F6F },
-    { 0x1FB2, 0x1F70 },
-    { 0x1FC2, 0x1F74 },
-    { 0x1FF2, 0x1F7C },
-    { 0x1FB7, 0x1FB6 },
-    { 0x1FC7, 0x1FC6 },
-    { 0x1FF7, 0x1FF6 },
-    { 0, 0 }
-};
-
-static HB_UChar16 compose_0x345(HB_UChar16 base)
-{
-    const hb_greek_decomposition *d = decompose_0x345;
-    while (d->base && d->base != base)
-        ++d;
-    return d->composed;
-}
-
-/*
-  Greek shaping. Heuristic positioning can't render polytonic greek correctly. We're a lot
-  better off mapping greek chars with diacritics to the characters in the extended greek
-  region in Unicode if possible.
-*/
-HB_Bool HB_GreekShape(HB_ShaperItem *shaper_item)
-{
-    const int availableGlyphs = shaper_item->num_glyphs;
-    const HB_UChar16 *uc = shaper_item->string + shaper_item->item.pos;
-    unsigned short *logClusters = shaper_item->log_clusters;
-    HB_GlyphAttributes *attributes = shaper_item->attributes;
-
-    HB_Bool haveGlyphs;
-    int slen = 1;
-    int cluster_start = 0;
-    hb_uint32 i;
-
-    HB_STACKARRAY(HB_UChar16, shapedChars, 2 * shaper_item->item.length);
-
-    assert(shaper_item->item.script == HB_Script_Greek);
-
-    *shapedChars = *uc;
-    logClusters[0] = 0;
-
-    for (i = 1; i < shaper_item->item.length; ++i) {
-        hb_uint16 base = shapedChars[slen-1];
-        hb_uint16 shaped = 0;
-        if (uc[i] == 0x300)
-            shaped = compose_0x300(base);
-        else if (uc[i] == 0x301)
-            shaped = compose_0x301(base);
-        else if (uc[i] == 0x304)
-            shaped = compose_0x304(base);
-        else if (uc[i] == 0x306)
-            shaped = compose_0x306(base);
-        else if (uc[i] == 0x308)
-            shaped = compose_0x308(base);
-        else if (uc[i] == 0x313)
-            shaped = compose_0x313(base);
-        else if (uc[i] == 0x314)
-            shaped = compose_0x314(base);
-        else if (uc[i] == 0x342)
-            shaped = compose_0x342(base);
-        else if (uc[i] == 0x345)
-            shaped = compose_0x345(base);
-
-        if (shaped) {
-            if (shaper_item->font->klass->canRender(shaper_item->font, (HB_UChar16 *)&shaped, 1)) {
-                shapedChars[slen-1] = shaped;
-            } else {
-                shaped = 0;
-            }
-        }
-
-        if (!shaped) {
-            HB_CharCategory category;
-            int cmb;
-            shapedChars[slen] = uc[i];
-            HB_GetUnicodeCharProperties(uc[i], &category, &cmb);
-            if (category != HB_Mark_NonSpacing) {
-                attributes[slen].clusterStart = TRUE;
-                attributes[slen].mark = FALSE;
-                attributes[slen].combiningClass = 0;
-                attributes[slen].dontPrint = HB_IsControlChar(uc[i]);
-                cluster_start = slen;
-            } else {
-                attributes[slen].clusterStart = FALSE;
-                attributes[slen].mark = TRUE;
-                attributes[slen].combiningClass = cmb;
-            }
-            ++slen;
-        }
-        logClusters[i] = cluster_start;
-    }
-
-    haveGlyphs = shaper_item->font->klass
-        ->convertStringToGlyphIndices(shaper_item->font,
-                                      shapedChars, slen,
-                                      shaper_item->glyphs, &shaper_item->num_glyphs,
-                                      shaper_item->item.bidiLevel % 2);
-
-    HB_FREE_STACKARRAY(shapedChars);
-
-    if (!haveGlyphs)
-        return FALSE;
-
-#ifndef NO_OPENTYPE
-    if (HB_SelectScript(shaper_item, greek_features)) {
-        HB_OpenTypeShape(shaper_item, /*properties*/0);
-        return HB_OpenTypePosition(shaper_item, availableGlyphs, /*doLogClusters*/TRUE);
-    }
-#endif
-    HB_HeuristicPosition(shaper_item);
-
-    return TRUE;
-}
-
diff --git a/src/hb-old/harfbuzz-gsub-private.h b/src/hb-old/harfbuzz-gsub-private.h
deleted file mode 100644 (file)
index 7eb329e..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GSUB_PRIVATE_H
-#define HARFBUZZ_GSUB_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-stream-private.h"
-#include "harfbuzz-gsub.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-typedef union HB_GSUB_SubTable_  HB_GSUB_SubTable;
-
-/* LookupType 1 */
-
-struct  HB_SingleSubstFormat1_
-{
-  HB_Short  DeltaGlyphID;             /* constant added to get
-                                        substitution glyph index */
-};
-
-typedef struct HB_SingleSubstFormat1_  HB_SingleSubstFormat1;
-
-
-struct  HB_SingleSubstFormat2_
-{
-  HB_UShort*  Substitute;             /* array of substitute glyph IDs */
-  HB_UShort   GlyphCount;             /* number of glyph IDs in
-                                        Substitute array              */
-};
-
-typedef struct HB_SingleSubstFormat2_  HB_SingleSubstFormat2;
-
-
-struct  HB_SingleSubst_
-{
-  union
-  {
-    HB_SingleSubstFormat1  ssf1;
-    HB_SingleSubstFormat2  ssf2;
-  } ssf;
-
-  HB_Coverage  Coverage;             /* Coverage table */
-  HB_Byte     SubstFormat;            /* 1 or 2         */
-};
-
-typedef struct HB_SingleSubst_  HB_SingleSubst;
-
-
-/* LookupType 2 */
-
-struct  HB_Sequence_
-{
-  HB_UShort*  Substitute;             /* string of glyph IDs to
-                                        substitute                 */
-  HB_UShort   GlyphCount;             /* number of glyph IDs in the
-                                        Substitute array           */
-};
-
-typedef struct HB_Sequence_  HB_Sequence;
-
-
-struct  HB_MultipleSubst_
-{
-  HB_Sequence*  Sequence;            /* array of Sequence tables  */
-  HB_Coverage   Coverage;            /* Coverage table            */
-  HB_UShort      SubstFormat;         /* always 1                  */
-  HB_UShort      SequenceCount;       /* number of Sequence tables */
-};
-
-typedef struct HB_MultipleSubst_  HB_MultipleSubst;
-
-
-/* LookupType 3 */
-
-struct  HB_AlternateSet_
-{
-  HB_UShort*  Alternate;              /* array of alternate glyph IDs */
-  HB_UShort   GlyphCount;             /* number of glyph IDs in the
-                                        Alternate array              */
-};
-
-typedef struct HB_AlternateSet_  HB_AlternateSet;
-
-
-struct  HB_AlternateSubst_
-{
-  HB_AlternateSet*  AlternateSet;    /* array of AlternateSet tables  */
-  HB_Coverage       Coverage;        /* Coverage table                */
-  HB_UShort          SubstFormat;     /* always 1                      */
-  HB_UShort          AlternateSetCount;
-                                     /* number of AlternateSet tables */
-};
-
-typedef struct HB_AlternateSubst_  HB_AlternateSubst;
-
-
-/* LookupType 4 */
-
-struct  HB_Ligature_
-{
-  HB_UShort*  Component;              /* array of component glyph IDs     */
-  HB_UShort   LigGlyph;               /* glyphID of ligature
-                                        to substitute                    */
-  HB_UShort   ComponentCount;         /* number of components in ligature */
-};
-
-typedef struct HB_Ligature_  HB_Ligature;
-
-
-struct  HB_LigatureSet_
-{
-  HB_Ligature*  Ligature;            /* array of Ligature tables  */
-  HB_UShort      LigatureCount;       /* number of Ligature tables */
-};
-
-typedef struct HB_LigatureSet_  HB_LigatureSet;
-
-
-struct  HB_LigatureSubst_
-{
-  HB_LigatureSet*  LigatureSet;      /* array of LigatureSet tables  */
-  HB_Coverage      Coverage;         /* Coverage table               */
-  HB_UShort         SubstFormat;      /* always 1                     */
-  HB_UShort         LigatureSetCount; /* number of LigatureSet tables */
-};
-
-typedef struct HB_LigatureSubst_  HB_LigatureSubst;
-
-
-/* needed by both lookup type 5 and 6 */
-
-struct  HB_SubstLookupRecord_
-{
-  HB_UShort  SequenceIndex;           /* index into current
-                                        glyph sequence               */
-  HB_UShort  LookupListIndex;         /* Lookup to apply to that pos. */
-};
-
-typedef struct HB_SubstLookupRecord_  HB_SubstLookupRecord;
-
-
-/* LookupType 5 */
-
-struct  HB_SubRule_
-{
-  HB_UShort*              Input;      /* array of input glyph IDs     */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of SubstLookupRecord
-                                        tables                       */
-  HB_UShort               GlyphCount; /* total number of input glyphs */
-  HB_UShort               SubstCount; /* number of SubstLookupRecord
-                                        tables                       */
-};
-
-typedef struct HB_SubRule_  HB_SubRule;
-
-
-struct  HB_SubRuleSet_
-{
-  HB_SubRule*  SubRule;              /* array of SubRule tables  */
-  HB_UShort     SubRuleCount;         /* number of SubRule tables */
-};
-
-typedef struct HB_SubRuleSet_  HB_SubRuleSet;
-
-
-struct  HB_ContextSubstFormat1_
-{
-  HB_SubRuleSet*  SubRuleSet;        /* array of SubRuleSet tables  */
-  HB_Coverage     Coverage;          /* Coverage table              */
-  HB_UShort        SubRuleSetCount;   /* number of SubRuleSet tables */
-};
-
-typedef struct HB_ContextSubstFormat1_  HB_ContextSubstFormat1;
-
-
-struct  HB_SubClassRule_
-{
-  HB_UShort*              Class;      /* array of classes                */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of SubstLookupRecord
-                                        tables                          */
-  HB_UShort               GlyphCount; /* total number of context classes */
-  HB_UShort               SubstCount; /* number of SubstLookupRecord
-                                        tables                          */
-};
-
-typedef struct HB_SubClassRule_  HB_SubClassRule;
-
-
-struct  HB_SubClassSet_
-{
-  HB_SubClassRule*  SubClassRule;    /* array of SubClassRule tables  */
-  HB_UShort          SubClassRuleCount;
-                                     /* number of SubClassRule tables */
-};
-
-typedef struct HB_SubClassSet_  HB_SubClassSet;
-
-
-/* The `MaxContextLength' field is not defined in the TTO specification
-   but simplifies the implementation of this format.  It holds the
-   maximal context length used in the context rules.                    */
-
-struct  HB_ContextSubstFormat2_
-{
-  HB_SubClassSet*     SubClassSet;   /* array of SubClassSet tables  */
-  HB_Coverage         Coverage;      /* Coverage table               */
-  HB_ClassDefinition  ClassDef;      /* ClassDef table               */
-  HB_UShort            SubClassSetCount;
-                                     /* number of SubClassSet tables */
-  HB_UShort            MaxContextLength;
-                                     /* maximal context length       */
-};
-
-typedef struct HB_ContextSubstFormat2_  HB_ContextSubstFormat2;
-
-
-struct  HB_ContextSubstFormat3_
-{
-  HB_Coverage*           Coverage;   /* array of Coverage tables      */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of substitution lookups */
-  HB_UShort               GlyphCount; /* number of input glyphs        */
-  HB_UShort               SubstCount; /* number of SubstLookupRecords  */
-};
-
-typedef struct HB_ContextSubstFormat3_  HB_ContextSubstFormat3;
-
-
-struct  HB_ContextSubst_
-{
-  union
-  {
-    HB_ContextSubstFormat1  csf1;
-    HB_ContextSubstFormat2  csf2;
-    HB_ContextSubstFormat3  csf3;
-  } csf;
-
-  HB_Byte  SubstFormat;               /* 1, 2, or 3 */
-};
-
-typedef struct HB_ContextSubst_  HB_ContextSubst;
-
-
-/* LookupType 6 */
-
-struct  HB_ChainSubRule_
-{
-  HB_UShort*              Backtrack;  /* array of backtrack glyph IDs     */
-  HB_UShort*              Input;      /* array of input glyph IDs         */
-  HB_UShort*              Lookahead;  /* array of lookahead glyph IDs     */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of SubstLookupRecords      */
-  HB_UShort               BacktrackGlyphCount;
-                                     /* total number of backtrack glyphs */
-  HB_UShort               InputGlyphCount;
-                                     /* total number of input glyphs     */
-  HB_UShort               LookaheadGlyphCount;
-                                     /* total number of lookahead glyphs */
-  HB_UShort               SubstCount; /* number of SubstLookupRecords     */
-};
-
-typedef struct HB_ChainSubRule_  HB_ChainSubRule;
-
-
-struct  HB_ChainSubRuleSet_
-{
-  HB_ChainSubRule*  ChainSubRule;    /* array of ChainSubRule tables  */
-  HB_UShort          ChainSubRuleCount;
-                                     /* number of ChainSubRule tables */
-};
-
-typedef struct HB_ChainSubRuleSet_  HB_ChainSubRuleSet;
-
-
-struct  HB_ChainContextSubstFormat1_
-{
-  HB_ChainSubRuleSet*  ChainSubRuleSet;
-                                     /* array of ChainSubRuleSet tables  */
-  HB_Coverage          Coverage;     /* Coverage table                   */
-  HB_UShort             ChainSubRuleSetCount;
-                                     /* number of ChainSubRuleSet tables */
-};
-
-typedef struct HB_ChainContextSubstFormat1_  HB_ChainContextSubstFormat1;
-
-
-struct  HB_ChainSubClassRule_
-{
-  HB_UShort*              Backtrack;  /* array of backtrack classes      */
-  HB_UShort*              Input;      /* array of context classes        */
-  HB_UShort*              Lookahead;  /* array of lookahead classes      */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of substitution lookups   */
-  HB_UShort               BacktrackGlyphCount;
-                                     /* total number of backtrack
-                                        classes                         */
-  HB_UShort               InputGlyphCount;
-                                     /* total number of context classes */
-  HB_UShort               LookaheadGlyphCount;
-                                     /* total number of lookahead
-                                        classes                         */
-  HB_UShort               SubstCount; /* number of SubstLookupRecords    */
-};
-
-typedef struct HB_ChainSubClassRule_  HB_ChainSubClassRule;
-
-
-struct  HB_ChainSubClassSet_
-{
-  HB_ChainSubClassRule*  ChainSubClassRule;
-                                     /* array of ChainSubClassRule
-                                        tables                      */
-  HB_UShort               ChainSubClassRuleCount;
-                                     /* number of ChainSubClassRule
-                                        tables                      */
-};
-
-typedef struct HB_ChainSubClassSet_  HB_ChainSubClassSet;
-
-
-/* The `MaxXXXLength' fields are not defined in the TTO specification
-   but simplifies the implementation of this format.  It holds the
-   maximal context length used in the specific context rules.         */
-
-struct  HB_ChainContextSubstFormat2_
-{
-  HB_ChainSubClassSet*  ChainSubClassSet;
-                                     /* array of ChainSubClassSet
-                                        tables                     */
-  HB_Coverage           Coverage;    /* Coverage table             */
-
-  HB_ClassDefinition    BacktrackClassDef;
-                                     /* BacktrackClassDef table    */
-  HB_ClassDefinition    InputClassDef;
-                                     /* InputClassDef table        */
-  HB_ClassDefinition    LookaheadClassDef;
-                                     /* LookaheadClassDef table    */
-
-  HB_UShort              ChainSubClassSetCount;
-                                     /* number of ChainSubClassSet
-                                        tables                     */
-  HB_UShort              MaxBacktrackLength;
-                                     /* maximal backtrack length   */
-  HB_UShort              MaxLookaheadLength;
-                                     /* maximal lookahead length   */
-  HB_UShort              MaxInputLength;
-                                     /* maximal input length       */
-};
-
-typedef struct HB_ChainContextSubstFormat2_  HB_ChainContextSubstFormat2;
-
-
-struct  HB_ChainContextSubstFormat3_
-{
-  HB_Coverage*           BacktrackCoverage;
-                                     /* array of backtrack Coverage
-                                        tables                        */
-  HB_Coverage*           InputCoverage;
-                                     /* array of input coverage
-                                        tables                        */
-  HB_Coverage*           LookaheadCoverage;
-                                     /* array of lookahead coverage
-                                        tables                        */
-  HB_SubstLookupRecord*  SubstLookupRecord;
-                                     /* array of substitution lookups */
-  HB_UShort               BacktrackGlyphCount;
-                                     /* number of backtrack glyphs    */
-  HB_UShort               InputGlyphCount;
-                                     /* number of input glyphs        */
-  HB_UShort               LookaheadGlyphCount;
-                                     /* number of lookahead glyphs    */
-  HB_UShort               SubstCount; /* number of SubstLookupRecords  */
-};
-
-typedef struct HB_ChainContextSubstFormat3_  HB_ChainContextSubstFormat3;
-
-
-struct  HB_ChainContextSubst_
-{
-  union
-  {
-    HB_ChainContextSubstFormat1  ccsf1;
-    HB_ChainContextSubstFormat2  ccsf2;
-    HB_ChainContextSubstFormat3  ccsf3;
-  } ccsf;
-
-  HB_Byte  SubstFormat;               /* 1, 2, or 3 */
-};
-
-typedef struct HB_ChainContextSubst_  HB_ChainContextSubst;
-
-
-#if 0
-/* LookupType 7 */
-struct HB_ExtensionSubst_
-{
-  HB_GSUB_SubTable *subtable;         /* referenced subtable */
-  HB_UShort      SubstFormat;         /* always 1 */
-  HB_UShort      LookuptType;         /* lookup-type of referenced subtable */
-};
-
-typedef struct HB_ExtensionSubst_  HB_ExtensionSubst;
-#endif
-
-
-/* LookupType 8 */
-struct HB_ReverseChainContextSubst_
-{
-  HB_Coverage*  LookaheadCoverage;   /* array of lookahead Coverage
-                                        tables                          */
-  HB_UShort*     Substitute;          /* array of substitute Glyph ID    */
-  HB_Coverage*  BacktrackCoverage;   /* array of backtrack Coverage
-                                        tables                          */
-  HB_Coverage   Coverage;              /* coverage table for input glyphs */
-  HB_UShort      SubstFormat;         /* always 1 */
-  HB_UShort      BacktrackGlyphCount; /* number of backtrack glyphs      */
-  HB_UShort      LookaheadGlyphCount; /* number of lookahead glyphs      */
-  HB_UShort      GlyphCount;          /* number of Glyph IDs             */
-};
-
-typedef struct HB_ReverseChainContextSubst_  HB_ReverseChainContextSubst;
-
-
-union  HB_GSUB_SubTable_
-{
-  HB_SingleSubst              single;
-  HB_MultipleSubst            multiple;
-  HB_AlternateSubst           alternate;
-  HB_LigatureSubst            ligature;
-  HB_ContextSubst             context;
-  HB_ChainContextSubst        chain;
-  HB_ReverseChainContextSubst reverse;
-};
-
-
-
-
-HB_INTERNAL HB_Error
-_HB_GSUB_Load_SubTable( HB_GSUB_SubTable* st,
-                                 HB_Stream     stream,
-                                 HB_UShort     lookup_type );
-
-HB_INTERNAL void
-_HB_GSUB_Free_SubTable( HB_GSUB_SubTable* st,
-                             HB_UShort     lookup_type );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GSUB_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-gsub.c b/src/hb-old/harfbuzz-gsub.c
deleted file mode 100644 (file)
index ceb7034..0000000
+++ /dev/null
@@ -1,4329 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- * Copyright (C) 2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-gsub-private.h"
-#include "harfbuzz-open-private.h"
-#include "harfbuzz-gdef-private.h"
-
-static HB_Error  GSUB_Do_Glyph_Lookup( HB_GSUBHeader*   gsub,
-                                      HB_UShort         lookup_index,
-                                      HB_Buffer        buffer,
-                                      HB_UShort         context_length,
-                                      int               nesting_level );
-
-
-
-/**********************
- * Auxiliary functions
- **********************/
-
-
-
-HB_Error  HB_Load_GSUB_Table( HB_Stream stream,
-                             HB_GSUBHeader** retptr,
-                             HB_GDEFHeader*  gdef,
-                              HB_Stream       gdefStream )
-{
-  HB_Error         error;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_GSUBHeader*  gsub;
-
-  if ( !retptr )
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( GOTO_Table( TTAG_GSUB ) )
-    return error;
-
-  base_offset = FILE_Pos();
-
-  if ( ALLOC ( gsub, sizeof( *gsub ) ) ) 
-      return error;
-  
-
-  /* skip version */
-
-  if ( FILE_Seek( base_offset + 4L ) ||
-       ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_ScriptList( &gsub->ScriptList,
-                                 stream ) ) != HB_Err_Ok )
-    goto Fail4;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_FeatureList( &gsub->FeatureList,
-                                  stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_LookupList( &gsub->LookupList,
-                                 stream, HB_Type_GSUB ) ) != HB_Err_Ok )
-    goto Fail2;
-
-  gsub->gdef = gdef;      /* can be NULL */
-
-  if ( ( error =  _HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( gdef, gdefStream,
-                                                                    gsub->LookupList.Lookup,
-                                                                    gsub->LookupList.LookupCount ) ) )
-    goto Fail1;
-
-  *retptr = gsub;
-
-  return HB_Err_Ok;
-
-Fail1:
-  _HB_OPEN_Free_LookupList( &gsub->LookupList, HB_Type_GSUB );
-
-Fail2:
-  _HB_OPEN_Free_FeatureList( &gsub->FeatureList );
-
-Fail3:
-  _HB_OPEN_Free_ScriptList( &gsub->ScriptList );
-
-Fail4:
-  FREE ( gsub );
-
-
-  return error;
-}
-
-
-HB_Error   HB_Done_GSUB_Table( HB_GSUBHeader* gsub )
-{
-  _HB_OPEN_Free_LookupList( &gsub->LookupList, HB_Type_GSUB );
-  _HB_OPEN_Free_FeatureList( &gsub->FeatureList );
-  _HB_OPEN_Free_ScriptList( &gsub->ScriptList );
-
-  FREE( gsub );
-
-  return HB_Err_Ok;
-}
-
-/*****************************
- * SubTable related functions
- *****************************/
-
-
-/* LookupType 1 */
-
-/* SingleSubstFormat1 */
-/* SingleSubstFormat2 */
-
-static HB_Error  Load_SingleSubst( HB_GSUB_SubTable* st,
-                                  HB_Stream         stream )
-{
-  HB_Error error;
-  HB_SingleSubst*  ss = &st->single;
-
-  HB_UShort n, count;
-  HB_UInt cur_offset, new_offset, base_offset;
-
-  HB_UShort*  s;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  ss->SubstFormat = GET_UShort();
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ss->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  switch ( ss->SubstFormat )
-  {
-  case 1:
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    ss->ssf.ssf1.DeltaGlyphID = GET_UShort();
-
-    FORGET_Frame();
-
-    break;
-
-  case 2:
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    count = ss->ssf.ssf2.GlyphCount = GET_UShort();
-
-    FORGET_Frame();
-
-    ss->ssf.ssf2.Substitute = NULL;
-
-    if ( ALLOC_ARRAY( ss->ssf.ssf2.Substitute, count, HB_UShort ) )
-      goto Fail2;
-
-    s = ss->ssf.ssf2.Substitute;
-
-    if ( ACCESS_Frame( count * 2L ) )
-      goto Fail1;
-
-    for ( n = 0; n < count; n++ )
-      s[n] = GET_UShort();
-
-    FORGET_Frame();
-
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( s );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &ss->Coverage );
-  return error;
-}
-
-
-static void  Free_SingleSubst( HB_GSUB_SubTable* st )
-{
-  HB_SingleSubst*  ss = &st->single;
-
-  switch ( ss->SubstFormat )
-  {
-  case 1:
-    break;
-
-  case 2:
-    FREE( ss->ssf.ssf2.Substitute );
-    break;
-
-  default:
-    break;
-  }
-
-  _HB_OPEN_Free_Coverage( &ss->Coverage );
-}
-
-
-static HB_Error  Lookup_SingleSubst( HB_GSUBHeader*   gsub,
-                                    HB_GSUB_SubTable* st,
-                                    HB_Buffer        buffer,
-                                    HB_UShort         flags,
-                                    HB_UShort         context_length,
-                                    int               nesting_level )
-{
-  HB_UShort index, value, property;
-  HB_Error  error;
-  HB_SingleSubst*  ss = &st->single;
-  HB_GDEFHeader*   gdef = gsub->gdef;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &ss->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  switch ( ss->SubstFormat )
-  {
-  case 1:
-    value = ( IN_CURGLYPH() + ss->ssf.ssf1.DeltaGlyphID ) & 0xFFFF;
-    if ( REPLACE_Glyph( buffer, value, nesting_level ) )
-      return error;
-    break;
-
-  case 2:
-    if ( index >= ss->ssf.ssf2.GlyphCount )
-      return ERR(HB_Err_Invalid_SubTable);
-    value = ss->ssf.ssf2.Substitute[index];
-    if ( REPLACE_Glyph( buffer, value, nesting_level ) )
-      return error;
-    break;
-
-  default:
-    return ERR(HB_Err_Invalid_SubTable);
-  }
-
-  if ( gdef && gdef->NewGlyphClasses )
-  {
-    /* we inherit the old glyph class to the substituted glyph */
-
-    error = _HB_GDEF_Add_Glyph_Property( gdef, value, property );
-    if ( error && error != HB_Err_Not_Covered )
-      return error;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 2 */
-
-/* Sequence */
-
-static HB_Error  Load_Sequence( HB_Sequence*  s,
-                               HB_Stream      stream )
-{
-  HB_Error error;
-
-  HB_UShort n, count;
-  HB_UShort*  sub;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = s->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  s->Substitute = NULL;
-
-  if ( count )
-  {
-    if ( ALLOC_ARRAY( s->Substitute, count, HB_UShort ) )
-      return error;
-
-    sub = s->Substitute;
-
-    if ( ACCESS_Frame( count * 2L ) )
-    {
-      FREE( sub );
-      return error;
-    }
-
-    for ( n = 0; n < count; n++ )
-      sub[n] = GET_UShort();
-
-    FORGET_Frame();
-  }
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_Sequence( HB_Sequence*  s )
-{
-  FREE( s->Substitute );
-}
-
-
-/* MultipleSubstFormat1 */
-
-static HB_Error  Load_MultipleSubst( HB_GSUB_SubTable* st,
-                                    HB_Stream         stream )
-{
-  HB_Error error;
-  HB_MultipleSubst*  ms = &st->multiple;
-
-  HB_UShort      n = 0, m, count;
-  HB_UInt       cur_offset, new_offset, base_offset;
-
-  HB_Sequence*  s;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  ms->SubstFormat = GET_UShort();             /* should be 1 */
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ms->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = ms->SequenceCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ms->Sequence = NULL;
-
-  if ( ALLOC_ARRAY( ms->Sequence, count, HB_Sequence ) )
-    goto Fail2;
-
-  s = ms->Sequence;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_Sequence( &s[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_Sequence( &s[m] );
-
-  FREE( s );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &ms->Coverage );
-  return error;
-}
-
-
-static void  Free_MultipleSubst( HB_GSUB_SubTable* st )
-{
-  HB_UShort      n, count;
-  HB_MultipleSubst*  ms = &st->multiple;
-
-  HB_Sequence*  s;
-
-
-  if ( ms->Sequence )
-  {
-    count = ms->SequenceCount;
-    s     = ms->Sequence;
-
-    for ( n = 0; n < count; n++ )
-      Free_Sequence( &s[n] );
-
-    FREE( s );
-  }
-
-  _HB_OPEN_Free_Coverage( &ms->Coverage );
-}
-
-
-static HB_Error  Lookup_MultipleSubst( HB_GSUBHeader*    gsub,
-                                      HB_GSUB_SubTable* st,
-                                      HB_Buffer         buffer,
-                                      HB_UShort          flags,
-                                      HB_UShort          context_length,
-                                      int                nesting_level )
-{
-  HB_Error  error;
-  HB_UShort index, property, n, count;
-  HB_UShort*s;
-  HB_MultipleSubst*  ms = &st->multiple;
-  HB_GDEFHeader*     gdef = gsub->gdef;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &ms->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if ( index >= ms->SequenceCount )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  count = ms->Sequence[index].GlyphCount;
-  s     = ms->Sequence[index].Substitute;
-
-  if ( ADD_String( buffer, 1, count, s, 0xFFFF, 0xFFFF ) )
-    return error;
-
-  if ( gdef && gdef->NewGlyphClasses )
-  {
-    /* this is a guess only ... */
-
-    if ( property == HB_GDEF_LIGATURE )
-      property = HB_GDEF_BASE_GLYPH;
-
-    for ( n = 0; n < count; n++ )
-    {
-      error = _HB_GDEF_Add_Glyph_Property( gdef, s[n], property );
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-    }
-  }
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 3 */
-
-/* AlternateSet */
-
-static HB_Error  Load_AlternateSet( HB_AlternateSet*  as,
-                                   HB_Stream          stream )
-{
-  HB_Error error;
-
-  HB_UShort n, count;
-  HB_UShort*  a;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = as->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  as->Alternate = NULL;
-
-  if ( ALLOC_ARRAY( as->Alternate, count, HB_UShort ) )
-    return error;
-
-  a = as->Alternate;
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( a );
-    return error;
-  }
-
-  for ( n = 0; n < count; n++ )
-    a[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_AlternateSet( HB_AlternateSet*  as )
-{
-  FREE( as->Alternate );
-}
-
-
-/* AlternateSubstFormat1 */
-
-static HB_Error  Load_AlternateSubst( HB_GSUB_SubTable* st,
-                                     HB_Stream         stream )
-{
-  HB_Error error;
-  HB_AlternateSubst* as = &st->alternate;
-
-  HB_UShort          n = 0, m, count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_AlternateSet*  aset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  as->SubstFormat = GET_UShort();             /* should be 1 */
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &as->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = as->AlternateSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  as->AlternateSet = NULL;
-
-  if ( ALLOC_ARRAY( as->AlternateSet, count, HB_AlternateSet ) )
-    goto Fail2;
-
-  aset = as->AlternateSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_AlternateSet( &aset[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_AlternateSet( &aset[m] );
-
-  FREE( aset );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &as->Coverage );
-  return error;
-}
-
-
-static void  Free_AlternateSubst( HB_GSUB_SubTable* st )
-{
-  HB_UShort          n, count;
-  HB_AlternateSubst* as = &st->alternate;
-
-  HB_AlternateSet*  aset;
-
-
-  if ( as->AlternateSet )
-  {
-    count = as->AlternateSetCount;
-    aset  = as->AlternateSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_AlternateSet( &aset[n] );
-
-    FREE( aset );
-  }
-
-  _HB_OPEN_Free_Coverage( &as->Coverage );
-}
-
-
-static HB_Error  Lookup_AlternateSubst( HB_GSUBHeader*    gsub,
-                                       HB_GSUB_SubTable* st,
-                                       HB_Buffer         buffer,
-                                       HB_UShort          flags,
-                                       HB_UShort          context_length,
-                                       int                nesting_level )
-{
-  HB_Error          error;
-  HB_UShort         index, value, alt_index, property;
-  HB_AlternateSubst* as = &st->alternate;
-  HB_GDEFHeader*     gdef = gsub->gdef;
-  HB_AlternateSet  aset;
-
-  HB_UNUSED(nesting_level);
-
-  if ( context_length != 0xFFFF && context_length < 1 )
-    return HB_Err_Not_Covered;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &as->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  aset = as->AlternateSet[index];
-
-  /* we use a user-defined callback function to get the alternate index */
-
-  if ( gsub->altfunc )
-    alt_index = (gsub->altfunc)( buffer->out_pos, IN_CURGLYPH(),
-                                aset.GlyphCount, aset.Alternate,
-                                gsub->data );
-  else
-    alt_index = 0;
-
-  value = aset.Alternate[alt_index];
-  if ( REPLACE_Glyph( buffer, value, nesting_level ) )
-    return error;
-
-  if ( gdef && gdef->NewGlyphClasses )
-  {
-    /* we inherit the old glyph class to the substituted glyph */
-
-    error = _HB_GDEF_Add_Glyph_Property( gdef, value, property );
-    if ( error && error != HB_Err_Not_Covered )
-      return error;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 4 */
-
-/* Ligature */
-
-static HB_Error  Load_Ligature( HB_Ligature*  l,
-                               HB_Stream      stream )
-{
-  HB_Error error;
-
-  HB_UShort n, count;
-  HB_UShort*  c;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  l->LigGlyph       = GET_UShort();
-  l->ComponentCount = GET_UShort();
-
-  FORGET_Frame();
-
-  l->Component = NULL;
-
-  count = l->ComponentCount - 1;      /* only ComponentCount - 1 elements */
-
-  if ( ALLOC_ARRAY( l->Component, count, HB_UShort ) )
-    return error;
-
-  c = l->Component;
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( c );
-    return error;
-  }
-
-  for ( n = 0; n < count; n++ )
-    c[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_Ligature( HB_Ligature*  l )
-{
-  FREE( l->Component );
-}
-
-
-/* LigatureSet */
-
-static HB_Error  Load_LigatureSet( HB_LigatureSet*  ls,
-                                  HB_Stream         stream )
-{
-  HB_Error error;
-
-  HB_UShort      n = 0, m, count;
-  HB_UInt       cur_offset, new_offset, base_offset;
-
-  HB_Ligature*  l;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ls->LigatureCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ls->Ligature = NULL;
-
-  if ( ALLOC_ARRAY( ls->Ligature, count, HB_Ligature ) )
-    return error;
-
-  l = ls->Ligature;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_Ligature( &l[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_Ligature( &l[m] );
-
-  FREE( l );
-  return error;
-}
-
-
-static void  Free_LigatureSet( HB_LigatureSet*  ls )
-{
-  HB_UShort      n, count;
-
-  HB_Ligature*  l;
-
-
-  if ( ls->Ligature )
-  {
-    count = ls->LigatureCount;
-    l     = ls->Ligature;
-
-    for ( n = 0; n < count; n++ )
-      Free_Ligature( &l[n] );
-
-    FREE( l );
-  }
-}
-
-
-/* LigatureSubstFormat1 */
-
-static HB_Error  Load_LigatureSubst( HB_GSUB_SubTable* st,
-                                    HB_Stream         stream )
-{
-  HB_Error error;
-  HB_LigatureSubst*  ls = &st->ligature;
-
-  HB_UShort         n = 0, m, count;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_LigatureSet*  lset;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  ls->SubstFormat = GET_UShort();             /* should be 1 */
-  new_offset      = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ls->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = ls->LigatureSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ls->LigatureSet = NULL;
-
-  if ( ALLOC_ARRAY( ls->LigatureSet, count, HB_LigatureSet ) )
-    goto Fail2;
-
-  lset = ls->LigatureSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LigatureSet( &lset[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_LigatureSet( &lset[m] );
-
-  FREE( lset );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &ls->Coverage );
-  return error;
-}
-
-
-static void  Free_LigatureSubst( HB_GSUB_SubTable* st )
-{
-  HB_UShort         n, count;
-  HB_LigatureSubst*  ls = &st->ligature;
-
-  HB_LigatureSet*  lset;
-
-
-  if ( ls->LigatureSet )
-  {
-    count = ls->LigatureSetCount;
-    lset  = ls->LigatureSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_LigatureSet( &lset[n] );
-
-    FREE( lset );
-  }
-
-  _HB_OPEN_Free_Coverage( &ls->Coverage );
-}
-
-
-static HB_Error  Lookup_LigatureSubst( HB_GSUBHeader*    gsub,
-                                      HB_GSUB_SubTable* st,
-                                      HB_Buffer         buffer,
-                                      HB_UShort          flags,
-                                      HB_UShort          context_length,
-                                      int                nesting_level )
-{
-  HB_UShort      index, property;
-  HB_Error       error;
-  HB_UShort      numlig, i, j, is_mark, first_is_mark = FALSE;
-  HB_UShort*     c;
-  HB_LigatureSubst*  ls = &st->ligature;
-  HB_GDEFHeader*     gdef = gsub->gdef;
-
-  HB_Ligature*  lig;
-
-  HB_UNUSED(nesting_level);
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  if ( property == HB_GDEF_MARK || property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS )
-    first_is_mark = TRUE;
-
-  error = _HB_OPEN_Coverage_Index( &ls->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if ( index >= ls->LigatureSetCount )
-     return ERR(HB_Err_Invalid_SubTable);
-
-  lig = ls->LigatureSet[index].Ligature;
-
-  for ( numlig = ls->LigatureSet[index].LigatureCount;
-       numlig;
-       numlig--, lig++ )
-  {
-    if ( buffer->in_pos + lig->ComponentCount > buffer->in_length )
-      goto next_ligature;               /* Not enough glyphs in input */
-
-    c    = lig->Component;
-
-    is_mark = first_is_mark;
-
-    if ( context_length != 0xFFFF && context_length < lig->ComponentCount )
-      break;
-
-    for ( i = 1, j = buffer->in_pos + 1; i < lig->ComponentCount; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + lig->ComponentCount - i == (HB_Int)buffer->in_length )
-         goto next_ligature;
-       j++;
-      }
-
-      if ( !( property == HB_GDEF_MARK || property & HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS ) )
-       is_mark = FALSE;
-
-      if ( IN_GLYPH( j ) != c[i - 1] )
-       goto next_ligature;
-    }
-
-    if ( gdef && gdef->NewGlyphClasses )
-    {
-      /* this is just a guess ... */
-
-      error = _HB_GDEF_Add_Glyph_Property( gdef, lig->LigGlyph,
-                                 is_mark ? HB_GDEF_MARK : HB_GDEF_LIGATURE );
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-    }
-
-    if ( j == buffer->in_pos + i ) /* No input glyphs skipped */
-    {
-      /* We don't use a new ligature ID if there are no skipped
-        glyphs and the ligature already has an ID.             */
-
-      if ( IN_LIGID( buffer->in_pos ) )
-      {
-       if ( ADD_String( buffer, i, 1, &lig->LigGlyph,
-                       0xFFFF, 0xFFFF ) )
-         return error;
-      }
-      else
-      {
-       HB_UShort ligID = _hb_buffer_allocate_ligid( buffer );
-       if ( ADD_String( buffer, i, 1, &lig->LigGlyph,
-                       0xFFFF, ligID ) )
-         return error;
-      }
-    }
-    else
-    {
-      HB_UShort ligID = _hb_buffer_allocate_ligid( buffer );
-      if ( ADD_Glyph( buffer, lig->LigGlyph, 0xFFFF, ligID ) )
-       return error;
-
-      /* Now we must do a second loop to copy the skipped glyphs to
-        `out' and assign component values to it.  We start with the
-        glyph after the first component.  Glyphs between component
-        i and i+1 belong to component i.  Together with the ligID
-        value it is later possible to check whether a specific
-        component value really belongs to a given ligature.         */
-
-      for ( i = 0; i < lig->ComponentCount - 1; i++ )
-      {
-       while ( CHECK_Property( gdef, IN_CURITEM(),
-                               flags, &property ) )
-         if ( ADD_Glyph( buffer, IN_CURGLYPH(), i, ligID ) )
-           return error;
-
-       (buffer->in_pos)++;
-      }
-    }
-
-    return HB_Err_Ok;
-
-  next_ligature:
-    ;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-/* Do the actual substitution for a context substitution (either format
-   5 or 6).  This is only called after we've determined that the input
-   matches the subrule.                                                 */
-
-static HB_Error  Do_ContextSubst( HB_GSUBHeader*        gsub,
-                                 HB_UShort              GlyphCount,
-                                 HB_UShort              SubstCount,
-                                 HB_SubstLookupRecord* subst,
-                                 HB_Buffer             buffer,
-                                 int                    nesting_level )
-{
-  HB_Error  error;
-  HB_UInt   i, old_pos;
-
-
-  i = 0;
-
-  while ( i < GlyphCount )
-  {
-    if ( SubstCount && i == subst->SequenceIndex )
-    {
-      old_pos = buffer->in_pos;
-
-      /* Do a substitution */
-
-      error = GSUB_Do_Glyph_Lookup( gsub, subst->LookupListIndex, buffer,
-                                   GlyphCount, nesting_level );
-
-      subst++;
-      SubstCount--;
-      i += buffer->in_pos - old_pos;
-
-      if ( error == HB_Err_Not_Covered )
-      {
-       if ( COPY_Glyph( buffer ) )
-         return error;
-       i++;
-      }
-      else if ( error )
-       return error;
-    }
-    else
-    {
-      /* No substitution for this index */
-
-      if ( COPY_Glyph( buffer ) )
-       return error;
-      i++;
-    }
-  }
-
-  return HB_Err_Ok;
-}
-
-
-/* LookupType 5 */
-
-/* SubRule */
-
-static HB_Error  Load_SubRule( HB_SubRule*  sr,
-                              HB_Stream     stream )
-{
-  HB_Error error;
-
-  HB_UShort               n, count;
-  HB_UShort*              i;
-
-  HB_SubstLookupRecord*  slr;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  sr->GlyphCount = GET_UShort();
-  sr->SubstCount = GET_UShort();
-
-  FORGET_Frame();
-
-  sr->Input = NULL;
-
-  count = sr->GlyphCount - 1;         /* only GlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( sr->Input, count, HB_UShort ) )
-    return error;
-
-  i = sr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  sr->SubstLookupRecord = NULL;
-
-  count = sr->SubstCount;
-
-  if ( ALLOC_ARRAY( sr->SubstLookupRecord, count, HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = sr->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  FREE( i );
-  return error;
-}
-
-
-static void  Free_SubRule( HB_SubRule*  sr )
-{
-  FREE( sr->SubstLookupRecord );
-  FREE( sr->Input );
-}
-
-
-/* SubRuleSet */
-
-static HB_Error  Load_SubRuleSet( HB_SubRuleSet*  srs,
-                                 HB_Stream        stream )
-{
-  HB_Error error;
-
-  HB_UShort     n = 0, m, count;
-  HB_UInt      cur_offset, new_offset, base_offset;
-
-  HB_SubRule*  sr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = srs->SubRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  srs->SubRule = NULL;
-
-  if ( ALLOC_ARRAY( srs->SubRule, count, HB_SubRule ) )
-    return error;
-
-  sr = srs->SubRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_SubRule( &sr[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_SubRule( &sr[m] );
-
-  FREE( sr );
-  return error;
-}
-
-
-static void  Free_SubRuleSet( HB_SubRuleSet*  srs )
-{
-  HB_UShort     n, count;
-
-  HB_SubRule*  sr;
-
-
-  if ( srs->SubRule )
-  {
-    count = srs->SubRuleCount;
-    sr    = srs->SubRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_SubRule( &sr[n] );
-
-    FREE( sr );
-  }
-}
-
-
-/* ContextSubstFormat1 */
-
-static HB_Error  Load_ContextSubst1( HB_ContextSubstFormat1*  csf1,
-                                    HB_Stream                 stream )
-{
-  HB_Error error;
-
-  HB_UShort        n = 0, m, count;
-  HB_UInt         cur_offset, new_offset, base_offset;
-
-  HB_SubRuleSet*  srs;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &csf1->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = csf1->SubRuleSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csf1->SubRuleSet = NULL;
-
-  if ( ALLOC_ARRAY( csf1->SubRuleSet, count, HB_SubRuleSet ) )
-    goto Fail2;
-
-  srs = csf1->SubRuleSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_SubRuleSet( &srs[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_SubRuleSet( &srs[m] );
-
-  FREE( srs );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &csf1->Coverage );
-  return error;
-}
-
-
-static void  Free_ContextSubst1( HB_ContextSubstFormat1* csf1 )
-{
-  HB_UShort        n, count;
-
-  HB_SubRuleSet*  srs;
-
-
-  if ( csf1->SubRuleSet )
-  {
-    count = csf1->SubRuleSetCount;
-    srs   = csf1->SubRuleSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_SubRuleSet( &srs[n] );
-
-    FREE( srs );
-  }
-
-  _HB_OPEN_Free_Coverage( &csf1->Coverage );
-}
-
-
-/* SubClassRule */
-
-static HB_Error  Load_SubClassRule( HB_ContextSubstFormat2*  csf2,
-                                   HB_SubClassRule*         scr,
-                                   HB_Stream                 stream )
-{
-  HB_Error error;
-
-  HB_UShort               n, count;
-
-  HB_UShort*              c;
-  HB_SubstLookupRecord*  slr;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  scr->GlyphCount = GET_UShort();
-  scr->SubstCount = GET_UShort();
-
-  if ( scr->GlyphCount > csf2->MaxContextLength )
-    csf2->MaxContextLength = scr->GlyphCount;
-
-  FORGET_Frame();
-
-  scr->Class = NULL;
-
-  count = scr->GlyphCount - 1;        /* only GlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( scr->Class, count, HB_UShort ) )
-    return error;
-
-  c = scr->Class;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    c[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  scr->SubstLookupRecord = NULL;
-
-  count = scr->SubstCount;
-
-  if ( ALLOC_ARRAY( scr->SubstLookupRecord, count, HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = scr->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  FREE( c );
-  return error;
-}
-
-
-static void  Free_SubClassRule( HB_SubClassRule*  scr )
-{
-  FREE( scr->SubstLookupRecord );
-  FREE( scr->Class );
-}
-
-
-/* SubClassSet */
-
-static HB_Error  Load_SubClassSet( HB_ContextSubstFormat2*  csf2,
-                                  HB_SubClassSet*          scs,
-                                  HB_Stream                 stream )
-{
-  HB_Error error;
-
-  HB_UShort          n = 0, m, count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_SubClassRule*  scr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = scs->SubClassRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  scs->SubClassRule = NULL;
-
-  if ( ALLOC_ARRAY( scs->SubClassRule, count, HB_SubClassRule ) )
-    return error;
-
-  scr = scs->SubClassRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_SubClassRule( csf2, &scr[n],
-                                     stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_SubClassRule( &scr[m] );
-
-  FREE( scr );
-  return error;
-}
-
-
-static void  Free_SubClassSet( HB_SubClassSet*  scs )
-{
-  HB_UShort          n, count;
-
-  HB_SubClassRule*  scr;
-
-
-  if ( scs->SubClassRule )
-  {
-    count = scs->SubClassRuleCount;
-    scr   = scs->SubClassRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_SubClassRule( &scr[n] );
-
-    FREE( scr );
-  }
-}
-
-
-/* ContextSubstFormat2 */
-
-static HB_Error  Load_ContextSubst2( HB_ContextSubstFormat2*  csf2,
-                                    HB_Stream                 stream )
-{
-  HB_Error error;
-
-  HB_UShort         n = 0, m, count;
-  HB_UInt          cur_offset, new_offset, base_offset;
-
-  HB_SubClassSet*  scs;
-
-
-  base_offset = FILE_Pos() - 2;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &csf2->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 4L ) )
-    goto Fail3;
-
-  new_offset = GET_UShort() + base_offset;
-
-  /* `SubClassSetCount' is the upper limit for class values, thus we
-     read it now to make an additional safety check.                 */
-
-  count = csf2->SubClassSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_ClassDefinition( &csf2->ClassDef, count,
-                                      stream ) ) != HB_Err_Ok )
-    goto Fail3;
-  (void)FILE_Seek( cur_offset );
-
-  csf2->SubClassSet      = NULL;
-  csf2->MaxContextLength = 0;
-
-  if ( ALLOC_ARRAY( csf2->SubClassSet, count, HB_SubClassSet ) )
-    goto Fail2;
-
-  scs = csf2->SubClassSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    if ( new_offset != base_offset )      /* not a NULL offset */
-    {
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_SubClassSet( csf2, &scs[n],
-                                      stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-    {
-      /* we create a SubClassSet table with no entries */
-
-      csf2->SubClassSet[n].SubClassRuleCount = 0;
-      csf2->SubClassSet[n].SubClassRule      = NULL;
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_SubClassSet( &scs[m] );
-
-  FREE( scs );
-
-Fail2:
-  _HB_OPEN_Free_ClassDefinition( &csf2->ClassDef );
-
-Fail3:
-  _HB_OPEN_Free_Coverage( &csf2->Coverage );
-  return error;
-}
-
-
-static void  Free_ContextSubst2( HB_ContextSubstFormat2*  csf2 )
-{
-  HB_UShort         n, count;
-
-  HB_SubClassSet*  scs;
-
-
-  if ( csf2->SubClassSet )
-  {
-    count = csf2->SubClassSetCount;
-    scs   = csf2->SubClassSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_SubClassSet( &scs[n] );
-
-    FREE( scs );
-  }
-
-  _HB_OPEN_Free_ClassDefinition( &csf2->ClassDef );
-  _HB_OPEN_Free_Coverage( &csf2->Coverage );
-}
-
-
-/* ContextSubstFormat3 */
-
-static HB_Error  Load_ContextSubst3( HB_ContextSubstFormat3*  csf3,
-                                    HB_Stream                 stream )
-{
-  HB_Error error;
-
-  HB_UShort               n = 0, m, count;
-  HB_UInt                cur_offset, new_offset, base_offset;
-
-  HB_Coverage*           c;
-  HB_SubstLookupRecord*  slr;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  csf3->GlyphCount = GET_UShort();
-  csf3->SubstCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csf3->Coverage = NULL;
-
-  count = csf3->GlyphCount;
-
-  if ( ALLOC_ARRAY( csf3->Coverage, count, HB_Coverage ) )
-    return error;
-
-  c = csf3->Coverage;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &c[n], stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  csf3->SubstLookupRecord = NULL;
-
-  count = csf3->SubstCount;
-
-  if ( ALLOC_ARRAY( csf3->SubstLookupRecord, count,
-                   HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = csf3->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  for ( m = 0; m < n; m++ )
-    _HB_OPEN_Free_Coverage( &c[m] );
-
-  FREE( c );
-  return error;
-}
-
-
-static void  Free_ContextSubst3( HB_ContextSubstFormat3*  csf3 )
-{
-  HB_UShort      n, count;
-
-  HB_Coverage*  c;
-
-
-  FREE( csf3->SubstLookupRecord );
-
-  if ( csf3->Coverage )
-  {
-    count = csf3->GlyphCount;
-    c     = csf3->Coverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-}
-
-
-/* ContextSubst */
-
-static HB_Error  Load_ContextSubst( HB_GSUB_SubTable* st,
-                                   HB_Stream         stream )
-{
-  HB_Error error;
-  HB_ContextSubst*  cs = &st->context;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cs->SubstFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( cs->SubstFormat )
-  {
-  case 1:  return Load_ContextSubst1( &cs->csf.csf1, stream );
-  case 2:  return Load_ContextSubst2( &cs->csf.csf2, stream );
-  case 3:  return Load_ContextSubst3( &cs->csf.csf3, stream );
-  default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-static void  Free_ContextSubst( HB_GSUB_SubTable* st )
-{
-  HB_ContextSubst*  cs = &st->context;
-
-  switch ( cs->SubstFormat )
-  {
-  case 1:  Free_ContextSubst1( &cs->csf.csf1 ); break;
-  case 2:  Free_ContextSubst2( &cs->csf.csf2 ); break;
-  case 3:  Free_ContextSubst3( &cs->csf.csf3 ); break;
-  default:                                             break;
-  }
-}
-
-
-static HB_Error  Lookup_ContextSubst1( HB_GSUBHeader*          gsub,
-                                      HB_ContextSubstFormat1* csf1,
-                                      HB_Buffer               buffer,
-                                      HB_UShort                flags,
-                                      HB_UShort                context_length,
-                                      int                      nesting_level )
-{
-  HB_UShort        index, property;
-  HB_UShort        i, j, k, numsr;
-  HB_Error         error;
-
-  HB_SubRule*     sr;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &csf1->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  sr    = csf1->SubRuleSet[index].SubRule;
-  numsr = csf1->SubRuleSet[index].SubRuleCount;
-
-  for ( k = 0; k < numsr; k++ )
-  {
-    if ( context_length != 0xFFFF && context_length < sr[k].GlyphCount )
-      goto next_subrule;
-
-    if ( buffer->in_pos + sr[k].GlyphCount > buffer->in_length )
-      goto next_subrule;                        /* context is too long */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < sr[k].GlyphCount; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + sr[k].GlyphCount - i == (HB_Int)buffer->in_length )
-         goto next_subrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != sr[k].Input[i - 1] )
-       goto next_subrule;
-    }
-
-    return Do_ContextSubst( gsub, sr[k].GlyphCount,
-                           sr[k].SubstCount, sr[k].SubstLookupRecord,
-                           buffer,
-                           nesting_level );
-  next_subrule:
-    ;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Lookup_ContextSubst2( HB_GSUBHeader*          gsub,
-                                      HB_ContextSubstFormat2* csf2,
-                                      HB_Buffer               buffer,
-                                      HB_UShort                flags,
-                                      HB_UShort                context_length,
-                                      int                      nesting_level )
-{
-  HB_UShort          index, property;
-  HB_Error           error;
-  HB_UShort          i, j, k, known_classes;
-
-  HB_UShort*         classes;
-  HB_UShort*         cl;
-
-  HB_SubClassSet*   scs;
-  HB_SubClassRule*  sr;
-  HB_GDEFHeader*    gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  /* Note: The coverage table in format 2 doesn't give an index into
-          anything.  It just lets us know whether or not we need to
-          do any lookup at all.                                     */
-
-  error = _HB_OPEN_Coverage_Index( &csf2->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if (csf2->MaxContextLength < 1)
-    return HB_Err_Not_Covered;
-
-  if ( ALLOC_ARRAY( classes, csf2->MaxContextLength, HB_UShort ) )
-    return error;
-
-  error = _HB_OPEN_Get_Class( &csf2->ClassDef, IN_CURGLYPH(),
-                    &classes[0], NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    goto End;
-  known_classes = 0;
-
-  scs = &csf2->SubClassSet[classes[0]];
-  if ( !scs )
-  {
-    error = ERR(HB_Err_Invalid_SubTable);
-    goto End;
-  }
-
-  for ( k = 0; k < scs->SubClassRuleCount; k++ )
-  {
-    sr  = &scs->SubClassRule[k];
-
-    if ( context_length != 0xFFFF && context_length < sr->GlyphCount )
-      goto next_subclassrule;
-
-    if ( buffer->in_pos + sr->GlyphCount > buffer->in_length )
-      goto next_subclassrule;                      /* context is too long */
-
-    cl   = sr->Class;
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < sr->GlyphCount; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End;
-
-       if ( j + sr->GlyphCount - i < (HB_Int)buffer->in_length )
-         goto next_subclassrule;
-       j++;
-      }
-
-      if ( i > known_classes )
-      {
-       /* Keeps us from having to do this for each rule */
-
-       error = _HB_OPEN_Get_Class( &csf2->ClassDef, IN_GLYPH( j ), &classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End;
-       known_classes = i;
-      }
-
-      if ( cl[i - 1] != classes[i] )
-       goto next_subclassrule;
-    }
-
-    error = Do_ContextSubst( gsub, sr->GlyphCount,
-                            sr->SubstCount, sr->SubstLookupRecord,
-                            buffer,
-                            nesting_level );
-    goto End;
-
-  next_subclassrule:
-    ;
-  }
-
-  error = HB_Err_Not_Covered;
-
-End:
-  FREE( classes );
-  return error;
-}
-
-
-static HB_Error  Lookup_ContextSubst3( HB_GSUBHeader*          gsub,
-                                      HB_ContextSubstFormat3* csf3,
-                                      HB_Buffer               buffer,
-                                      HB_UShort                flags,
-                                      HB_UShort                context_length,
-                                      int                      nesting_level )
-{
-  HB_Error         error;
-  HB_UShort        index, i, j, property;
-
-  HB_Coverage*    c;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  if ( context_length != 0xFFFF && context_length < csf3->GlyphCount )
-    return HB_Err_Not_Covered;
-
-  if ( buffer->in_pos + csf3->GlyphCount > buffer->in_length )
-    return HB_Err_Not_Covered;         /* context is too long */
-
-  c    = csf3->Coverage;
-
-  for ( i = 1, j = buffer->in_pos + 1; i < csf3->GlyphCount; i++, j++ )
-  {
-    while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + csf3->GlyphCount - i == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &c[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  return Do_ContextSubst( gsub, csf3->GlyphCount,
-                         csf3->SubstCount, csf3->SubstLookupRecord,
-                         buffer,
-                         nesting_level );
-}
-
-
-static HB_Error  Lookup_ContextSubst( HB_GSUBHeader*    gsub,
-                                     HB_GSUB_SubTable* st,
-                                     HB_Buffer         buffer,
-                                     HB_UShort          flags,
-                                     HB_UShort          context_length,
-                                     int                nesting_level )
-{
-  HB_ContextSubst*  cs = &st->context;
-
-  switch ( cs->SubstFormat )
-  {
-  case 1:  return Lookup_ContextSubst1( gsub, &cs->csf.csf1, buffer, flags, context_length, nesting_level );
-  case 2:  return Lookup_ContextSubst2( gsub, &cs->csf.csf2, buffer, flags, context_length, nesting_level );
-  case 3:  return Lookup_ContextSubst3( gsub, &cs->csf.csf3, buffer, flags, context_length, nesting_level );
-  default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-/* LookupType 6 */
-
-/* ChainSubRule */
-
-static HB_Error  Load_ChainSubRule( HB_ChainSubRule*  csr,
-                                   HB_Stream          stream )
-{
-  HB_Error error;
-
-  HB_UShort               n, count;
-  HB_UShort*              b;
-  HB_UShort*              i;
-  HB_UShort*              l;
-
-  HB_SubstLookupRecord*  slr;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  csr->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csr->Backtrack = NULL;
-
-  count = csr->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( csr->Backtrack, count, HB_UShort ) )
-    return error;
-
-  b = csr->Backtrack;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail4;
-
-  for ( n = 0; n < count; n++ )
-    b[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  csr->InputGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csr->Input = NULL;
-
-  count = csr->InputGlyphCount - 1;  /* only InputGlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( csr->Input, count, HB_UShort ) )
-    goto Fail4;
-
-  i = csr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail3;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  csr->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csr->Lookahead = NULL;
-
-  count = csr->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( csr->Lookahead, count, HB_UShort ) )
-    goto Fail3;
-
-  l = csr->Lookahead;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    l[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  csr->SubstCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csr->SubstLookupRecord = NULL;
-
-  count = csr->SubstCount;
-
-  if ( ALLOC_ARRAY( csr->SubstLookupRecord, count, HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = csr->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  FREE( l );
-
-Fail3:
-  FREE( i );
-
-Fail4:
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainSubRule( HB_ChainSubRule*  csr )
-{
-  FREE( csr->SubstLookupRecord );
-  FREE( csr->Lookahead );
-  FREE( csr->Input );
-  FREE( csr->Backtrack );
-}
-
-
-/* ChainSubRuleSet */
-
-static HB_Error  Load_ChainSubRuleSet( HB_ChainSubRuleSet*  csrs,
-                                      HB_Stream             stream )
-{
-  HB_Error error;
-
-  HB_UShort          n = 0, m, count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_ChainSubRule*  csr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = csrs->ChainSubRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  csrs->ChainSubRule = NULL;
-
-  if ( ALLOC_ARRAY( csrs->ChainSubRule, count, HB_ChainSubRule ) )
-    return error;
-
-  csr = csrs->ChainSubRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainSubRule( &csr[n], stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_ChainSubRule( &csr[m] );
-
-  FREE( csr );
-  return error;
-}
-
-
-static void  Free_ChainSubRuleSet( HB_ChainSubRuleSet*  csrs )
-{
-  HB_UShort          n, count;
-
-  HB_ChainSubRule*  csr;
-
-
-  if ( csrs->ChainSubRule )
-  {
-    count = csrs->ChainSubRuleCount;
-    csr   = csrs->ChainSubRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainSubRule( &csr[n] );
-
-    FREE( csr );
-  }
-}
-
-
-/* ChainContextSubstFormat1 */
-
-static HB_Error  Load_ChainContextSubst1(
-                  HB_ChainContextSubstFormat1*  ccsf1,
-                  HB_Stream                      stream )
-{
-  HB_Error error;
-
-  HB_UShort             n = 0, m, count;
-  HB_UInt              cur_offset, new_offset, base_offset;
-
-  HB_ChainSubRuleSet*  csrs;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ccsf1->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = ccsf1->ChainSubRuleSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccsf1->ChainSubRuleSet = NULL;
-
-  if ( ALLOC_ARRAY( ccsf1->ChainSubRuleSet, count, HB_ChainSubRuleSet ) )
-    goto Fail2;
-
-  csrs = ccsf1->ChainSubRuleSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainSubRuleSet( &csrs[n], stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_ChainSubRuleSet( &csrs[m] );
-
-  FREE( csrs );
-
-Fail2:
-  _HB_OPEN_Free_Coverage( &ccsf1->Coverage );
-  return error;
-}
-
-
-static void  Free_ChainContextSubst1( HB_ChainContextSubstFormat1*  ccsf1 )
-{
-  HB_UShort             n, count;
-
-  HB_ChainSubRuleSet*  csrs;
-
-
-  if ( ccsf1->ChainSubRuleSet )
-  {
-    count = ccsf1->ChainSubRuleSetCount;
-    csrs  = ccsf1->ChainSubRuleSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainSubRuleSet( &csrs[n] );
-
-    FREE( csrs );
-  }
-
-  _HB_OPEN_Free_Coverage( &ccsf1->Coverage );
-}
-
-
-/* ChainSubClassRule */
-
-static HB_Error  Load_ChainSubClassRule(
-                  HB_ChainContextSubstFormat2*  ccsf2,
-                  HB_ChainSubClassRule*         cscr,
-                  HB_Stream                      stream )
-{
-  HB_Error error;
-
-  HB_UShort               n, count;
-
-  HB_UShort*              b;
-  HB_UShort*              i;
-  HB_UShort*              l;
-  HB_SubstLookupRecord*  slr;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cscr->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( cscr->BacktrackGlyphCount > ccsf2->MaxBacktrackLength )
-    ccsf2->MaxBacktrackLength = cscr->BacktrackGlyphCount;
-
-  cscr->Backtrack = NULL;
-
-  count = cscr->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( cscr->Backtrack, count, HB_UShort ) )
-    return error;
-
-  b = cscr->Backtrack;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail4;
-
-  for ( n = 0; n < count; n++ )
-    b[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  cscr->InputGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( cscr->InputGlyphCount > ccsf2->MaxInputLength )
-    ccsf2->MaxInputLength = cscr->InputGlyphCount;
-
-  cscr->Input = NULL;
-
-  count = cscr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
-  if ( ALLOC_ARRAY( cscr->Input, count, HB_UShort ) )
-    goto Fail4;
-
-  i = cscr->Input;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail3;
-
-  for ( n = 0; n < count; n++ )
-    i[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  cscr->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( cscr->LookaheadGlyphCount > ccsf2->MaxLookaheadLength )
-    ccsf2->MaxLookaheadLength = cscr->LookaheadGlyphCount;
-
-  cscr->Lookahead = NULL;
-
-  count = cscr->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( cscr->Lookahead, count, HB_UShort ) )
-    goto Fail3;
-
-  l = cscr->Lookahead;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail2;
-
-  for ( n = 0; n < count; n++ )
-    l[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  cscr->SubstCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cscr->SubstLookupRecord = NULL;
-
-  count = cscr->SubstCount;
-
-  if ( ALLOC_ARRAY( cscr->SubstLookupRecord, count,
-                   HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = cscr->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  FREE( l );
-
-Fail3:
-  FREE( i );
-
-Fail4:
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainSubClassRule( HB_ChainSubClassRule*  cscr )
-{
-  FREE( cscr->SubstLookupRecord );
-  FREE( cscr->Lookahead );
-  FREE( cscr->Input );
-  FREE( cscr->Backtrack );
-}
-
-
-/* SubClassSet */
-
-static HB_Error  Load_ChainSubClassSet(
-                  HB_ChainContextSubstFormat2*  ccsf2,
-                  HB_ChainSubClassSet*          cscs,
-                  HB_Stream                      stream )
-{
-  HB_Error error;
-
-  HB_UShort               n = 0, m, count;
-  HB_UInt                cur_offset, new_offset, base_offset;
-
-  HB_ChainSubClassRule*  cscr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = cscs->ChainSubClassRuleCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cscs->ChainSubClassRule = NULL;
-
-  if ( ALLOC_ARRAY( cscs->ChainSubClassRule, count,
-                   HB_ChainSubClassRule ) )
-    return error;
-
-  cscr = cscs->ChainSubClassRule;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_ChainSubClassRule( ccsf2, &cscr[n],
-                                          stream ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_ChainSubClassRule( &cscr[m] );
-
-  FREE( cscr );
-  return error;
-}
-
-
-static void  Free_ChainSubClassSet( HB_ChainSubClassSet*  cscs )
-{
-  HB_UShort               n, count;
-
-  HB_ChainSubClassRule*  cscr;
-
-
-  if ( cscs->ChainSubClassRule )
-  {
-    count = cscs->ChainSubClassRuleCount;
-    cscr  = cscs->ChainSubClassRule;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainSubClassRule( &cscr[n] );
-
-    FREE( cscr );
-  }
-}
-
-
-/* ChainContextSubstFormat2 */
-
-static HB_Error  Load_ChainContextSubst2(
-                  HB_ChainContextSubstFormat2*  ccsf2,
-                  HB_Stream                      stream )
-{
-  HB_Error error;
-
-  HB_UShort              n = 0, m, count;
-  HB_UInt               cur_offset, new_offset, base_offset;
-  HB_UInt               backtrack_offset, input_offset, lookahead_offset;
-
-  HB_ChainSubClassSet*  cscs;
-
-
-  base_offset = FILE_Pos() - 2;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &ccsf2->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-  if ( ACCESS_Frame( 8L ) )
-    goto Fail5;
-
-  backtrack_offset = GET_UShort();
-  input_offset     = GET_UShort();
-  lookahead_offset = GET_UShort();
-
-  /* `ChainSubClassSetCount' is the upper limit for input class values,
-     thus we read it now to make an additional safety check. No limit
-     is known or needed for the other two class definitions          */
-
-  count = ccsf2->ChainSubClassSetCount = GET_UShort();
-
-  FORGET_Frame();
-
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccsf2->BacktrackClassDef, 65535,
-                                                      backtrack_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-      goto Fail5;
-
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccsf2->InputClassDef, count,
-                                                      input_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-      goto Fail4;
-  if ( ( error = _HB_OPEN_Load_EmptyOrClassDefinition( &ccsf2->LookaheadClassDef, 65535,
-                                                      lookahead_offset, base_offset,
-                                                      stream ) ) != HB_Err_Ok )
-    goto Fail3;
-
-  ccsf2->ChainSubClassSet   = NULL;
-  ccsf2->MaxBacktrackLength = 0;
-  ccsf2->MaxInputLength     = 0;
-  ccsf2->MaxLookaheadLength = 0;
-
-  if ( ALLOC_ARRAY( ccsf2->ChainSubClassSet, count, HB_ChainSubClassSet ) )
-    goto Fail2;
-
-  cscs = ccsf2->ChainSubClassSet;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    if ( new_offset != base_offset )      /* not a NULL offset */
-    {
-      cur_offset = FILE_Pos();
-      if ( FILE_Seek( new_offset ) ||
-          ( error = Load_ChainSubClassSet( ccsf2, &cscs[n],
-                                           stream ) ) != HB_Err_Ok )
-       goto Fail1;
-      (void)FILE_Seek( cur_offset );
-    }
-    else
-    {
-      /* we create a ChainSubClassSet table with no entries */
-
-      ccsf2->ChainSubClassSet[n].ChainSubClassRuleCount = 0;
-      ccsf2->ChainSubClassSet[n].ChainSubClassRule      = NULL;
-    }
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_ChainSubClassSet( &cscs[m] );
-
-  FREE( cscs );
-
-Fail2:
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->LookaheadClassDef );
-
-Fail3:
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->InputClassDef );
-
-Fail4:
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->BacktrackClassDef );
-
-Fail5:
-  _HB_OPEN_Free_Coverage( &ccsf2->Coverage );
-  return error;
-}
-
-
-static void  Free_ChainContextSubst2( HB_ChainContextSubstFormat2*  ccsf2 )
-{
-  HB_UShort              n, count;
-
-  HB_ChainSubClassSet*  cscs;
-
-
-  if ( ccsf2->ChainSubClassSet )
-  {
-    count = ccsf2->ChainSubClassSetCount;
-    cscs  = ccsf2->ChainSubClassSet;
-
-    for ( n = 0; n < count; n++ )
-      Free_ChainSubClassSet( &cscs[n] );
-
-    FREE( cscs );
-  }
-
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->LookaheadClassDef );
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->InputClassDef );
-  _HB_OPEN_Free_ClassDefinition( &ccsf2->BacktrackClassDef );
-
-  _HB_OPEN_Free_Coverage( &ccsf2->Coverage );
-}
-
-
-/* ChainContextSubstFormat3 */
-
-static HB_Error  Load_ChainContextSubst3(
-                  HB_ChainContextSubstFormat3*  ccsf3,
-                  HB_Stream                      stream )
-{
-  HB_Error error;
-
-  HB_UShort               n, nb = 0, ni =0, nl = 0, m, count;
-  HB_UShort               backtrack_count, input_count, lookahead_count;
-  HB_UInt                cur_offset, new_offset, base_offset;
-
-  HB_Coverage*           b;
-  HB_Coverage*           i;
-  HB_Coverage*           l;
-  HB_SubstLookupRecord*  slr;
-
-
-  base_offset = FILE_Pos() - 2L;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  ccsf3->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccsf3->BacktrackCoverage = NULL;
-
-  backtrack_count = ccsf3->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( ccsf3->BacktrackCoverage, backtrack_count,
-                   HB_Coverage ) )
-    return error;
-
-  b = ccsf3->BacktrackCoverage;
-
-  for ( nb = 0; nb < backtrack_count; nb++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail4;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &b[nb], stream ) ) != HB_Err_Ok )
-      goto Fail4;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  ccsf3->InputGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccsf3->InputCoverage = NULL;
-
-  input_count = ccsf3->InputGlyphCount;
-
-  if ( ALLOC_ARRAY( ccsf3->InputCoverage, input_count, HB_Coverage ) )
-    goto Fail4;
-
-  i = ccsf3->InputCoverage;
-
-  for ( ni = 0; ni < input_count; ni++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail3;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &i[ni], stream ) ) != HB_Err_Ok )
-      goto Fail3;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  ccsf3->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccsf3->LookaheadCoverage = NULL;
-
-  lookahead_count = ccsf3->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( ccsf3->LookaheadCoverage, lookahead_count,
-                   HB_Coverage ) )
-    goto Fail3;
-
-  l = ccsf3->LookaheadCoverage;
-
-  for ( nl = 0; nl < lookahead_count; nl++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &l[nl], stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  ccsf3->SubstCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ccsf3->SubstLookupRecord = NULL;
-
-  count = ccsf3->SubstCount;
-
-  if ( ALLOC_ARRAY( ccsf3->SubstLookupRecord, count,
-                   HB_SubstLookupRecord ) )
-    goto Fail2;
-
-  slr = ccsf3->SubstLookupRecord;
-
-  if ( ACCESS_Frame( count * 4L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-  {
-    slr[n].SequenceIndex   = GET_UShort();
-    slr[n].LookupListIndex = GET_UShort();
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( slr );
-
-Fail2:
-  for ( m = 0; m < nl; m++ )
-    _HB_OPEN_Free_Coverage( &l[m] );
-
-  FREE( l );
-
-Fail3:
-  for ( m = 0; m < ni; m++ )
-    _HB_OPEN_Free_Coverage( &i[m] );
-
-  FREE( i );
-
-Fail4:
-  for ( m = 0; m < nb; m++ )
-    _HB_OPEN_Free_Coverage( &b[m] );
-
-  FREE( b );
-  return error;
-}
-
-
-static void  Free_ChainContextSubst3( HB_ChainContextSubstFormat3*  ccsf3 )
-{
-  HB_UShort      n, count;
-
-  HB_Coverage*  c;
-
-
-  FREE( ccsf3->SubstLookupRecord );
-
-  if ( ccsf3->LookaheadCoverage )
-  {
-    count = ccsf3->LookaheadGlyphCount;
-    c     = ccsf3->LookaheadCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  if ( ccsf3->InputCoverage )
-  {
-    count = ccsf3->InputGlyphCount;
-    c     = ccsf3->InputCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  if ( ccsf3->BacktrackCoverage )
-  {
-    count = ccsf3->BacktrackGlyphCount;
-    c     = ccsf3->BacktrackCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-}
-
-
-/* ChainContextSubst */
-
-static HB_Error  Load_ChainContextSubst( HB_GSUB_SubTable* st,
-                                        HB_Stream         stream )
-{
-  HB_Error error;
-  HB_ChainContextSubst*  ccs = &st->chain;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  ccs->SubstFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( ccs->SubstFormat ) {
-    case 1:  return Load_ChainContextSubst1( &ccs->ccsf.ccsf1, stream );
-    case 2:  return Load_ChainContextSubst2( &ccs->ccsf.ccsf2, stream );
-    case 3:  return Load_ChainContextSubst3( &ccs->ccsf.ccsf3, stream );
-    default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-static void  Free_ChainContextSubst( HB_GSUB_SubTable* st )
-{
-  HB_ChainContextSubst*  ccs = &st->chain;
-
-  switch ( ccs->SubstFormat ) {
-    case 1:  Free_ChainContextSubst1( &ccs->ccsf.ccsf1 ); break;
-    case 2:  Free_ChainContextSubst2( &ccs->ccsf.ccsf2 ); break;
-    case 3:  Free_ChainContextSubst3( &ccs->ccsf.ccsf3 ); break;
-    default:                                                     break;
-  }
-}
-
-
-static HB_Error  Lookup_ChainContextSubst1( HB_GSUBHeader*               gsub,
-                                           HB_ChainContextSubstFormat1* ccsf1,
-                                           HB_Buffer                    buffer,
-                                           HB_UShort                     flags,
-                                           HB_UShort                     context_length,
-                                           int                           nesting_level )
-{
-  HB_UShort          index, property;
-  HB_UShort          i, j, k, num_csr;
-  HB_UShort          bgc, igc, lgc;
-  HB_Error           error;
-
-  HB_ChainSubRule*  csr;
-  HB_ChainSubRule   curr_csr;
-  HB_GDEFHeader*    gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  error = _HB_OPEN_Coverage_Index( &ccsf1->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  csr     = ccsf1->ChainSubRuleSet[index].ChainSubRule;
-  num_csr = ccsf1->ChainSubRuleSet[index].ChainSubRuleCount;
-
-  for ( k = 0; k < num_csr; k++ )
-  {
-    curr_csr = csr[k];
-    bgc      = curr_csr.BacktrackGlyphCount;
-    igc      = curr_csr.InputGlyphCount;
-    lgc      = curr_csr.LookaheadGlyphCount;
-
-    if ( context_length != 0xFFFF && context_length < igc )
-      goto next_chainsubrule;
-
-    /* check whether context is too long; it is a first guess only */
-
-    if ( bgc > buffer->out_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-      goto next_chainsubrule;
-
-    if ( bgc )
-    {
-      /* since we don't know in advance the number of glyphs to inspect,
-        we search backwards for matches in the backtrack glyph array    */
-
-      for ( i = 0, j = buffer->out_pos - 1; i < bgc; i++, j-- )
-      {
-       while ( CHECK_Property( gdef, OUT_ITEM( j ), flags, &property ) )
-       {
-         if ( error && error != HB_Err_Not_Covered )
-           return error;
-
-         if ( j + 1 == bgc - i )
-           goto next_chainsubrule;
-         j--;
-       }
-
-       /* In OpenType 1.3, it is undefined whether the offsets of
-          backtrack glyphs is in logical order or not.  Version 1.4
-          will clarify this:
-
-            Logical order -      a  b  c  d  e  f  g  h  i  j
-                                             i
-            Input offsets -                  0  1
-            Backtrack offsets -  3  2  1  0
-            Lookahead offsets -                    0  1  2  3           */
-
-       if ( OUT_GLYPH( j ) != curr_csr.Backtrack[i] )
-         goto next_chainsubrule;
-      }
-    }
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < igc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-         goto next_chainsubrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != curr_csr.Input[i - 1] )
-         goto next_chainsubrule;
-    }
-
-    /* we are starting to check for lookahead glyphs right after the
-       last context glyph                                            */
-
-    for ( i = 0; i < lgc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + lgc - i == (HB_Int)buffer->in_length )
-         goto next_chainsubrule;
-       j++;
-      }
-
-      if ( IN_GLYPH( j ) != curr_csr.Lookahead[i] )
-       goto next_chainsubrule;
-    }
-
-    return Do_ContextSubst( gsub, igc,
-                           curr_csr.SubstCount,
-                           curr_csr.SubstLookupRecord,
-                           buffer,
-                           nesting_level );
-
-  next_chainsubrule:
-    ;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Lookup_ChainContextSubst2( HB_GSUBHeader*               gsub,
-                                           HB_ChainContextSubstFormat2* ccsf2,
-                                           HB_Buffer                    buffer,
-                                           HB_UShort                     flags,
-                                           HB_UShort                     context_length,
-                                           int                           nesting_level )
-{
-  HB_UShort              index, property;
-  HB_Error               error;
-  HB_UShort              i, j, k;
-  HB_UShort              bgc, igc, lgc;
-  HB_UShort              known_backtrack_classes,
-                        known_input_classes,
-                        known_lookahead_classes;
-
-  HB_UShort*             backtrack_classes;
-  HB_UShort*             input_classes;
-  HB_UShort*             lookahead_classes;
-
-  HB_UShort*             bc;
-  HB_UShort*             ic;
-  HB_UShort*             lc;
-
-  HB_ChainSubClassSet*  cscs;
-  HB_ChainSubClassRule  ccsr;
-  HB_GDEFHeader*        gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  /* Note: The coverage table in format 2 doesn't give an index into
-          anything.  It just lets us know whether or not we need to
-          do any lookup at all.                                     */
-
-  error = _HB_OPEN_Coverage_Index( &ccsf2->Coverage, IN_CURGLYPH(), &index );
-  if ( error )
-    return error;
-
-  if (ccsf2->MaxInputLength < 1)
-    return HB_Err_Not_Covered;
-
-  if ( ALLOC_ARRAY( backtrack_classes, ccsf2->MaxBacktrackLength, HB_UShort ) )
-    return error;
-  known_backtrack_classes = 0;
-
-  if ( ALLOC_ARRAY( input_classes, ccsf2->MaxInputLength, HB_UShort ) )
-    goto End3;
-  known_input_classes = 1;
-
-  if ( ALLOC_ARRAY( lookahead_classes, ccsf2->MaxLookaheadLength, HB_UShort ) )
-    goto End2;
-  known_lookahead_classes = 0;
-
-  error = _HB_OPEN_Get_Class( &ccsf2->InputClassDef, IN_CURGLYPH(),
-                    &input_classes[0], NULL );
-  if ( error && error != HB_Err_Not_Covered )
-    goto End1;
-
-  cscs = &ccsf2->ChainSubClassSet[input_classes[0]];
-  if ( !cscs )
-  {
-    error = ERR(HB_Err_Invalid_SubTable);
-    goto End1;
-  }
-
-  for ( k = 0; k < cscs->ChainSubClassRuleCount; k++ )
-  {
-    ccsr = cscs->ChainSubClassRule[k];
-    bgc  = ccsr.BacktrackGlyphCount;
-    igc  = ccsr.InputGlyphCount;
-    lgc  = ccsr.LookaheadGlyphCount;
-
-    if ( context_length != 0xFFFF && context_length < igc )
-      goto next_chainsubclassrule;
-
-    /* check whether context is too long; it is a first guess only */
-
-    if ( bgc > buffer->out_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-      goto next_chainsubclassrule;
-
-    if ( bgc )
-    {
-      /* Since we don't know in advance the number of glyphs to inspect,
-        we search backwards for matches in the backtrack glyph array.
-        Note that `known_backtrack_classes' starts at index 0.         */
-
-      bc       = ccsr.Backtrack;
-
-      for ( i = 0, j = buffer->out_pos - 1; i < bgc; i++, j-- )
-      {
-       while ( CHECK_Property( gdef, OUT_ITEM( j ), flags, &property ) )
-       {
-         if ( error && error != HB_Err_Not_Covered )
-           goto End1;
-
-         if ( j + 1 == bgc - i )
-           goto next_chainsubclassrule;
-         j--;
-       }
-
-       if ( i >= known_backtrack_classes )
-       {
-         /* Keeps us from having to do this for each rule */
-
-         error = _HB_OPEN_Get_Class( &ccsf2->BacktrackClassDef, OUT_GLYPH( j ),
-                            &backtrack_classes[i], NULL );
-         if ( error && error != HB_Err_Not_Covered )
-           goto End1;
-         known_backtrack_classes = i;
-       }
-
-       if ( bc[i] != backtrack_classes[i] )
-         goto next_chainsubclassrule;
-      }
-    }
-
-    ic       = ccsr.Input;
-
-    /* Start at 1 because [0] is implied */
-
-    for ( i = 1, j = buffer->in_pos + 1; i < igc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-
-       if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-         goto next_chainsubclassrule;
-       j++;
-      }
-
-      if ( i >= known_input_classes )
-      {
-       error = _HB_OPEN_Get_Class( &ccsf2->InputClassDef, IN_GLYPH( j ),
-                          &input_classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-       known_input_classes = i;
-      }
-
-      if ( ic[i - 1] != input_classes[i] )
-       goto next_chainsubclassrule;
-    }
-
-    /* we are starting to check for lookahead glyphs right after the
-       last context glyph                                            */
-
-    lc       = ccsr.Lookahead;
-
-    for ( i = 0; i < lgc; i++, j++ )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-
-       if ( j + lgc - i == (HB_Int)buffer->in_length )
-         goto next_chainsubclassrule;
-       j++;
-      }
-
-      if ( i >= known_lookahead_classes )
-      {
-       error = _HB_OPEN_Get_Class( &ccsf2->LookaheadClassDef, IN_GLYPH( j ),
-                          &lookahead_classes[i], NULL );
-       if ( error && error != HB_Err_Not_Covered )
-         goto End1;
-       known_lookahead_classes = i;
-      }
-
-      if ( lc[i] != lookahead_classes[i] )
-       goto next_chainsubclassrule;
-    }
-
-    error = Do_ContextSubst( gsub, igc,
-                            ccsr.SubstCount,
-                            ccsr.SubstLookupRecord,
-                            buffer,
-                            nesting_level );
-    goto End1;
-
-  next_chainsubclassrule:
-    ;
-  }
-
-  error = HB_Err_Not_Covered;
-
-End1:
-  FREE( lookahead_classes );
-
-End2:
-  FREE( input_classes );
-
-End3:
-  FREE( backtrack_classes );
-  return error;
-}
-
-
-static HB_Error  Lookup_ChainContextSubst3( HB_GSUBHeader*               gsub,
-                                           HB_ChainContextSubstFormat3* ccsf3,
-                                           HB_Buffer                    buffer,
-                                           HB_UShort                     flags,
-                                           HB_UShort                     context_length,
-                                           int                           nesting_level )
-{
-  HB_UShort        index, i, j, property;
-  HB_UShort        bgc, igc, lgc;
-  HB_Error         error;
-
-  HB_Coverage*    bc;
-  HB_Coverage*    ic;
-  HB_Coverage*    lc;
-  HB_GDEFHeader*  gdef;
-
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  bgc = ccsf3->BacktrackGlyphCount;
-  igc = ccsf3->InputGlyphCount;
-  lgc = ccsf3->LookaheadGlyphCount;
-
-  if ( context_length != 0xFFFF && context_length < igc )
-    return HB_Err_Not_Covered;
-
-  /* check whether context is too long; it is a first guess only */
-
-  if ( bgc > buffer->out_pos || buffer->in_pos + igc + lgc > buffer->in_length )
-    return HB_Err_Not_Covered;
-
-  if ( bgc )
-  {
-    /* Since we don't know in advance the number of glyphs to inspect,
-       we search backwards for matches in the backtrack glyph array    */
-
-    bc       = ccsf3->BacktrackCoverage;
-
-    for ( i = 0, j = buffer->out_pos - 1; i < bgc; i++, j-- )
-    {
-      while ( CHECK_Property( gdef, OUT_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + 1 == bgc - i )
-         return HB_Err_Not_Covered;
-       j--;
-      }
-
-      error = _HB_OPEN_Coverage_Index( &bc[i], OUT_GLYPH( j ), &index );
-      if ( error )
-       return error;
-    }
-  }
-
-  ic       = ccsf3->InputCoverage;
-
-  for ( i = 0, j = buffer->in_pos; i < igc; i++, j++ )
-  {
-    /* We already called CHECK_Property for IN_GLYPH( buffer->in_pos ) */
-    while ( j > buffer->in_pos && CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + igc - i + lgc == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &ic[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  /* we are starting for lookahead glyphs right after the last context
-     glyph                                                             */
-
-  lc       = ccsf3->LookaheadCoverage;
-
-  for ( i = 0; i < lgc; i++, j++ )
-  {
-    while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + lgc - i == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &lc[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  return Do_ContextSubst( gsub, igc,
-                         ccsf3->SubstCount,
-                         ccsf3->SubstLookupRecord,
-                         buffer,
-                         nesting_level );
-}
-
-
-static HB_Error  Lookup_ChainContextSubst( HB_GSUBHeader*    gsub,
-                                          HB_GSUB_SubTable* st,
-                                          HB_Buffer         buffer,
-                                          HB_UShort          flags,
-                                          HB_UShort          context_length,
-                                          int                nesting_level )
-{
-  HB_ChainContextSubst*  ccs = &st->chain;
-
-  switch ( ccs->SubstFormat ) {
-    case 1:  return Lookup_ChainContextSubst1( gsub, &ccs->ccsf.ccsf1, buffer, flags, context_length, nesting_level );
-    case 2:  return Lookup_ChainContextSubst2( gsub, &ccs->ccsf.ccsf2, buffer, flags, context_length, nesting_level );
-    case 3:  return Lookup_ChainContextSubst3( gsub, &ccs->ccsf.ccsf3, buffer, flags, context_length, nesting_level );
-    default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-}
-
-
-static HB_Error  Load_ReverseChainContextSubst( HB_GSUB_SubTable* st,
-                                               HB_Stream         stream )
-{
-  HB_Error error;
-  HB_ReverseChainContextSubst*  rccs = &st->reverse;
-
-  HB_UShort               m, count;
-
-  HB_UShort               nb = 0, nl = 0, n;
-  HB_UShort               backtrack_count, lookahead_count;
-  HB_UInt                cur_offset, new_offset, base_offset;
-
-  HB_Coverage*           b;
-  HB_Coverage*           l;
-  HB_UShort*              sub;
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  rccs->SubstFormat = GET_UShort();
-
-  if ( rccs->SubstFormat != 1 )
-    return ERR(HB_Err_Invalid_SubTable_Format);
-
-  FORGET_Frame();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  cur_offset = FILE_Pos();
-  if ( FILE_Seek( new_offset ) ||
-       ( error = _HB_OPEN_Load_Coverage( &rccs->Coverage, stream ) ) != HB_Err_Ok )
-    return error;
-  (void)FILE_Seek( cur_offset );
-
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail4;
-
-  rccs->BacktrackGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  rccs->BacktrackCoverage = NULL;
-
-  backtrack_count = rccs->BacktrackGlyphCount;
-
-  if ( ALLOC_ARRAY( rccs->BacktrackCoverage, backtrack_count,
-                   HB_Coverage ) )
-    goto Fail4;
-
-  b = rccs->BacktrackCoverage;
-
-  for ( nb = 0; nb < backtrack_count; nb++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail3;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &b[nb], stream ) ) != HB_Err_Ok )
-      goto Fail3;
-    (void)FILE_Seek( cur_offset );
-  }
-
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail3;
-
-  rccs->LookaheadGlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  rccs->LookaheadCoverage = NULL;
-
-  lookahead_count = rccs->LookaheadGlyphCount;
-
-  if ( ALLOC_ARRAY( rccs->LookaheadCoverage, lookahead_count,
-                   HB_Coverage ) )
-    goto Fail3;
-
-  l = rccs->LookaheadCoverage;
-
-  for ( nl = 0; nl < lookahead_count; nl++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail2;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = _HB_OPEN_Load_Coverage( &l[nl], stream ) ) != HB_Err_Ok )
-      goto Fail2;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  rccs->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  rccs->Substitute = NULL;
-
-  count = rccs->GlyphCount;
-
-  if ( ALLOC_ARRAY( rccs->Substitute, count,
-                   HB_UShort ) )
-    goto Fail2;
-
-  sub = rccs->Substitute;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail1;
-
-  for ( n = 0; n < count; n++ )
-    sub[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( sub );
-
-Fail2:
-  for ( m = 0; m < nl; m++ )
-    _HB_OPEN_Free_Coverage( &l[m] );
-
-  FREE( l );
-
-Fail3:
-  for ( m = 0; m < nb; m++ )
-    _HB_OPEN_Free_Coverage( &b[m] );
-
-  FREE( b );
-
-Fail4:
-  _HB_OPEN_Free_Coverage( &rccs->Coverage );
-  return error;
-}
-
-
-static void  Free_ReverseChainContextSubst( HB_GSUB_SubTable* st )
-{
-  HB_UShort      n, count;
-  HB_ReverseChainContextSubst*  rccs = &st->reverse;
-
-  HB_Coverage*  c;
-
-  _HB_OPEN_Free_Coverage( &rccs->Coverage );
-
-  if ( rccs->LookaheadCoverage )
-  {
-    count = rccs->LookaheadGlyphCount;
-    c     = rccs->LookaheadCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  if ( rccs->BacktrackCoverage )
-  {
-    count = rccs->BacktrackGlyphCount;
-    c     = rccs->BacktrackCoverage;
-
-    for ( n = 0; n < count; n++ )
-      _HB_OPEN_Free_Coverage( &c[n] );
-
-    FREE( c );
-  }
-
-  FREE ( rccs->Substitute );
-}
-
-
-static HB_Error  Lookup_ReverseChainContextSubst( HB_GSUBHeader*    gsub,
-                                                 HB_GSUB_SubTable* st,
-                                                 HB_Buffer         buffer,
-                                                 HB_UShort          flags,
-                                                 HB_UShort         context_length,
-                                                 int               nesting_level )
-{
-  HB_UShort        index, input_index, i, j, property;
-  HB_UShort        bgc, lgc;
-  HB_Error         error;
-
-  HB_ReverseChainContextSubst*  rccs = &st->reverse;
-  HB_Coverage*    bc;
-  HB_Coverage*    lc;
-  HB_GDEFHeader*  gdef;
-
-  if ( nesting_level != 1 || context_length != 0xFFFF )
-    return HB_Err_Not_Covered;
-
-  gdef = gsub->gdef;
-
-  if ( CHECK_Property( gdef, IN_CURITEM(), flags, &property ) )
-    return error;
-
-  bgc = rccs->BacktrackGlyphCount;
-  lgc = rccs->LookaheadGlyphCount;
-
-  /* check whether context is too long; it is a first guess only */
-
-  if ( bgc > buffer->in_pos || buffer->in_pos + 1 + lgc > buffer->in_length )
-    return HB_Err_Not_Covered;
-
-  if ( bgc )
-  {
-    /* Since we don't know in advance the number of glyphs to inspect,
-       we search backwards for matches in the backtrack glyph array    */
-
-    bc       = rccs->BacktrackCoverage;
-
-    for ( i = 0, j = buffer->in_pos - 1; i < bgc; i++, j-- )
-    {
-      while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-      {
-       if ( error && error != HB_Err_Not_Covered )
-         return error;
-
-       if ( j + 1 == bgc - i )
-         return HB_Err_Not_Covered;
-       j--;
-      }
-
-      error = _HB_OPEN_Coverage_Index( &bc[i], IN_GLYPH( j ), &index );
-      if ( error )
-       return error;
-    }
-  }
-
-  j = buffer->in_pos;
-
-  error = _HB_OPEN_Coverage_Index( &rccs->Coverage, IN_GLYPH( j ), &input_index );
-  if ( error )
-      return error;
-
-  lc       = rccs->LookaheadCoverage;
-
-  for ( i = 0, j = buffer->in_pos + 1; i < lgc; i++, j++ )
-  {
-    while ( CHECK_Property( gdef, IN_ITEM( j ), flags, &property ) )
-    {
-      if ( error && error != HB_Err_Not_Covered )
-       return error;
-
-      if ( j + lgc - i == (HB_Int)buffer->in_length )
-       return HB_Err_Not_Covered;
-      j++;
-    }
-
-    error = _HB_OPEN_Coverage_Index( &lc[i], IN_GLYPH( j ), &index );
-    if ( error )
-      return error;
-  }
-
-  IN_CURGLYPH() = rccs->Substitute[input_index];
-  buffer->in_pos--; /* Reverse! */
-
-  return error;
-}
-
-
-
-/***********
- * GSUB API
- ***********/
-
-
-
-HB_Error  HB_GSUB_Select_Script( HB_GSUBHeader*  gsub,
-                                HB_UInt         script_tag,
-                                HB_UShort*       script_index )
-{
-  HB_UShort          n;
-
-  HB_ScriptList*    sl;
-  HB_ScriptRecord*  sr;
-
-
-  if ( !gsub || !script_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  for ( n = 0; n < sl->ScriptCount; n++ )
-    if ( script_tag == sr[n].ScriptTag )
-    {
-      *script_index = n;
-
-      return HB_Err_Ok;
-    }
-
-  return HB_Err_Not_Covered;
-}
-
-
-
-HB_Error  HB_GSUB_Select_Language( HB_GSUBHeader*  gsub,
-                                  HB_UInt         language_tag,
-                                  HB_UShort        script_index,
-                                  HB_UShort*       language_index,
-                                  HB_UShort*       req_feature_index )
-{
-  HB_UShort           n;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-
-
-  if ( !gsub || !language_index || !req_feature_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  for ( n = 0; n < s->LangSysCount; n++ )
-    if ( language_tag == lsr[n].LangSysTag )
-    {
-      *language_index = n;
-      *req_feature_index = lsr[n].LangSys.ReqFeatureIndex;
-
-      return HB_Err_Ok;
-    }
-
-  return HB_Err_Not_Covered;
-}
-
-
-/* selecting 0xFFFF for language_index asks for the values of the
-   default language (DefaultLangSys)                              */
-
-
-HB_Error  HB_GSUB_Select_Feature( HB_GSUBHeader*  gsub,
-                                 HB_UInt         feature_tag,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UShort*       feature_index )
-{
-  HB_UShort           n;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-  HB_LangSys*        ls;
-  HB_UShort*          fi;
-
-  HB_FeatureList*    fl;
-  HB_FeatureRecord*  fr;
-
-
-  if ( !gsub || !feature_index )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  fl = &gsub->FeatureList;
-  fr = fl->FeatureRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( language_index == 0xFFFF )
-    ls = &s->DefaultLangSys;
-  else
-  {
-    if ( language_index >= s->LangSysCount )
-      return ERR(HB_Err_Invalid_Argument);
-
-    ls = &lsr[language_index].LangSys;
-  }
-
-  fi = ls->FeatureIndex;
-
-  for ( n = 0; n < ls->FeatureCount; n++ )
-  {
-    if ( fi[n] >= fl->FeatureCount )
-      return ERR(HB_Err_Invalid_SubTable_Format);
-
-    if ( feature_tag == fr[fi[n]].FeatureTag )
-    {
-      *feature_index = fi[n];
-
-      return HB_Err_Ok;
-    }
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-/* The next three functions return a null-terminated list */
-
-
-HB_Error  HB_GSUB_Query_Scripts( HB_GSUBHeader*  gsub,
-                                HB_UInt**       script_tag_list )
-{
-  HB_UShort          n;
-  HB_Error           error;
-  HB_UInt*          stl;
-
-  HB_ScriptList*    sl;
-  HB_ScriptRecord*  sr;
-
-
-  if ( !gsub || !script_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( ALLOC_ARRAY( stl, sl->ScriptCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < sl->ScriptCount; n++ )
-    stl[n] = sr[n].ScriptTag;
-  stl[n] = 0;
-
-  *script_tag_list = stl;
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GSUB_Query_Languages( HB_GSUBHeader*  gsub,
-                                  HB_UShort        script_index,
-                                  HB_UInt**       language_tag_list )
-{
-  HB_UShort           n;
-  HB_Error            error;
-  HB_UInt*           ltl;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-
-
-  if ( !gsub || !language_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( ALLOC_ARRAY( ltl, s->LangSysCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < s->LangSysCount; n++ )
-    ltl[n] = lsr[n].LangSysTag;
-  ltl[n] = 0;
-
-  *language_tag_list = ltl;
-
-  return HB_Err_Ok;
-}
-
-
-/* selecting 0xFFFF for language_index asks for the values of the
-   default language (DefaultLangSys)                              */
-
-
-HB_Error  HB_GSUB_Query_Features( HB_GSUBHeader*  gsub,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UInt**       feature_tag_list )
-{
-  HB_UShort           n;
-  HB_Error            error;
-  HB_UInt*           ftl;
-
-  HB_ScriptList*     sl;
-  HB_ScriptRecord*   sr;
-  HB_ScriptTable*    s;
-  HB_LangSysRecord*  lsr;
-  HB_LangSys*        ls;
-  HB_UShort*          fi;
-
-  HB_FeatureList*    fl;
-  HB_FeatureRecord*  fr;
-
-
-  if ( !gsub || !feature_tag_list )
-    return ERR(HB_Err_Invalid_Argument);
-
-  sl = &gsub->ScriptList;
-  sr = sl->ScriptRecord;
-
-  fl = &gsub->FeatureList;
-  fr = fl->FeatureRecord;
-
-  if ( script_index >= sl->ScriptCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  s   = &sr[script_index].Script;
-  lsr = s->LangSysRecord;
-
-  if ( language_index == 0xFFFF )
-    ls = &s->DefaultLangSys;
-  else
-  {
-    if ( language_index >= s->LangSysCount )
-      return ERR(HB_Err_Invalid_Argument);
-
-    ls = &lsr[language_index].LangSys;
-  }
-
-  fi = ls->FeatureIndex;
-
-  if ( ALLOC_ARRAY( ftl, ls->FeatureCount + 1, HB_UInt ) )
-    return error;
-
-  for ( n = 0; n < ls->FeatureCount; n++ )
-  {
-    if ( fi[n] >= fl->FeatureCount )
-    {
-      FREE( ftl );
-      return ERR(HB_Err_Invalid_SubTable_Format);
-    }
-    ftl[n] = fr[fi[n]].FeatureTag;
-  }
-  ftl[n] = 0;
-
-  *feature_tag_list = ftl;
-
-  return HB_Err_Ok;
-}
-
-
-/* Do an individual subtable lookup.  Returns HB_Err_Ok if substitution
-   has been done, or HB_Err_Not_Covered if not.                        */
-static HB_Error  GSUB_Do_Glyph_Lookup( HB_GSUBHeader* gsub,
-                                      HB_UShort       lookup_index,
-                                      HB_Buffer      buffer,
-                                      HB_UShort       context_length,
-                                      int             nesting_level )
-{
-  HB_Error               error = HB_Err_Not_Covered;
-  HB_UShort              i, flags, lookup_count;
-  HB_Lookup*             lo;
-  int                    lookup_type;
-
-  nesting_level++;
-
-  if ( nesting_level > HB_MAX_NESTING_LEVEL )
-    return ERR(HB_Err_Not_Covered); /* ERR() call intended */
-
-  lookup_count = gsub->LookupList.LookupCount;
-  if (lookup_index >= lookup_count)
-    return error;
-
-  lo    = &gsub->LookupList.Lookup[lookup_index];
-  flags = lo->LookupFlag;
-  lookup_type = lo->LookupType;
-
-  for ( i = 0; i < lo->SubTableCount; i++ )
-  {
-    HB_GSUB_SubTable *st = &lo->SubTable[i].st.gsub;
-
-    switch (lookup_type) {
-      case HB_GSUB_LOOKUP_SINGLE:
-       error = Lookup_SingleSubst              ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GSUB_LOOKUP_MULTIPLE:
-       error = Lookup_MultipleSubst            ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GSUB_LOOKUP_ALTERNATE:
-       error = Lookup_AlternateSubst           ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GSUB_LOOKUP_LIGATURE:
-       error = Lookup_LigatureSubst            ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GSUB_LOOKUP_CONTEXT:
-       error = Lookup_ContextSubst             ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      case HB_GSUB_LOOKUP_CHAIN:
-       error = Lookup_ChainContextSubst        ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-    /*case HB_GSUB_LOOKUP_EXTENSION:
-       error = Lookup_ExtensionSubst           ( gsub, st, buffer, flags, context_length, nesting_level ); break;*/
-      case HB_GSUB_LOOKUP_REVERSE_CHAIN:
-       error = Lookup_ReverseChainContextSubst ( gsub, st, buffer, flags, context_length, nesting_level ); break;
-      default:
-       error = HB_Err_Not_Covered;
-    };
-
-    /* Check whether we have a successful substitution or an error other
-       than HB_Err_Not_Covered                                          */
-    if ( error != HB_Err_Not_Covered )
-      return error;
-  }
-
-  return HB_Err_Not_Covered;
-}
-
-
-HB_INTERNAL HB_Error
-_HB_GSUB_Load_SubTable( HB_GSUB_SubTable* st,
-                       HB_Stream         stream,
-                       HB_UShort         lookup_type )
-{
-  switch (lookup_type) {
-    case HB_GSUB_LOOKUP_SINGLE:                return Load_SingleSubst                 ( st, stream );
-    case HB_GSUB_LOOKUP_MULTIPLE:      return Load_MultipleSubst               ( st, stream );
-    case HB_GSUB_LOOKUP_ALTERNATE:     return Load_AlternateSubst              ( st, stream );
-    case HB_GSUB_LOOKUP_LIGATURE:      return Load_LigatureSubst               ( st, stream );
-    case HB_GSUB_LOOKUP_CONTEXT:       return Load_ContextSubst                ( st, stream );
-    case HB_GSUB_LOOKUP_CHAIN:         return Load_ChainContextSubst           ( st, stream );
-  /*case HB_GSUB_LOOKUP_EXTENSION:     return Load_ExtensionSubst              ( st, stream );*/
-    case HB_GSUB_LOOKUP_REVERSE_CHAIN: return Load_ReverseChainContextSubst    ( st, stream );
-    default:                           return ERR(HB_Err_Invalid_SubTable_Format);
-  };
-}
-
-
-HB_INTERNAL void
-_HB_GSUB_Free_SubTable( HB_GSUB_SubTable* st,
-                       HB_UShort         lookup_type )
-{
-  switch ( lookup_type ) {
-    case HB_GSUB_LOOKUP_SINGLE:                Free_SingleSubst                ( st ); return;
-    case HB_GSUB_LOOKUP_MULTIPLE:      Free_MultipleSubst              ( st ); return;
-    case HB_GSUB_LOOKUP_ALTERNATE:     Free_AlternateSubst             ( st ); return;
-    case HB_GSUB_LOOKUP_LIGATURE:      Free_LigatureSubst              ( st ); return;
-    case HB_GSUB_LOOKUP_CONTEXT:       Free_ContextSubst               ( st ); return;
-    case HB_GSUB_LOOKUP_CHAIN:         Free_ChainContextSubst          ( st ); return;
-  /*case HB_GSUB_LOOKUP_EXTENSION:     Free_ExtensionSubst             ( st ); return;*/
-    case HB_GSUB_LOOKUP_REVERSE_CHAIN: Free_ReverseChainContextSubst   ( st ); return;
-    default:                                                                   return;
-  };
-}
-
-
-
-/* apply one lookup to the input string object */
-
-static HB_Error  GSUB_Do_String_Lookup( HB_GSUBHeader*   gsub,
-                                  HB_UShort         lookup_index,
-                                  HB_Buffer        buffer )
-{
-  HB_Error  error, retError = HB_Err_Not_Covered;
-
-  HB_UInt*  properties = gsub->LookupList.Properties;
-  int       lookup_type = gsub->LookupList.Lookup[lookup_index].LookupType;
-
-  const int       nesting_level = 0;
-  /* 0xFFFF indicates that we don't have a context length yet */
-  const HB_UShort context_length = 0xFFFF;
-
-  switch (lookup_type) {
-
-    case HB_GSUB_LOOKUP_SINGLE:
-    case HB_GSUB_LOOKUP_MULTIPLE:
-    case HB_GSUB_LOOKUP_ALTERNATE:
-    case HB_GSUB_LOOKUP_LIGATURE:
-    case HB_GSUB_LOOKUP_CONTEXT:
-    case HB_GSUB_LOOKUP_CHAIN:
-      /* in/out forward substitution (implemented lazy) */
-
-      _hb_buffer_clear_output ( buffer );
-      buffer->in_pos = 0;
-  while ( buffer->in_pos < buffer->in_length )
-  {
-    if ( ~IN_PROPERTIES( buffer->in_pos ) & properties[lookup_index] )
-    {
-         error = GSUB_Do_Glyph_Lookup( gsub, lookup_index, buffer, context_length, nesting_level );
-      if ( error )
-      {
-       if ( error != HB_Err_Not_Covered )
-         return error;
-      }
-      else
-       retError = error;
-    }
-    else
-      error = HB_Err_Not_Covered;
-
-    if ( error == HB_Err_Not_Covered )
-         if ( COPY_Glyph ( buffer ) )
-       return error;
-  }
-      /* we shouldn't swap if error occurred.
-       *
-       * also don't swap if nothing changed (ie HB_Err_Not_Covered).
-       * shouldn't matter in that case though.
-       */
-      if ( retError == HB_Err_Ok )
-       _hb_buffer_swap( buffer );
-
-  return retError;
-
-    case HB_GSUB_LOOKUP_REVERSE_CHAIN:
-      /* in-place backward substitution */
-
-      buffer->in_pos = buffer->in_length - 1;
-    do
-    {
-      if ( ~IN_PROPERTIES( buffer->in_pos ) & properties[lookup_index] )
-       {
-         error = GSUB_Do_Glyph_Lookup( gsub, lookup_index, buffer, context_length, nesting_level );
-         if ( error )
-           {
-             if ( error != HB_Err_Not_Covered )
-               return error;
-           }
-         else
-           retError = error;
-       }
-       else
-         error = HB_Err_Not_Covered;
-
-       if ( error == HB_Err_Not_Covered )
-         buffer->in_pos--;
-      }
-      while ((HB_Int) buffer->in_pos >= 0);
-
-      return retError;
-
-  /*case HB_GSUB_LOOKUP_EXTENSION:*/
-    default:
-  return retError;
-  };
-}
-
-
-HB_Error  HB_GSUB_Add_Feature( HB_GSUBHeader*  gsub,
-                              HB_UShort        feature_index,
-                              HB_UInt          property )
-{
-  HB_UShort    i;
-
-  HB_Feature  feature;
-  HB_UInt*     properties;
-  HB_UShort*   index;
-  HB_UShort    lookup_count;
-
-  /* Each feature can only be added once */
-
-  if ( !gsub ||
-       feature_index >= gsub->FeatureList.FeatureCount ||
-       gsub->FeatureList.ApplyCount == gsub->FeatureList.FeatureCount )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gsub->FeatureList.ApplyOrder[gsub->FeatureList.ApplyCount++] = feature_index;
-
-  properties = gsub->LookupList.Properties;
-
-  feature = gsub->FeatureList.FeatureRecord[feature_index].Feature;
-  index   = feature.LookupListIndex;
-  lookup_count = gsub->LookupList.LookupCount;
-
-  for ( i = 0; i < feature.LookupListCount; i++ )
-  {
-    HB_UShort lookup_index = index[i];
-    if (lookup_index < lookup_count)
-      properties[lookup_index] |= property;
-  }
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GSUB_Clear_Features( HB_GSUBHeader*  gsub )
-{
-  HB_UShort i;
-
-  HB_UInt*  properties;
-
-
-  if ( !gsub )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gsub->FeatureList.ApplyCount = 0;
-
-  properties = gsub->LookupList.Properties;
-
-  for ( i = 0; i < gsub->LookupList.LookupCount; i++ )
-    properties[i] = 0;
-
-  return HB_Err_Ok;
-}
-
-
-
-HB_Error  HB_GSUB_Register_Alternate_Function( HB_GSUBHeader*  gsub,
-                                              HB_AltFunction  altfunc,
-                                              void*            data )
-{
-  if ( !gsub )
-    return ERR(HB_Err_Invalid_Argument);
-
-  gsub->altfunc = altfunc;
-  gsub->data    = data;
-
-  return HB_Err_Ok;
-}
-
-/* returns error if one happened, otherwise returns HB_Err_Not_Covered if no
- * feature were applied, or HB_Err_Ok otherwise.
- */
-HB_Error  HB_GSUB_Apply_String( HB_GSUBHeader*   gsub,
-                               HB_Buffer        buffer )
-{
-  HB_Error          error, retError = HB_Err_Not_Covered;
-  int               i, j, lookup_count, num_features;
-
-  if ( !gsub ||
-       !buffer)
-    return ERR(HB_Err_Invalid_Argument);
-
-  if ( buffer->in_length == 0 )
-    return retError;
-
-  lookup_count = gsub->LookupList.LookupCount;
-  num_features = gsub->FeatureList.ApplyCount;
-
-  for ( i = 0; i < num_features; i++)
-  {
-    HB_UShort  feature_index = gsub->FeatureList.ApplyOrder[i];
-    HB_Feature feature = gsub->FeatureList.FeatureRecord[feature_index].Feature;
-
-    for ( j = 0; j < feature.LookupListCount; j++ )
-    {
-      HB_UShort         lookup_index = feature.LookupListIndex[j];
-
-      /* Skip nonexistant lookups */
-      if (lookup_index >= lookup_count)
-       continue;
-
-       error = GSUB_Do_String_Lookup( gsub, lookup_index, buffer );
-      if ( error )
-      {
-       if ( error != HB_Err_Not_Covered )
-         return error;
-      }
-      else
-       retError = error;
-    }
-  }
-
-  error = retError;
-
-  return error;
-}
-
-
-/* END */
diff --git a/src/hb-old/harfbuzz-gsub.h b/src/hb-old/harfbuzz-gsub.h
deleted file mode 100644 (file)
index b00df44..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_GSUB_H
-#define HARFBUZZ_GSUB_H
-
-#include "harfbuzz-gdef.h"
-#include "harfbuzz-buffer.h"
-
-HB_BEGIN_HEADER
-
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/* Lookup types for glyph substitution */
-
-#define HB_GSUB_LOOKUP_SINGLE        1
-#define HB_GSUB_LOOKUP_MULTIPLE      2
-#define HB_GSUB_LOOKUP_ALTERNATE     3
-#define HB_GSUB_LOOKUP_LIGATURE      4
-#define HB_GSUB_LOOKUP_CONTEXT       5
-#define HB_GSUB_LOOKUP_CHAIN         6
-#define HB_GSUB_LOOKUP_EXTENSION     7
-#define HB_GSUB_LOOKUP_REVERSE_CHAIN 8
-
-
-/* A pointer to a function which selects the alternate glyph.  `pos' is
-   the position of the glyph with index `glyphID', `num_alternates'
-   gives the number of alternates in the `alternates' array.  `data'
-   points to the user-defined structure specified during a call to
-   HB_GSUB_Register_Alternate_Function().  The function must return an
-   index into the `alternates' array.                                   */
-
-typedef HB_UShort  (*HB_AltFunction)(HB_UInt    pos,
-                                     HB_UShort   glyphID,
-                                     HB_UShort   num_alternates,
-                                     HB_UShort*  alternates,
-                                     void*       data );
-
-
-struct  HB_GSUBHeader_
-{
-  HB_GDEFHeader*  gdef;
-
-  /* the next two fields are used for an alternate substitution callback
-     function to select the proper alternate glyph.                      */
-
-  void*            data;
-  HB_AltFunction  altfunc;
-
-  HB_UInt         offset;
-
-  HB_16Dot16         Version;
-
-  HB_ScriptList   ScriptList;
-  HB_FeatureList  FeatureList;
-  HB_LookupList   LookupList;
-};
-
-typedef struct HB_GSUBHeader_   HB_GSUBHeader;
-typedef HB_GSUBHeader*  HB_GSUB;
-
-
-HB_Error  HB_Load_GSUB_Table( HB_Stream       stream,
-                             HB_GSUBHeader** gsub,
-                             HB_GDEFHeader*  gdef,
-                              HB_Stream       gdefStream );
-
-
-HB_Error  HB_Done_GSUB_Table( HB_GSUBHeader*  gsub );
-
-
-HB_Error  HB_GSUB_Select_Script( HB_GSUBHeader*  gsub,
-                                HB_UInt         script_tag,
-                                HB_UShort*       script_index );
-
-HB_Error  HB_GSUB_Select_Language( HB_GSUBHeader*  gsub,
-                                  HB_UInt         language_tag,
-                                  HB_UShort        script_index,
-                                  HB_UShort*       language_index,
-                                  HB_UShort*       req_feature_index );
-
-HB_Error  HB_GSUB_Select_Feature( HB_GSUBHeader*  gsub,
-                                 HB_UInt         feature_tag,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UShort*       feature_index );
-
-
-HB_Error  HB_GSUB_Query_Scripts( HB_GSUBHeader*  gsub,
-                                HB_UInt**       script_tag_list );
-
-HB_Error  HB_GSUB_Query_Languages( HB_GSUBHeader*  gsub,
-                                  HB_UShort        script_index,
-                                  HB_UInt**       language_tag_list );
-
-HB_Error  HB_GSUB_Query_Features( HB_GSUBHeader*  gsub,
-                                 HB_UShort        script_index,
-                                 HB_UShort        language_index,
-                                 HB_UInt**       feature_tag_list );
-
-
-HB_Error  HB_GSUB_Add_Feature( HB_GSUBHeader*  gsub,
-                              HB_UShort        feature_index,
-                              HB_UInt          property );
-
-HB_Error  HB_GSUB_Clear_Features( HB_GSUBHeader*  gsub );
-
-
-HB_Error  HB_GSUB_Register_Alternate_Function( HB_GSUBHeader*  gsub,
-                                              HB_AltFunction  altfunc,
-                                              void*            data );
-
-
-HB_Error  HB_GSUB_Apply_String( HB_GSUBHeader*   gsub,
-                               HB_Buffer        buffer );
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_GSUB_H */
diff --git a/src/hb-old/harfbuzz-hangul.c b/src/hb-old/harfbuzz-hangul.c
deleted file mode 100644 (file)
index 6f89ed6..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-
-/*
-// Hangul is a syllable based script. Unicode reserves a large range
-// for precomposed hangul, where syllables are already precomposed to
-// their final glyph shape. In addition, a so called jamo range is
-// defined, that can be used to express old Hangul. Modern hangul
-// syllables can also be expressed as jamo, and should be composed
-// into syllables. The operation is rather simple and mathematical.
-
-// Every hangul jamo is classified as being either a Leading consonant
-// (L), and intermediat Vowel (V) or a trailing consonant (T). Modern
-// hangul syllables (the ones in the precomposed area can be of type
-// LV or LVT.
-//
-// Syllable breaks do _not_ occur between:
-//
-// L              L, V or precomposed
-// V, LV          V, T
-// LVT, T         T
-//
-// A standard syllable is of the form L+V+T*. The above rules allow
-// nonstandard syllables L*V*T*. To transform them into standard
-// syllables fill characters L_f and V_f can be inserted.
-*/
-
-enum {
-    Hangul_SBase = 0xac00,
-    Hangul_LBase = 0x1100,
-    Hangul_VBase = 0x1161,
-    Hangul_TBase = 0x11a7,
-    Hangul_SCount = 11172,
-    Hangul_LCount = 19,
-    Hangul_VCount = 21,
-    Hangul_TCount = 28,
-    Hangul_NCount = 21*28
-};
-
-#define hangul_isPrecomposed(uc) \
-    (uc >= Hangul_SBase && uc < Hangul_SBase + Hangul_SCount)
-
-#define hangul_isLV(uc) \
-    ((uc - Hangul_SBase) % Hangul_TCount == 0)
-
-typedef enum {
-    L,
-    V,
-    T,
-    LV,
-    LVT,
-    X
-} HangulType;
-
-static HangulType hangul_type(unsigned short uc) {
-    if (uc > Hangul_SBase && uc < Hangul_SBase + Hangul_SCount)
-        return hangul_isLV(uc) ? LV : LVT;
-    if (uc < Hangul_LBase || uc > 0x11ff)
-        return X;
-    if (uc < Hangul_VBase)
-        return L;
-    if (uc < Hangul_TBase)
-        return V;
-    return T;
-}
-
-static int hangul_nextSyllableBoundary(const HB_UChar16 *s, int start, int end)
-{
-    const HB_UChar16 *uc = s + start;
-
-    HangulType state = hangul_type(*uc);
-    int pos = 1;
-
-    while (pos < end - start) {
-        HangulType newState = hangul_type(uc[pos]);
-        switch(newState) {
-        case X:
-            goto finish;
-        case L:
-        case V:
-        case T:
-            if (state > newState)
-                goto finish;
-            state = newState;
-            break;
-        case LV:
-            if (state > L)
-                goto finish;
-            state = V;
-            break;
-        case LVT:
-            if (state > L)
-                goto finish;
-            state = T;
-        }
-        ++pos;
-    }
-
- finish:
-    return start+pos;
-}
-
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature hangul_features [] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('l', 'j', 'm', 'o'), CcmpProperty },
-    { HB_MAKE_TAG('v', 'j', 'm', 'o'), CcmpProperty },
-    { HB_MAKE_TAG('t', 'j', 'm', 'o'), CcmpProperty },
-    { 0, 0 }
-};
-#endif
-
-static HB_Bool hangul_shape_syllable(HB_ShaperItem *item, HB_Bool openType)
-{
-    const HB_UChar16 *ch = item->string + item->item.pos;
-    int len = item->item.length;
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = item->num_glyphs;
-#endif
-
-    int i;
-    HB_UChar16 composed = 0;
-    /* see if we can compose the syllable into a modern hangul */
-    if (item->item.length == 2) {
-        int LIndex = ch[0] - Hangul_LBase;
-        int VIndex = ch[1] - Hangul_VBase;
-        if (LIndex >= 0 && LIndex < Hangul_LCount &&
-            VIndex >= 0 && VIndex < Hangul_VCount)
-            composed = (LIndex * Hangul_VCount + VIndex) * Hangul_TCount + Hangul_SBase;
-    } else if (item->item.length == 3) {
-        int LIndex = ch[0] - Hangul_LBase;
-        int VIndex = ch[1] - Hangul_VBase;
-        int TIndex = ch[2] - Hangul_TBase;
-        if (LIndex >= 0 && LIndex < Hangul_LCount &&
-            VIndex >= 0 && VIndex < Hangul_VCount &&
-            TIndex >= 0 && TIndex < Hangul_TCount)
-            composed = (LIndex * Hangul_VCount + VIndex) * Hangul_TCount + TIndex + Hangul_SBase;
-    }
-
-
-
-    /* if we have a modern hangul use the composed form */
-    if (composed) {
-        ch = &composed;
-        len = 1;
-    }
-
-    if (!item->font->klass->convertStringToGlyphIndices(item->font,
-                                                        ch, len,
-                                                        item->glyphs, &item->num_glyphs,
-                                                        item->item.bidiLevel % 2))
-        return FALSE;
-    for (i = 0; i < len; i++) {
-        item->attributes[i].mark = FALSE;
-        item->attributes[i].clusterStart = FALSE;
-        item->attributes[i].justification = 0;
-        item->attributes[i].zeroWidth = FALSE;
-        /*IDEBUG("    %d: %4x", i, ch[i].unicode()); */
-    }
-
-#ifndef NO_OPENTYPE
-    if (!composed && openType) {
-        HB_Bool positioned;
-
-        HB_STACKARRAY(unsigned short, logClusters, len);
-        for (i = 0; i < len; ++i)
-            logClusters[i] = i;
-        item->log_clusters = logClusters;
-
-        HB_OpenTypeShape(item, /*properties*/0);
-
-        positioned = HB_OpenTypePosition(item, availableGlyphs, /*doLogClusters*/FALSE);
-
-        HB_FREE_STACKARRAY(logClusters);
-
-        if (!positioned)
-            return FALSE;
-    } else {
-        HB_HeuristicPosition(item);
-    }
-#endif
-
-    item->attributes[0].clusterStart = TRUE;
-    return TRUE;
-}
-
-HB_Bool HB_HangulShape(HB_ShaperItem *item)
-{
-    const HB_UChar16 *uc = item->string + item->item.pos;
-    HB_Bool allPrecomposed = TRUE;
-    int i;
-
-    assert(item->item.script == HB_Script_Hangul);
-
-    for (i = 0; i < (int)item->item.length; ++i) {
-        if (!hangul_isPrecomposed(uc[i])) {
-            allPrecomposed = FALSE;
-            break;
-        }
-    }
-
-    if (!allPrecomposed) {
-        HB_Bool openType = FALSE;
-        unsigned short *logClusters = item->log_clusters;
-        HB_ShaperItem syllable;
-        int first_glyph = 0;
-        int sstart = item->item.pos;
-        int end = sstart + item->item.length;
-
-#ifndef NO_OPENTYPE
-        openType = HB_SelectScript(item, hangul_features);
-#endif
-        syllable = *item;
-
-        while (sstart < end) {
-            int send = hangul_nextSyllableBoundary(item->string, sstart, end);
-
-            syllable.item.pos = sstart;
-            syllable.item.length = send-sstart;
-            syllable.glyphs = item->glyphs + first_glyph;
-            syllable.attributes = item->attributes + first_glyph;
-            syllable.offsets = item->offsets + first_glyph;
-            syllable.advances = item->advances + first_glyph;
-            syllable.num_glyphs = item->num_glyphs - first_glyph;
-            if (!hangul_shape_syllable(&syllable, openType)) {
-                item->num_glyphs += syllable.num_glyphs;
-                return FALSE;
-            }
-            /* fix logcluster array */
-            for (i = sstart; i < send; ++i)
-                logClusters[i-item->item.pos] = first_glyph;
-            sstart = send;
-            first_glyph += syllable.num_glyphs;
-        }
-        item->num_glyphs = first_glyph;
-        return TRUE;
-    }
-
-    return HB_BasicShape(item);
-}
-
-
diff --git a/src/hb-old/harfbuzz-hebrew.c b/src/hb-old/harfbuzz-hebrew.c
deleted file mode 100644 (file)
index b5431a5..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-#include <assert.h>
-
-/*
-// Uniscribe also defines dlig for Hebrew, but we leave this out for now, as it's mostly
-// ligatures one does not want in modern Hebrew (as lam-alef ligatures).
-*/
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature hebrew_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    {0, 0}
-};
-#endif
-
-/* Hebrew shaping. In the non opentype case we try to use the
-   presentation forms specified for Hebrew. Especially for the
-   ligatures with Dagesh this gives much better results than we could
-   achieve manually.
-*/
-HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
-{
-    enum {
-        Dagesh = 0x5bc,
-        ShinDot = 0x5c1,
-        SinDot = 0x5c2,
-        Patah = 0x5b7,
-        Qamats = 0x5b8,
-        Holam = 0x5b9,
-        Rafe = 0x5bf
-    };
-
-    assert(shaper_item->item.script == HB_Script_Hebrew);
-
-#ifndef NO_OPENTYPE
-    if (HB_SelectScript(shaper_item, hebrew_features)) {
-
-        const int availableGlyphs = shaper_item->num_glyphs;
-        if (!HB_ConvertStringToGlyphIndices(shaper_item))
-            return FALSE;
-
-        HB_HeuristicSetGlyphAttributes(shaper_item);
-        HB_OpenTypeShape(shaper_item, /*properties*/0);
-        return HB_OpenTypePosition(shaper_item, availableGlyphs, /*doLogClusters*/TRUE);
-    }
-#endif
-
-    {
-        const HB_UChar16 *uc = shaper_item->string + shaper_item->item.pos;
-        unsigned short *logClusters = shaper_item->log_clusters;
-        HB_GlyphAttributes *attributes = shaper_item->attributes;
-
-        HB_Bool haveGlyphs;
-        int slen = 1;
-        int cluster_start = 0;
-        hb_uint32 i;
-
-        HB_STACKARRAY(HB_UChar16, shapedChars, 2 * shaper_item->item.length);
-        *shapedChars = *uc;
-        logClusters[0] = 0;
-
-        for (i = 1; i < shaper_item->item.length; ++i) {
-            hb_uint16 base = shapedChars[cluster_start];
-            hb_uint16 shaped = 0;
-            HB_Bool invalid = FALSE;
-            if (uc[i] == Dagesh) {
-                if (base >= 0x5d0
-                    && base <= 0x5ea
-                    && base != 0x5d7
-                    && base != 0x5dd
-                    && base != 0x5df
-                    && base != 0x5e2
-                    && base != 0x5e5) {
-                    shaped = base - 0x5d0 + 0xfb30;
-                } else if (base == 0xfb2a || base == 0xfb2b /* Shin with Shin or Sin dot */) {
-                    shaped = base + 2;
-                } else {
-                    invalid = TRUE;
-                }
-            } else if (uc[i] == ShinDot) {
-                if (base == 0x05e9)
-                    shaped = 0xfb2a;
-                else if (base == 0xfb49)
-                    shaped = 0xfb2c;
-                else
-                    invalid = TRUE;
-            } else if (uc[i] == SinDot) {
-                if (base == 0x05e9)
-                    shaped = 0xfb2b;
-                else if (base == 0xfb49)
-                    shaped = 0xfb2d;
-                else
-                    invalid = TRUE;
-            } else if (uc[i] == Patah) {
-                if (base == 0x5d0)
-                    shaped = 0xfb2e;
-            } else if (uc[i] == Qamats) {
-                if (base == 0x5d0)
-                    shaped = 0xfb2f;
-            } else if (uc[i] == Holam) {
-                if (base == 0x5d5)
-                    shaped = 0xfb4b;
-            } else if (uc[i] == Rafe) {
-                if (base == 0x5d1)
-                    shaped = 0xfb4c;
-                else if (base == 0x5db)
-                    shaped = 0xfb4d;
-                else if (base == 0x5e4)
-                    shaped = 0xfb4e;
-            }
-
-            if (invalid) {
-                shapedChars[slen] = 0x25cc;
-                attributes[slen].clusterStart = TRUE;
-                attributes[slen].mark = FALSE;
-                attributes[slen].combiningClass = 0;
-                cluster_start = slen;
-                ++slen;
-            }
-            if (shaped) {
-                if (shaper_item->font->klass->canRender(shaper_item->font, (HB_UChar16 *)&shaped, 1)) {
-                    shapedChars[cluster_start] = shaped;
-                } else
-                    shaped = 0;
-            }
-            if (!shaped) {
-                HB_CharCategory category;
-                int cmb;
-                shapedChars[slen] = uc[i];
-                HB_GetUnicodeCharProperties(uc[i], &category, &cmb);
-                if (category != HB_Mark_NonSpacing) {
-                    attributes[slen].clusterStart = TRUE;
-                    attributes[slen].mark = FALSE;
-                    attributes[slen].combiningClass = 0;
-                    attributes[slen].dontPrint = HB_IsControlChar(uc[i]);
-                    cluster_start = slen;
-                } else {
-                    attributes[slen].clusterStart = FALSE;
-                    attributes[slen].mark = TRUE;
-                    attributes[slen].combiningClass = cmb;
-                }
-                ++slen;
-            }
-            logClusters[i] = cluster_start;
-        }
-
-        haveGlyphs = shaper_item->font->klass
-            ->convertStringToGlyphIndices(shaper_item->font,
-                                          shapedChars, slen,
-                                          shaper_item->glyphs, &shaper_item->num_glyphs,
-                                          shaper_item->item.bidiLevel % 2);
-
-        HB_FREE_STACKARRAY(shapedChars);
-
-        if (!haveGlyphs)
-            return FALSE;
-
-        HB_HeuristicPosition(shaper_item);
-    }
-
-    return TRUE;
-}
-
diff --git a/src/hb-old/harfbuzz-impl.c b/src/hb-old/harfbuzz-impl.c
deleted file mode 100644 (file)
index ddbf36b..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- * Copyright (C) 2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#include "harfbuzz-impl.h"
-
-
-HB_INTERNAL HB_Pointer
-_hb_alloc(size_t     size,
-         HB_Error  *perror )
-{
-  HB_Error    error = (HB_Error)0;
-  HB_Pointer  block = NULL;
-
-  if ( size > 0 )
-  {
-    block = calloc( 1, size );
-    if ( !block )
-      error = ERR(HB_Err_Out_Of_Memory);
-  }
-
-  *perror = error;
-  return block;
-}
-
-
-HB_INTERNAL HB_Pointer
-_hb_realloc(HB_Pointer  block,
-           size_t      new_size,
-           HB_Error   *perror )
-{
-    HB_Pointer  block2 = NULL;
-    HB_Error    error  = (HB_Error)0;
-
-    block2 = realloc( block, new_size );
-    if ( block2 == NULL && new_size != 0 )
-        error = ERR(HB_Err_Out_Of_Memory);
-
-    if ( !error )
-        block = block2;
-
-    *perror = error;
-    return block;
-}
-
-
-HB_INTERNAL void
-_hb_free( HB_Pointer  block )
-{
-  if ( block )
-    free( block );
-}
-
-
-/* helper func to set a breakpoint on */
-HB_INTERNAL HB_Error
-_hb_err (HB_Error code)
-{
-  return code;
-}
diff --git a/src/hb-old/harfbuzz-impl.h b/src/hb-old/harfbuzz-impl.h
deleted file mode 100644 (file)
index 3f370b6..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_IMPL_H
-#define HARFBUZZ_IMPL_H
-
-#include "harfbuzz-global.h"
-
-#include <stdlib.h>
-
-HB_BEGIN_HEADER
-
-#ifndef HB_INTERNAL
-# ifndef __MINGW32__
-#  define HB_INTERNAL __attribute__((__visibility__("hidden")))
-# else
-#  define HB_INTERNAL
-# endif
-#endif
-
-#ifndef NULL
-# define NULL ((void *)0)
-#endif
-
-#ifndef FALSE
-# define FALSE 0
-#endif
-
-#ifndef TRUE
-# define TRUE 1
-#endif
-
-#ifndef TTAG_GDEF
-# define TTAG_GDEF  HB_MAKE_TAG( 'G', 'D', 'E', 'F' )
-#endif
-#ifndef TTAG_GPOS
-# define TTAG_GPOS  HB_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#endif
-#ifndef TTAG_GSUB
-# define TTAG_GSUB  HB_MAKE_TAG( 'G', 'S', 'U', 'B' )
-#endif
-
-#ifndef HB_UNUSED
-# define HB_UNUSED(arg) ((arg) = (arg))
-#endif
-
-#define HB_LIKELY(cond) (cond)
-#define HB_UNLIKELY(cond) (cond)
-
-#define ARRAY_LEN(Array) ((int)(sizeof (Array) / sizeof (Array)[0]))
-
-
-
-#define HB_IsHighSurrogate(ucs) \
-    (((ucs) & 0xfc00) == 0xd800)
-
-#define HB_IsLowSurrogate(ucs) \
-    (((ucs) & 0xfc00) == 0xdc00)
-
-#define HB_SurrogateToUcs4(high, low) \
-    (((HB_UChar32)(high))<<10) + (low) - 0x35fdc00;
-
-
-
-
-
-#define  ALLOC(_ptr,_size)   \
-           ( (_ptr) = _hb_alloc( _size, &error ), error != 0 )
-
-#define  REALLOC(_ptr,_newsz)  \
-           ( (_ptr) = _hb_realloc( (_ptr), (_newsz), &error ), error != 0 )
-
-#define  FREE(_ptr)                    \
-  do {                                 \
-    if ( (_ptr) )                      \
-    {                                  \
-      _hb_free( _ptr );     \
-      _ptr = NULL;                     \
-    }                                  \
-  } while (0)
-
-#define  ALLOC_ARRAY(_ptr,_count,_type)   \
-           ALLOC(_ptr,(_count)*sizeof(_type))
-
-#define  REALLOC_ARRAY(_ptr,_newcnt,_type) \
-           REALLOC(_ptr,(_newcnt)*sizeof(_type))
-
-#define  MEM_Copy(dest,source,count)   memcpy( (char*)(dest), (const char*)(source), (size_t)(count) )
-
-#define ERR(err)   _hb_err (err)
-
-
-HB_INTERNAL HB_Pointer
-_hb_alloc( size_t    size,
-          HB_Error *perror_ );
-
-HB_INTERNAL HB_Pointer
-_hb_realloc( HB_Pointer block,
-            size_t     new_size,
-            HB_Error  *perror_ );
-
-HB_INTERNAL void
-_hb_free( HB_Pointer block );
-
-
-/* helper func to set a breakpoint on */
-HB_INTERNAL HB_Error
-_hb_err (HB_Error code);
-
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_IMPL_H */
diff --git a/src/hb-old/harfbuzz-indic.cpp b/src/hb-old/harfbuzz-indic.cpp
deleted file mode 100644 (file)
index 17e97e0..0000000
+++ /dev/null
@@ -1,1868 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-#include <stdio.h>
-
-#define FLAG(x) (1 << (x))
-
-static HB_Bool isLetter(HB_UChar16 ucs)
-{
-    const int test = FLAG(HB_Letter_Uppercase) |
-                     FLAG(HB_Letter_Lowercase) |
-                     FLAG(HB_Letter_Titlecase) |
-                     FLAG(HB_Letter_Modifier) |
-                     FLAG(HB_Letter_Other);
-    return !!(FLAG(HB_GetUnicodeCharCategory(ucs)) & test);
-}
-
-static HB_Bool isMark(HB_UChar16 ucs)
-{
-    const int test = FLAG(HB_Mark_NonSpacing) |
-                     FLAG(HB_Mark_SpacingCombining) |
-                     FLAG(HB_Mark_Enclosing);
-    return !!(FLAG(HB_GetUnicodeCharCategory(ucs)) & test);
-}
-
-enum Form {
-    Invalid = 0x0,
-    UnknownForm = Invalid,
-    Consonant,
-    Nukta,
-    Halant,
-    Matra,
-    VowelMark,
-    StressMark,
-    IndependentVowel,
-    LengthMark,
-    Control,
-    Other
-};
-
-static const unsigned char indicForms[0xe00-0x900] = {
-    // Devangari
-    Invalid, VowelMark, VowelMark, VowelMark,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Matra, Matra, Matra,
-    Matra, Matra, Matra, Matra,
-    Matra, Halant, UnknownForm, UnknownForm,
-
-    Other, StressMark, StressMark, StressMark,
-    StressMark, UnknownForm, UnknownForm, UnknownForm,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    IndependentVowel, IndependentVowel, VowelMark, VowelMark,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Consonant,
-    Consonant, Consonant /* ??? */, Consonant, Consonant,
-
-    // Bengali
-    Invalid, VowelMark, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Invalid, Invalid, IndependentVowel,
-
-    IndependentVowel, Invalid, Invalid, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Invalid, Consonant, Invalid,
-    Invalid, Invalid, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Invalid, Invalid, Matra,
-    Matra, Invalid, Invalid, Matra,
-    Matra, Halant, Consonant, UnknownForm,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, VowelMark,
-    Invalid, Invalid, Invalid, Invalid,
-    Consonant, Consonant, Invalid, Consonant,
-
-    IndependentVowel, IndependentVowel, VowelMark, VowelMark,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Consonant, Consonant, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Gurmukhi
-    Invalid, VowelMark, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, Invalid,
-    Invalid, Invalid, Invalid, IndependentVowel,
-
-    IndependentVowel, Invalid, Invalid, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Invalid, Consonant, Consonant,
-    Invalid, Consonant, Consonant, Invalid,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Invalid,
-    Invalid, Invalid, Invalid, Matra,
-    Matra, Invalid, Invalid, Matra,
-    Matra, Halant, UnknownForm, UnknownForm,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, UnknownForm, UnknownForm, UnknownForm,
-    Invalid, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Invalid,
-
-    Other, Other, Invalid, Invalid,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    StressMark, StressMark, Consonant, Consonant,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Gujarati
-    Invalid, VowelMark, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, Invalid, IndependentVowel,
-
-    IndependentVowel, IndependentVowel, Invalid, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Invalid, Consonant, Consonant,
-    Invalid, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Matra, Invalid, Matra,
-    Matra, Matra, Invalid, Matra,
-    Matra, Halant, UnknownForm, UnknownForm,
-
-    Other, UnknownForm, UnknownForm, UnknownForm,
-    UnknownForm, UnknownForm, UnknownForm, UnknownForm,
-    UnknownForm, UnknownForm, UnknownForm, UnknownForm,
-    UnknownForm, UnknownForm, UnknownForm, UnknownForm,
-
-    IndependentVowel, IndependentVowel, VowelMark, VowelMark,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Oriya
-    Invalid, VowelMark, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Invalid, Invalid, IndependentVowel,
-
-    IndependentVowel, Invalid, Invalid, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Invalid, Consonant, Consonant,
-    Invalid, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Invalid, Invalid, Invalid, Matra,
-    Matra, Invalid, Invalid, Matra,
-    Matra, Halant, UnknownForm, UnknownForm,
-
-    Other, Invalid, Invalid, Invalid,
-    Invalid, UnknownForm, LengthMark, LengthMark,
-    Invalid, Invalid, Invalid, Invalid,
-    Consonant, Consonant, Invalid, Consonant,
-
-    IndependentVowel, IndependentVowel, Invalid, Invalid,
-    Invalid, Invalid, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Consonant, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    //Tamil
-    Invalid, Invalid, VowelMark, Other,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, Invalid,
-    Invalid, Invalid, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-    IndependentVowel, Consonant, Invalid, Invalid,
-    Invalid, Consonant, Consonant, Invalid,
-    Consonant, Invalid, Consonant, Consonant,
-
-    Invalid, Invalid, Invalid, Consonant,
-    Consonant, Invalid, Invalid, Invalid,
-    Consonant, Consonant, Consonant, Invalid,
-    Invalid, Invalid, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Invalid, Invalid, Matra, Matra,
-
-    Matra, Matra, Matra, Invalid,
-    Invalid, Invalid, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Halant, Invalid, Invalid,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, LengthMark,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Telugu
-    Invalid, VowelMark, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Invalid, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Invalid, Invalid, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Halant, Invalid, Invalid,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, LengthMark, Matra, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-
-    IndependentVowel, IndependentVowel, Invalid, Invalid,
-    Invalid, Invalid, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Kannada
-    Invalid, Invalid, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Invalid, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Nukta, Other, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Halant, Invalid, Invalid,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, LengthMark, LengthMark, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Consonant, Invalid,
-
-    IndependentVowel, IndependentVowel, VowelMark, VowelMark,
-    Invalid, Invalid, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Malayalam
-    Invalid, Invalid, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, Invalid, IndependentVowel, IndependentVowel,
-    IndependentVowel, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, UnknownForm, UnknownForm,
-    Invalid, Invalid, Matra, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Invalid, Invalid, Matra, Matra,
-    Matra, Invalid, Matra, Matra,
-    Matra, Halant, Invalid, Invalid,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Matra,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-
-    IndependentVowel, IndependentVowel, Invalid, Invalid,
-    Invalid, Invalid, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-
-    // Sinhala
-    Invalid, Invalid, VowelMark, VowelMark,
-    Invalid, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-
-    IndependentVowel, IndependentVowel, IndependentVowel, IndependentVowel,
-    IndependentVowel, IndependentVowel, IndependentVowel, Invalid,
-    Invalid, Invalid, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-
-    Consonant, Consonant, Invalid, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Consonant,
-    Invalid, Consonant, Invalid, Invalid,
-
-    Consonant, Consonant, Consonant, Consonant,
-    Consonant, Consonant, Consonant, Invalid,
-    Invalid, Invalid, Halant, Invalid,
-    Invalid, Invalid, Invalid, Matra,
-
-    Matra, Matra, Matra, Matra,
-    Matra, Invalid, Matra, Invalid,
-    Matra, Matra, Matra, Matra,
-    Matra, Matra, Matra, Matra,
-
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-    Invalid, Invalid, Invalid, Invalid,
-
-    Invalid, Invalid, Matra, Matra,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-    Other, Other, Other, Other,
-};
-
-enum Position {
-    None,
-    Pre,
-    Above,
-    Below,
-    Post,
-    Split,
-    Base,
-    Reph,
-    Vattu,
-    Inherit
-};
-
-static const unsigned char indicPosition[0xe00-0x900] = {
-    // Devanagari
-    None, Above, Above, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    Below, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, Post, Pre,
-
-    Post, Below, Below, Below,
-    Below, Above, Above, Above,
-    Above, Post, Post, Post,
-    Post, None, None, None,
-
-    None, Above, Below, Above,
-    Above, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, Below, Below,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Bengali
-    None, Above, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    Below, None, None, Post,
-
-    Below, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    Below, None, Post, Pre,
-
-    Post, Below, Below, Below,
-    Below, None, None, Pre,
-    Pre, None, None, Split,
-    Split, Below, None, None,
-
-    None, None, None, None,
-    None, None, None, Post,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, Below, Below,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    Below, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Gurmukhi
-    None, Above, Above, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, Post,
-
-    Below, None, None, None,
-    None, Below, None, None,
-    None, Below, None, None,
-    Below, None, Post, Pre,
-
-    Post, Below, Below, None,
-    None, None, None, Above,
-    Above, None, None, Above,
-    Above, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    Above, Above, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Gujarati
-    None, Above, Above, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    Below, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, Post, Pre,
-
-    Post, Below, Below, Below,
-    Below, Above, None, Above,
-    Above, Post, None, Post,
-    Post, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, Below, Below,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Oriya
-    None, Above, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    Below, None, None, None,
-    Below, None, None, None,
-    Below, Below, Below, Post,
-
-    Below, None, Below, Below,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, Post, Above,
-
-    Post, Below, Below, Below,
-    None, None, None, Pre,
-    Split, None, None, Split,
-    Split, None, None, None,
-
-    None, None, None, None,
-    None, None, Above, Post,
-    None, None, None, None,
-    None, None, None, Post,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, Below, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Tamil
-    None, None, Above, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, Post, Post,
-
-    Above, Below, Below, None,
-    None, None, Pre, Pre,
-    Pre, None, Split, Split,
-    Split, Halant, None, None,
-
-    None, None, None, None,
-    None, None, None, Post,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Telugu
-    None, Post, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, Below, Below, Below,
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-    Below, None, Below, Below,
-    Below, Below, Below, Below,
-
-    Below, None, Below, Below,
-    None, Below, Below, Below,
-    Below, Below, None, None,
-    None, None, Post, Above,
-
-    Above, Post, Post, Post,
-    Post, None, Above, Above,
-    Split, None, Post, Above,
-    Above, Halant, None, None,
-
-    None, None, None, None,
-    None, Above, Below, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Kannada
-    None, None, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, Below, Below, Below,
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-    Below, Below, Below, Below,
-
-    Below, None, Below, Below,
-    None, Below, Below, Below,
-    Below, Below, None, None,
-    None, None, Post, Above,
-
-    Split, Post, Post, Post,
-    Post, None, Above, Split,
-    Split, None, Split, Split,
-    Above, Halant, None, None,
-
-    None, None, None, None,
-    None, Post, Post, None,
-    None, None, None, None,
-    None, None, Below, None,
-
-    None, None, Below, Below,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Malayalam
-    None, None, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, Post,
-
-    Post, None, Below, None,
-    None, Post, None, None,
-    None, None, None, None,
-    None, None, Post, Post,
-
-    Post, Post, Post, Post,
-    None, None, Pre, Pre,
-    Pre, None, Split, Split,
-    Split, Halant, None, None,
-
-    None, None, None, None,
-    None, None, None, Post,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    // Sinhala
-    None, None, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, Post,
-
-    Post, Post, Above, Above,
-    Below, None, Below, None,
-    Post, Pre, Split, Pre,
-    Split, Split, Split, Post,
-
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None,
-
-    None, None, Post, Post,
-    None, None, None, None,
-    None, None, None, None,
-    None, None, None, None
-};
-
-static inline Form form(unsigned short uc) {
-    if (uc < 0x900 || uc > 0xdff) {
-        if (uc == 0x25cc)
-            return Consonant;
-        if (uc == 0x200c || uc == 0x200d)
-            return Control;
-        return Other;
-    }
-    return (Form)indicForms[uc-0x900];
-}
-
-static inline Position indic_position(unsigned short uc) {
-    if (uc < 0x900 || uc > 0xdff)
-        return None;
-    return (Position) indicPosition[uc-0x900];
-}
-
-
-enum IndicScriptProperties {
-    HasReph = 0x01,
-    HasSplit = 0x02
-};
-
-const hb_uint8 scriptProperties[10] = {
-    // Devanagari,
-    HasReph,
-    // Bengali,
-    HasReph|HasSplit,
-    // Gurmukhi,
-    0,
-    // Gujarati,
-    HasReph,
-    // Oriya,
-    HasReph|HasSplit,
-    // Tamil,
-    HasSplit,
-    // Telugu,
-    HasSplit,
-    // Kannada,
-    HasSplit|HasReph,
-    // Malayalam,
-    HasSplit,
-    // Sinhala,
-    HasSplit
-};
-
-struct IndicOrdering {
-    Form form;
-    Position position;
-};
-
-static const IndicOrdering devanagari_order [] = {
-    { Consonant, Below },
-    { Matra, Below },
-    { VowelMark, Below },
-    { StressMark, Below },
-    { Matra, Above },
-    { Matra, Post },
-    { Consonant, Reph },
-    { VowelMark, Above },
-    { StressMark, Above },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering bengali_order [] = {
-    { Consonant, Below },
-    { Matra, Below },
-    { Matra, Above },
-    { Consonant, Reph },
-    { VowelMark, Above },
-    { Consonant, Post },
-    { Matra, Post },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering gurmukhi_order [] = {
-    { Consonant, Below },
-    { Matra, Below },
-    { Matra, Above },
-    { Consonant, Post },
-    { Matra, Post },
-    { VowelMark, Above },
-    { (Form)0, None }
-};
-
-static const IndicOrdering tamil_order [] = {
-    { Matra, Above },
-    { Matra, Post },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering telugu_order [] = {
-    { Matra, Above },
-    { Matra, Below },
-    { Matra, Post },
-    { Consonant, Below },
-    { Consonant, Post },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering kannada_order [] = {
-    { Matra, Above },
-    { Matra, Post },
-    { Consonant, Below },
-    { Consonant, Post },
-    { LengthMark, Post },
-    { Consonant, Reph },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering malayalam_order [] = {
-    { Consonant, Below },
-    { Matra, Below },
-    { Consonant, Reph },
-    { Consonant, Post },
-    { Matra, Post },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering sinhala_order [] = {
-    { Matra, Below },
-    { Matra, Above },
-    { Matra, Post },
-    { VowelMark, Post },
-    { (Form)0, None }
-};
-
-static const IndicOrdering * const indic_order[] = {
-    devanagari_order, // Devanagari
-    bengali_order, // Bengali
-    gurmukhi_order, // Gurmukhi
-    devanagari_order, // Gujarati
-    bengali_order, // Oriya
-    tamil_order, // Tamil
-    telugu_order, // Telugu
-    kannada_order, // Kannada
-    malayalam_order, // Malayalam
-    sinhala_order // Sinhala
-};
-
-
-
-// vowel matras that have to be split into two parts.
-static const unsigned short split_matras[]  = {
-    //  matra, split1, split2, split3
-
-    // bengalis
-    0x9cb, 0x9c7, 0x9be, 0x0,
-    0x9cc, 0x9c7, 0x9d7, 0x0,
-    // oriya
-    0xb48, 0xb47, 0xb56, 0x0,
-    0xb4b, 0xb47, 0xb3e, 0x0,
-    0xb4c, 0xb47, 0xb57, 0x0,
-    // tamil
-    0xbca, 0xbc6, 0xbbe, 0x0,
-    0xbcb, 0xbc7, 0xbbe, 0x0,
-    0xbcc, 0xbc6, 0xbd7, 0x0,
-    // telugu
-    0xc48, 0xc46, 0xc56, 0x0,
-    // kannada
-    0xcc0, 0xcbf, 0xcd5, 0x0,
-    0xcc7, 0xcc6, 0xcd5, 0x0,
-    0xcc8, 0xcc6, 0xcd6, 0x0,
-    0xcca, 0xcc6, 0xcc2, 0x0,
-    0xccb, 0xcc6, 0xcc2, 0xcd5,
-    // malayalam
-    0xd4a, 0xd46, 0xd3e, 0x0,
-    0xd4b, 0xd47, 0xd3e, 0x0,
-    0xd4c, 0xd46, 0xd57, 0x0,
-    // sinhala
-    0xdda, 0xdd9, 0xdca, 0x0,
-    0xddc, 0xdd9, 0xdcf, 0x0,
-    0xddd, 0xdd9, 0xdcf, 0xdca,
-    0xdde, 0xdd9, 0xddf, 0x0,
-    0xffff
-};
-
-static inline void splitMatra(unsigned short *reordered, int matra, int &len)
-{
-    unsigned short matra_uc = reordered[matra];
-    //qDebug("matra=%d, reordered[matra]=%x", matra, reordered[matra]);
-
-    const unsigned short *split = split_matras;
-    while (split[0] < matra_uc)
-        split += 4;
-
-    assert(*split == matra_uc);
-    ++split;
-
-    int added_chars = split[2] == 0x0 ? 1 : 2;
-
-    memmove(reordered + matra + added_chars, reordered + matra, (len-matra)*sizeof(unsigned short));
-    reordered[matra] = split[0];
-    reordered[matra+1] = split[1];
-    if(added_chars == 2)
-        reordered[matra+2] = split[2];
-    len += added_chars;
-}
-
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature indic_features[] = {
-    { HB_MAKE_TAG('l', 'o', 'c', 'a'), LocaProperty },
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('i', 'n', 'i', 't'), InitProperty },
-    { HB_MAKE_TAG('n', 'u', 'k', 't'), NuktaProperty },
-    { HB_MAKE_TAG('a', 'k', 'h', 'n'), AkhantProperty },
-    { HB_MAKE_TAG('r', 'p', 'h', 'f'), RephProperty },
-    { HB_MAKE_TAG('b', 'l', 'w', 'f'), BelowFormProperty },
-    { HB_MAKE_TAG('h', 'a', 'l', 'f'), HalfFormProperty },
-    { HB_MAKE_TAG('p', 's', 't', 'f'), PostFormProperty },
-    { HB_MAKE_TAG('c', 'j', 'c', 't'), ConjunctFormProperty },
-    { HB_MAKE_TAG('v', 'a', 't', 'u'), VattuProperty },
-    { HB_MAKE_TAG('p', 'r', 'e', 's'), PreSubstProperty },
-    { HB_MAKE_TAG('b', 'l', 'w', 's'), BelowSubstProperty },
-    { HB_MAKE_TAG('a', 'b', 'v', 's'), AboveSubstProperty },
-    { HB_MAKE_TAG('p', 's', 't', 's'), PostSubstProperty },
-    { HB_MAKE_TAG('h', 'a', 'l', 'n'), HalantProperty },
-    { HB_MAKE_TAG('c', 'a', 'l', 't'), IndicCaltProperty },
-    { 0, 0 }
-};
-#endif
-
-// #define INDIC_DEBUG
-#ifdef INDIC_DEBUG
-#define IDEBUG hb_debug
-#include <stdarg.h>
-
-static void hb_debug(const char *msg, ...)
-{
-    va_list ap;
-    va_start(ap, msg); // use variable arg list
-    vfprintf(stderr, msg, ap);
-    va_end(ap);
-    fprintf(stderr, "\n");
-}
-
-#else
-#define IDEBUG if(0) printf
-#endif
-
-#if 0 //def INDIC_DEBUG
-static QString propertiesToString(int properties)
-{
-    QString res;
-    properties = ~properties;
-    if (properties & LocaProperty)
-        res += "Loca ";
-    if (properties & CcmpProperty)
-        res += "Ccmp ";
-    if (properties & InitProperty)
-        res += "Init ";
-    if (properties & NuktaProperty)
-        res += "Nukta ";
-    if (properties & AkhantProperty)
-        res += "Akhant ";
-    if (properties & RephProperty)
-        res += "Reph ";
-    if (properties & PreFormProperty)
-        res += "PreForm ";
-    if (properties & BelowFormProperty)
-        res += "BelowForm ";
-    if (properties & AboveFormProperty)
-        res += "AboveForm ";
-    if (properties & HalfFormProperty)
-        res += "HalfForm ";
-    if (properties & PostFormProperty)
-        res += "PostForm ";
-    if (properties & ConjunctFormProperty)
-        res += "PostForm ";
-    if (properties & VattuProperty)
-        res += "Vattu ";
-    if (properties & PreSubstProperty)
-        res += "PreSubst ";
-    if (properties & BelowSubstProperty)
-        res += "BelowSubst ";
-    if (properties & AboveSubstProperty)
-        res += "AboveSubst ";
-    if (properties & PostSubstProperty)
-        res += "PostSubst ";
-    if (properties & HalantProperty)
-        res += "Halant ";
-    if (properties & CligProperty)
-        res += "Clig ";
-    if (properties & IndicCaltProperty)
-        res += "Calt ";
-    return res;
-}
-#endif
-
-static bool indic_shape_syllable(HB_Bool openType, HB_ShaperItem *item, bool invalid)
-{
-    HB_Script script = item->item.script;
-    assert(script >= HB_Script_Devanagari && script <= HB_Script_Sinhala);
-    const unsigned short script_base = 0x0900 + 0x80*(script-HB_Script_Devanagari);
-    const unsigned short ra = script_base + 0x30;
-    const unsigned short halant = script_base + 0x4d;
-    const unsigned short nukta = script_base + 0x3c;
-    bool control = false;
-
-    int len = (int)item->item.length;
-    IDEBUG(">>>>> indic shape: from=%d, len=%d invalid=%d", item->item.pos, item->item.length, invalid);
-
-    if ((int)item->num_glyphs < len+4) {
-        item->num_glyphs = len+4;
-        return false;
-    }
-
-    HB_STACKARRAY(HB_UChar16, reordered, len + 4);
-    HB_STACKARRAY(hb_uint8, position, len + 4);
-
-    unsigned char properties = scriptProperties[script-HB_Script_Devanagari];
-
-    if (invalid) {
-        *reordered = 0x25cc;
-        memcpy(reordered+1, item->string + item->item.pos, len*sizeof(HB_UChar16));
-        len++;
-    } else {
-        memcpy(reordered, item->string + item->item.pos, len*sizeof(HB_UChar16));
-    }
-    if (reordered[len-1] == 0x200c) // zero width non joiner
-        len--;
-
-    int i;
-    int base = 0;
-    int reph = -1;
-
-#ifdef INDIC_DEBUG
-    IDEBUG("original:");
-    for (i = 0; i < len; i++) {
-        IDEBUG("    %d: %4x", i, reordered[i]);
-    }
-#endif
-
-    if (len != 1) {
-        HB_UChar16 *uc = reordered;
-        bool beginsWithRa = false;
-
-        // Rule 1: find base consonant
-        //
-        // The shaping engine finds the base consonant of the
-        // syllable, using the following algorithm: starting from the
-        // end of the syllable, move backwards until a consonant is
-        // found that does not have a below-base or post-base form
-        // (post-base forms have to follow below-base forms), or
-        // arrive at the first consonant. The consonant stopped at
-        // will be the base.
-        //
-        //  * If the syllable starts with Ra + H (in a script that has
-        //    'Reph'), Ra is excluded from candidates for base
-        //    consonants.
-        //
-        // * In Kannada and Telugu, the base consonant cannot be
-        //   farther than 3 consonants from the end of the syllable.
-        // #### replace the HasReph property by testing if the feature exists in the font!
-        if (form(*uc) == Consonant || (script == HB_Script_Bengali && form(*uc) == IndependentVowel)) {
-            if ((properties & HasReph) && (len > 2) &&
-                (*uc == ra || *uc == 0x9f0) && *(uc+1) == halant)
-                beginsWithRa = true;
-
-            if (beginsWithRa && form(*(uc+2)) == Control)
-                beginsWithRa = false;
-
-            base = (beginsWithRa ? 2 : 0);
-            IDEBUG("    length = %d, beginsWithRa = %d, base=%d", len, beginsWithRa, base);
-
-            int lastConsonant = 0;
-            int matra = -1;
-            // we remember:
-            // * the last consonant since we need it for rule 2
-            // * the matras position for rule 3 and 4
-
-            // figure out possible base glyphs
-            memset(position, 0, len);
-            if (script == HB_Script_Devanagari || script == HB_Script_Gujarati) {
-                bool vattu = false;
-                for (i = base; i < len; ++i) {
-                    position[i] = form(uc[i]);
-                    if (position[i] == Consonant) {
-                        lastConsonant = i;
-                        vattu = (!vattu && uc[i] == ra);
-                        if (vattu) {
-                            IDEBUG("excluding vattu glyph at %d from base candidates", i);
-                            position[i] = Vattu;
-                        }
-                    } else if (position[i] == Matra) {
-                        matra = i;
-                    }
-                }
-            } else {
-                for (i = base; i < len; ++i) {
-                    position[i] = form(uc[i]);
-                    if (position[i] == Consonant)
-                        lastConsonant = i;
-                    else if (matra < 0 && position[i] == Matra)
-                        matra = i;
-                }
-            }
-            int skipped = 0;
-            Position pos = Post;
-            for (i = len-1; i >= base; i--) {
-                if (position[i] != Consonant && (position[i] != Control || script == HB_Script_Kannada))
-                    continue;
-
-                if (i < len-1 && position[i] == Control && position[i+1] == Consonant) {
-                    base = i+1;
-                    break;
-                }
-
-                Position charPosition = indic_position(uc[i]);
-                if (pos == Post && charPosition == Post) {
-                    pos = Post;
-                } else if ((pos == Post || pos == Below) && charPosition == Below) {
-                    if (script == HB_Script_Devanagari || script == HB_Script_Gujarati)
-                        base = i;
-                    pos = Below;
-                } else {
-                    base = i;
-                    break;
-                }
-                if (skipped == 2 && (script == HB_Script_Kannada || script == HB_Script_Telugu)) {
-                    base = i;
-                    break;
-                }
-                ++skipped;
-            }
-
-            IDEBUG("    base consonant at %d skipped=%d, lastConsonant=%d", base, skipped, lastConsonant);
-
-            // Rule 2:
-            //
-            // If the base consonant is not the last one, Uniscribe
-            // moves the halant from the base consonant to the last
-            // one.
-            if (lastConsonant > base) {
-                int halantPos = 0;
-                if (uc[base+1] == halant)
-                    halantPos = base + 1;
-                else if (uc[base+1] == nukta && uc[base+2] == halant)
-                    halantPos = base + 2;
-                if (halantPos > 0) {
-                    IDEBUG("    moving halant from %d to %d!", base+1, lastConsonant);
-                    for (i = halantPos; i < lastConsonant; i++)
-                        uc[i] = uc[i+1];
-                    uc[lastConsonant] = halant;
-                }
-            }
-
-            // Rule 3:
-            //
-            // If the syllable starts with Ra + H, Uniscribe moves
-            // this combination so that it follows either:
-
-            // * the post-base 'matra' (if any) or the base consonant
-            //   (in scripts that show similarity to Devanagari, i.e.,
-            //   Devanagari, Gujarati, Bengali)
-            // * the base consonant (other scripts)
-            // * the end of the syllable (Kannada)
-
-            Position matra_position = None;
-            if (matra > 0)
-                matra_position = indic_position(uc[matra]);
-            IDEBUG("    matra at %d with form %d, base=%d", matra, matra_position, base);
-
-            if (beginsWithRa && base != 0) {
-                int toPos = base+1;
-                if (toPos < len && uc[toPos] == nukta)
-                    toPos++;
-                if (toPos < len && uc[toPos] == halant)
-                    toPos++;
-                if (toPos < len && uc[toPos] == 0x200d)
-                    toPos++;
-                if (toPos < len-1 && uc[toPos] == ra && uc[toPos+1] == halant)
-                    toPos += 2;
-                if (script == HB_Script_Devanagari || script == HB_Script_Gujarati || script == HB_Script_Bengali) {
-                    if (matra_position == Post || matra_position == Split) {
-                        toPos = matra+1;
-                        matra -= 2;
-                    }
-                } else if (script == HB_Script_Kannada) {
-                    toPos = len;
-                    matra -= 2;
-                }
-
-                IDEBUG("moving leading ra+halant to position %d", toPos);
-                for (i = 2; i < toPos; i++)
-                    uc[i-2] = uc[i];
-                uc[toPos-2] = ra;
-                uc[toPos-1] = halant;
-                base -= 2;
-                if (properties & HasReph)
-                    reph = toPos-2;
-            }
-
-            // Rule 4:
-
-            // Uniscribe splits two- or three-part matras into their
-            // parts. This splitting is a character-to-character
-            // operation).
-            //
-            //      Uniscribe describes some moving operations for these
-            //      matras here. For shaping however all pre matras need
-            //      to be at the beginning of the syllable, so we just move
-            //      them there now.
-            if (matra_position == Split) {
-                splitMatra(uc, matra, len);
-                // Handle three-part matras (0xccb in Kannada)
-                matra_position = indic_position(uc[matra]);
-            }
-
-            if (matra_position == Pre) {
-                unsigned short m = uc[matra];
-                while (matra--)
-                    uc[matra+1] = uc[matra];
-                uc[0] = m;
-                base++;
-            }
-        }
-
-        // Rule 5:
-        //
-        // Uniscribe classifies consonants and 'matra' parts as
-        // pre-base, above-base (Reph), below-base or post-base. This
-        // classification exists on the character code level and is
-        // language-dependent, not font-dependent.
-        for (i = 0; i < base; ++i)
-            position[i] = Pre;
-        position[base] = Base;
-        for (i = base+1; i < len; ++i) {
-            position[i] = indic_position(uc[i]);
-            // #### replace by adjusting table
-            if (uc[i] == nukta || uc[i] == halant)
-                position[i] = Inherit;
-        }
-        if (reph > 0) {
-            // recalculate reph, it might have changed.
-            for (i = base+1; i < len; ++i)
-                if (uc[i] == ra)
-                    reph = i;
-            position[reph] = Reph;
-            position[reph+1] = Inherit;
-        }
-
-        // all reordering happens now to the chars after the base
-        int fixed = base+1;
-        if (fixed < len && uc[fixed] == nukta)
-            fixed++;
-        if (fixed < len && uc[fixed] == halant)
-            fixed++;
-        if (fixed < len && uc[fixed] == 0x200d)
-            fixed++;
-
-#ifdef INDIC_DEBUG
-        for (i = fixed; i < len; ++i)
-            IDEBUG("position[%d] = %d, form=%d uc=%x", i, position[i], form(uc[i]), uc[i]);
-#endif
-        // we continuosly position the matras and vowel marks and increase the fixed
-        // until we reached the end.
-        const IndicOrdering *finalOrder = indic_order[script-HB_Script_Devanagari];
-
-        IDEBUG("    reordering pass:");
-        IDEBUG("        base=%d fixed=%d", base, fixed);
-        int toMove = 0;
-        while (finalOrder[toMove].form && fixed < len-1) {
-            IDEBUG("        fixed = %d, toMove=%d, moving form %d with pos %d", fixed, toMove, finalOrder[toMove].form, finalOrder[toMove].position);
-            for (i = fixed; i < len; i++) {
-//                IDEBUG() << "           i=" << i << "uc=" << hex << uc[i] << "form=" << form(uc[i])
-//                         << "position=" << position[i];
-                if (form(uc[i]) == finalOrder[toMove].form &&
-                     position[i] == finalOrder[toMove].position) {
-                    // need to move this glyph
-                    int to = fixed;
-                    if (i < len-1 && position[i+1] == Inherit) {
-                        IDEBUG("         moving two chars from %d to %d", i, to);
-                        unsigned short ch = uc[i];
-                        unsigned short ch2 = uc[i+1];
-                        unsigned char pos = position[i];
-                        for (int j = i+1; j > to+1; j--) {
-                            uc[j] = uc[j-2];
-                            position[j] = position[j-2];
-                        }
-                        uc[to] = ch;
-                        uc[to+1] = ch2;
-                        position[to] = pos;
-                        position[to+1] = pos;
-                        fixed += 2;
-                    } else {
-                        IDEBUG("         moving one char from %d to %d", i, to);
-                        unsigned short ch = uc[i];
-                        unsigned char pos = position[i];
-                        for (int j = i; j > to; j--) {
-                            uc[j] = uc[j-1];
-                            position[j] = position[j-1];
-                        }
-                        uc[to] = ch;
-                        position[to] = pos;
-                        fixed++;
-                    }
-                }
-            }
-            toMove++;
-        }
-
-    }
-
-    if (reph > 0) {
-        // recalculate reph, it might have changed.
-        for (i = base+1; i < len; ++i)
-            if (reordered[i] == ra)
-                reph = i;
-    }
-
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = item->num_glyphs;
-#endif
-    if (!item->font->klass->convertStringToGlyphIndices(item->font,
-                                                        reordered, len,
-                                                        item->glyphs, &item->num_glyphs,
-                                                        item->item.bidiLevel % 2))
-        goto error;
-
-
-    IDEBUG("  base=%d, reph=%d", base, reph);
-    IDEBUG("reordered:");
-    for (i = 0; i < len; i++) {
-        item->attributes[i].mark = false;
-        item->attributes[i].clusterStart = false;
-        item->attributes[i].justification = 0;
-        item->attributes[i].zeroWidth = false;
-        IDEBUG("    %d: %4x", i, reordered[i]);
-    }
-
-    // now we have the syllable in the right order, and can start running it through open type.
-
-    for (i = 0; i < len; ++i)
-        control |= (form(reordered[i]) == Control);
-
-#ifndef NO_OPENTYPE
-    if (openType) {
-
-        // we need to keep track of where the base glyph is for some
-        // scripts and use the cluster feature for this.  This
-        // also means we have to correct the logCluster output from
-        // the open type engine manually afterwards.  for indic this
-        // is rather simple, as all chars just point to the first
-        // glyph in the syllable.
-        HB_STACKARRAY(unsigned short, clusters, len);
-        HB_STACKARRAY(unsigned int, properties, len);
-
-        for (i = 0; i < len; ++i)
-            clusters[i] = i;
-
-        // features we should always apply
-        for (i = 0; i < len; ++i)
-            properties[i] = ~(LocaProperty
-                              | CcmpProperty
-                              | NuktaProperty
-                              | VattuProperty
-                              | ConjunctFormProperty
-                              | PreSubstProperty
-                              | BelowSubstProperty
-                              | AboveSubstProperty
-                              | PostSubstProperty
-                              | HalantProperty
-                              | IndicCaltProperty
-                              | PositioningProperties);
-
-        // Loca always applies
-        // Ccmp always applies
-        // Init
-        if (item->item.pos == 0
-            || !(isLetter(item->string[item->item.pos-1]) || isMark(item->string[item->item.pos-1])))
-            properties[0] &= ~InitProperty;
-
-        // Nukta always applies
-        // Akhant
-        for (i = 0; i <= base; ++i)
-            properties[i] &= ~AkhantProperty;
-        // Reph
-        if (reph >= 0) {
-            properties[reph] &= ~RephProperty;
-            properties[reph+1] &= ~RephProperty;
-        }
-        // BelowForm
-        for (i = base+1; i < len; ++i)
-            properties[i] &= ~BelowFormProperty;
-
-        if (script == HB_Script_Devanagari || script == HB_Script_Gujarati) {
-            // vattu glyphs need this aswell
-            bool vattu = false;
-            for (i = base-2; i > 1; --i) {
-                if (form(reordered[i]) == Consonant) {
-                    vattu = (!vattu && reordered[i] == ra);
-                    if (vattu) {
-                        IDEBUG("forming vattu ligature at %d", i);
-                        properties[i] &= ~BelowFormProperty;
-                        properties[i+1] &= ~BelowFormProperty;
-                    }
-                }
-            }
-        }
-        // HalfFormProperty
-        for (i = 0; i < base; ++i)
-            properties[i] &= ~HalfFormProperty;
-        if (control) {
-            for (i = 2; i < len; ++i) {
-                if (reordered[i] == 0x200d /* ZWJ */) {
-                    properties[i-1] &= ~HalfFormProperty;
-                    properties[i-2] &= ~HalfFormProperty;
-                } else if (reordered[i] == 0x200c /* ZWNJ */) {
-                    properties[i-1] &= ~HalfFormProperty;
-                    properties[i-2] &= ~HalfFormProperty;
-                }
-            }
-        }
-        // PostFormProperty
-        for (i = base+1; i < len; ++i)
-            properties[i] &= ~PostFormProperty;
-        // vattu always applies
-        // pres always applies
-        // blws always applies
-        // abvs always applies
-        // psts always applies
-        // halant always applies
-        // calt always applies
-
-#ifdef INDIC_DEBUG
-//        {
-//            IDEBUG("OT properties:");
-//            for (int i = 0; i < len; ++i)
-//                qDebug("    i: %s", ::propertiesToString(properties[i]).toLatin1().data());
-//        }
-#endif
-
-        // initialize
-        item->log_clusters = clusters;
-        HB_OpenTypeShape(item, properties);
-
-        int newLen = item->face->buffer->in_length;
-        HB_GlyphItem otl_glyphs = item->face->buffer->in_string;
-
-        // move the left matra back to its correct position in malayalam and tamil
-        if ((script == HB_Script_Malayalam || script == HB_Script_Tamil) && (form(reordered[0]) == Matra)) {
-//             qDebug("reordering matra, len=%d", newLen);
-            // need to find the base in the shaped string and move the matra there
-            int basePos = 0;
-            while (basePos < newLen && (int)otl_glyphs[basePos].cluster <= base)
-                basePos++;
-            --basePos;
-            if (basePos < newLen && basePos > 1) {
-//                 qDebug("moving prebase matra to position %d in syllable newlen=%d", basePos, newLen);
-                HB_GlyphItemRec m = otl_glyphs[0];
-                --basePos;
-                for (i = 0; i < basePos; ++i)
-                    otl_glyphs[i] = otl_glyphs[i+1];
-                otl_glyphs[basePos] = m;
-            }
-        }
-
-        HB_Bool positioned = HB_OpenTypePosition(item, availableGlyphs, false);
-
-        HB_FREE_STACKARRAY(clusters);
-        HB_FREE_STACKARRAY(properties);
-
-        if (!positioned)
-            goto error;
-
-        if (control) {
-            IDEBUG("found a control char in the syllable");
-            hb_uint32 i = 0, j = 0;
-            while (i < item->num_glyphs) {
-                if (form(reordered[otl_glyphs[i].cluster]) == Control) {
-                    ++i;
-                    if (i >= item->num_glyphs)
-                        break;
-                }
-                item->glyphs[j] = item->glyphs[i];
-                item->attributes[j] = item->attributes[i];
-                item->offsets[j] = item->offsets[i];
-                item->advances[j] = item->advances[i];
-                ++i;
-                ++j;
-            }
-            item->num_glyphs = j;
-        }
-
-    } else {
-        HB_HeuristicPosition(item);
-    }
-#endif // NO_OPENTYPE
-    item->attributes[0].clusterStart = true;
-
-    HB_FREE_STACKARRAY(reordered);
-    HB_FREE_STACKARRAY(position);
-
-    IDEBUG("<<<<<<");
-    return true;
-
-error:
-    HB_FREE_STACKARRAY(reordered);
-    HB_FREE_STACKARRAY(position);
-    return false;
-}
-
-/* syllables are of the form:
-
-   (Consonant Nukta? Halant)* Consonant Matra? VowelMark? StressMark?
-   (Consonant Nukta? Halant)* Consonant Halant
-   IndependentVowel VowelMark? StressMark?
-
-   We return syllable boundaries on invalid combinations aswell
-*/
-static int indic_nextSyllableBoundary(HB_Script script, const HB_UChar16 *s, int start, int end, bool *invalid)
-{
-    *invalid = false;
-    IDEBUG("indic_nextSyllableBoundary: start=%d, end=%d", start, end);
-    const HB_UChar16 *uc = s+start;
-
-    int pos = 0;
-    Form state = form(uc[pos]);
-    IDEBUG("state[%d]=%d (uc=%4x)", pos, state, uc[pos]);
-    pos++;
-
-    if (state != Consonant && state != IndependentVowel) {
-        if (state != Other)
-            *invalid = true;
-        goto finish;
-    }
-
-    while (pos < end - start) {
-        Form newState = form(uc[pos]);
-        IDEBUG("state[%d]=%d (uc=%4x)", pos, newState, uc[pos]);
-        switch(newState) {
-        case Control:
-            newState = state;
-           if (state == Halant && uc[pos] == 0x200d /* ZWJ */)
-               break;
-            // the control character should be the last char in the item
-            ++pos;
-            goto finish;
-        case Consonant:
-           if (state == Halant && (script != HB_Script_Sinhala || uc[pos-1] == 0x200d /* ZWJ */))
-                break;
-            goto finish;
-        case Halant:
-            if (state == Nukta || state == Consonant)
-                break;
-            // Bengali has a special exception allowing the combination Vowel_A/E + Halant + Ya
-            if (script == HB_Script_Bengali && pos == 1 &&
-                 (uc[0] == 0x0985 || uc[0] == 0x098f))
-                break;
-            // Sinhala uses the Halant as a component of certain matras. Allow these, but keep the state on Matra.
-            if (script == HB_Script_Sinhala && state == Matra) {
-                ++pos;
-                continue;
-            }
-            if (script == HB_Script_Malayalam && state == Matra && uc[pos-1] == 0x0d41) {
-                ++pos;
-                continue;
-            }
-            goto finish;
-        case Nukta:
-            if (state == Consonant)
-                break;
-            goto finish;
-        case StressMark:
-            if (state == VowelMark)
-                break;
-            // fall through
-        case VowelMark:
-            if (state == Matra || state == LengthMark || state == IndependentVowel)
-                break;
-            // fall through
-        case Matra:
-            if (state == Consonant || state == Nukta)
-                break;
-            if (state == Matra) {
-                // ### needs proper testing for correct two/three part matras
-                break;
-            }
-            // ### not sure if this is correct. If it is, does it apply only to Bengali or should
-            // it work for all Indic languages?
-            // the combination Independent_A + Vowel Sign AA is allowed.
-            if (script == HB_Script_Bengali && uc[pos] == 0x9be && uc[pos-1] == 0x985)
-                break;
-            if (script == HB_Script_Tamil && state == Matra) {
-                if (uc[pos-1] == 0x0bc6 &&
-                     (uc[pos] == 0xbbe || uc[pos] == 0xbd7))
-                    break;
-                if (uc[pos-1] == 0x0bc7 && uc[pos] == 0xbbe)
-                    break;
-            }
-            goto finish;
-
-        case LengthMark:
-            if (state == Matra) {
-                // ### needs proper testing for correct two/three part matras
-                break;
-            }
-        case IndependentVowel:
-        case Invalid:
-        case Other:
-            goto finish;
-        }
-        state = newState;
-        pos++;
-    }
- finish:
-    return pos+start;
-}
-
-HB_Bool HB_IndicShape(HB_ShaperItem *item)
-{
-    assert(item->item.script >= HB_Script_Devanagari && item->item.script <= HB_Script_Sinhala);
-
-    HB_Bool openType = false;
-#ifndef NO_OPENTYPE
-    openType = HB_SelectScript(item, indic_features);
-#endif
-    unsigned short *logClusters = item->log_clusters;
-
-    HB_ShaperItem syllable = *item;
-    int first_glyph = 0;
-
-    int sstart = item->item.pos;
-    int end = sstart + item->item.length;
-    IDEBUG("indic_shape: from %d length %d", item->item.pos, item->item.length);
-    while (sstart < end) {
-        bool invalid;
-        int send = indic_nextSyllableBoundary(item->item.script, item->string, sstart, end, &invalid);
-        IDEBUG("syllable from %d, length %d, invalid=%s", sstart, send-sstart,
-               invalid ? "true" : "false");
-        syllable.item.pos = sstart;
-        syllable.item.length = send-sstart;
-        syllable.glyphs = item->glyphs + first_glyph;
-        syllable.attributes = item->attributes + first_glyph;
-        syllable.offsets = item->offsets + first_glyph;
-        syllable.advances = item->advances + first_glyph;
-        syllable.num_glyphs = item->num_glyphs - first_glyph;
-        if (!indic_shape_syllable(openType, &syllable, invalid)) {
-            IDEBUG("syllable shaping failed, syllable requests %d glyphs", syllable.num_glyphs);
-            item->num_glyphs += syllable.num_glyphs;
-            return false;
-        }
-        // fix logcluster array
-        IDEBUG("syllable:");
-        hb_uint32 g;
-        for (g = first_glyph; g < first_glyph + syllable.num_glyphs; ++g)
-            IDEBUG("        %d -> glyph %x", g, item->glyphs[g]);
-        IDEBUG("    logclusters:");
-        int i;
-        for (i = sstart; i < send; ++i) {
-            IDEBUG("        %d -> glyph %d", i, first_glyph);
-            logClusters[i-item->item.pos] = first_glyph;
-        }
-        sstart = send;
-        first_glyph += syllable.num_glyphs;
-    }
-    item->num_glyphs = first_glyph;
-    return true;
-}
diff --git a/src/hb-old/harfbuzz-khmer.c b/src/hb-old/harfbuzz-khmer.c
deleted file mode 100644 (file)
index 150cbc1..0000000
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-#include <stdio.h>
-
-/*
-//  Vocabulary
-//      Base ->         A consonant or an independent vowel in its full (not subscript) form. It is the
-//                      center of the syllable, it can be surrounded by coeng (subscript) consonants, vowels,
-//                      split vowels, signs... but there is only one base in a syllable, it has to be coded as
-//                      the first character of the syllable.
-//      split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).
-//                      Khmer language has five of them. Khmer split vowels either have one part before the
-//                      base and one after the base or they have a part before the base and a part above the base.
-//                      The first part of all Khmer split vowels is the same character, identical to
-//                      the glyph of Khmer dependent vowel SRA EI
-//      coeng -->  modifier used in Khmer to construct coeng (subscript) consonants
-//                 Differently than indian languages, the coeng modifies the consonant that follows it,
-//                 not the one preceding it  Each consonant has two forms, the base form and the subscript form
-//                 the base form is the normal one (using the consonants code-point), the subscript form is
-//                 displayed when the combination coeng + consonant is encountered.
-//      Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
-//      Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
-//      Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
-//      Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
-//                           if it is attached to a consonant of the first series or a consonant of the second series
-//                           Most consonants have an equivalent in the other series, but some of theme exist only in
-//                           one series (for example SA). If we want to use the consonant SA with a vowel sound that
-//                           can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
-//                           of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
-//                           x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and
-//                           MUSIKATOAN a second series consonant to have a first series vowel sound.
-//                           Consonant shifter are both normally supercript marks, but, when they are followed by a
-//                           superscript, they change shape and take the form of subscript dependent vowel SRA U.
-//                           If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
-//                           should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
-//                           be placed after the coeng consonant.
-//      Dependent vowel ->   In khmer dependent vowels can be placed above, below, before or after the base
-//                           Each vowel has its own position. Only one vowel per syllable is allowed.
-//      Signs            ->  Khmer has above signs and post signs. Only one above sign and/or one post sign are
-//                           Allowed in a syllable.
-//
-//
-//   order is important here! This order must be the same that is found in each horizontal
-//   line in the statetable for Khmer (see khmerStateTable) .
-*/
-enum KhmerCharClassValues {
-    CC_RESERVED             =  0,
-    CC_CONSONANT            =  1, /* Consonant of type 1 or independent vowel */
-    CC_CONSONANT2           =  2, /* Consonant of type 2 */
-    CC_CONSONANT3           =  3, /* Consonant of type 3 */
-    CC_ZERO_WIDTH_NJ_MARK   =  4, /* Zero Width non joiner character (0x200C) */
-    CC_CONSONANT_SHIFTER    =  5,
-    CC_ROBAT                =  6, /* Khmer special diacritic accent -treated differently in state table */
-    CC_COENG                =  7, /* Subscript consonant combining character */
-    CC_DEPENDENT_VOWEL      =  8,
-    CC_SIGN_ABOVE           =  9,
-    CC_SIGN_AFTER           = 10,
-    CC_ZERO_WIDTH_J_MARK    = 11, /* Zero width joiner character */
-    CC_COUNT                = 12  /* This is the number of character classes */
-};
-
-
-enum KhmerCharClassFlags {
-    CF_CLASS_MASK    = 0x0000FFFF,
-
-    CF_CONSONANT     = 0x01000000,  /* flag to speed up comparing */
-    CF_SPLIT_VOWEL   = 0x02000000,  /* flag for a split vowel -> the first part is added in front of the syllable */
-    CF_DOTTED_CIRCLE = 0x04000000,  /* add a dotted circle if a character with this flag is the first in a syllable */
-    CF_COENG         = 0x08000000,  /* flag to speed up comparing */
-    CF_SHIFTER       = 0x10000000,  /* flag to speed up comparing */
-    CF_ABOVE_VOWEL   = 0x20000000,  /* flag to speed up comparing */
-
-    /* position flags */
-    CF_POS_BEFORE    = 0x00080000,
-    CF_POS_BELOW     = 0x00040000,
-    CF_POS_ABOVE     = 0x00020000,
-    CF_POS_AFTER     = 0x00010000,
-    CF_POS_MASK      = 0x000f0000
-};
-
-
-/* Characters that get referred to by name */
-enum KhmerChar {
-    C_SIGN_ZWNJ     = 0x200C,
-    C_SIGN_ZWJ      = 0x200D,
-    C_RO            = 0x179A,
-    C_VOWEL_AA      = 0x17B6,
-    C_SIGN_NIKAHIT  = 0x17C6,
-    C_VOWEL_E       = 0x17C1,
-    C_COENG         = 0x17D2
-};
-
-
-/*
-//  simple classes, they are used in the statetable (in this file) to control the length of a syllable
-//  they are also used to know where a character should be placed (location in reference to the base character)
-//  and also to know if a character, when independently displayed, should be displayed with a dotted-circle to
-//  indicate error in syllable construction
-*/
-enum {
-    _xx = CC_RESERVED,
-    _sa = CC_SIGN_ABOVE | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
-    _sp = CC_SIGN_AFTER | CF_DOTTED_CIRCLE| CF_POS_AFTER,
-    _c1 = CC_CONSONANT | CF_CONSONANT,
-    _c2 = CC_CONSONANT2 | CF_CONSONANT,
-    _c3 = CC_CONSONANT3 | CF_CONSONANT,
-    _rb = CC_ROBAT | CF_POS_ABOVE | CF_DOTTED_CIRCLE,
-    _cs = CC_CONSONANT_SHIFTER | CF_DOTTED_CIRCLE | CF_SHIFTER,
-    _dl = CC_DEPENDENT_VOWEL | CF_POS_BEFORE | CF_DOTTED_CIRCLE,
-    _db = CC_DEPENDENT_VOWEL | CF_POS_BELOW | CF_DOTTED_CIRCLE,
-    _da = CC_DEPENDENT_VOWEL | CF_POS_ABOVE | CF_DOTTED_CIRCLE | CF_ABOVE_VOWEL,
-    _dr = CC_DEPENDENT_VOWEL | CF_POS_AFTER | CF_DOTTED_CIRCLE,
-    _co = CC_COENG | CF_COENG | CF_DOTTED_CIRCLE,
-
-    /* split vowel */
-    _va = _da | CF_SPLIT_VOWEL,
-    _vr = _dr | CF_SPLIT_VOWEL
-};
-
-
-/*
-//   Character class: a character class value
-//   ORed with character class flags.
-*/
-typedef unsigned long KhmerCharClass;
-
-
-/*
-//  Character class tables
-//  _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs...
-//  _sa Sign placed above the base
-//  _sp Sign placed after the base
-//  _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
-//  _c2 Consonant of type 2 (only RO)
-//  _c3 Consonant of type 3
-//  _rb Khmer sign robat u17CC. combining mark for subscript consonants
-//  _cd Consonant-shifter
-//  _dl Dependent vowel placed before the base (left of the base)
-//  _db Dependent vowel placed below the base
-//  _da Dependent vowel placed above the base
-//  _dr Dependent vowel placed behind the base (right of the base)
-//  _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following
-//      it to create a subscript consonant or independent vowel
-//  _va Khmer split vowel in which the first part is before the base and the second one above the base
-//  _vr Khmer split vowel in which the first part is before the base and the second one behind (right of) the base
-*/
-static const KhmerCharClass khmerCharClasses[] = {
-    _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, /* 1780 - 178F */
-    _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, /* 1790 - 179F */
-    _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, /* 17A0 - 17AF */
-    _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, /* 17B0 - 17BF */
-    _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, /* 17C0 - 17CF */
-    _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx  /* 17D0 - 17DF */
-};
-
-/* this enum must reflect the range of khmerCharClasses */
-enum KhmerCharClassesRange {
-    KhmerFirstChar = 0x1780,
-    KhmerLastChar  = 0x17df
-};
-
-/*
-//  Below we define how a character in the input string is either in the khmerCharClasses table
-//  (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear
-//  within the syllable, but are not in the table) we also get their type back, or an unknown object
-//  in which case we get _xx (CC_RESERVED) back
-*/
-static KhmerCharClass getKhmerCharClass(HB_UChar16 uc)
-{
-    if (uc == C_SIGN_ZWJ) {
-        return CC_ZERO_WIDTH_J_MARK;
-    }
-
-    if (uc == C_SIGN_ZWNJ) {
-        return CC_ZERO_WIDTH_NJ_MARK;
-    }
-
-    if (uc < KhmerFirstChar || uc > KhmerLastChar) {
-        return CC_RESERVED;
-    }
-
-    return khmerCharClasses[uc - KhmerFirstChar];
-}
-
-
-/*
-//  The stateTable is used to calculate the end (the length) of a well
-//  formed Khmer Syllable.
-//
-//  Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
-//  CharClassValues. This coincidence of values allows the follow up of the table.
-//
-//  Each line corresponds to a state, which does not necessarily need to be a type
-//  of component... for example, state 2 is a base, with is always a first character
-//  in the syllable, but the state could be produced a consonant of any type when
-//  it is the first character that is analysed (in ground state).
-//
-//  Differentiating 3 types of consonants is necessary in order to
-//  forbid the use of certain combinations, such as having a second
-//  coeng after a coeng RO,
-//  The inexistent possibility of having a type 3 after another type 3 is permitted,
-//  eliminating it would very much complicate the table, and it does not create typing
-//  problems, as the case above.
-//
-//  The table is quite complex, in order to limit the number of coeng consonants
-//  to 2 (by means of the table).
-//
-//  There a peculiarity, as far as Unicode is concerned:
-//  - The consonant-shifter is considered in two possible different
-//    locations, the one considered in Unicode 3.0 and the one considered in
-//    Unicode 4.0. (there is a backwards compatibility problem in this standard).
-//
-//
-//  xx    independent character, such as a number, punctuation sign or non-khmer char
-//
-//  c1    Khmer consonant of type 1 or an independent vowel
-//        that is, a letter in which the subscript for is only under the
-//        base, not taking any space to the right or to the left
-//
-//  c2    Khmer consonant of type 2, the coeng form takes space under
-//        and to the left of the base (only RO is of this type)
-//
-//  c3    Khmer consonant of type 3. Its subscript form takes space under
-//        and to the right of the base.
-//
-//  cs    Khmer consonant shifter
-//
-//  rb    Khmer robat
-//
-//  co    coeng character (u17D2)
-//
-//  dv    dependent vowel (including split vowels, they are treated in the same way).
-//        even if dv is not defined above, the component that is really tested for is
-//        KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
-//
-//  zwj   Zero Width joiner
-//
-//  zwnj  Zero width non joiner
-//
-//  sa    above sign
-//
-//  sp    post sign
-//
-//  there are lines with equal content but for an easier understanding
-//  (and maybe change in the future) we did not join them
-*/
-static const signed char khmerStateTable[][CC_COUNT] =
-{
-    /* xx  c1  c2  c3 zwnj cs  rb  co  dv  sa  sp zwj */
-    { 1,  2,  2,  2,  1,  1,  1,  6,  1,  1,  1,  2}, /*  0 - ground state */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /*  1 - exit state (or sign to the right of the syllable) */
-    {-1, -1, -1, -1,  3,  4,  5,  6, 16, 17,  1, -1}, /*  2 - Base consonant */
-    {-1, -1, -1, -1, -1,  4, -1, -1, 16, -1, -1, -1}, /*  3 - First ZWNJ before a register shifter It can only be followed by a shifter or a vowel */
-    {-1, -1, -1, -1, 15, -1, -1,  6, 16, 17,  1, 14}, /*  4 - First register shifter */
-    {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1,  1, -1}, /*  5 - Robat */
-    {-1,  7,  8,  9, -1, -1, -1, -1, -1, -1, -1, -1}, /*  6 - First Coeng */
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, /*  7 - First consonant of type 1 after coeng */
-    {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17,  1, 14}, /*  8 - First consonant of type 2 after coeng */
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, /*  9 - First consonant or type 3 after ceong */
-    {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, /* 10 - Second Coeng (no register shifter before) */
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, /* 11 - Second coeng consonant (or ind. vowel) no register shifter before */
-    {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, /* 12 - Second ZWNJ before a register shifter */
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, /* 13 - Second register shifter */
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, /* 14 - ZWJ before vowel */
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, /* 15 - ZWNJ before vowel */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17,  1, 18}, /* 16 - dependent vowel */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, 18}, /* 17 - sign above */
-    {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, /* 18 - ZWJ after vowel */
-    {-1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19 - Third coeng */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1}, /* 20 - dependent vowel after a Robat */
-};
-
-
-/*  #define KHMER_DEBUG */
-#ifdef KHMER_DEBUG
-#define KHDEBUG qDebug
-#else
-#define KHDEBUG if(0) printf
-#endif
-
-/*
-//  Given an input string of characters and a location in which to start looking
-//  calculate, using the state table, which one is the last character of the syllable
-//  that starts in the starting position.
-*/
-static int khmer_nextSyllableBoundary(const HB_UChar16 *s, int start, int end, HB_Bool *invalid)
-{
-    const HB_UChar16 *uc = s + start;
-    int state = 0;
-    int pos = start;
-    *invalid = FALSE;
-
-    while (pos < end) {
-        KhmerCharClass charClass = getKhmerCharClass(*uc);
-        if (pos == start) {
-            *invalid = (charClass > 0) && ! (charClass & CF_CONSONANT);
-        }
-        state = khmerStateTable[state][charClass & CF_CLASS_MASK];
-
-        KHDEBUG("state[%d]=%d class=%8lx (uc=%4x)", pos - start, state,
-                charClass, *uc );
-
-        if (state < 0) {
-            break;
-        }
-        ++uc;
-        ++pos;
-    }
-    return pos;
-}
-
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature khmer_features[] = {
-    { HB_MAKE_TAG( 'p', 'r', 'e', 'f' ), PreFormProperty },
-    { HB_MAKE_TAG( 'b', 'l', 'w', 'f' ), BelowFormProperty },
-    { HB_MAKE_TAG( 'a', 'b', 'v', 'f' ), AboveFormProperty },
-    { HB_MAKE_TAG( 'p', 's', 't', 'f' ), PostFormProperty },
-    { HB_MAKE_TAG( 'p', 'r', 'e', 's' ), PreSubstProperty },
-    { HB_MAKE_TAG( 'b', 'l', 'w', 's' ), BelowSubstProperty },
-    { HB_MAKE_TAG( 'a', 'b', 'v', 's' ), AboveSubstProperty },
-    { HB_MAKE_TAG( 'p', 's', 't', 's' ), PostSubstProperty },
-    { HB_MAKE_TAG( 'c', 'l', 'i', 'g' ), CligProperty },
-    { 0, 0 }
-};
-#endif
-
-
-static HB_Bool khmer_shape_syllable(HB_Bool openType, HB_ShaperItem *item)
-{
-/*    KHDEBUG("syllable from %d len %d, str='%s'", item->from, item->length,
-           item->string->mid(item->from, item->length).toUtf8().data()); */
-
-    int len = 0;
-    int syllableEnd = item->item.pos + item->item.length;
-    unsigned short reordered[16];
-    unsigned char properties[16];
-    enum {
-       AboveForm = 0x01,
-       PreForm = 0x02,
-       PostForm = 0x04,
-       BelowForm = 0x08
-    };
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = item->num_glyphs;
-#endif
-    int coengRo;
-    int i;
-
-    /* according to the specs this is the max length one can get
-       ### the real value should be smaller */
-    assert(item->item.length < 13);
-
-    memset(properties, 0, 16*sizeof(unsigned char));
-
-#ifdef KHMER_DEBUG
-    qDebug("original:");
-    for (int i = from; i < syllableEnd; i++) {
-        qDebug("    %d: %4x", i, string[i]);
-    }
-#endif
-
-    /*
-    // write a pre vowel or the pre part of a split vowel first
-    // and look out for coeng + ro. RO is the only vowel of type 2, and
-    // therefore the only one that requires saving space before the base.
-    */
-    coengRo = -1;  /* There is no Coeng Ro, if found this value will change */
-    for (i = item->item.pos; i < syllableEnd; i += 1) {
-        KhmerCharClass charClass = getKhmerCharClass(item->string[i]);
-
-        /* if a split vowel, write the pre part. In Khmer the pre part
-           is the same for all split vowels, same glyph as pre vowel C_VOWEL_E */
-        if (charClass & CF_SPLIT_VOWEL) {
-            reordered[len] = C_VOWEL_E;
-            properties[len] = PreForm;
-            ++len;
-            break; /* there can be only one vowel */
-        }
-        /* if a vowel with pos before write it out */
-        if (charClass & CF_POS_BEFORE) {
-            reordered[len] = item->string[i];
-            properties[len] = PreForm;
-            ++len;
-            break; /* there can be only one vowel */
-        }
-        /* look for coeng + ro and remember position
-           works because coeng + ro is always in front of a vowel (if there is a vowel)
-           and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
-           with this flag */
-        if ( (charClass & CF_COENG) && (i + 1 < syllableEnd) &&
-              ( (getKhmerCharClass(item->string[i+1]) & CF_CLASS_MASK) == CC_CONSONANT2) ) {
-            coengRo = i;
-        }
-    }
-
-    /* write coeng + ro if found */
-    if (coengRo > -1) {
-        reordered[len] = C_COENG;
-        properties[len] = PreForm;
-        ++len;
-        reordered[len] = C_RO;
-        properties[len] = PreForm;
-        ++len;
-    }
-
-    /*
-       shall we add a dotted circle?
-       If in the position in which the base should be (first char in the string) there is
-       a character that has the Dotted circle flag (a character that cannot be a base)
-       then write a dotted circle */
-    if (getKhmerCharClass(item->string[item->item.pos]) & CF_DOTTED_CIRCLE) {
-        reordered[len] = C_DOTTED_CIRCLE;
-        ++len;
-    }
-
-    /* copy what is left to the output, skipping before vowels and
-       coeng Ro if they are present */
-    for (i = item->item.pos; i < syllableEnd; i += 1) {
-        HB_UChar16 uc = item->string[i];
-        KhmerCharClass charClass = getKhmerCharClass(uc);
-
-        /* skip a before vowel, it was already processed */
-        if (charClass & CF_POS_BEFORE) {
-            continue;
-        }
-
-        /* skip coeng + ro, it was already processed */
-        if (i == coengRo) {
-            i += 1;
-            continue;
-        }
-
-        switch (charClass & CF_POS_MASK)
-        {
-            case CF_POS_ABOVE :
-                reordered[len] = uc;
-                properties[len] = AboveForm;
-                ++len;
-                break;
-
-            case CF_POS_AFTER :
-                reordered[len] = uc;
-                properties[len] = PostForm;
-                ++len;
-                break;
-
-            case CF_POS_BELOW :
-                reordered[len] = uc;
-                properties[len] = BelowForm;
-                ++len;
-                break;
-
-            default:
-                /* assign the correct flags to a coeng consonant
-                   Consonants of type 3 are taged as Post forms and those type 1 as below forms */
-                if ( (charClass & CF_COENG) && i + 1 < syllableEnd ) {
-                    unsigned char property = (getKhmerCharClass(item->string[i+1]) & CF_CLASS_MASK) == CC_CONSONANT3 ?
-                                              PostForm : BelowForm;
-                    reordered[len] = uc;
-                    properties[len] = property;
-                    ++len;
-                    i += 1;
-                    reordered[len] = item->string[i];
-                    properties[len] = property;
-                    ++len;
-                    break;
-                }
-
-                /* if a shifter is followed by an above vowel change the shifter to below form,
-                   an above vowel can have two possible positions i + 1 or i + 3
-                   (position i+1 corresponds to unicode 3, position i+3 to Unicode 4)
-                   and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
-                   different positions, right after the shifter or after a vowel (Unicode 4) */
-                if ( (charClass & CF_SHIFTER) && (i + 1 < syllableEnd) ) {
-                    if (getKhmerCharClass(item->string[i+1]) & CF_ABOVE_VOWEL ) {
-                        reordered[len] = uc;
-                        properties[len] = BelowForm;
-                        ++len;
-                        break;
-                    }
-                    if (i + 2 < syllableEnd &&
-                        (item->string[i+1] == C_VOWEL_AA) &&
-                        (item->string[i+2] == C_SIGN_NIKAHIT) )
-                    {
-                        reordered[len] = uc;
-                        properties[len] = BelowForm;
-                        ++len;
-                        break;
-                    }
-                    if (i + 3 < syllableEnd && (getKhmerCharClass(item->string[i+3]) & CF_ABOVE_VOWEL) ) {
-                        reordered[len] = uc;
-                        properties[len] = BelowForm;
-                        ++len;
-                        break;
-                    }
-                    if (i + 4 < syllableEnd &&
-                        (item->string[i+3] == C_VOWEL_AA) &&
-                        (item->string[i+4] == C_SIGN_NIKAHIT) )
-                    {
-                        reordered[len] = uc;
-                        properties[len] = BelowForm;
-                        ++len;
-                        break;
-                    }
-                }
-
-                /* default - any other characters */
-                reordered[len] = uc;
-                ++len;
-                break;
-        } /* switch */
-    } /* for */
-
-    if (!item->font->klass->convertStringToGlyphIndices(item->font,
-                                                        reordered, len,
-                                                        item->glyphs, &item->num_glyphs,
-                                                        item->item.bidiLevel % 2))
-        return FALSE;
-
-
-    KHDEBUG("after shaping: len=%d", len);
-    for (i = 0; i < len; i++) {
-       item->attributes[i].mark = FALSE;
-       item->attributes[i].clusterStart = FALSE;
-       item->attributes[i].justification = 0;
-       item->attributes[i].zeroWidth = FALSE;
-       KHDEBUG("    %d: %4x property=%x", i, reordered[i], properties[i]);
-    }
-
-    /* now we have the syllable in the right order, and can start running it through open type. */
-
-#ifndef NO_OPENTYPE
-    if (openType) {
-       hb_uint32 where[16];
-        for (i = 0; i < len; ++i) {
-            where[i] = ~(PreSubstProperty
-                         | BelowSubstProperty
-                         | AboveSubstProperty
-                         | PostSubstProperty
-                         | CligProperty
-                         | PositioningProperties);
-            if (properties[i] == PreForm)
-                where[i] &= ~PreFormProperty;
-            else if (properties[i] == BelowForm)
-                where[i] &= ~BelowFormProperty;
-            else if (properties[i] == AboveForm)
-                where[i] &= ~AboveFormProperty;
-            else if (properties[i] == PostForm)
-                where[i] &= ~PostFormProperty;
-        }
-
-        HB_OpenTypeShape(item, where);
-        if (!HB_OpenTypePosition(item, availableGlyphs, /*doLogClusters*/FALSE))
-            return FALSE;
-    } else
-#endif
-    {
-       KHDEBUG("Not using openType");
-        HB_HeuristicPosition(item);
-    }
-
-    item->attributes[0].clusterStart = TRUE;
-    return TRUE;
-}
-
-HB_Bool HB_KhmerShape(HB_ShaperItem *item)
-{
-    HB_Bool openType = FALSE;
-    unsigned short *logClusters = item->log_clusters;
-    int i;
-
-    HB_ShaperItem syllable = *item;
-    int first_glyph = 0;
-
-    int sstart = item->item.pos;
-    int end = sstart + item->item.length;
-
-    assert(item->item.script == HB_Script_Khmer);
-
-#ifndef NO_OPENTYPE
-    openType = HB_SelectScript(item, khmer_features);
-#endif
-
-    KHDEBUG("khmer_shape: from %d length %d", item->item.pos, item->item.length);
-    while (sstart < end) {
-        HB_Bool invalid;
-        int send = khmer_nextSyllableBoundary(item->string, sstart, end, &invalid);
-        KHDEBUG("syllable from %d, length %d, invalid=%s", sstart, send-sstart,
-               invalid ? "TRUE" : "FALSE");
-        syllable.item.pos = sstart;
-        syllable.item.length = send-sstart;
-        syllable.glyphs = item->glyphs + first_glyph;
-        syllable.attributes = item->attributes + first_glyph;
-        syllable.offsets = item->offsets + first_glyph;
-        syllable.advances = item->advances + first_glyph;
-        syllable.num_glyphs = item->num_glyphs - first_glyph;
-        if (!khmer_shape_syllable(openType, &syllable)) {
-            KHDEBUG("syllable shaping failed, syllable requests %d glyphs", syllable.num_glyphs);
-            item->num_glyphs += syllable.num_glyphs;
-            return FALSE;
-        }
-        /* fix logcluster array */
-        KHDEBUG("syllable:");
-        for (i = first_glyph; i < first_glyph + (int)syllable.num_glyphs; ++i)
-            KHDEBUG("        %d -> glyph %x", i, item->glyphs[i]);
-        KHDEBUG("    logclusters:");
-        for (i = sstart; i < send; ++i) {
-            KHDEBUG("        %d -> glyph %d", i, first_glyph);
-            logClusters[i-item->item.pos] = first_glyph;
-        }
-        sstart = send;
-        first_glyph += syllable.num_glyphs;
-    }
-    item->num_glyphs = first_glyph;
-    return TRUE;
-}
diff --git a/src/hb-old/harfbuzz-myanmar.c b/src/hb-old/harfbuzz-myanmar.c
deleted file mode 100644 (file)
index 51ec14b..0000000
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-#include <stdio.h>
-
-enum MymrCharClassValues
-{
-    Mymr_CC_RESERVED             =  0,
-    Mymr_CC_CONSONANT            =  1, /* Consonant of type 1, that has subscript form */
-    Mymr_CC_CONSONANT2           =  2, /* Consonant of type 2, that has no subscript form */
-    Mymr_CC_NGA                  =  3, /* Consonant NGA */
-    Mymr_CC_YA                   =  4, /* Consonant YA */
-    Mymr_CC_RA                   =  5, /* Consonant RA */
-    Mymr_CC_WA                   =  6, /* Consonant WA */
-    Mymr_CC_HA                   =  7, /* Consonant HA */
-    Mymr_CC_IND_VOWEL            =  8, /* Independent vowel */
-    Mymr_CC_ZERO_WIDTH_NJ_MARK   =  9, /* Zero Width non joiner character (0x200C) */
-    Mymr_CC_VIRAMA               = 10, /* Subscript consonant combining character */
-    Mymr_CC_PRE_VOWEL            = 11, /* Dependent vowel, prebase (Vowel e) */
-    Mymr_CC_BELOW_VOWEL          = 12, /* Dependent vowel, prebase (Vowel u, uu) */
-    Mymr_CC_ABOVE_VOWEL          = 13, /* Dependent vowel, prebase (Vowel i, ii, ai) */
-    Mymr_CC_POST_VOWEL           = 14, /* Dependent vowel, prebase (Vowel aa) */
-    Mymr_CC_SIGN_ABOVE           = 15,
-    Mymr_CC_SIGN_BELOW           = 16,
-    Mymr_CC_SIGN_AFTER           = 17,
-    Mymr_CC_ZERO_WIDTH_J_MARK    = 18, /* Zero width joiner character */
-    Mymr_CC_COUNT                = 19  /* This is the number of character classes */
-};
-
-enum MymrCharClassFlags
-{
-    Mymr_CF_CLASS_MASK    = 0x0000FFFF,
-
-    Mymr_CF_CONSONANT     = 0x01000000,  /* flag to speed up comparing */
-    Mymr_CF_MEDIAL        = 0x02000000,  /* flag to speed up comparing */
-    Mymr_CF_IND_VOWEL     = 0x04000000,  /* flag to speed up comparing */
-    Mymr_CF_DEP_VOWEL     = 0x08000000,  /* flag to speed up comparing */
-    Mymr_CF_DOTTED_CIRCLE = 0x10000000,  /* add a dotted circle if a character with this flag is the first in a syllable */
-    Mymr_CF_VIRAMA        = 0x20000000,  /* flag to speed up comparing */
-
-    /* position flags */
-    Mymr_CF_POS_BEFORE    = 0x00080000,
-    Mymr_CF_POS_BELOW     = 0x00040000,
-    Mymr_CF_POS_ABOVE     = 0x00020000,
-    Mymr_CF_POS_AFTER     = 0x00010000,
-    Mymr_CF_POS_MASK      = 0x000f0000,
-
-    Mymr_CF_AFTER_KINZI   = 0x00100000
-};
-
-/* Characters that get refrered to by name */
-enum MymrChar
-{
-    Mymr_C_SIGN_ZWNJ     = 0x200C,
-    Mymr_C_SIGN_ZWJ      = 0x200D,
-    Mymr_C_DOTTED_CIRCLE = 0x25CC,
-    Mymr_C_RA            = 0x101B,
-    Mymr_C_YA            = 0x101A,
-    Mymr_C_NGA           = 0x1004,
-    Mymr_C_VOWEL_E       = 0x1031,
-    Mymr_C_VIRAMA        = 0x1039
-};
-
-enum
-{
-    Mymr_xx = Mymr_CC_RESERVED,
-    Mymr_c1 = Mymr_CC_CONSONANT | Mymr_CF_CONSONANT | Mymr_CF_POS_BELOW,
-    Mymr_c2 = Mymr_CC_CONSONANT2 | Mymr_CF_CONSONANT,
-    Mymr_ng = Mymr_CC_NGA | Mymr_CF_CONSONANT | Mymr_CF_POS_ABOVE,
-    Mymr_ya = Mymr_CC_YA | Mymr_CF_CONSONANT | Mymr_CF_MEDIAL | Mymr_CF_POS_AFTER | Mymr_CF_AFTER_KINZI,
-    Mymr_ra = Mymr_CC_RA | Mymr_CF_CONSONANT | Mymr_CF_MEDIAL | Mymr_CF_POS_BEFORE,
-    Mymr_wa = Mymr_CC_WA | Mymr_CF_CONSONANT | Mymr_CF_MEDIAL | Mymr_CF_POS_BELOW,
-    Mymr_ha = Mymr_CC_HA | Mymr_CF_CONSONANT | Mymr_CF_MEDIAL | Mymr_CF_POS_BELOW,
-    Mymr_id = Mymr_CC_IND_VOWEL | Mymr_CF_IND_VOWEL,
-    Mymr_vi = Mymr_CC_VIRAMA | Mymr_CF_VIRAMA | Mymr_CF_POS_ABOVE | Mymr_CF_DOTTED_CIRCLE,
-    Mymr_dl = Mymr_CC_PRE_VOWEL | Mymr_CF_DEP_VOWEL | Mymr_CF_POS_BEFORE | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_AFTER_KINZI,
-    Mymr_db = Mymr_CC_BELOW_VOWEL | Mymr_CF_DEP_VOWEL | Mymr_CF_POS_BELOW | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_AFTER_KINZI,
-    Mymr_da = Mymr_CC_ABOVE_VOWEL | Mymr_CF_DEP_VOWEL | Mymr_CF_POS_ABOVE | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_AFTER_KINZI,
-    Mymr_dr = Mymr_CC_POST_VOWEL | Mymr_CF_DEP_VOWEL | Mymr_CF_POS_AFTER | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_AFTER_KINZI,
-    Mymr_sa = Mymr_CC_SIGN_ABOVE | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_POS_ABOVE | Mymr_CF_AFTER_KINZI,
-    Mymr_sb = Mymr_CC_SIGN_BELOW | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_POS_BELOW | Mymr_CF_AFTER_KINZI,
-    Mymr_sp = Mymr_CC_SIGN_AFTER | Mymr_CF_DOTTED_CIRCLE | Mymr_CF_AFTER_KINZI
-};
-
-
-typedef int MymrCharClass;
-
-
-static const MymrCharClass mymrCharClasses[] =
-{
-    Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_ng, Mymr_c1, Mymr_c1, Mymr_c1,
-    Mymr_c1, Mymr_c1, Mymr_c2, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, /* 1000 - 100F */
-    Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1, Mymr_c1,
-    Mymr_c1, Mymr_c1, Mymr_ya, Mymr_ra, Mymr_c1, Mymr_wa, Mymr_c1, Mymr_ha, /* 1010 - 101F */
-    Mymr_c2, Mymr_c2, Mymr_xx, Mymr_id, Mymr_id, Mymr_id, Mymr_id, Mymr_id,
-    Mymr_xx, Mymr_id, Mymr_id, Mymr_xx, Mymr_dr, Mymr_da, Mymr_da, Mymr_db, /* 1020 - 102F */
-    Mymr_db, Mymr_dl, Mymr_da, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_sa, Mymr_sb,
-    Mymr_sp, Mymr_vi, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, /* 1030 - 103F */
-    Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx,
-    Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, /* 1040 - 104F */
-    Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx,
-    Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, Mymr_xx, /* 1050 - 105F */
-};
-
-static MymrCharClass
-getMyanmarCharClass (HB_UChar16 ch)
-{
-    if (ch == Mymr_C_SIGN_ZWJ)
-        return Mymr_CC_ZERO_WIDTH_J_MARK;
-
-    if (ch == Mymr_C_SIGN_ZWNJ)
-        return Mymr_CC_ZERO_WIDTH_NJ_MARK;
-
-    if (ch < 0x1000 || ch > 0x105f)
-        return Mymr_CC_RESERVED;
-
-    return mymrCharClasses[ch - 0x1000];
-}
-
-static const signed char mymrStateTable[][Mymr_CC_COUNT] =
-{
-/*   xx  c1, c2  ng  ya  ra  wa  ha  id zwnj vi  dl  db  da  dr  sa  sb  sp zwj */
-    { 1,  4,  4,  2,  4,  4,  4,  4, 24,  1, 27, 17, 18, 19, 20, 21,  1,  1,  4}, /*  0 - ground state */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /*  1 - exit state (or sp to the right of the syllable) */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  3, 17, 18, 19, 20, 21, -1, -1,  4}, /*  2 - NGA */
-    {-1,  4,  4,  4,  4,  4,  4,  4, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /*  3 - Virama after NGA */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  5, 17, 18, 19, 20, 21,  1,  1, -1}, /*  4 - Base consonant */
-    {-2,  6, -2, -2,  7,  8,  9, 10, -2, 23, -2, -2, -2, -2, -2, -2, -2, -2, -2}, /*  5 - First virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 17, 18, 19, 20, 21, -1, -1, -1}, /*  6 - c1 after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1}, /*  7 - ya after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1}, /*  8 - ra after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1}, /*  9 - wa after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1}, /* 10 - ha after virama */
-    {-1, -1, -1, -1,  7,  8,  9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 11 - Virama after NGA+zwj */
-    {-2, -2, -2, -2, -2, -2, 13, 14, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2}, /* 12 - Second virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 18, 19, 20, 21, -1, -1, -1}, /* 13 - wa after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1}, /* 14 - ha after virama */
-    {-2, -2, -2, -2, -2, -2, -2, 16, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2}, /* 15 - Third virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1}, /* 16 - ha after virama */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, 21,  1,  1, -1}, /* 17 - dl, Dependent vowel e */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, 21,  1,  1, -1}, /* 18 - db, Dependent vowel u,uu */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1,  1,  1, -1}, /* 19 - da, Dependent vowel i,ii,ai */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1,  1,  1, -1}, /* 20 - dr, Dependent vowel aa */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1}, /* 21 - sa, Sign anusvara */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 22 - atha */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1}, /* 23 - zwnj for atha */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1}, /* 24 - Independent vowel */
-    {-2, -2, -2, -2, 26, 26, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2}, /* 25 - Virama after subscript consonant */
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1,  1, -1}, /* 26 - ra/ya after subscript consonant + virama */
-    {-1,  6, -1, -1,  7,  8,  9, 10, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 - Virama after ground state */
-/* exit state -2 is for invalid order of medials and combination of invalids
-   with virama where virama should treat as start of next syllable
- */
-};
-
-
-
-/*#define MYANMAR_DEBUG */
-#ifdef MYANMAR_DEBUG
-#define MMDEBUG qDebug
-#else
-#define MMDEBUG if(0) printf
-#endif
-
-/*
-//  Given an input string of characters and a location in which to start looking
-//  calculate, using the state table, which one is the last character of the syllable
-//  that starts in the starting position.
-*/
-static int myanmar_nextSyllableBoundary(const HB_UChar16 *s, int start, int end, HB_Bool *invalid)
-{
-    const HB_UChar16 *uc = s + start;
-    int state = 0;
-    int pos = start;
-    *invalid = FALSE;
-
-    while (pos < end) {
-        MymrCharClass charClass = getMyanmarCharClass(*uc);
-        state = mymrStateTable[state][charClass & Mymr_CF_CLASS_MASK];
-        if (pos == start)
-            *invalid = (HB_Bool)(charClass & Mymr_CF_DOTTED_CIRCLE);
-
-        MMDEBUG("state[%d]=%d class=%8x (uc=%4x)", pos - start, state, charClass, *uc);
-
-        if (state < 0) {
-            if (state < -1)
-                --pos;
-            break;
-        }
-        ++uc;
-        ++pos;
-    }
-    return pos;
-}
-
-#ifndef NO_OPENTYPE
-/* ###### might have to change order of above and below forms and substitutions,
-   but according to Unicode below comes before above */
-static const HB_OpenTypeFeature myanmar_features[] = {
-    { HB_MAKE_TAG('p', 'r', 'e', 'f'), PreFormProperty },
-    { HB_MAKE_TAG('b', 'l', 'w', 'f'), BelowFormProperty },
-    { HB_MAKE_TAG('a', 'b', 'v', 'f'), AboveFormProperty },
-    { HB_MAKE_TAG('p', 's', 't', 'f'), PostFormProperty },
-    { HB_MAKE_TAG('p', 'r', 'e', 's'), PreSubstProperty },
-    { HB_MAKE_TAG('b', 'l', 'w', 's'), BelowSubstProperty },
-    { HB_MAKE_TAG('a', 'b', 'v', 's'), AboveSubstProperty },
-    { HB_MAKE_TAG('p', 's', 't', 's'), PostSubstProperty },
-    { HB_MAKE_TAG('r', 'l', 'i', 'g'), CligProperty }, /* Myanmar1 uses this instead of the other features */
-    { 0, 0 }
-};
-#endif
-
-
-/*
-// Visual order before shaping should be:
-//
-//    [Vowel Mark E]
-//    [Virama + Medial Ra]
-//    [Base]
-//    [Virama + Consonant]
-//    [Nga + Virama] (Kinzi) ### should probably come before post forms (medial ya)
-//    [Vowels]
-//    [Marks]
-//
-// This means that we can keep the logical order apart from having to
-// move the pre vowel, medial ra and kinzi
-*/
-
-static HB_Bool myanmar_shape_syllable(HB_Bool openType, HB_ShaperItem *item, HB_Bool invalid)
-{
-    /*
-//    MMDEBUG("\nsyllable from %d len %d, str='%s'", item->item.pos, item->item.length,
-//         item->string->mid(item->from, item->length).toUtf8().data());
-    */
-
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = item->num_glyphs;
-#endif
-    const HB_UChar16 *uc = item->string + item->item.pos;
-    int vowel_e = -1;
-    int kinzi = -1;
-    int medial_ra = -1;
-    int base = -1;
-    int i;
-    int len = 0;
-    unsigned short reordered[32];
-    unsigned char properties[32];
-    enum {
-       AboveForm = 0x01,
-       PreForm = 0x02,
-       PostForm = 0x04,
-       BelowForm = 0x08
-    };
-    HB_Bool lastWasVirama = FALSE;
-    int basePos = -1;
-
-    memset(properties, 0, 32*sizeof(unsigned char));
-
-    /* according to the table the max length of a syllable should be around 14 chars */
-    assert(item->item.length < 32);
-
-#ifdef MYANMAR_DEBUG
-    printf("original:");
-    for (i = 0; i < (int)item->item.length; i++) {
-        printf("    %d: %4x", i, uc[i]);
-    }
-#endif
-    for (i = 0; i < (int)item->item.length; ++i) {
-        HB_UChar16 chr = uc[i];
-
-        if (chr == Mymr_C_VOWEL_E) {
-            vowel_e = i;
-            continue;
-        }
-        if (i == 0
-            && chr == Mymr_C_NGA
-            && i + 2 < (int)item->item.length
-            && uc[i+1] == Mymr_C_VIRAMA) {
-            int mc = getMyanmarCharClass(uc[i+2]);
-            /*MMDEBUG("maybe kinzi: mc=%x", mc);*/
-            if ((mc & Mymr_CF_CONSONANT) == Mymr_CF_CONSONANT) {
-                kinzi = i;
-                continue;
-            }
-        }
-        if (base >= 0
-            && chr == Mymr_C_VIRAMA
-            && i + 1 < (int)item->item.length
-            && uc[i+1] == Mymr_C_RA) {
-            medial_ra = i;
-            continue;
-        }
-        if (base < 0)
-            base = i;
-    }
-
-    MMDEBUG("\n  base=%d, vowel_e=%d, kinzi=%d, medial_ra=%d", base, vowel_e, kinzi, medial_ra);
-    /* write vowel_e if found */
-    if (vowel_e >= 0) {
-        reordered[0] = Mymr_C_VOWEL_E;
-        len = 1;
-    }
-    /* write medial_ra */
-    if (medial_ra >= 0) {
-        reordered[len] = Mymr_C_VIRAMA;
-        reordered[len+1] = Mymr_C_RA;
-        properties[len] = PreForm;
-        properties[len+1] = PreForm;
-        len += 2;
-    }
-
-    /* shall we add a dotted circle?
-       If in the position in which the base should be (first char in the string) there is
-       a character that has the Dotted circle flag (a character that cannot be a base)
-       then write a dotted circle */
-    if (invalid) {
-        reordered[len] = C_DOTTED_CIRCLE;
-        ++len;
-    }
-
-    /* copy the rest of the syllable to the output, inserting the kinzi
-       at the correct place */
-    for (i = 0; i < (int)item->item.length; ++i) {
-        hb_uint16 chr = uc[i];
-        MymrCharClass cc;
-        if (i == vowel_e)
-            continue;
-        if (i == medial_ra || i == kinzi) {
-            ++i;
-            continue;
-        }
-
-        cc = getMyanmarCharClass(uc[i]);
-        if (kinzi >= 0 && i > base && (cc & Mymr_CF_AFTER_KINZI)) {
-            reordered[len] = Mymr_C_NGA;
-            reordered[len+1] = Mymr_C_VIRAMA;
-           if (len > 0)
-             properties[len-1] = AboveForm;
-            properties[len] = AboveForm;
-            len += 2;
-            kinzi = -1;
-        }
-
-        if (lastWasVirama) {
-            int prop = 0;
-            switch(cc & Mymr_CF_POS_MASK) {
-            case Mymr_CF_POS_BEFORE:
-                prop = PreForm;
-                break;
-            case Mymr_CF_POS_BELOW:
-                prop = BelowForm;
-                break;
-            case Mymr_CF_POS_ABOVE:
-                prop = AboveForm;
-                break;
-            case Mymr_CF_POS_AFTER:
-                prop = PostForm;
-                break;
-            default:
-                break;
-            }
-            properties[len-1] = prop;
-            properties[len] = prop;
-            if(basePos >= 0 && basePos == len-2)
-                properties[len-2] = prop;
-        }
-        lastWasVirama = (chr == Mymr_C_VIRAMA);
-        if(i == base)
-            basePos = len;
-
-        if ((chr != Mymr_C_SIGN_ZWNJ && chr != Mymr_C_SIGN_ZWJ) || !len) {
-            reordered[len] = chr;
-            ++len;
-        }
-    }
-    if (kinzi >= 0) {
-        reordered[len] = Mymr_C_NGA;
-        reordered[len+1] = Mymr_C_VIRAMA;
-        properties[len] = AboveForm;
-        properties[len+1] = AboveForm;
-        len += 2;
-    }
-
-    if (!item->font->klass->convertStringToGlyphIndices(item->font,
-                                                        reordered, len,
-                                                        item->glyphs, &item->num_glyphs,
-                                                        item->item.bidiLevel % 2))
-        return FALSE;
-
-    MMDEBUG("after shaping: len=%d", len);
-    for (i = 0; i < len; i++) {
-       item->attributes[i].mark = FALSE;
-       item->attributes[i].clusterStart = FALSE;
-       item->attributes[i].justification = 0;
-       item->attributes[i].zeroWidth = FALSE;
-       MMDEBUG("    %d: %4x property=%x", i, reordered[i], properties[i]);
-    }
-
-    /* now we have the syllable in the right order, and can start running it through open type. */
-
-#ifndef NO_OPENTYPE
-    if (openType) {
-       hb_uint32 where[32];
-
-        for (i = 0; i < len; ++i) {
-            where[i] = ~(PreSubstProperty
-                         | BelowSubstProperty
-                         | AboveSubstProperty
-                         | PostSubstProperty
-                         | CligProperty
-                         | PositioningProperties);
-            if (properties[i] & PreForm)
-                where[i] &= ~PreFormProperty;
-            if (properties[i] & BelowForm)
-                where[i] &= ~BelowFormProperty;
-            if (properties[i] & AboveForm)
-                where[i] &= ~AboveFormProperty;
-            if (properties[i] & PostForm)
-                where[i] &= ~PostFormProperty;
-        }
-
-        HB_OpenTypeShape(item, where);
-        if (!HB_OpenTypePosition(item, availableGlyphs, /*doLogClusters*/FALSE))
-            return FALSE;
-    } else
-#endif
-    {
-       MMDEBUG("Not using openType");
-        HB_HeuristicPosition(item);
-    }
-
-    item->attributes[0].clusterStart = TRUE;
-    return TRUE;
-}
-
-HB_Bool HB_MyanmarShape(HB_ShaperItem *item)
-{
-    HB_Bool openType = FALSE;
-    unsigned short *logClusters = item->log_clusters;
-
-    HB_ShaperItem syllable = *item;
-    int first_glyph = 0;
-
-    int sstart = item->item.pos;
-    int end = sstart + item->item.length;
-    int i = 0;
-
-    assert(item->item.script == HB_Script_Myanmar);
-#ifndef NO_OPENTYPE
-    openType = HB_SelectScript(item, myanmar_features);
-#endif
-
-    MMDEBUG("myanmar_shape: from %d length %d", item->item.pos, item->item.length);
-    while (sstart < end) {
-        HB_Bool invalid;
-        int send = myanmar_nextSyllableBoundary(item->string, sstart, end, &invalid);
-        MMDEBUG("syllable from %d, length %d, invalid=%s", sstart, send-sstart,
-               invalid ? "TRUE" : "FALSE");
-        syllable.item.pos = sstart;
-        syllable.item.length = send-sstart;
-        syllable.glyphs = item->glyphs + first_glyph;
-        syllable.attributes = item->attributes + first_glyph;
-        syllable.advances = item->advances + first_glyph;
-        syllable.offsets = item->offsets + first_glyph;
-        syllable.num_glyphs = item->num_glyphs - first_glyph;
-        if (!myanmar_shape_syllable(openType, &syllable, invalid)) {
-            MMDEBUG("syllable shaping failed, syllable requests %d glyphs", syllable.num_glyphs);
-            item->num_glyphs += syllable.num_glyphs;
-            return FALSE;
-        }
-
-        /* fix logcluster array */
-        MMDEBUG("syllable:");
-        for (i = first_glyph; i < first_glyph + (int)syllable.num_glyphs; ++i)
-            MMDEBUG("        %d -> glyph %x", i, item->glyphs[i]);
-        MMDEBUG("    logclusters:");
-        for (i = sstart; i < send; ++i) {
-            MMDEBUG("        %d -> glyph %d", i, first_glyph);
-            logClusters[i-item->item.pos] = first_glyph;
-        }
-        sstart = send;
-        first_glyph += syllable.num_glyphs;
-    }
-    item->num_glyphs = first_glyph;
-    return TRUE;
-}
diff --git a/src/hb-old/harfbuzz-open-private.h b/src/hb-old/harfbuzz-open-private.h
deleted file mode 100644 (file)
index f1ca278..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_OPEN_PRIVATE_H
-#define HARFBUZZ_OPEN_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-open.h"
-#include "harfbuzz-gsub-private.h"
-#include "harfbuzz-gpos-private.h"
-
-HB_BEGIN_HEADER
-
-
-struct  HB_SubTable_
-{
-  union
-  {
-    HB_GSUB_SubTable  gsub;
-    HB_GPOS_SubTable  gpos;
-  } st;
-};
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_ScriptList( HB_ScriptList* sl,
-                          HB_Stream     input );
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_FeatureList( HB_FeatureList* fl,
-                           HB_Stream         input );
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_LookupList( HB_LookupList*  ll,
-                          HB_Stream        input,
-                          HB_Type         type );
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_Coverage( HB_Coverage* c,
-                        HB_Stream      input );
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_ClassDefinition( HB_ClassDefinition* cd,
-                               HB_UShort             limit,
-                               HB_Stream             input );
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_EmptyOrClassDefinition( HB_ClassDefinition* cd,
-                                              HB_UShort             limit,
-                                              HB_UInt              class_offset,
-                                              HB_UInt              base_offset,
-                                              HB_Stream             input );
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_Device( HB_Device** d,
-                      HB_Stream    input );
-
-HB_INTERNAL void  _HB_OPEN_Free_ScriptList( HB_ScriptList*  sl );
-HB_INTERNAL void  _HB_OPEN_Free_FeatureList( HB_FeatureList*  fl );
-HB_INTERNAL void  _HB_OPEN_Free_LookupList( HB_LookupList*  ll,
-                      HB_Type         type );
-
-HB_INTERNAL void  _HB_OPEN_Free_Coverage( HB_Coverage*  c );
-HB_INTERNAL void  _HB_OPEN_Free_ClassDefinition( HB_ClassDefinition*  cd );
-HB_INTERNAL void  _HB_OPEN_Free_Device( HB_Device*  d );
-
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Coverage_Index( HB_Coverage* c,
-                         HB_UShort      glyphID,
-                         HB_UShort*     index );
-HB_INTERNAL HB_Error
-_HB_OPEN_Get_Class( HB_ClassDefinition* cd,
-                    HB_UShort             glyphID,
-                   HB_UShort*          klass,
-                    HB_UShort*            index );
-HB_INTERNAL HB_Error
-_HB_OPEN_Get_Device( HB_Device* d,
-                     HB_UShort    size,
-                     HB_Short*    value );
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_OPEN_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-open.c b/src/hb-old/harfbuzz-open.c
deleted file mode 100644 (file)
index f12f5b7..0000000
+++ /dev/null
@@ -1,1433 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-open-private.h"
-
-
-/***************************
- * Script related functions
- ***************************/
-
-
-/* LangSys */
-
-static HB_Error  Load_LangSys( HB_LangSys*  ls,
-                              HB_Stream     stream )
-{
-  HB_Error   error;
-  HB_UShort  n, count;
-  HB_UShort* fi;
-
-
-  if ( ACCESS_Frame( 6L ) )
-    return error;
-
-  ls->LookupOrderOffset    = GET_UShort();    /* should be 0 */
-  ls->ReqFeatureIndex      = GET_UShort();
-  count = ls->FeatureCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ls->FeatureIndex = NULL;
-
-  if ( ALLOC_ARRAY( ls->FeatureIndex, count, HB_UShort ) )
-    return error;
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( ls->FeatureIndex );
-    return error;
-  }
-
-  fi = ls->FeatureIndex;
-
-  for ( n = 0; n < count; n++ )
-    fi[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_LangSys( HB_LangSys*  ls )
-{
-  FREE( ls->FeatureIndex );
-}
-
-
-/* Script */
-
-static HB_Error  Load_Script( HB_ScriptTable*  s,
-                             HB_Stream    stream )
-{
-  HB_Error   error;
-  HB_UShort  n, m, count;
-  HB_UInt   cur_offset, new_offset, base_offset;
-
-  HB_LangSysRecord*  lsr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  new_offset = GET_UShort() + base_offset;
-
-  FORGET_Frame();
-
-  if ( new_offset != base_offset )        /* not a NULL offset */
-  {
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LangSys( &s->DefaultLangSys,
-                                stream ) ) != HB_Err_Ok )
-      return error;
-    (void)FILE_Seek( cur_offset );
-  }
-  else
-  {
-    /* we create a DefaultLangSys table with no entries */
-
-    s->DefaultLangSys.LookupOrderOffset = 0;
-    s->DefaultLangSys.ReqFeatureIndex   = 0xFFFF;
-    s->DefaultLangSys.FeatureCount      = 0;
-    s->DefaultLangSys.FeatureIndex      = NULL;
-  }
-
-  if ( ACCESS_Frame( 2L ) )
-    goto Fail2;
-
-  count = s->LangSysCount = GET_UShort();
-
-  /* safety check; otherwise the official handling of TrueType Open
-     fonts won't work */
-
-  if ( s->LangSysCount == 0 && s->DefaultLangSys.FeatureCount == 0 )
-  {
-    error = HB_Err_Not_Covered;
-    goto Fail2;
-  }
-
-  FORGET_Frame();
-
-  s->LangSysRecord = NULL;
-
-  if ( ALLOC_ARRAY( s->LangSysRecord, count, HB_LangSysRecord ) )
-    goto Fail2;
-
-  lsr = s->LangSysRecord;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 6L ) )
-      goto Fail1;
-
-    lsr[n].LangSysTag = GET_ULong();
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_LangSys( &lsr[n].LangSys, stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_LangSys( &lsr[m].LangSys );
-
-  FREE( s->LangSysRecord );
-
-Fail2:
-  Free_LangSys( &s->DefaultLangSys );
-  return error;
-}
-
-
-static void  Free_Script( HB_ScriptTable*  s )
-{
-  HB_UShort           n, count;
-
-  HB_LangSysRecord*  lsr;
-
-
-  Free_LangSys( &s->DefaultLangSys );
-
-  if ( s->LangSysRecord )
-  {
-    count = s->LangSysCount;
-    lsr   = s->LangSysRecord;
-
-    for ( n = 0; n < count; n++ )
-      Free_LangSys( &lsr[n].LangSys );
-
-    FREE( lsr );
-  }
-}
-
-
-/* ScriptList */
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_ScriptList( HB_ScriptList* sl,
-                          HB_Stream        stream )
-{
-  HB_Error   error;
-
-  HB_UShort          n, script_count;
-  HB_UInt           cur_offset, new_offset, base_offset;
-
-  HB_ScriptRecord*  sr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  script_count = GET_UShort();
-
-  FORGET_Frame();
-
-  sl->ScriptRecord = NULL;
-
-  if ( ALLOC_ARRAY( sl->ScriptRecord, script_count, HB_ScriptRecord ) )
-    return error;
-
-  sr = sl->ScriptRecord;
-
-  sl->ScriptCount= 0;
-  for ( n = 0; n < script_count; n++ )
-  {
-    if ( ACCESS_Frame( 6L ) )
-      goto Fail;
-
-    sr[sl->ScriptCount].ScriptTag = GET_ULong();
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-
-    if ( FILE_Seek( new_offset ) )
-      goto Fail;
-
-    error = Load_Script( &sr[sl->ScriptCount].Script, stream );
-    if ( error == HB_Err_Ok )
-      sl->ScriptCount += 1;
-    else if ( error != HB_Err_Not_Covered )
-      goto Fail;
-
-    (void)FILE_Seek( cur_offset );
-  }
-
-  /* Empty tables are harmless and generated by fontforge.
-   * See http://bugzilla.gnome.org/show_bug.cgi?id=347073
-   */
-#if 0
-  if ( sl->ScriptCount == 0 )
-  {
-    error = ERR(HB_Err_Invalid_SubTable);
-    goto Fail;
-  }
-#endif
-  
-  return HB_Err_Ok;
-
-Fail:
-  for ( n = 0; n < sl->ScriptCount; n++ )
-    Free_Script( &sr[n].Script );
-
-  FREE( sl->ScriptRecord );
-  return error;
-}
-
-
-HB_INTERNAL void
-_HB_OPEN_Free_ScriptList( HB_ScriptList* sl )
-{
-  HB_UShort          n, count;
-
-  HB_ScriptRecord*  sr;
-
-
-  if ( sl->ScriptRecord )
-  {
-    count = sl->ScriptCount;
-    sr    = sl->ScriptRecord;
-
-    for ( n = 0; n < count; n++ )
-      Free_Script( &sr[n].Script );
-
-    FREE( sr );
-  }
-}
-
-
-
-/*********************************
- * Feature List related functions
- *********************************/
-
-
-/* Feature */
-
-static HB_Error  Load_Feature( HB_Feature*  f,
-                              HB_Stream     stream )
-{
-  HB_Error   error;
-
-  HB_UShort   n, count;
-
-  HB_UShort*  lli;
-
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  f->FeatureParams           = GET_UShort();    /* should be 0 */
-  count = f->LookupListCount = GET_UShort();
-
-  FORGET_Frame();
-
-  f->LookupListIndex = NULL;
-
-  if ( ALLOC_ARRAY( f->LookupListIndex, count, HB_UShort ) )
-    return error;
-
-  lli = f->LookupListIndex;
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( f->LookupListIndex );
-    return error;
-  }
-
-  for ( n = 0; n < count; n++ )
-    lli[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_Feature( HB_Feature*  f )
-{
-  FREE( f->LookupListIndex );
-}
-
-
-/* FeatureList */
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_FeatureList( HB_FeatureList* fl,
-                           HB_Stream         stream )
-{
-  HB_Error   error;
-
-  HB_UShort           n, m, count;
-  HB_UInt            cur_offset, new_offset, base_offset;
-
-  HB_FeatureRecord*  fr;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = fl->FeatureCount = GET_UShort();
-
-  FORGET_Frame();
-
-  fl->FeatureRecord = NULL;
-
-  if ( ALLOC_ARRAY( fl->FeatureRecord, count, HB_FeatureRecord ) )
-    return error;
-  if ( ALLOC_ARRAY( fl->ApplyOrder, count, HB_UShort ) )
-    goto Fail2;
-  
-  fl->ApplyCount = 0;
-
-  fr = fl->FeatureRecord;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 6L ) )
-      goto Fail1;
-
-    fr[n].FeatureTag = GET_ULong();
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_Feature( &fr[n].Feature, stream ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  for ( m = 0; m < n; m++ )
-    Free_Feature( &fr[m].Feature );
-
-  FREE( fl->ApplyOrder );
-
-Fail2:
-  FREE( fl->FeatureRecord );
-
-  return error;
-}
-
-
-HB_INTERNAL void
-_HB_OPEN_Free_FeatureList( HB_FeatureList*  fl )
-{
-  HB_UShort           n, count;
-
-  HB_FeatureRecord*  fr;
-
-
-  if ( fl->FeatureRecord )
-  {
-    count = fl->FeatureCount;
-    fr    = fl->FeatureRecord;
-
-    for ( n = 0; n < count; n++ )
-      Free_Feature( &fr[n].Feature );
-
-    FREE( fr );
-  }
-  
-  FREE( fl->ApplyOrder );
-}
-
-
-
-/********************************
- * Lookup List related functions
- ********************************/
-
-/* the subroutines of the following two functions are defined in
-   ftxgsub.c and ftxgpos.c respectively                          */
-
-
-/* SubTable */
-
-static HB_Error  Load_SubTable( HB_SubTable*  st,
-                               HB_Stream     stream,
-                               HB_Type       table_type,
-                               HB_UShort     lookup_type )
-{
-  if ( table_type == HB_Type_GSUB )
-    return _HB_GSUB_Load_SubTable ( &st->st.gsub, stream, lookup_type );
-  else
-    return _HB_GPOS_Load_SubTable ( &st->st.gpos, stream, lookup_type );
-}
-
-
-static void  Free_SubTable( HB_SubTable*  st,
-                           HB_Type       table_type,
-                           HB_UShort      lookup_type )
-{
-  if ( table_type == HB_Type_GSUB )
-    _HB_GSUB_Free_SubTable ( &st->st.gsub, lookup_type );
-  else
-    _HB_GPOS_Free_SubTable ( &st->st.gpos, lookup_type );
-}
-
-
-/* Lookup */
-
-static HB_Error  Load_Lookup( HB_Lookup*   l,
-                             HB_Stream     stream,
-                             HB_Type      type )
-{
-  HB_Error   error;
-
-  HB_UShort      n, m, count;
-  HB_UInt       cur_offset, new_offset, base_offset;
-
-  HB_SubTable*  st;
-
-  HB_Bool        is_extension = FALSE;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 6L ) )
-    return error;
-
-  l->LookupType            = GET_UShort();
-  l->LookupFlag            = GET_UShort();
-  count = l->SubTableCount = GET_UShort();
-
-  FORGET_Frame();
-
-  l->SubTable = NULL;
-
-  if ( ALLOC_ARRAY( l->SubTable, count, HB_SubTable ) )
-    return error;
-
-  st = l->SubTable;
-
-  if ( ( type == HB_Type_GSUB && l->LookupType == HB_GSUB_LOOKUP_EXTENSION ) ||
-       ( type == HB_Type_GPOS && l->LookupType == HB_GPOS_LOOKUP_EXTENSION ) )
-    is_extension = TRUE;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-
-    if ( is_extension )
-    {
-      if ( FILE_Seek( new_offset ) || ACCESS_Frame( 8L ) )
-       goto Fail;
-
-      if (GET_UShort() != 1) /* format should be 1 */
-       goto Fail;
-
-      l->LookupType = GET_UShort();
-      new_offset += GET_ULong();
-
-      FORGET_Frame();
-    }
-
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_SubTable( &st[n], stream,
-                                 type, l->LookupType ) ) != HB_Err_Ok )
-      goto Fail;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail:
-  for ( m = 0; m < n; m++ )
-    Free_SubTable( &st[m], type, l->LookupType );
-
-  FREE( l->SubTable );
-  return error;
-}
-
-
-static void  Free_Lookup( HB_Lookup*   l,
-                         HB_Type      type)
-{
-  HB_UShort      n, count;
-
-  HB_SubTable*  st;
-
-
-  if ( l->SubTable )
-  {
-    count = l->SubTableCount;
-    st    = l->SubTable;
-
-    for ( n = 0; n < count; n++ )
-      Free_SubTable( &st[n], type, l->LookupType );
-
-    FREE( st );
-  }
-}
-
-
-/* LookupList */
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_LookupList( HB_LookupList* ll,
-                          HB_Stream        stream,
-                          HB_Type         type )
-{
-  HB_Error   error;
-
-  HB_UShort    n, m, count;
-  HB_UInt     cur_offset, new_offset, base_offset;
-
-  HB_Lookup*  l;
-
-
-  base_offset = FILE_Pos();
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = ll->LookupCount = GET_UShort();
-
-  FORGET_Frame();
-
-  ll->Lookup = NULL;
-
-  if ( ALLOC_ARRAY( ll->Lookup, count, HB_Lookup ) )
-    return error;
-  if ( ALLOC_ARRAY( ll->Properties, count, HB_UInt ) )
-    goto Fail2;
-
-  l = ll->Lookup;
-
-  for ( n = 0; n < count; n++ )
-  {
-    if ( ACCESS_Frame( 2L ) )
-      goto Fail1;
-
-    new_offset = GET_UShort() + base_offset;
-
-    FORGET_Frame();
-
-    cur_offset = FILE_Pos();
-    if ( FILE_Seek( new_offset ) ||
-        ( error = Load_Lookup( &l[n], stream, type ) ) != HB_Err_Ok )
-      goto Fail1;
-    (void)FILE_Seek( cur_offset );
-  }
-
-  return HB_Err_Ok;
-
-Fail1:
-  FREE( ll->Properties );
-
-  for ( m = 0; m < n; m++ )
-    Free_Lookup( &l[m], type );
-
-Fail2:
-  FREE( ll->Lookup );
-  return error;
-}
-
-
-HB_INTERNAL void
-_HB_OPEN_Free_LookupList( HB_LookupList* ll,
-                      HB_Type         type )
-{
-  HB_UShort    n, count;
-
-  HB_Lookup*  l;
-
-
-  FREE( ll->Properties );
-
-  if ( ll->Lookup )
-  {
-    count = ll->LookupCount;
-    l     = ll->Lookup;
-
-    for ( n = 0; n < count; n++ )
-      Free_Lookup( &l[n], type );
-
-    FREE( l );
-  }
-}
-
-
-
-/*****************************
- * Coverage related functions
- *****************************/
-
-
-/* CoverageFormat1 */
-
-static HB_Error  Load_Coverage1( HB_CoverageFormat1*  cf1,
-                                HB_Stream             stream )
-{
-  HB_Error   error;
-
-  HB_UShort  n, count;
-
-  HB_UShort* ga;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = cf1->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cf1->GlyphArray = NULL;
-
-  if ( ALLOC_ARRAY( cf1->GlyphArray, count, HB_UShort ) )
-    return error;
-
-  ga = cf1->GlyphArray;
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( cf1->GlyphArray );
-    return error;
-  }
-
-  for ( n = 0; n < count; n++ )
-    ga[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-static void  Free_Coverage1( HB_CoverageFormat1*  cf1)
-{
-  FREE( cf1->GlyphArray );
-}
-
-
-/* CoverageFormat2 */
-
-static HB_Error  Load_Coverage2( HB_CoverageFormat2*  cf2,
-                                HB_Stream             stream )
-{
-  HB_Error   error;
-
-  HB_UShort         n, count;
-
-  HB_RangeRecord*  rr;
-
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = cf2->RangeCount = GET_UShort();
-
-  FORGET_Frame();
-
-  cf2->RangeRecord = NULL;
-
-  if ( ALLOC_ARRAY( cf2->RangeRecord, count, HB_RangeRecord ) )
-    return error;
-
-  rr = cf2->RangeRecord;
-
-  if ( ACCESS_Frame( count * 6L ) )
-    goto Fail;
-
-  for ( n = 0; n < count; n++ )
-  {
-    rr[n].Start              = GET_UShort();
-    rr[n].End                = GET_UShort();
-    rr[n].StartCoverageIndex = GET_UShort();
-
-    /* sanity check; we are limited to 16bit integers */
-    if ( rr[n].Start > rr[n].End ||
-        ( rr[n].End - rr[n].Start + (long)rr[n].StartCoverageIndex ) >=
-          0x10000L )
-    {
-      error = ERR(HB_Err_Invalid_SubTable);
-      goto Fail;
-    }
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail:
-  FREE( cf2->RangeRecord );
-  return error;
-}
-
-
-static void  Free_Coverage2( HB_CoverageFormat2*  cf2 )
-{
-  FREE( cf2->RangeRecord );
-}
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_Coverage( HB_Coverage* c,
-                        HB_Stream      stream )
-{
-  HB_Error   error;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  c->CoverageFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( c->CoverageFormat )
-  {
-  case 1:  return Load_Coverage1( &c->cf.cf1, stream );
-  case 2:  return Load_Coverage2( &c->cf.cf2, stream );
-  default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-HB_INTERNAL void
-_HB_OPEN_Free_Coverage( HB_Coverage* c )
-{
-  switch ( c->CoverageFormat )
-  {
-  case 1:  Free_Coverage1( &c->cf.cf1 ); break;
-  case 2:  Free_Coverage2( &c->cf.cf2 ); break;
-  default:                                      break;
-  }
-}
-
-
-static HB_Error  Coverage_Index1( HB_CoverageFormat1*  cf1,
-                                 HB_UShort             glyphID,
-                                 HB_UShort*            index )
-{
-  HB_UShort min, max, new_min, new_max, middle;
-
-  HB_UShort*  array = cf1->GlyphArray;
-
-
-  /* binary search */
-
-  if ( cf1->GlyphCount == 0 )
-    return HB_Err_Not_Covered;
-
-  new_min = 0;
-  new_max = cf1->GlyphCount - 1;
-
-  do
-  {
-    min = new_min;
-    max = new_max;
-
-    /* we use (min + max) / 2 = max - (max - min) / 2  to avoid
-       overflow and rounding errors                             */
-
-    middle = max - ( ( max - min ) >> 1 );
-
-    if ( glyphID == array[middle] )
-    {
-      *index = middle;
-      return HB_Err_Ok;
-    }
-    else if ( glyphID < array[middle] )
-    {
-      if ( middle == min )
-       break;
-      new_max = middle - 1;
-    }
-    else
-    {
-      if ( middle == max )
-       break;
-      new_min = middle + 1;
-    }
-  } while ( min < max );
-
-  return HB_Err_Not_Covered;
-}
-
-
-static HB_Error  Coverage_Index2( HB_CoverageFormat2*  cf2,
-                                 HB_UShort             glyphID,
-                                 HB_UShort*            index )
-{
-  HB_UShort         min, max, new_min, new_max, middle;
-
-  HB_RangeRecord*  rr = cf2->RangeRecord;
-
-
-  /* binary search */
-
-  if ( cf2->RangeCount == 0 )
-    return HB_Err_Not_Covered;
-
-  new_min = 0;
-  new_max = cf2->RangeCount - 1;
-
-  do
-  {
-    min = new_min;
-    max = new_max;
-
-    /* we use (min + max) / 2 = max - (max - min) / 2  to avoid
-       overflow and rounding errors                             */
-
-    middle = max - ( ( max - min ) >> 1 );
-
-    if ( glyphID >= rr[middle].Start && glyphID <= rr[middle].End )
-    {
-      *index = rr[middle].StartCoverageIndex + glyphID - rr[middle].Start;
-      return HB_Err_Ok;
-    }
-    else if ( glyphID < rr[middle].Start )
-    {
-      if ( middle == min )
-       break;
-      new_max = middle - 1;
-    }
-    else
-    {
-      if ( middle == max )
-       break;
-      new_min = middle + 1;
-    }
-  } while ( min < max );
-
-  return HB_Err_Not_Covered;
-}
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Coverage_Index( HB_Coverage* c,
-                         HB_UShort      glyphID,
-                         HB_UShort*     index )
-{
-  switch ( c->CoverageFormat )
-  {
-  case 1:  return Coverage_Index1( &c->cf.cf1, glyphID, index );
-  case 2:  return Coverage_Index2( &c->cf.cf2, glyphID, index );
-  default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-
-/*************************************
- * Class Definition related functions
- *************************************/
-
-
-/* ClassDefFormat1 */
-
-static HB_Error  Load_ClassDef1( HB_ClassDefinition*  cd,
-                                HB_UShort             limit,
-                                HB_Stream             stream )
-{
-  HB_Error   error;
-
-  HB_UShort             n, count;
-
-  HB_UShort*            cva;
-
-  HB_ClassDefFormat1*  cdf1;
-
-
-  cdf1 = &cd->cd.cd1;
-
-  if ( ACCESS_Frame( 4L ) )
-    return error;
-
-  cdf1->StartGlyph         = GET_UShort();
-  count = cdf1->GlyphCount = GET_UShort();
-
-  FORGET_Frame();
-
-  /* sanity check; we are limited to 16bit integers */
-
-  if ( cdf1->StartGlyph + (long)count >= 0x10000L )
-    return ERR(HB_Err_Invalid_SubTable);
-
-  cdf1->ClassValueArray = NULL;
-
-  if ( ALLOC_ARRAY( cdf1->ClassValueArray, count, HB_UShort ) )
-    return error;
-
-  cva = cdf1->ClassValueArray;
-
-  if ( ACCESS_Frame( count * 2L ) )
-    goto Fail;
-
-  for ( n = 0; n < count; n++ )
-  {
-    cva[n] = GET_UShort();
-    if ( cva[n] >= limit )
-    {
-      error = ERR(HB_Err_Invalid_SubTable);
-      goto Fail;
-    }
-  }
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-
-Fail:
-  FREE( cva );
-
-  return error;
-}
-
-
-static void  Free_ClassDef1( HB_ClassDefFormat1*  cdf1 )
-{
-  FREE( cdf1->ClassValueArray );
-}
-
-
-/* ClassDefFormat2 */
-
-static HB_Error  Load_ClassDef2( HB_ClassDefinition*  cd,
-                                HB_UShort             limit,
-                                HB_Stream             stream )
-{
-  HB_Error   error;
-
-  HB_UShort              n, count;
-
-  HB_ClassRangeRecord*  crr;
-
-  HB_ClassDefFormat2*   cdf2;
-
-
-  cdf2 = &cd->cd.cd2;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  count = GET_UShort();
-  cdf2->ClassRangeCount = 0; /* zero for now.  we fill with the number of good entries later */
-
-  FORGET_Frame();
-
-  cdf2->ClassRangeRecord = NULL;
-
-  if ( ALLOC_ARRAY( cdf2->ClassRangeRecord, count, HB_ClassRangeRecord ) )
-    return error;
-
-  crr = cdf2->ClassRangeRecord;
-
-  if ( ACCESS_Frame( count * 6L ) )
-    goto Fail;
-
-  for ( n = 0; n < count; n++ )
-  {
-    crr[n].Start = GET_UShort();
-    crr[n].End   = GET_UShort();
-    crr[n].Class = GET_UShort();
-
-    /* sanity check */
-
-    if ( crr[n].Start > crr[n].End ||
-        crr[n].Class >= limit )
-    {
-      /* XXX
-       * Corrupt entry.  Skip it.
-       * This is hit by Nafees Nastaliq font for example
-       */
-       n--;
-       count--;
-    }
-  }
-
-  FORGET_Frame();
-
-  cdf2->ClassRangeCount = count;
-
-  return HB_Err_Ok;
-
-Fail:
-  FREE( crr );
-
-  return error;
-}
-
-
-static void  Free_ClassDef2( HB_ClassDefFormat2*  cdf2 )
-{
-  FREE( cdf2->ClassRangeRecord );
-}
-
-
-/* ClassDefinition */
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_ClassDefinition( HB_ClassDefinition* cd,
-                               HB_UShort             limit,
-                               HB_Stream             stream )
-{
-  HB_Error   error;
-
-  if ( ACCESS_Frame( 2L ) )
-    return error;
-
-  cd->ClassFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  switch ( cd->ClassFormat )
-  {
-  case 1:  error = Load_ClassDef1( cd, limit, stream ); break;
-  case 2:  error = Load_ClassDef2( cd, limit, stream ); break;
-  default: error = ERR(HB_Err_Invalid_SubTable_Format);        break;
-  }
-
-  if ( error )
-    return error;
-
-  cd->loaded = TRUE;
-
-  return HB_Err_Ok;
-}
-
-
-static HB_Error
-_HB_OPEN_Load_EmptyClassDefinition( HB_ClassDefinition*  cd )
-{
-  HB_Error   error;
-
-  cd->ClassFormat = 1; /* Meaningless */
-
-  if ( ALLOC_ARRAY( cd->cd.cd1.ClassValueArray, 1, HB_UShort ) )
-    return error;
-
-  cd->loaded = TRUE;
-
-  return HB_Err_Ok;
-}
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_EmptyOrClassDefinition( HB_ClassDefinition* cd,
-                                              HB_UShort             limit,
-                                              HB_UInt              class_offset,
-                                              HB_UInt              base_offset,
-                                              HB_Stream             stream )
-{
-  HB_Error error;
-  HB_UInt               cur_offset;
-
-  cur_offset = FILE_Pos();
-
-  if ( class_offset )
-    {
-      if ( !FILE_Seek( class_offset + base_offset ) )
-       error = _HB_OPEN_Load_ClassDefinition( cd, limit, stream );
-    }
-  else
-     error = _HB_OPEN_Load_EmptyClassDefinition ( cd );
-
-  if (error == HB_Err_Ok)
-    (void)FILE_Seek( cur_offset ); /* Changes error as a side-effect */
-
-  return error;
-}
-
-HB_INTERNAL void
-_HB_OPEN_Free_ClassDefinition( HB_ClassDefinition*  cd )
-{
-  if ( !cd->loaded )
-    return;
-
-  switch ( cd->ClassFormat )
-  {
-  case 1:  Free_ClassDef1( &cd->cd.cd1 ); break;
-  case 2:  Free_ClassDef2( &cd->cd.cd2 ); break;
-  default:                               break;
-  }
-}
-
-
-static HB_Error  Get_Class1( HB_ClassDefFormat1*  cdf1,
-                            HB_UShort             glyphID,
-                            HB_UShort*            klass,
-                            HB_UShort*            index )
-{
-  HB_UShort*  cva = cdf1->ClassValueArray;
-
-
-  if ( index )
-    *index = 0;
-
-  if ( glyphID >= cdf1->StartGlyph &&
-       glyphID < cdf1->StartGlyph + cdf1->GlyphCount )
-  {
-    *klass = cva[glyphID - cdf1->StartGlyph];
-    return HB_Err_Ok;
-  }
-  else
-  {
-    *klass = 0;
-    return HB_Err_Not_Covered;
-  }
-}
-
-
-/* we need the index value of the last searched class range record
-   in case of failure for constructed GDEF tables                  */
-
-static HB_Error  Get_Class2( HB_ClassDefFormat2*  cdf2,
-                            HB_UShort             glyphID,
-                            HB_UShort*            klass,
-                            HB_UShort*            index )
-{
-  HB_Error               error = HB_Err_Ok;
-  HB_UShort              min, max, new_min, new_max, middle;
-
-  HB_ClassRangeRecord*  crr = cdf2->ClassRangeRecord;
-
-
-  /* binary search */
-
-  if ( cdf2->ClassRangeCount == 0 )
-    {
-      *klass = 0;
-      if ( index )
-       *index = 0;
-      
-      return HB_Err_Not_Covered;
-    }
-
-  new_min = 0;
-  new_max = cdf2->ClassRangeCount - 1;
-
-  do
-  {
-    min = new_min;
-    max = new_max;
-
-    /* we use (min + max) / 2 = max - (max - min) / 2  to avoid
-       overflow and rounding errors                             */
-
-    middle = max - ( ( max - min ) >> 1 );
-
-    if ( glyphID >= crr[middle].Start && glyphID <= crr[middle].End )
-    {
-      *klass = crr[middle].Class;
-      error  = HB_Err_Ok;
-      break;
-    }
-    else if ( glyphID < crr[middle].Start )
-    {
-      if ( middle == min )
-      {
-       *klass = 0;
-       error  = HB_Err_Not_Covered;
-       break;
-      }
-      new_max = middle - 1;
-    }
-    else
-    {
-      if ( middle == max )
-      {
-       *klass = 0;
-       error  = HB_Err_Not_Covered;
-       break;
-      }
-      new_min = middle + 1;
-    }
-  } while ( min < max );
-
-  if ( index )
-    *index = middle;
-
-  return error;
-}
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Get_Class( HB_ClassDefinition* cd,
-                    HB_UShort             glyphID,
-                   HB_UShort*          klass,
-                    HB_UShort*            index )
-{
-  switch ( cd->ClassFormat )
-  {
-  case 1:  return Get_Class1( &cd->cd.cd1, glyphID, klass, index );
-  case 2:  return Get_Class2( &cd->cd.cd2, glyphID, klass, index );
-  default: return ERR(HB_Err_Invalid_SubTable_Format);
-  }
-
-  return HB_Err_Ok;               /* never reached */
-}
-
-
-
-/***************************
- * Device related functions
- ***************************/
-
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Load_Device( HB_Device** device,
-                      HB_Stream    stream )
-{
-  HB_Device*  d;
-  HB_Error   error;
-
-  HB_UShort   n, count;
-
-  HB_UShort*  dv;
-
-
-  if ( ACCESS_Frame( 6L ) )
-    return error;
-
-  if ( ALLOC( *device, sizeof(HB_Device)) )
-  {
-    *device = 0;
-    return error;
-  }
-
-  d = *device;
-
-  d->StartSize   = GET_UShort();
-  d->EndSize     = GET_UShort();
-  d->DeltaFormat = GET_UShort();
-
-  FORGET_Frame();
-
-  d->DeltaValue = NULL;
-
-  if ( d->StartSize > d->EndSize ||
-       d->DeltaFormat == 0 || d->DeltaFormat > 3 )
-    {
-      /* XXX
-       * I've seen fontforge generate DeltaFormat == 0.
-       * Just return Ok and let the NULL DeltaValue disable
-       * this table.
-       */
-      return HB_Err_Ok;
-    }
-
-  count = ( ( d->EndSize - d->StartSize + 1 ) >>
-             ( 4 - d->DeltaFormat ) ) + 1;
-
-  if ( ALLOC_ARRAY( d->DeltaValue, count, HB_UShort ) )
-  {
-    FREE( *device );
-    *device = 0;
-    return error;
-  }
-
-  if ( ACCESS_Frame( count * 2L ) )
-  {
-    FREE( d->DeltaValue );
-    FREE( *device );
-    *device = 0;
-    return error;
-  }
-
-  dv = d->DeltaValue;
-
-  for ( n = 0; n < count; n++ )
-    dv[n] = GET_UShort();
-
-  FORGET_Frame();
-
-  return HB_Err_Ok;
-}
-
-
-HB_INTERNAL void
-_HB_OPEN_Free_Device( HB_Device* d )
-{
-  if ( d )
-  {
-    FREE( d->DeltaValue );
-    FREE( d );
-  }
-}
-
-
-/* Since we have the delta values stored in compressed form, we must
-   uncompress it now.  To simplify the interface, the function always
-   returns a meaningful value in `value'; the error is just for
-   information.
-                              |                |
-   format = 1: 0011223344556677|8899101112131415|...
-                              |                |
-                   byte 1           byte 2
-
-     00: (byte >> 14) & mask
-     11: (byte >> 12) & mask
-     ...
-
-     mask = 0x0003
-                              |                |
-   format = 2: 0000111122223333|4444555566667777|...
-                              |                |
-                   byte 1           byte 2
-
-     0000: (byte >> 12) & mask
-     1111: (byte >>  8) & mask
-     ...
-
-     mask = 0x000F
-                              |                |
-   format = 3: 0000000011111111|2222222233333333|...
-                              |                |
-                   byte 1           byte 2
-
-     00000000: (byte >> 8) & mask
-     11111111: (byte >> 0) & mask
-     ....
-
-     mask = 0x00FF                                    */
-
-HB_INTERNAL HB_Error
-_HB_OPEN_Get_Device( HB_Device* d,
-                     HB_UShort    size,
-                     HB_Short*    value )
-{
-  HB_UShort  byte, bits, mask, s;
-
-  if ( d && d->DeltaValue && size >= d->StartSize && size <= d->EndSize )
-  {
-    HB_UShort f = d->DeltaFormat;
-    s    = size - d->StartSize;
-    byte = d->DeltaValue[s >> ( 4 - f )];
-    bits = byte >> ( 16 - ( ( s % ( 1 << ( 4 - f ) ) + 1 ) << f ) );
-    mask = 0xFFFF >> ( 16 - ( 1 << f ) );
-
-    *value = (HB_Short)( bits & mask );
-
-    /* conversion to a signed value */
-
-    if ( *value >= ( ( mask + 1 ) >> 1 ) )
-      *value -= mask + 1;
-
-    return HB_Err_Ok;
-  }
-  else
-  {
-    *value = 0;
-    return HB_Err_Not_Covered;
-  }
-}
-
-
-/* END */
diff --git a/src/hb-old/harfbuzz-open.h b/src/hb-old/harfbuzz-open.h
deleted file mode 100644 (file)
index 4ba6cf5..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_OPEN_H
-#define HARFBUZZ_OPEN_H
-
-#include "harfbuzz-global.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/* Use this if a feature applies to all glyphs */
-#define HB_ALL_GLYPHS                    0xFFFF
-
-#define HB_DEFAULT_LANGUAGE              0xFFFF
-
-#define HB_MAX_NESTING_LEVEL             100
-
-
-/* Script list related structures */
-
-struct  HB_LangSys_
-{
-  HB_UShort*  FeatureIndex;           /* array of Feature indices  */
-  HB_UShort   LookupOrderOffset;      /* always 0 for TT Open 1.0  */
-  HB_UShort   ReqFeatureIndex;        /* required FeatureIndex     */
-  HB_UShort   FeatureCount;           /* number of Feature indices */
-};
-
-typedef struct HB_LangSys_  HB_LangSys;
-
-
-struct  HB_LangSysRecord_
-{
-  HB_LangSys  LangSys;               /* LangSys table         */
-  HB_UInt     LangSysTag;            /* LangSysTag identifier */
-};
-
-typedef struct HB_LangSysRecord_  HB_LangSysRecord;
-
-
-struct  HB_ScriptTable_
-{
-  HB_LangSysRecord*  LangSysRecord;  /* array of LangSysRecords  */
-  HB_LangSys         DefaultLangSys; /* DefaultLangSys table     */
-  HB_UShort           LangSysCount;   /* number of LangSysRecords */
-};
-
-typedef struct HB_ScriptTable_  HB_ScriptTable;
-
-
-struct  HB_ScriptRecord_
-{
-  HB_UInt        ScriptTag;              /* ScriptTag identifier */
-  HB_ScriptTable  Script;                 /* Script table         */
-};
-
-typedef struct HB_ScriptRecord_  HB_ScriptRecord;
-
-
-struct  HB_ScriptList_
-{
-  HB_ScriptRecord*  ScriptRecord;    /* array of ScriptRecords  */
-  HB_UShort          ScriptCount;     /* number of ScriptRecords */
-};
-
-typedef struct HB_ScriptList_  HB_ScriptList;
-
-
-/* Feature list related structures */
-
-struct HB_Feature_
-{
-  HB_UShort*  LookupListIndex;        /* array of LookupList indices  */
-  HB_UShort   FeatureParams;          /* always 0 for TT Open 1.0     */
-  HB_UShort   LookupListCount;        /* number of LookupList indices */
-};
-
-typedef struct HB_Feature_  HB_Feature;
-
-
-struct  HB_FeatureRecord_
-{
-  HB_UInt     FeatureTag;            /* FeatureTag identifier */
-  HB_Feature  Feature;               /* Feature table         */
-};
-
-typedef struct HB_FeatureRecord_  HB_FeatureRecord;
-
-
-struct  HB_FeatureList_
-{
-  HB_UShort*           ApplyOrder;     /* order to apply features */
-  HB_FeatureRecord*  FeatureRecord;  /* array of FeatureRecords  */
-  HB_UShort           FeatureCount;   /* number of FeatureRecords */
-  HB_UShort            ApplyCount;     /* number of elements in ApplyOrder */
-};
-
-typedef struct HB_FeatureList_  HB_FeatureList;
-
-
-/* Lookup list related structures */
-
-typedef struct HB_SubTable_  HB_SubTable;
-
-
-struct  HB_Lookup_
-{
-  HB_SubTable*  SubTable;            /* array of SubTables  */
-  HB_UShort      LookupType;          /* Lookup type         */
-  HB_UShort      LookupFlag;          /* Lookup qualifiers   */
-  HB_UShort      SubTableCount;       /* number of SubTables */
-};
-
-typedef struct HB_Lookup_  HB_Lookup;
-
-
-/* The `Properties' field is not defined in the OpenType specification but
-   is needed for processing lookups.  If properties[n] is > 0, the
-   functions HB_GSUB_Apply_String() resp. HB_GPOS_Apply_String() will
-   process Lookup[n] for glyphs which have the specific bit not set in
-   the `properties' field of the input string object.                  */
-
-struct  HB_LookupList_
-{
-  HB_Lookup*  Lookup;                /* array of Lookup records */
-  HB_UInt*     Properties;            /* array of flags          */
-  HB_UShort    LookupCount;           /* number of Lookups       */
-};
-
-typedef struct HB_LookupList_  HB_LookupList;
-
-
-/* Possible LookupFlag bit masks.  `HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS' comes from the
-   OpenType 1.2 specification; HB_LOOKUP_FLAG_RIGHT_TO_LEFT has been (re)introduced in
-   OpenType 1.3 -- if set, the last glyph in a cursive attachment
-   sequence has to be positioned on the baseline -- regardless of the
-   writing direction.                                                    */
-
-#define HB_LOOKUP_FLAG_RIGHT_TO_LEFT         0x0001
-#define HB_LOOKUP_FLAG_IGNORE_BASE_GLYPHS    0x0002
-#define HB_LOOKUP_FLAG_IGNORE_LIGATURES      0x0004
-#define HB_LOOKUP_FLAG_IGNORE_MARKS          0x0008
-#define HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS  0xFF00
-
-
-struct  HB_CoverageFormat1_
-{
-  HB_UShort*  GlyphArray;             /* array of glyph IDs             */
-  HB_UShort   GlyphCount;             /* number of glyphs in GlyphArray */
-};
-
-typedef struct HB_CoverageFormat1_  HB_CoverageFormat1;
-
-
-struct HB_RangeRecord_
-{
-  HB_UShort  Start;                   /* first glyph ID in the range */
-  HB_UShort  End;                     /* last glyph ID in the range  */
-  HB_UShort  StartCoverageIndex;      /* coverage index of first
-                                        glyph ID in the range       */
-};
-
-typedef struct HB_RangeRecord_  HB_RangeRecord;
-
-
-struct  HB_CoverageFormat2_
-{
-  HB_RangeRecord*  RangeRecord;      /* array of RangeRecords  */
-  HB_UShort         RangeCount;       /* number of RangeRecords */
-};
-
-typedef struct HB_CoverageFormat2_  HB_CoverageFormat2;
-
-
-struct  HB_Coverage_
-{
-  HB_Byte    CoverageFormat;          /* 1 or 2 */
-
-  union
-  {
-    HB_CoverageFormat1  cf1;
-    HB_CoverageFormat2  cf2;
-  } cf;
-};
-
-typedef struct HB_Coverage_  HB_Coverage;
-
-
-struct  HB_ClassDefFormat1_
-{
-  HB_UShort*  ClassValueArray;        /* array of class values       */
-  HB_UShort   StartGlyph;             /* first glyph ID of the
-                                        ClassValueArray             */
-  HB_UShort   GlyphCount;             /* size of the ClassValueArray */
-};
-
-typedef struct HB_ClassDefFormat1_  HB_ClassDefFormat1;
-
-
-struct  HB_ClassRangeRecord_
-{
-  HB_UShort  Start;                   /* first glyph ID in the range    */
-  HB_UShort  End;                     /* last glyph ID in the range     */
-  HB_UShort  Class;                   /* applied to all glyphs in range */
-};
-
-typedef struct HB_ClassRangeRecord_  HB_ClassRangeRecord;
-
-
-struct  HB_ClassDefFormat2_
-{
-  HB_ClassRangeRecord*  ClassRangeRecord;
-                                     /* array of ClassRangeRecords  */
-  HB_UShort              ClassRangeCount;
-                                     /* number of ClassRangeRecords */
-};
-
-typedef struct HB_ClassDefFormat2_  HB_ClassDefFormat2;
-
-
-struct  HB_ClassDefinition_
-{
-  union
-  {
-    HB_ClassDefFormat1  cd1;
-    HB_ClassDefFormat2  cd2;
-  } cd;
-
-  HB_Byte    ClassFormat;             /* 1 or 2                      */
-  HB_Bool    loaded;
-};
-
-typedef struct HB_ClassDefinition_  HB_ClassDefinition;
-
-
-struct HB_Device_
-{
-  HB_UShort*  DeltaValue;             /* array of compressed data      */
-  HB_UShort   StartSize;              /* smallest size to correct      */
-  HB_UShort   EndSize;                /* largest size to correct       */
-  HB_Byte     DeltaFormat;            /* DeltaValue array data format:
-                                        1, 2, or 3                    */
-};
-
-typedef struct HB_Device_  HB_Device;
-
-
-enum  HB_Type_
-{
-  HB_Type_GSUB,
-  HB_Type_GPOS
-};
-
-typedef enum HB_Type_  HB_Type;
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_OPEN_H */
diff --git a/src/hb-old/harfbuzz-shaper-private.h b/src/hb-old/harfbuzz-shaper-private.h
deleted file mode 100644 (file)
index 66fad4c..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_SHAPER_PRIVATE_H
-#define HARFBUZZ_SHAPER_PRIVATE_H
-
-HB_BEGIN_HEADER
-
-enum {
-    C_DOTTED_CIRCLE = 0x25CC
-};
-
-typedef enum 
-{
-    HB_Combining_BelowLeftAttached       = 200,
-    HB_Combining_BelowAttached           = 202,
-    HB_Combining_BelowRightAttached      = 204,
-    HB_Combining_LeftAttached            = 208,
-    HB_Combining_RightAttached           = 210,
-    HB_Combining_AboveLeftAttached       = 212,
-    HB_Combining_AboveAttached           = 214,
-    HB_Combining_AboveRightAttached      = 216,
-
-    HB_Combining_BelowLeft               = 218,
-    HB_Combining_Below                   = 220,
-    HB_Combining_BelowRight              = 222,
-    HB_Combining_Left                    = 224,
-    HB_Combining_Right                   = 226,
-    HB_Combining_AboveLeft               = 228,
-    HB_Combining_Above                   = 230,
-    HB_Combining_AboveRight              = 232,
-
-    HB_Combining_DoubleBelow             = 233,
-    HB_Combining_DoubleAbove             = 234,
-    HB_Combining_IotaSubscript           = 240
-} HB_CombiningClass;
-
-typedef enum {
-    LocaProperty = 0x1,
-    CcmpProperty = 0x2,
-    InitProperty = 0x4,
-    IsolProperty = 0x8,
-    FinaProperty = 0x10,
-    MediProperty = 0x20,
-    RligProperty = 0x40,
-    CaltProperty = 0x80,
-    LigaProperty = 0x100,
-    DligProperty = 0x200,
-    CswhProperty = 0x400,
-    MsetProperty = 0x800,
-
-    /* used by indic and myanmar shaper */
-    NuktaProperty = 0x8,
-    AkhantProperty = 0x10,
-    RephProperty = 0x20,
-    PreFormProperty = 0x40,
-    BelowFormProperty = 0x80,
-    AboveFormProperty = 0x100,
-    HalfFormProperty = 0x200,
-    PostFormProperty = 0x400,
-    ConjunctFormProperty = 0x800,
-    VattuProperty = 0x1000,
-    PreSubstProperty = 0x2000,
-    BelowSubstProperty = 0x4000,
-    AboveSubstProperty = 0x8000,
-    PostSubstProperty = 0x10000,
-    HalantProperty = 0x20000,
-    CligProperty = 0x40000,
-    IndicCaltProperty = 0x80000
-
-} HB_OpenTypeProperty;
-
-/* return true if ok. */
-typedef HB_Bool (*HB_ShapeFunction)(HB_ShaperItem *shaper_item);
-
-typedef struct {
-    HB_ShapeFunction shape;
-} HB_ScriptEngine;
-
-extern const HB_ScriptEngine hb_scriptEngines[];
-
-extern HB_Bool HB_BasicShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_GreekShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_TibetanShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_ArabicShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_HangulShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_MyanmarShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_KhmerShape(HB_ShaperItem *shaper_item);
-extern HB_Bool HB_IndicShape(HB_ShaperItem *shaper_item);
-
-typedef struct {
-    hb_uint32 tag;
-    hb_uint32 property;
-} HB_OpenTypeFeature;
-
-#define PositioningProperties 0x80000000
-
-HB_Bool HB_SelectScript(HB_ShaperItem *item, const HB_OpenTypeFeature *features);
-
-HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties);
-HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters);
-
-void HB_HeuristicPosition(HB_ShaperItem *item);
-void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item);
-
-#define HB_IsControlChar(uc) \
-    ((uc >= 0x200b && uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */) \
-     || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */) \
-     || (uc >= 0x206a && uc <= 0x206f /* ISS, ASS, IAFS, AFS, NADS, NODS */))
-
-HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item);
-
-#define HB_GetGlyphAdvances(shaper_item) \
-    shaper_item->font->klass->getGlyphAdvances(shaper_item->font, \
-                                               shaper_item->glyphs, shaper_item->num_glyphs, \
-                                               shaper_item->advances, \
-                                               shaper_item->face->current_flags);
-
-#define HB_DECLARE_STACKARRAY(Type, Name) \
-    Type stack##Name[512]; \
-    Type *Name = stack##Name;
-
-#define HB_INIT_STACKARRAY(Type, Name, Length) \
-    if ((Length) >= 512) \
-        Name = (Type *)malloc((Length) * sizeof(Type));
-
-#define HB_STACKARRAY(Type, Name, Length) \
-    HB_DECLARE_STACKARRAY(Type, Name) \
-    HB_INIT_STACKARRAY(Type, Name, Length)
-
-#define HB_FREE_STACKARRAY(Name) \
-    if (stack##Name != Name) \
-        free(Name);
-
-HB_END_HEADER
-
-#endif
diff --git a/src/hb-old/harfbuzz-shaper.cpp b/src/hb-old/harfbuzz-shaper.cpp
deleted file mode 100644 (file)
index d1e2335..0000000
+++ /dev/null
@@ -1,994 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include "harfbuzz-stream-private.h"
-#include <assert.h>
-#include <stdio.h>
-
-#define HB_MIN(a, b) ((a) < (b) ? (a) : (b))
-#define HB_MAX(a, b) ((a) > (b) ? (a) : (b))
-
-// --------------------------------------------------------------------------------------------------------------------------------------------
-//
-// Basic processing
-//
-// --------------------------------------------------------------------------------------------------------------------------------------------
-
-static inline void positionCluster(HB_ShaperItem *item, int gfrom,  int glast)
-{
-    int nmarks = glast - gfrom;
-    assert(nmarks > 0);
-
-    HB_Glyph *glyphs = item->glyphs;
-    HB_GlyphAttributes *attributes = item->attributes;
-
-    HB_GlyphMetrics baseMetrics;
-    item->font->klass->getGlyphMetrics(item->font, glyphs[gfrom], &baseMetrics);
-
-    if (item->item.script == HB_Script_Hebrew
-        && (-baseMetrics.y) > baseMetrics.height)
-        // we need to attach below the baseline, because of the hebrew iud.
-        baseMetrics.height = -baseMetrics.y;
-
-//     qDebug("---> positionCluster: cluster from %d to %d", gfrom, glast);
-//     qDebug("baseInfo: %f/%f (%f/%f) off=%f/%f", baseInfo.x, baseInfo.y, baseInfo.width, baseInfo.height, baseInfo.xoff, baseInfo.yoff);
-
-    HB_Fixed size = item->font->klass->getFontMetric(item->font, HB_FontAscent) / 10;
-    HB_Fixed offsetBase = HB_FIXED_CONSTANT(1) + (size - HB_FIXED_CONSTANT(4)) / 4;
-    if (size > HB_FIXED_CONSTANT(4))
-        offsetBase += HB_FIXED_CONSTANT(4);
-    else
-        offsetBase += size;
-    offsetBase = -offsetBase;
-    //qreal offsetBase = (size - 4) / 4 + qMin<qreal>(size, 4) + 1;
-//     qDebug("offset = %f", offsetBase);
-
-    bool rightToLeft = item->item.bidiLevel % 2;
-
-    int i;
-    unsigned char lastCmb = 0;
-    HB_GlyphMetrics attachmentRect;
-    memset(&attachmentRect, 0, sizeof(attachmentRect));
-
-    for(i = 1; i <= nmarks; i++) {
-        HB_Glyph mark = glyphs[gfrom+i];
-        HB_GlyphMetrics markMetrics;
-        item->font->klass->getGlyphMetrics(item->font, mark, &markMetrics);
-        HB_FixedPoint p;
-        p.x = p.y = 0;
-//          qDebug("markInfo: %f/%f (%f/%f) off=%f/%f", markInfo.x, markInfo.y, markInfo.width, markInfo.height, markInfo.xoff, markInfo.yoff);
-
-        HB_Fixed offset = offsetBase;
-        unsigned char cmb = attributes[gfrom+i].combiningClass;
-
-        // ### maybe the whole position determination should move down to heuristicSetGlyphAttributes. Would save some
-        // bits  in the glyphAttributes structure.
-        if (cmb < 200) {
-            // fixed position classes. We approximate by mapping to one of the others.
-            // currently I added only the ones for arabic, hebrew, lao and thai.
-
-            // for Lao and Thai marks with class 0, see below (heuristicSetGlyphAttributes)
-
-            // add a bit more offset to arabic, a bit hacky
-            if (cmb >= 27 && cmb <= 36 && offset < 3)
-                offset +=1;
-            // below
-            if ((cmb >= 10 && cmb <= 18) ||
-                 cmb == 20 || cmb == 22 ||
-                 cmb == 29 || cmb == 32)
-                cmb = HB_Combining_Below;
-            // above
-            else if (cmb == 23 || cmb == 27 || cmb == 28 ||
-                      cmb == 30 || cmb == 31 || (cmb >= 33 && cmb <= 36))
-                cmb = HB_Combining_Above;
-            //below-right
-            else if (cmb == 9 || cmb == 103 || cmb == 118)
-                cmb = HB_Combining_BelowRight;
-            // above-right
-            else if (cmb == 24 || cmb == 107 || cmb == 122)
-                cmb = HB_Combining_AboveRight;
-            else if (cmb == 25)
-                cmb = HB_Combining_AboveLeft;
-            // fixed:
-            //  19 21
-
-        }
-
-        // combining marks of different class don't interact. Reset the rectangle.
-        if (cmb != lastCmb) {
-            //qDebug("resetting rect");
-            attachmentRect = baseMetrics;
-        }
-
-        switch(cmb) {
-        case HB_Combining_DoubleBelow:
-                // ### wrong in rtl context!
-        case HB_Combining_BelowLeft:
-            p.y += offset;
-        case HB_Combining_BelowLeftAttached:
-            p.x += attachmentRect.x - markMetrics.x;
-            p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y;
-            break;
-        case HB_Combining_Below:
-            p.y += offset;
-        case HB_Combining_BelowAttached:
-            p.x += attachmentRect.x - markMetrics.x;
-            p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y;
-
-            p.x += (attachmentRect.width - markMetrics.width) / 2;
-            break;
-        case HB_Combining_BelowRight:
-            p.y += offset;
-        case HB_Combining_BelowRightAttached:
-            p.x += attachmentRect.x + attachmentRect.width - markMetrics.width - markMetrics.x;
-            p.y += attachmentRect.y + attachmentRect.height - markMetrics.y;
-            break;
-        case HB_Combining_Left:
-            p.x -= offset;
-        case HB_Combining_LeftAttached:
-            break;
-        case HB_Combining_Right:
-            p.x += offset;
-        case HB_Combining_RightAttached:
-            break;
-        case HB_Combining_DoubleAbove:
-            // ### wrong in RTL context!
-        case HB_Combining_AboveLeft:
-            p.y -= offset;
-        case HB_Combining_AboveLeftAttached:
-            p.x += attachmentRect.x - markMetrics.x;
-            p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
-            break;
-        case HB_Combining_Above:
-            p.y -= offset;
-        case HB_Combining_AboveAttached:
-            p.x += attachmentRect.x - markMetrics.x;
-            p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
-
-            p.x += (attachmentRect.width - markMetrics.width) / 2;
-            break;
-        case HB_Combining_AboveRight:
-            p.y -= offset;
-        case HB_Combining_AboveRightAttached:
-            p.x += attachmentRect.x + attachmentRect.width - markMetrics.x - markMetrics.width;
-            p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
-            break;
-
-        case HB_Combining_IotaSubscript:
-            default:
-                break;
-        }
-//          qDebug("char=%x combiningClass = %d offset=%f/%f", mark, cmb, p.x(), p.y());
-        markMetrics.x += p.x;
-        markMetrics.y += p.y;
-
-        HB_GlyphMetrics unitedAttachmentRect = attachmentRect;
-        unitedAttachmentRect.x = HB_MIN(attachmentRect.x, markMetrics.x);
-        unitedAttachmentRect.y = HB_MIN(attachmentRect.y, markMetrics.y);
-        unitedAttachmentRect.width = HB_MAX(attachmentRect.x + attachmentRect.width, markMetrics.x + markMetrics.width) - unitedAttachmentRect.x;
-        unitedAttachmentRect.height = HB_MAX(attachmentRect.y + attachmentRect.height, markMetrics.y + markMetrics.height) - unitedAttachmentRect.y;
-        attachmentRect = unitedAttachmentRect;
-
-        lastCmb = cmb;
-        if (rightToLeft) {
-            item->offsets[gfrom+i].x = p.x;
-            item->offsets[gfrom+i].y = p.y;
-        } else {
-            item->offsets[gfrom+i].x = p.x - baseMetrics.xOffset;
-            item->offsets[gfrom+i].y = p.y - baseMetrics.yOffset;
-        }
-        item->advances[gfrom+i] = 0;
-    }
-}
-
-void HB_HeuristicPosition(HB_ShaperItem *item)
-{
-    HB_GetGlyphAdvances(item);
-    HB_GlyphAttributes *attributes = item->attributes;
-
-    int cEnd = -1;
-    int i = item->num_glyphs;
-    while (i--) {
-        if (cEnd == -1 && attributes[i].mark) {
-            cEnd = i;
-        } else if (cEnd != -1 && !attributes[i].mark) {
-            positionCluster(item, i, cEnd);
-            cEnd = -1;
-        }
-    }
-}
-
-// set the glyph attributes heuristically. Assumes a 1 to 1 relationship between chars and glyphs
-// and no reordering.
-// also computes logClusters heuristically
-void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item)
-{
-    const HB_UChar16 *uc = item->string + item->item.pos;
-    hb_uint32 length = item->item.length;
-
-    // ### zeroWidth and justification are missing here!!!!!
-
-    assert(item->num_glyphs <= length);
-
-//     qDebug("QScriptEngine::heuristicSetGlyphAttributes, num_glyphs=%d", item->num_glyphs);
-    HB_GlyphAttributes *attributes = item->attributes;
-    unsigned short *logClusters = item->log_clusters;
-
-    hb_uint32 glyph_pos = 0;
-    hb_uint32 i;
-    for (i = 0; i < length; i++) {
-        if (HB_IsHighSurrogate(uc[i]) && i < length - 1
-            && HB_IsLowSurrogate(uc[i + 1])) {
-            logClusters[i] = glyph_pos;
-            logClusters[++i] = glyph_pos;
-        } else {
-            logClusters[i] = glyph_pos;
-        }
-        ++glyph_pos;
-    }
-    assert(glyph_pos == item->num_glyphs);
-
-    // first char in a run is never (treated as) a mark
-    int cStart = 0;
-    const bool symbolFont = item->face->isSymbolFont;
-    attributes[0].mark = false;
-    attributes[0].clusterStart = true;
-    attributes[0].dontPrint = (!symbolFont && uc[0] == 0x00ad) || HB_IsControlChar(uc[0]);
-
-    int pos = 0;
-    HB_CharCategory lastCat;
-    int dummy;
-    HB_GetUnicodeCharProperties(uc[0], &lastCat, &dummy);
-    for (i = 1; i < length; ++i) {
-        if (logClusters[i] == pos)
-            // same glyph
-            continue;
-        ++pos;
-        while (pos < logClusters[i]) {
-            attributes[pos] = attributes[pos-1];
-            ++pos;
-        }
-        // hide soft-hyphens by default
-        if ((!symbolFont && uc[i] == 0x00ad) || HB_IsControlChar(uc[i]))
-            attributes[pos].dontPrint = true;
-        HB_CharCategory cat;
-        int cmb;
-        HB_GetUnicodeCharProperties(uc[i], &cat, &cmb);
-        if (cat != HB_Mark_NonSpacing) {
-            attributes[pos].mark = false;
-            attributes[pos].clusterStart = true;
-            attributes[pos].combiningClass = 0;
-            cStart = logClusters[i];
-        } else {
-            if (cmb == 0) {
-                // Fix 0 combining classes
-                if ((uc[pos] & 0xff00) == 0x0e00) {
-                    // thai or lao
-                    if (uc[pos] == 0xe31 ||
-                         uc[pos] == 0xe34 ||
-                         uc[pos] == 0xe35 ||
-                         uc[pos] == 0xe36 ||
-                         uc[pos] == 0xe37 ||
-                         uc[pos] == 0xe47 ||
-                         uc[pos] == 0xe4c ||
-                         uc[pos] == 0xe4d ||
-                         uc[pos] == 0xe4e) {
-                        cmb = HB_Combining_AboveRight;
-                    } else if (uc[pos] == 0xeb1 ||
-                                uc[pos] == 0xeb4 ||
-                                uc[pos] == 0xeb5 ||
-                                uc[pos] == 0xeb6 ||
-                                uc[pos] == 0xeb7 ||
-                                uc[pos] == 0xebb ||
-                                uc[pos] == 0xecc ||
-                                uc[pos] == 0xecd) {
-                        cmb = HB_Combining_Above;
-                    } else if (uc[pos] == 0xebc) {
-                        cmb = HB_Combining_Below;
-                    }
-                }
-            }
-
-            attributes[pos].mark = true;
-            attributes[pos].clusterStart = false;
-            attributes[pos].combiningClass = cmb;
-            logClusters[i] = cStart;
-        }
-        // one gets an inter character justification point if the current char is not a non spacing mark.
-        // as then the current char belongs to the last one and one gets a space justification point
-        // after the space char.
-        if (lastCat == HB_Separator_Space)
-            attributes[pos-1].justification = HB_Space;
-        else if (cat != HB_Mark_NonSpacing)
-            attributes[pos-1].justification = HB_Character;
-        else
-            attributes[pos-1].justification = HB_NoJustification;
-
-        lastCat = cat;
-    }
-    pos = logClusters[length-1];
-    if (lastCat == HB_Separator_Space)
-        attributes[pos].justification = HB_Space;
-    else
-        attributes[pos].justification = HB_Character;
-}
-
-#ifndef NO_OPENTYPE
-static const HB_OpenTypeFeature basic_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('l', 'i', 'g', 'a'), CcmpProperty },
-    { HB_MAKE_TAG('c', 'l', 'i', 'g'), CcmpProperty },
-    {0, 0}
-};
-#endif
-
-HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item)
-{
-    if (shaper_item->glyphIndicesPresent) {
-        shaper_item->num_glyphs = shaper_item->initialGlyphCount;
-        shaper_item->glyphIndicesPresent = false;
-        return true;
-    }
-    return shaper_item->font->klass
-           ->convertStringToGlyphIndices(shaper_item->font,
-                                         shaper_item->string + shaper_item->item.pos, shaper_item->item.length,
-                                         shaper_item->glyphs, &shaper_item->num_glyphs,
-                                         shaper_item->item.bidiLevel % 2);
-}
-
-HB_Bool HB_BasicShape(HB_ShaperItem *shaper_item)
-{
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = shaper_item->num_glyphs;
-#endif
-
-    if (!HB_ConvertStringToGlyphIndices(shaper_item))
-        return false;
-
-    HB_HeuristicSetGlyphAttributes(shaper_item);
-
-#ifndef NO_OPENTYPE
-    if (HB_SelectScript(shaper_item, basic_features)) {
-        HB_OpenTypeShape(shaper_item, /*properties*/0);
-        return HB_OpenTypePosition(shaper_item, availableGlyphs, /*doLogClusters*/true);
-    }
-#endif
-
-    HB_HeuristicPosition(shaper_item);
-    return true;
-}
-
-const HB_ScriptEngine HB_ScriptEngines[] = {
-    // Common
-    { HB_BasicShape},
-    // Greek
-    { HB_GreekShape},
-    // Cyrillic
-    { HB_BasicShape},
-    // Armenian
-    { HB_BasicShape},
-    // Hebrew
-    { HB_HebrewShape},
-    // Arabic
-    { HB_ArabicShape},
-    // Syriac
-    { HB_ArabicShape},
-    // Thaana
-    { HB_BasicShape},
-    // Devanagari
-    { HB_IndicShape},
-    // Bengali
-    { HB_IndicShape},
-    // Gurmukhi
-    { HB_IndicShape},
-    // Gujarati
-    { HB_IndicShape},
-    // Oriya
-    { HB_IndicShape},
-    // Tamil
-    { HB_IndicShape},
-    // Telugu
-    { HB_IndicShape},
-    // Kannada
-    { HB_IndicShape},
-    // Malayalam
-    { HB_IndicShape},
-    // Sinhala
-    { HB_IndicShape},
-    // Thai
-    { HB_BasicShape},
-    // Lao
-    { HB_BasicShape},
-    // Tibetan
-    { HB_TibetanShape},
-    // Myanmar
-    { HB_MyanmarShape},
-    // Georgian
-    { HB_BasicShape},
-    // Hangul
-    { HB_HangulShape},
-    // Ogham
-    { HB_BasicShape},
-    // Runic
-    { HB_BasicShape},
-    // Khmer
-    { HB_KhmerShape},
-    // N'Ko
-    { HB_ArabicShape}
-};
-
-
-static inline char *tag_to_string(HB_UInt tag)
-{
-    static char string[5];
-    string[0] = (tag >> 24)&0xff;
-    string[1] = (tag >> 16)&0xff;
-    string[2] = (tag >> 8)&0xff;
-    string[3] = tag&0xff;
-    string[4] = 0;
-    return string;
-}
-
-#ifdef OT_DEBUG
-static void dump_string(HB_Buffer buffer)
-{
-    for (uint i = 0; i < buffer->in_length; ++i) {
-        qDebug("    %x: cluster=%d", buffer->in_string[i].gindex, buffer->in_string[i].cluster);
-    }
-}
-#define DEBUG printf
-#else
-#define DEBUG if (1) ; else printf
-#endif
-
-#if 0
-#define DefaultLangSys 0xffff
-#define DefaultScript HB_MAKE_TAG('D', 'F', 'L', 'T')
-#endif
-
-enum {
-    RequiresGsub = 1,
-    RequiresGpos = 2
-};
-
-struct OTScripts {
-    unsigned int tag;
-    int flags;
-};
-static const OTScripts ot_scripts [] = {
-    // Common
-    { HB_MAKE_TAG('l', 'a', 't', 'n'), 0 },
-    // Greek
-    { HB_MAKE_TAG('g', 'r', 'e', 'k'), 0 },
-    // Cyrillic
-    { HB_MAKE_TAG('c', 'y', 'r', 'l'), 0 },
-    // Armenian
-    { HB_MAKE_TAG('a', 'r', 'm', 'n'), 0 },
-    // Hebrew
-    { HB_MAKE_TAG('h', 'e', 'b', 'r'), 1 },
-    // Arabic
-    { HB_MAKE_TAG('a', 'r', 'a', 'b'), 1 },
-    // Syriac
-    { HB_MAKE_TAG('s', 'y', 'r', 'c'), 1 },
-    // Thaana
-    { HB_MAKE_TAG('t', 'h', 'a', 'a'), 1 },
-    // Devanagari
-    { HB_MAKE_TAG('d', 'e', 'v', 'a'), 1 },
-    // Bengali
-    { HB_MAKE_TAG('b', 'e', 'n', 'g'), 1 },
-    // Gurmukhi
-    { HB_MAKE_TAG('g', 'u', 'r', 'u'), 1 },
-    // Gujarati
-    { HB_MAKE_TAG('g', 'u', 'j', 'r'), 1 },
-    // Oriya
-    { HB_MAKE_TAG('o', 'r', 'y', 'a'), 1 },
-    // Tamil
-    { HB_MAKE_TAG('t', 'a', 'm', 'l'), 1 },
-    // Telugu
-    { HB_MAKE_TAG('t', 'e', 'l', 'u'), 1 },
-    // Kannada
-    { HB_MAKE_TAG('k', 'n', 'd', 'a'), 1 },
-    // Malayalam
-    { HB_MAKE_TAG('m', 'l', 'y', 'm'), 1 },
-    // Sinhala
-    { HB_MAKE_TAG('s', 'i', 'n', 'h'), 1 },
-    // Thai
-    { HB_MAKE_TAG('t', 'h', 'a', 'i'), 1 },
-    // Lao
-    { HB_MAKE_TAG('l', 'a', 'o', ' '), 1 },
-    // Tibetan
-    { HB_MAKE_TAG('t', 'i', 'b', 't'), 1 },
-    // Myanmar
-    { HB_MAKE_TAG('m', 'y', 'm', 'r'), 1 },
-    // Georgian
-    { HB_MAKE_TAG('g', 'e', 'o', 'r'), 0 },
-    // Hangul
-    { HB_MAKE_TAG('h', 'a', 'n', 'g'), 1 },
-    // Ogham
-    { HB_MAKE_TAG('o', 'g', 'a', 'm'), 0 },
-    // Runic
-    { HB_MAKE_TAG('r', 'u', 'n', 'r'), 0 },
-    // Khmer
-    { HB_MAKE_TAG('k', 'h', 'm', 'r'), 1 },
-    // N'Ko
-    { HB_MAKE_TAG('n', 'k', 'o', ' '), 1 }
-};
-enum { NumOTScripts = sizeof(ot_scripts)/sizeof(OTScripts) };
-
-static HB_Bool checkScript(HB_Face face, int script)
-{
-    assert(script < HB_ScriptCount);
-
-    if (!face->gsub && !face->gpos)
-        return false;
-
-    unsigned int tag = ot_scripts[script].tag;
-    int requirements = ot_scripts[script].flags;
-
-    if (requirements & RequiresGsub) {
-        if (!face->gsub)
-            return false;
-
-        HB_UShort script_index;
-        HB_Error error = HB_GSUB_Select_Script(face->gsub, tag, &script_index);
-        if (error) {
-            DEBUG("could not select script %d in GSub table: %d", (int)script, error);
-            error = HB_GSUB_Select_Script(face->gsub, HB_MAKE_TAG('D', 'F', 'L', 'T'), &script_index);
-            if (error)
-                return false;
-        }
-    }
-
-    if (requirements & RequiresGpos) {
-        if (!face->gpos)
-            return false;
-
-        HB_UShort script_index;
-        HB_Error error = HB_GPOS_Select_Script(face->gpos, script, &script_index);
-        if (error) {
-            DEBUG("could not select script in gpos table: %d", error);
-            error = HB_GPOS_Select_Script(face->gpos, HB_MAKE_TAG('D', 'F', 'L', 'T'), &script_index);
-            if (error)
-                return false;
-        }
-
-    }
-    return true;
-}
-
-static HB_Stream getTableStream(void *font, HB_GetFontTableFunc tableFunc, HB_Tag tag)
-{
-    HB_Error error;
-    HB_UInt length = 0;
-    HB_Stream stream = 0;
-
-    if (!font)
-        return 0;
-
-    error = tableFunc(font, tag, 0, &length);
-    if (error)
-        return 0;
-    stream = (HB_Stream)malloc(sizeof(HB_StreamRec));
-    if (!stream)
-        return 0;
-    stream->base = (HB_Byte*)malloc(length);
-    if (!stream->base) {
-        free(stream);
-        return 0;
-    }
-    error = tableFunc(font, tag, stream->base, &length);
-    if (error) {
-        _hb_close_stream(stream);
-        return 0;
-    }
-    stream->size = length;
-    stream->pos = 0;
-    stream->cursor = NULL;
-    return stream;
-}
-
-HB_Face HB_NewFace(void *font, HB_GetFontTableFunc tableFunc)
-{
-    HB_Face face = (HB_Face )malloc(sizeof(HB_FaceRec));
-    if (!face)
-        return 0;
-
-    face->isSymbolFont = false;
-    face->gdef = 0;
-    face->gpos = 0;
-    face->gsub = 0;
-    face->current_script = HB_ScriptCount;
-    face->current_flags = HB_ShaperFlag_Default;
-    face->has_opentype_kerning = false;
-    face->tmpAttributes = 0;
-    face->tmpLogClusters = 0;
-    face->glyphs_substituted = false;
-    face->buffer = 0;
-
-    HB_Error error = HB_Err_Ok;
-    HB_Stream stream;
-    HB_Stream gdefStream;
-
-    gdefStream = getTableStream(font, tableFunc, TTAG_GDEF);
-    error = HB_Err_Not_Covered;
-    if (!gdefStream || (error = HB_Load_GDEF_Table(gdefStream, &face->gdef))) {
-        //DEBUG("error loading gdef table: %d", error);
-        face->gdef = 0;
-    }
-
-    //DEBUG() << "trying to load gsub table";
-    stream = getTableStream(font, tableFunc, TTAG_GSUB);
-    error = HB_Err_Not_Covered;
-    if (!stream || (error = HB_Load_GSUB_Table(stream, &face->gsub, face->gdef, gdefStream))) {
-        face->gsub = 0;
-        if (error != HB_Err_Not_Covered) {
-            //DEBUG("error loading gsub table: %d", error);
-        } else {
-            //DEBUG("face doesn't have a gsub table");
-        }
-    }
-    _hb_close_stream(stream);
-
-    stream = getTableStream(font, tableFunc, TTAG_GPOS);
-    error = HB_Err_Not_Covered;
-    if (!stream || (error = HB_Load_GPOS_Table(stream, &face->gpos, face->gdef, gdefStream))) {
-        face->gpos = 0;
-        DEBUG("error loading gpos table: %d", error);
-    }
-    _hb_close_stream(stream);
-
-    _hb_close_stream(gdefStream);
-
-    for (unsigned int i = 0; i < HB_ScriptCount; ++i)
-        face->supported_scripts[i] = checkScript(face, i);
-
-    if (HB_Buffer_new(&face->buffer) != HB_Err_Ok) {
-        HB_FreeFace(face);
-        return 0;
-    }
-
-    return face;
-}
-
-void HB_FreeFace(HB_Face face)
-{
-    if (!face)
-        return;
-    if (face->gpos)
-        HB_Done_GPOS_Table(face->gpos);
-    if (face->gsub)
-        HB_Done_GSUB_Table(face->gsub);
-    if (face->gdef)
-        HB_Done_GDEF_Table(face->gdef);
-    if (face->buffer)
-        HB_Buffer_free(face->buffer);
-    if (face->tmpAttributes)
-        free(face->tmpAttributes);
-    if (face->tmpLogClusters)
-        free(face->tmpLogClusters);
-    free(face);
-}
-
-HB_Bool HB_SelectScript(HB_ShaperItem *shaper_item, const HB_OpenTypeFeature *features)
-{
-    HB_Script script = shaper_item->item.script;
-
-    if (!shaper_item->face->supported_scripts[script])
-        return false;
-
-    HB_Face face = shaper_item->face;
-    if (face->current_script == script && face->current_flags == shaper_item->shaperFlags)
-        return true;
-
-    face->current_script = script;
-    face->current_flags = shaper_item->shaperFlags;
-
-    assert(script < HB_ScriptCount);
-    // find script in our list of supported scripts.
-    unsigned int tag = ot_scripts[script].tag;
-
-    if (face->gsub && features) {
-#ifdef OT_DEBUG
-        {
-            HB_FeatureList featurelist = face->gsub->FeatureList;
-            int numfeatures = featurelist.FeatureCount;
-            DEBUG("gsub table has %d features", numfeatures);
-            for (int i = 0; i < numfeatures; i++) {
-                HB_FeatureRecord *r = featurelist.FeatureRecord + i;
-                DEBUG("   feature '%s'", tag_to_string(r->FeatureTag));
-            }
-        }
-#endif
-        HB_GSUB_Clear_Features(face->gsub);
-        HB_UShort script_index;
-        HB_Error error = HB_GSUB_Select_Script(face->gsub, tag, &script_index);
-        if (!error) {
-            DEBUG("script %s has script index %d", tag_to_string(script), script_index);
-            while (features->tag) {
-                HB_UShort feature_index;
-                error = HB_GSUB_Select_Feature(face->gsub, features->tag, script_index, 0xffff, &feature_index);
-                if (!error) {
-                    DEBUG("  adding feature %s", tag_to_string(features->tag));
-                    HB_GSUB_Add_Feature(face->gsub, feature_index, features->property);
-                }
-                ++features;
-            }
-        }
-    }
-
-    // reset
-    face->has_opentype_kerning = false;
-
-    if (face->gpos) {
-        HB_GPOS_Clear_Features(face->gpos);
-        HB_UShort script_index;
-        HB_Error error = HB_GPOS_Select_Script(face->gpos, tag, &script_index);
-        if (!error) {
-#ifdef OT_DEBUG
-            {
-                HB_FeatureList featurelist = face->gpos->FeatureList;
-                int numfeatures = featurelist.FeatureCount;
-                DEBUG("gpos table has %d features", numfeatures);
-                for(int i = 0; i < numfeatures; i++) {
-                    HB_FeatureRecord *r = featurelist.FeatureRecord + i;
-                    HB_UShort feature_index;
-                    HB_GPOS_Select_Feature(face->gpos, r->FeatureTag, script_index, 0xffff, &feature_index);
-                    DEBUG("   feature '%s'", tag_to_string(r->FeatureTag));
-                }
-            }
-#endif
-            HB_UInt *feature_tag_list_buffer;
-            error = HB_GPOS_Query_Features(face->gpos, script_index, 0xffff, &feature_tag_list_buffer);
-            if (!error) {
-                HB_UInt *feature_tag_list = feature_tag_list_buffer;
-                while (*feature_tag_list) {
-                    HB_UShort feature_index;
-                    if (*feature_tag_list == HB_MAKE_TAG('k', 'e', 'r', 'n')) {
-                        if (face->current_flags & HB_ShaperFlag_NoKerning) {
-                            ++feature_tag_list;
-                            continue;
-                        }
-                        face->has_opentype_kerning = true;
-                    }
-                    error = HB_GPOS_Select_Feature(face->gpos, *feature_tag_list, script_index, 0xffff, &feature_index);
-                    if (!error)
-                        HB_GPOS_Add_Feature(face->gpos, feature_index, PositioningProperties);
-                    ++feature_tag_list;
-                }
-                FREE(feature_tag_list_buffer);
-            }
-        }
-    }
-
-    return true;
-}
-
-HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties)
-{
-    HB_GlyphAttributes *tmpAttributes;
-    unsigned int *tmpLogClusters;
-
-    HB_Face face = item->face;
-
-    face->length = item->num_glyphs;
-
-    HB_Buffer_clear(face->buffer);
-
-    tmpAttributes = (HB_GlyphAttributes *) realloc(face->tmpAttributes, face->length*sizeof(HB_GlyphAttributes));
-    if (!tmpAttributes)
-        return false;
-    face->tmpAttributes = tmpAttributes;
-
-    tmpLogClusters = (unsigned int *) realloc(face->tmpLogClusters, face->length*sizeof(unsigned int));
-    if (!tmpLogClusters)
-        return false;
-    face->tmpLogClusters = tmpLogClusters;
-
-    for (int i = 0; i < face->length; ++i) {
-        HB_Buffer_add_glyph(face->buffer, item->glyphs[i], properties ? properties[i] : 0, i);
-        face->tmpAttributes[i] = item->attributes[i];
-        face->tmpLogClusters[i] = item->log_clusters[i];
-    }
-
-#ifdef OT_DEBUG
-    DEBUG("-----------------------------------------");
-//     DEBUG("log clusters before shaping:");
-//     for (int j = 0; j < length; j++)
-//         DEBUG("    log[%d] = %d", j, item->log_clusters[j]);
-    DEBUG("original glyphs: %p", item->glyphs);
-    for (int i = 0; i < length; ++i)
-        DEBUG("   glyph=%4x", hb_buffer->in_string[i].gindex);
-//     dump_string(hb_buffer);
-#endif
-
-    face->glyphs_substituted = false;
-    if (face->gsub) {
-        unsigned int error = HB_GSUB_Apply_String(face->gsub, face->buffer);
-        if (error && error != HB_Err_Not_Covered)
-            return false;
-        face->glyphs_substituted = (error != HB_Err_Not_Covered);
-    }
-
-#ifdef OT_DEBUG
-//     DEBUG("log clusters before shaping:");
-//     for (int j = 0; j < length; j++)
-//         DEBUG("    log[%d] = %d", j, item->log_clusters[j]);
-    DEBUG("shaped glyphs:");
-    for (int i = 0; i < length; ++i)
-        DEBUG("   glyph=%4x", hb_buffer->in_string[i].gindex);
-    DEBUG("-----------------------------------------");
-//     dump_string(hb_buffer);
-#endif
-
-    return true;
-}
-
-HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters)
-{
-    HB_Face face = item->face;
-
-    bool glyphs_positioned = false;
-    if (face->gpos) {
-        if (face->buffer->positions)
-            memset(face->buffer->positions, 0, face->buffer->in_length*sizeof(HB_PositionRec));
-        // #### check that passing "false,false" is correct
-        glyphs_positioned = HB_GPOS_Apply_String(item->font, face->gpos, face->current_flags, face->buffer, false, false) != HB_Err_Not_Covered;
-    }
-
-    if (!face->glyphs_substituted && !glyphs_positioned) {
-        HB_GetGlyphAdvances(item);
-        return true; // nothing to do for us
-    }
-
-    // make sure we have enough space to write everything back
-    if (availableGlyphs < (int)face->buffer->in_length) {
-        item->num_glyphs = face->buffer->in_length;
-        return false;
-    }
-
-    HB_Glyph *glyphs = item->glyphs;
-    HB_GlyphAttributes *attributes = item->attributes;
-
-    for (unsigned int i = 0; i < face->buffer->in_length; ++i) {
-        glyphs[i] = face->buffer->in_string[i].gindex;
-        attributes[i] = face->tmpAttributes[face->buffer->in_string[i].cluster];
-        if (i && face->buffer->in_string[i].cluster == face->buffer->in_string[i-1].cluster)
-            attributes[i].clusterStart = false;
-    }
-    item->num_glyphs = face->buffer->in_length;
-
-    if (doLogClusters && face->glyphs_substituted) {
-        // we can't do this for indic, as we pass the stuf in syllables and it's easier to do it in the shaper.
-        unsigned short *logClusters = item->log_clusters;
-        int clusterStart = 0;
-        int oldCi = 0;
-        // #### the reconstruction of the logclusters currently does not work if the original string
-        // contains surrogate pairs
-        for (unsigned int i = 0; i < face->buffer->in_length; ++i) {
-            int ci = face->buffer->in_string[i].cluster;
-            //         DEBUG("   ci[%d] = %d mark=%d, cmb=%d, cs=%d",
-            //                i, ci, glyphAttributes[i].mark, glyphAttributes[i].combiningClass, glyphAttributes[i].clusterStart);
-            if (!attributes[i].mark && attributes[i].clusterStart && ci != oldCi) {
-                for (int j = oldCi; j < ci; j++)
-                    logClusters[j] = clusterStart;
-                clusterStart = i;
-                oldCi = ci;
-            }
-        }
-        for (int j = oldCi; j < face->length; j++)
-            logClusters[j] = clusterStart;
-    }
-
-    // calulate the advances for the shaped glyphs
-//     DEBUG("unpositioned: ");
-
-    // positioning code:
-    if (glyphs_positioned) {
-        HB_GetGlyphAdvances(item);
-        HB_Position positions = face->buffer->positions;
-        HB_Fixed *advances = item->advances;
-
-//         DEBUG("positioned glyphs:");
-        for (unsigned int i = 0; i < face->buffer->in_length; i++) {
-//             DEBUG("    %d:\t orig advance: (%d/%d)\tadv=(%d/%d)\tpos=(%d/%d)\tback=%d\tnew_advance=%d", i,
-//                    glyphs[i].advance.x.toInt(), glyphs[i].advance.y.toInt(),
-//                    (int)(positions[i].x_advance >> 6), (int)(positions[i].y_advance >> 6),
-//                    (int)(positions[i].x_pos >> 6), (int)(positions[i].y_pos >> 6),
-//                    positions[i].back, positions[i].new_advance);
-
-            HB_Fixed adjustment = positions[i].x_advance;
-
-            if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics))
-                adjustment = HB_FIXED_ROUND(adjustment);
-
-            if (positions[i].new_advance) {
-                ; //advances[i] = adjustment;
-            } else {
-                advances[i] += adjustment;
-            }
-
-            int back = 0;
-            HB_FixedPoint *offsets = item->offsets;
-            offsets[i].x = positions[i].x_pos;
-            offsets[i].y = positions[i].y_pos;
-            while (positions[i - back].back) {
-                back += positions[i - back].back;
-                offsets[i].x += positions[i - back].x_pos;
-                offsets[i].y += positions[i - back].y_pos;
-            }
-            offsets[i].y = -offsets[i].y;
-
-            if (item->item.bidiLevel % 2) {
-                // ### may need to go back multiple glyphs like in ltr
-                back = positions[i].back;
-                while (back--)
-                    offsets[i].x -= advances[i-back];
-            } else {
-                back = 0;
-                while (positions[i - back].back) {
-                    back += positions[i - back].back;
-                    offsets[i].x -= advances[i-back];
-                }
-            }
-//             DEBUG("   ->\tadv=%d\tpos=(%d/%d)",
-//                    glyphs[i].advance.x.toInt(), glyphs[i].offset.x.toInt(), glyphs[i].offset.y.toInt());
-        }
-        item->kerning_applied = face->has_opentype_kerning;
-    } else {
-        HB_HeuristicPosition(item);
-    }
-
-#ifdef OT_DEBUG
-    if (doLogClusters) {
-        DEBUG("log clusters after shaping:");
-        for (int j = 0; j < length; j++)
-            DEBUG("    log[%d] = %d", j, item->log_clusters[j]);
-    }
-    DEBUG("final glyphs:");
-    for (int i = 0; i < (int)hb_buffer->in_length; ++i)
-        DEBUG("   glyph=%4x char_index=%d mark: %d cmp: %d, clusterStart: %d advance=%d/%d offset=%d/%d",
-               glyphs[i].glyph, hb_buffer->in_string[i].cluster, glyphs[i].attributes.mark,
-               glyphs[i].attributes.combiningClass, glyphs[i].attributes.clusterStart,
-               glyphs[i].advance.x.toInt(), glyphs[i].advance.y.toInt(),
-               glyphs[i].offset.x.toInt(), glyphs[i].offset.y.toInt());
-    DEBUG("-----------------------------------------");
-#endif
-    return true;
-}
-
-HB_Bool HB_ShapeItem(HB_ShaperItem *shaper_item)
-{
-    HB_Bool result = false;
-    if (shaper_item->num_glyphs < shaper_item->item.length) {
-        shaper_item->num_glyphs = shaper_item->item.length;
-        return false;
-    }
-    assert(shaper_item->item.script < HB_ScriptCount);
-    result = HB_ScriptEngines[shaper_item->item.script].shape(shaper_item);
-    shaper_item->glyphIndicesPresent = false;
-    return result;
-}
diff --git a/src/hb-old/harfbuzz-shaper.h b/src/hb-old/harfbuzz-shaper.h
deleted file mode 100644 (file)
index ab65004..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_SHAPER_H
-#define HARFBUZZ_SHAPER_H
-
-#include "harfbuzz-global.h"
-#include "harfbuzz-gdef.h"
-#include "harfbuzz-gpos.h"
-#include "harfbuzz-gsub.h"
-#include "harfbuzz-external.h"
-#include "harfbuzz-stream-private.h"
-
-HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
-/*
-   using anything else than signed or unsigned for bitfields in C is non standard,
-   but accepted by almost all compilers. And it gives a significant reduction in
-   memory consumption as HB_CharAttributes and HB_GlyphAttributes will not have
-   a 4 byte alignment
-*/
-#ifdef  __xlC__
-typedef unsigned hb_bitfield;
-#else
-typedef hb_uint8 hb_bitfield;
-#endif
-
-typedef enum {
-        HB_Script_Common,
-        HB_Script_Greek,
-        HB_Script_Cyrillic,
-        HB_Script_Armenian,
-        HB_Script_Hebrew,
-        HB_Script_Arabic,
-        HB_Script_Syriac,
-        HB_Script_Thaana,
-        HB_Script_Devanagari,
-        HB_Script_Bengali,
-        HB_Script_Gurmukhi,
-        HB_Script_Gujarati,
-        HB_Script_Oriya,
-        HB_Script_Tamil,
-        HB_Script_Telugu,
-        HB_Script_Kannada,
-        HB_Script_Malayalam,
-        HB_Script_Sinhala,
-        HB_Script_Thai,
-        HB_Script_Lao,
-        HB_Script_Tibetan,
-        HB_Script_Myanmar,
-        HB_Script_Georgian,
-        HB_Script_Hangul,
-        HB_Script_Ogham,
-        HB_Script_Runic,
-        HB_Script_Khmer,
-        HB_Script_Nko,
-        HB_Script_Inherited,
-        HB_ScriptCount = HB_Script_Inherited
-        /*
-        HB_Script_Latin = Common,
-        HB_Script_Ethiopic = Common,
-        HB_Script_Cherokee = Common,
-        HB_Script_CanadianAboriginal = Common,
-        HB_Script_Mongolian = Common,
-        HB_Script_Hiragana = Common,
-        HB_Script_Katakana = Common,
-        HB_Script_Bopomofo = Common,
-        HB_Script_Han = Common,
-        HB_Script_Yi = Common,
-        HB_Script_OldItalic = Common,
-        HB_Script_Gothic = Common,
-        HB_Script_Deseret = Common,
-        HB_Script_Tagalog = Common,
-        HB_Script_Hanunoo = Common,
-        HB_Script_Buhid = Common,
-        HB_Script_Tagbanwa = Common,
-        HB_Script_Limbu = Common,
-        HB_Script_TaiLe = Common,
-        HB_Script_LinearB = Common,
-        HB_Script_Ugaritic = Common,
-        HB_Script_Shavian = Common,
-        HB_Script_Osmanya = Common,
-        HB_Script_Cypriot = Common,
-        HB_Script_Braille = Common,
-        HB_Script_Buginese = Common,
-        HB_Script_Coptic = Common,
-        HB_Script_NewTaiLue = Common,
-        HB_Script_Glagolitic = Common,
-        HB_Script_Tifinagh = Common,
-        HB_Script_SylotiNagri = Common,
-        HB_Script_OldPersian = Common,
-        HB_Script_Kharoshthi = Common,
-        HB_Script_Balinese = Common,
-        HB_Script_Cuneiform = Common,
-        HB_Script_Phoenician = Common,
-        HB_Script_PhagsPa = Common,
-        */
-} HB_Script;
-
-typedef struct
-{
-    hb_uint32 pos;
-    hb_uint32 length;
-    HB_Script script;
-    hb_uint8 bidiLevel;
-} HB_ScriptItem;
-
-
-typedef enum {
-    HB_LeftToRight = 0,
-    HB_RightToLeft = 1
-} HB_StringToGlyphsFlags;
-
-typedef enum {
-    HB_ShaperFlag_Default = 0,
-    HB_ShaperFlag_NoKerning = 1,
-    HB_ShaperFlag_UseDesignMetrics = 2
-} HB_ShaperFlag;
-
-/* 
-   highest value means highest priority for justification. Justification is done by first inserting kashidas
-   starting with the highest priority positions, then stretching spaces, afterwards extending inter char
-   spacing, and last spacing between arabic words.
-   NoJustification is for example set for arabic where no Kashida can be inserted or for diacritics.
-*/
-typedef enum {
-    HB_NoJustification= 0,   /* Justification can't be applied after this glyph */
-    HB_Arabic_Space   = 1,   /* This glyph represents a space inside arabic text */
-    HB_Character      = 2,   /* Inter-character justification point follows this glyph */
-    HB_Space          = 4,   /* This glyph represents a blank outside an Arabic run */
-    HB_Arabic_Normal  = 7,   /* Normal Middle-Of-Word glyph that connects to the right (begin) */
-    HB_Arabic_Waw     = 8,   /* Next character is final form of Waw/Ain/Qaf/Fa */
-    HB_Arabic_BaRa    = 9,   /* Next two chars are Ba + Ra/Ya/AlefMaksura */
-    HB_Arabic_Alef    = 10,  /* Next character is final form of Alef/Tah/Lam/Kaf/Gaf */
-    HB_Arabic_HaaDal  = 11,  /* Next character is final form of Haa/Dal/Taa Marbutah */
-    HB_Arabic_Seen    = 12,  /* Initial or Medial form Of Seen/Sad */
-    HB_Arabic_Kashida = 13   /* Kashida(U+640) in middle of word */
-} HB_JustificationClass;
-
-/* This structure is binary compatible with Uniscribe's SCRIPT_VISATTR. Would be nice to keep
- * it like that. If this is a problem please tell Trolltech :)
- */
-typedef struct {
-    hb_bitfield justification   :4;  /* Justification class */
-    hb_bitfield clusterStart    :1;  /* First glyph of representation of cluster */
-    hb_bitfield mark            :1;  /* needs to be positioned around base char */
-    hb_bitfield zeroWidth       :1;  /* ZWJ, ZWNJ etc, with no width */
-    hb_bitfield dontPrint       :1;
-    hb_bitfield combiningClass  :8;
-} HB_GlyphAttributes;
-
-typedef struct HB_FaceRec_ {
-    HB_Bool isSymbolFont;
-
-    HB_GDEF gdef;
-    HB_GSUB gsub;
-    HB_GPOS gpos;
-    HB_Bool supported_scripts[HB_ScriptCount];
-    HB_Buffer buffer;
-    HB_Script current_script;
-    int current_flags; /* HB_ShaperFlags */
-    HB_Bool has_opentype_kerning;
-    HB_Bool glyphs_substituted;
-    HB_GlyphAttributes *tmpAttributes;
-    unsigned int *tmpLogClusters;
-    int length;
-    int orig_nglyphs;
-} HB_FaceRec;
-
-typedef HB_Error (*HB_GetFontTableFunc)(void *font, HB_Tag tag, HB_Byte *buffer, HB_UInt *length);
-
-HB_Face HB_NewFace(void *font, HB_GetFontTableFunc tableFunc);
-void HB_FreeFace(HB_Face face);
-
-typedef struct {
-    HB_Fixed x, y;
-    HB_Fixed width, height;
-    HB_Fixed xOffset, yOffset;
-} HB_GlyphMetrics;
-
-typedef enum {
-    HB_FontAscent
-} HB_FontMetric;
-
-typedef struct {
-    HB_Bool  (*convertStringToGlyphIndices)(HB_Font font, const HB_UChar16 *string, hb_uint32 length, HB_Glyph *glyphs, hb_uint32 *numGlyphs, HB_Bool rightToLeft);
-    void     (*getGlyphAdvances)(HB_Font font, const HB_Glyph *glyphs, hb_uint32 numGlyphs, HB_Fixed *advances, int flags /*HB_ShaperFlag*/);
-    HB_Bool  (*canRender)(HB_Font font, const HB_UChar16 *string, hb_uint32 length);
-    /* implementation needs to make sure to load a scaled glyph, so /no/ FT_LOAD_NO_SCALE */
-    HB_Error (*getPointInOutline)(HB_Font font, HB_Glyph glyph, int flags /*HB_ShaperFlag*/, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints);
-    void     (*getGlyphMetrics)(HB_Font font, HB_Glyph glyph, HB_GlyphMetrics *metrics);
-    HB_Fixed (*getFontMetric)(HB_Font font, HB_FontMetric metric);
-} HB_FontClass;
-
-typedef struct HB_Font_ {
-    const HB_FontClass *klass;
-
-    /* Metrics */
-    HB_UShort x_ppem, y_ppem;
-    HB_16Dot16 x_scale, y_scale;
-
-    void *userData;
-} HB_FontRec;
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
-typedef struct HB_ShaperItem_ HB_ShaperItem;
-
-struct HB_ShaperItem_ {
-    const HB_UChar16 *string;               /* input: the Unicode UTF16 text to be shaped */
-    hb_uint32 stringLength;                 /* input: the length of the input in 16-bit words */
-    HB_ScriptItem item;                     /* input: the current run to be shaped: a run of text all in the same script that is a substring of <string> */
-    HB_Font font;                           /* input: the font: scale, units and function pointers supplying glyph indices and metrics */
-    HB_Face face;                           /* input: the shaper state; current script, access to the OpenType tables , etc. */
-    int shaperFlags;                        /* input (unused) should be set to 0; intended to support flags defined in HB_ShaperFlag */
-    HB_Bool glyphIndicesPresent;            /* input: true if the <glyphs> array contains glyph indices ready to be shaped */
-    hb_uint32 initialGlyphCount;            /* input: if glyphIndicesPresent is true, the number of glyph indices in the <glyphs> array */
-
-    hb_uint32 num_glyphs;                   /* input: capacity of output arrays <glyphs>, <attributes>, <advances>, <offsets>, and <log_clusters>; */
-                                            /* output: required capacity (may be larger than actual capacity) */
-
-    HB_Glyph *glyphs;                       /* output: <num_glyphs> indices of shaped glyphs */
-    HB_GlyphAttributes *attributes;         /* output: <num_glyphs> glyph attributes */
-    HB_Fixed *advances;                     /* output: <num_glyphs> advances */
-    HB_FixedPoint *offsets;                 /* output: <num_glyphs> offsets */
-    unsigned short *log_clusters;           /* output: for each output glyph, the index in the input of the start of its logical cluster */
-    /* XXX the discription for log_clusters is wrong.  It maps each input position to output glyph position! */
-
-    /* internal */
-    HB_Bool kerning_applied;                /* output: true if kerning was applied by the shaper */
-};
-
-HB_Bool HB_ShapeItem(HB_ShaperItem *item);
-
-HB_END_HEADER
-
-#endif
diff --git a/src/hb-old/harfbuzz-stream-private.h b/src/hb-old/harfbuzz-stream-private.h
deleted file mode 100644 (file)
index fbd9f81..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HARFBUZZ_STREAM_PRIVATE_H
-#define HARFBUZZ_STREAM_PRIVATE_H
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-stream.h"
-
-HB_BEGIN_HEADER
-
-HB_INTERNAL void
-_hb_close_stream( HB_Stream stream );
-
-HB_INTERNAL HB_Int
-_hb_stream_pos( HB_Stream stream );
-
-HB_INTERNAL HB_Error
-_hb_stream_seek( HB_Stream stream,
-                 HB_UInt   pos );
-
-HB_INTERNAL HB_Error
-_hb_stream_frame_enter( HB_Stream stream,
-                        HB_UInt   size );
-
-HB_INTERNAL void
-_hb_stream_frame_exit( HB_Stream stream );
-
-/* convenience macros */
-
-#define  SET_ERR(c)   ( (error = (c)) != 0 )
-
-#define  GOTO_Table(tag) (0)
-#define  FILE_Pos()      _hb_stream_pos( stream )
-#define  FILE_Seek(pos)  SET_ERR( _hb_stream_seek( stream, pos ) )
-#define  ACCESS_Frame(size)  SET_ERR( _hb_stream_frame_enter( stream, size ) )
-#define  FORGET_Frame()      _hb_stream_frame_exit( stream )
-
-#define  GET_Byte()      (*stream->cursor++)
-#define  GET_Short()     (stream->cursor += 2, (HB_Short)( \
-                               (*(((HB_Byte*)stream->cursor)-2) << 8) | \
-                                *(((HB_Byte*)stream->cursor)-1) \
-                        ))
-#define  GET_Long()      (stream->cursor += 4, (HB_Int)( \
-                               (*(((HB_Byte*)stream->cursor)-4) << 24) | \
-                               (*(((HB_Byte*)stream->cursor)-3) << 16) | \
-                               (*(((HB_Byte*)stream->cursor)-2) << 8) | \
-                                *(((HB_Byte*)stream->cursor)-1) \
-                        ))
-
-
-#define  GET_Char()      ((HB_Char)GET_Byte())
-#define  GET_UShort()    ((HB_UShort)GET_Short())
-#define  GET_ULong()     ((HB_UInt)GET_Long())
-#define  GET_Tag4()      GET_ULong()
-
-HB_END_HEADER
-
-#endif /* HARFBUZZ_STREAM_PRIVATE_H */
diff --git a/src/hb-old/harfbuzz-stream.c b/src/hb-old/harfbuzz-stream.c
deleted file mode 100644 (file)
index 2d9638f..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2005  David Turner
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- * Copyright (C) 2007  Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- *
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#include "harfbuzz-impl.h"
-#include "harfbuzz-stream-private.h"
-#include <stdlib.h>
-
-#if 0
-#include <stdio.h>
-#define  LOG(x)  _hb_log x
-
-static void
-_hb_log( const char*   format, ... )
-{
-  va_list  ap;
-  va_start( ap, format );
-  vfprintf( stderr, format, ap );
-  va_end( ap );
-}
-
-#else
-#define  LOG(x)  do {} while (0)
-#endif
-
-HB_INTERNAL void
-_hb_close_stream( HB_Stream stream )
-{
-  if (!stream)
-      return;
-  free(stream->base);
-  free(stream);
-}
-
-
-HB_INTERNAL HB_Int
-_hb_stream_pos( HB_Stream stream )
-{
-  LOG(( "_hb_stream_pos() -> %ld\n", stream->pos ));
-  return stream->pos;
-}
-
-
-HB_INTERNAL HB_Error
-_hb_stream_seek( HB_Stream stream,
-                HB_UInt pos )
-{
-  HB_Error  error = (HB_Error)0;
-
-  stream->pos = pos;
-  if (pos > stream->size)
-      error = ERR(HB_Err_Read_Error);
-
-  LOG(( "_hb_stream_seek(%ld) -> 0x%04X\n", pos, error ));
-  return error;
-}
-
-
-HB_INTERNAL HB_Error
-_hb_stream_frame_enter( HB_Stream stream,
-                       HB_UInt count )
-{
-  HB_Error  error = HB_Err_Ok;
-
-  /* check new position, watch for overflow */
-  if (HB_UNLIKELY (stream->pos + count > stream->size ||
-                  stream->pos + count < stream->pos))
-  {
-    error = ERR(HB_Err_Read_Error);
-    goto Exit;
-  }
-
-  /* set cursor */
-  stream->cursor = stream->base + stream->pos;
-  stream->pos   += count;
-
-Exit:
-  LOG(( "_hb_stream_frame_enter(%ld) -> 0x%04X\n", count, error ));
-  return error;
-}
-
-
-HB_INTERNAL void
-_hb_stream_frame_exit( HB_Stream stream )
-{
-  stream->cursor = NULL;
-
-  LOG(( "_hb_stream_frame_exit()\n" ));
-}
diff --git a/src/hb-old/harfbuzz-tibetan.c b/src/hb-old/harfbuzz-tibetan.c
deleted file mode 100644 (file)
index 8b3e953..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * This is part of HarfBuzz, an OpenType Layout engine 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.
- */
-
-#include "harfbuzz-shaper.h"
-#include "harfbuzz-shaper-private.h"
-
-#include <assert.h>
-
-/*
- tibetan syllables are of the form:
-    head position consonant
-    first sub-joined consonant
-    ....intermediate sub-joined consonants (if any)
-    last sub-joined consonant
-    sub-joined vowel (a-chung U+0F71)
-    standard or compound vowel sign (or 'virama' for devanagari transliteration)
-*/
-
-typedef enum {
-    TibetanOther,
-    TibetanHeadConsonant,
-    TibetanSubjoinedConsonant,
-    TibetanSubjoinedVowel,
-    TibetanVowel
-} TibetanForm;
-
-/* this table starts at U+0f40 */
-static const unsigned char tibetanForm[0x80] = {
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant, TibetanHeadConsonant,
-    TibetanOther, TibetanOther, TibetanOther, TibetanOther,
-
-    TibetanOther, TibetanVowel, TibetanVowel, TibetanVowel,
-    TibetanVowel, TibetanVowel, TibetanVowel, TibetanVowel,
-    TibetanVowel, TibetanVowel, TibetanVowel, TibetanVowel,
-    TibetanVowel, TibetanVowel, TibetanVowel, TibetanVowel,
-
-    TibetanVowel, TibetanVowel, TibetanVowel, TibetanVowel,
-    TibetanVowel, TibetanVowel, TibetanVowel, TibetanVowel,
-    TibetanOther, TibetanOther, TibetanOther, TibetanOther,
-    TibetanOther, TibetanOther, TibetanOther, TibetanOther,
-
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant, TibetanSubjoinedConsonant,
-    TibetanSubjoinedConsonant, TibetanOther, TibetanOther, TibetanOther
-};
-
-
-#define tibetan_form(c) \
-    ((c) >= 0x0f40 && (c) < 0x0fc0 ? (TibetanForm)tibetanForm[(c) - 0x0f40] : TibetanOther)
-
-static const HB_OpenTypeFeature tibetan_features[] = {
-    { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
-    { HB_MAKE_TAG('a', 'b', 'v', 's'), AboveSubstProperty },
-    { HB_MAKE_TAG('b', 'l', 'w', 's'), BelowSubstProperty },
-    { HB_MAKE_TAG('c', 'a', 'l', 't'), CaltProperty },
-    {0, 0}
-};
-
-static HB_Bool tibetan_shape_syllable(HB_Bool openType, HB_ShaperItem *item, HB_Bool invalid)
-{
-    hb_uint32 i;
-    const HB_UChar16 *str = item->string + item->item.pos;
-    int len = item->item.length;
-#ifndef NO_OPENTYPE
-    const int availableGlyphs = item->num_glyphs;
-#endif
-    HB_Bool haveGlyphs;
-    HB_STACKARRAY(HB_UChar16, reordered, len + 4);
-
-    if (item->num_glyphs < item->item.length + 4) {
-        item->num_glyphs = item->item.length + 4;
-        HB_FREE_STACKARRAY(reordered);
-        return FALSE;
-    }
-
-    if (invalid) {
-        *reordered = 0x25cc;
-        memcpy(reordered+1, str, len*sizeof(HB_UChar16));
-        len++;
-        str = reordered;
-    }
-
-    haveGlyphs = item->font->klass->convertStringToGlyphIndices(item->font,
-                                                                str, len,
-                                                                item->glyphs, &item->num_glyphs,
-                                                                item->item.bidiLevel % 2);
-
-    HB_FREE_STACKARRAY(reordered);
-
-    if (!haveGlyphs)
-        return FALSE;
-
-    for (i = 0; i < item->item.length; i++) {
-        item->attributes[i].mark = FALSE;
-        item->attributes[i].clusterStart = FALSE;
-        item->attributes[i].justification = 0;
-        item->attributes[i].zeroWidth = FALSE;
-/*        IDEBUG("    %d: %4x", i, str[i]); */
-    }
-
-    /* now we have the syllable in the right order, and can start running it through open type. */
-
-#ifndef NO_OPENTYPE
-    if (openType) {
-        HB_OpenTypeShape(item, /*properties*/0);
-        if (!HB_OpenTypePosition(item, availableGlyphs, /*doLogClusters*/FALSE))
-            return FALSE;
-    } else {
-        HB_HeuristicPosition(item);
-    }
-#endif
-
-    item->attributes[0].clusterStart = TRUE;
-    return TRUE;
-}
-
-
-static int tibetan_nextSyllableBoundary(const HB_UChar16 *s, int start, int end, HB_Bool *invalid)
-{
-    const HB_UChar16 *uc = s + start;
-
-    int pos = 0;
-    TibetanForm state = tibetan_form(*uc);
-
-/*     qDebug("state[%d]=%d (uc=%4x)", pos, state, uc[pos]);*/
-    pos++;
-
-    if (state != TibetanHeadConsonant) {
-        if (state != TibetanOther)
-            *invalid = TRUE;
-        goto finish;
-    }
-
-    while (pos < end - start) {
-        TibetanForm newState = tibetan_form(uc[pos]);
-        switch(newState) {
-        case TibetanSubjoinedConsonant:
-        case TibetanSubjoinedVowel:
-            if (state != TibetanHeadConsonant &&
-                 state != TibetanSubjoinedConsonant)
-                goto finish;
-            state = newState;
-            break;
-        case TibetanVowel:
-            if (state != TibetanHeadConsonant &&
-                 state != TibetanSubjoinedConsonant &&
-                 state != TibetanSubjoinedVowel)
-                goto finish;
-            break;
-        case TibetanOther:
-        case TibetanHeadConsonant:
-            goto finish;
-        }
-        pos++;
-    }
-
-finish:
-    *invalid = FALSE;
-    return start+pos;
-}
-
-HB_Bool HB_TibetanShape(HB_ShaperItem *item)
-{
-
-    HB_Bool openType = FALSE;
-    unsigned short *logClusters = item->log_clusters;
-
-    HB_ShaperItem syllable = *item;
-    int first_glyph = 0;
-
-    int sstart = item->item.pos;
-    int end = sstart + item->item.length;
-
-    assert(item->item.script == HB_Script_Tibetan);
-
-#ifndef QT_NO_OPENTYPE
-    openType = HB_SelectScript(item, tibetan_features);
-#endif
-
-    while (sstart < end) {
-        HB_Bool invalid;
-        int i;
-        int send = tibetan_nextSyllableBoundary(item->string, sstart, end, &invalid);
-/*        IDEBUG("syllable from %d, length %d, invalid=%s", sstart, send-sstart,
-                 invalid ? "TRUE" : "FALSE"); */
-        syllable.item.pos = sstart;
-        syllable.item.length = send-sstart;
-        syllable.glyphs = item->glyphs + first_glyph;
-        syllable.attributes = item->attributes + first_glyph;
-        syllable.offsets = item->offsets + first_glyph;
-        syllable.advances = item->advances + first_glyph;
-        syllable.num_glyphs = item->num_glyphs - first_glyph;
-        if (!tibetan_shape_syllable(openType, &syllable, invalid)) {
-            item->num_glyphs += syllable.num_glyphs;
-            return FALSE;
-        }
-        /* fix logcluster array */
-        for (i = sstart; i < send; ++i)
-            logClusters[i-item->item.pos] = first_glyph;
-        sstart = send;
-        first_glyph += syllable.num_glyphs;
-    }
-    item->num_glyphs = first_glyph;
-    return TRUE;
-}
index 250504a..57db59d 100644 (file)
@@ -110,9 +110,9 @@ typedef struct OffsetTable
   protected:
   Tag          sfnt_version;   /* '\0\001\0\00' if TrueType / 'OTTO' if CFF */
   USHORT       numTables;      /* Number of tables. */
   protected:
   Tag          sfnt_version;   /* '\0\001\0\00' if TrueType / 'OTTO' if CFF */
   USHORT       numTables;      /* Number of tables. */
-  USHORT       searchRange   /* (Maximum power of 2 <= numTables) x 16 */
-  USHORT       entrySelector /* Log2(maximum power of 2 <= numTables). */
-  USHORT       rangeShift    /* NumTables x 16-searchRange. */
+  USHORT       searchRangeZ;   /* (Maximum power of 2 <= numTables) x 16 */
+  USHORT       entrySelectorZ; /* Log2(maximum power of 2 <= numTables). */
+  USHORT       rangeShiftZ;    /* NumTables x 16-searchRange. */
   TableRecord  tables[VAR];    /* TableRecord entries. numTables items */
   public:
   DEFINE_SIZE_ARRAY (12, tables);
   TableRecord  tables[VAR];    /* TableRecord entries. numTables items */
   public:
   DEFINE_SIZE_ARRAY (12, tables);
@@ -138,8 +138,8 @@ struct TTCHeaderVersion1
   protected:
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
   FixedVersion version;        /* Version of the TTC Header (1.0),
   protected:
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
   FixedVersion version;        /* Version of the TTC Header (1.0),
-                                * 0x00010000 */
-  LongOffsetLongArrayOf<OffsetTable>
+                                * 0x00010000u */
+  ArrayOf<OffsetTo<OffsetTable, ULONG>, ULONG>
                table;          /* Array of offsets to the OffsetTable for each font
                                 * from the beginning of the file */
   public:
                table;          /* Array of offsets to the OffsetTable for each font
                                 * from the beginning of the file */
   public:
@@ -184,7 +184,7 @@ struct TTCHeader
   struct {
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
   FixedVersion version;        /* Version of the TTC Header (1.0 or 2.0),
   struct {
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
   FixedVersion version;        /* Version of the TTC Header (1.0 or 2.0),
-                                * 0x00010000 or 0x00020000 */
+                                * 0x00010000u or 0x00020000u */
   }                    header;
   TTCHeaderVersion1    version1;
   } u;
   }                    header;
   TTCHeaderVersion1    version1;
   } u;
index 90f2836..475187b 100644 (file)
@@ -31,8 +31,6 @@
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-blob.h"
-
 
 namespace OT {
 
 
 namespace OT {
 
@@ -44,36 +42,36 @@ namespace OT {
 
 /* Cast to struct T, reference to reference */
 template<typename Type, typename TObject>
 
 /* Cast to struct T, reference to reference */
 template<typename Type, typename TObject>
-inline const Type& CastR(const TObject &X)
+static inline const Type& CastR(const TObject &X)
 { return reinterpret_cast<const Type&> (X); }
 template<typename Type, typename TObject>
 { return reinterpret_cast<const Type&> (X); }
 template<typename Type, typename TObject>
-inline Type& CastR(TObject &X)
+static inline Type& CastR(TObject &X)
 { return reinterpret_cast<Type&> (X); }
 
 /* Cast to struct T, pointer to pointer */
 template<typename Type, typename TObject>
 { return reinterpret_cast<Type&> (X); }
 
 /* Cast to struct T, pointer to pointer */
 template<typename Type, typename TObject>
-inline const Type* CastP(const TObject *X)
+static inline const Type* CastP(const TObject *X)
 { return reinterpret_cast<const Type*> (X); }
 template<typename Type, typename TObject>
 { return reinterpret_cast<const Type*> (X); }
 template<typename Type, typename TObject>
-inline Type* CastP(TObject *X)
+static inline Type* CastP(TObject *X)
 { return reinterpret_cast<Type*> (X); }
 
 /* StructAtOffset<T>(P,Ofs) returns the struct T& that is placed at memory
  * location pointed to by P plus Ofs bytes. */
 template<typename Type>
 { return reinterpret_cast<Type*> (X); }
 
 /* StructAtOffset<T>(P,Ofs) returns the struct T& that is placed at memory
  * location pointed to by P plus Ofs bytes. */
 template<typename Type>
-inline const Type& StructAtOffset(const void *P, unsigned int offset)
+static inline const Type& StructAtOffset(const void *P, unsigned int offset)
 { return * reinterpret_cast<const Type*> ((const char *) P + offset); }
 template<typename Type>
 { return * reinterpret_cast<const Type*> ((const char *) P + offset); }
 template<typename Type>
-inline Type& StructAtOffset(void *P, unsigned int offset)
+static inline Type& StructAtOffset(void *P, unsigned int offset)
 { return * reinterpret_cast<Type*> ((char *) P + offset); }
 
 /* StructAfter<T>(X) returns the struct T& that is placed after X.
  * Works with X of variable size also.  X must implement get_size() */
 template<typename Type, typename TObject>
 { return * reinterpret_cast<Type*> ((char *) P + offset); }
 
 /* StructAfter<T>(X) returns the struct T& that is placed after X.
  * Works with X of variable size also.  X must implement get_size() */
 template<typename Type, typename TObject>
-inline const Type& StructAfter(const TObject &X)
+static inline const Type& StructAfter(const TObject &X)
 { return StructAtOffset<Type>(&X, X.get_size()); }
 template<typename Type, typename TObject>
 { return StructAtOffset<Type>(&X, X.get_size()); }
 template<typename Type, typename TObject>
-inline Type& StructAfter(TObject &X)
+static inline Type& StructAfter(TObject &X)
 { return StructAtOffset<Type>(&X, X.get_size()); }
 
 
 { return StructAtOffset<Type>(&X, X.get_size()); }
 
 
@@ -134,7 +132,7 @@ inline Type& StructAfter(TObject &X)
 
 /* Global nul-content Null pool.  Enlarge as necessary. */
 /* TODO This really should be a extern HB_INTERNAL and defined somewhere... */
 
 /* Global nul-content Null pool.  Enlarge as necessary. */
 /* TODO This really should be a extern HB_INTERNAL and defined somewhere... */
-static const void *_NullPool[64 / sizeof (void *)];
+static const void *_NullPool[(256+8) / sizeof (void *)];
 
 /* Generic nul-content Null objects. */
 template <typename Type>
 
 /* Generic nul-content Null objects. */
 template <typename Type>
@@ -147,7 +145,7 @@ static inline const Type& Null (void) {
 #define DEFINE_NULL_DATA(Type, data) \
 static const char _Null##Type[sizeof (Type) + 1] = data; /* +1 is for nul-termination in data */ \
 template <> \
 #define DEFINE_NULL_DATA(Type, data) \
 static const char _Null##Type[sizeof (Type) + 1] = data; /* +1 is for nul-termination in data */ \
 template <> \
-inline const Type& Null<Type> (void) { \
+/*static*/ inline const Type& Null<Type> (void) { \
   return *CastP<Type> (_Null##Type); \
 } /* The following line really exists such that we end in a place needing semicolon */ \
 ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
   return *CastP<Type> (_Null##Type); \
 } /* The following line really exists such that we end in a place needing semicolon */ \
 ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
@@ -171,6 +169,10 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
+/* This limits sanitizing time on really broken fonts. */
+#ifndef HB_SANITIZE_MAX_EDITS
+#define HB_SANITIZE_MAX_EDITS 100
+#endif
 
 struct hb_sanitize_context_t
 {
 
 struct hb_sanitize_context_t
 {
@@ -178,7 +180,7 @@ struct hb_sanitize_context_t
   static const unsigned int max_debug_depth = HB_DEBUG_SANITIZE;
   typedef bool return_t;
   template <typename T>
   static const unsigned int max_debug_depth = HB_DEBUG_SANITIZE;
   typedef bool return_t;
   template <typename T>
-  inline return_t process (const T &obj) { return obj.sanitize (this); }
+  inline return_t dispatch (const T &obj) { return obj.sanitize (this); }
   static return_t default_return_value (void) { return true; }
   bool stop_sublookup_iteration (const return_t r HB_UNUSED) const { return false; }
 
   static return_t default_return_value (void) { return true; }
   bool stop_sublookup_iteration (const return_t r HB_UNUSED) const { return false; }
 
@@ -247,6 +249,9 @@ struct hb_sanitize_context_t
 
   inline bool may_edit (const void *base HB_UNUSED, unsigned int len HB_UNUSED)
   {
 
   inline bool may_edit (const void *base HB_UNUSED, unsigned int len HB_UNUSED)
   {
+    if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
+      return false;
+
     const char *p = (const char *) base;
     this->edit_count++;
 
     const char *p = (const char *) base;
     this->edit_count++;
 
@@ -261,6 +266,15 @@ struct hb_sanitize_context_t
     return TRACE_RETURN (this->writable);
   }
 
     return TRACE_RETURN (this->writable);
   }
 
+  template <typename Type, typename ValueType>
+  inline bool try_set (Type *obj, const ValueType &v) {
+    if (this->may_edit (obj, obj->static_size)) {
+      obj->set (v);
+      return true;
+    }
+    return false;
+  }
+
   mutable unsigned int debug_depth;
   const char *start, *end;
   bool writable;
   mutable unsigned int debug_depth;
   const char *start, *end;
   bool writable;
@@ -275,7 +289,7 @@ template <typename Type>
 struct Sanitizer
 {
   static hb_blob_t *sanitize (hb_blob_t *blob) {
 struct Sanitizer
 {
   static hb_blob_t *sanitize (hb_blob_t *blob) {
-    hb_sanitize_context_t c[1] = {{0}};
+    hb_sanitize_context_t c[1] = {{0, NULL, NULL, false, 0, NULL}};
     bool sane;
 
     /* TODO is_sane() stuff */
     bool sane;
 
     /* TODO is_sane() stuff */
@@ -404,7 +418,7 @@ struct hb_serialize_context_t
   template <typename Type>
   inline Type *allocate_size (unsigned int size)
   {
   template <typename Type>
   inline Type *allocate_size (unsigned int size)
   {
-    if (unlikely (this->ran_out_of_room || this->end - this->head < size)) {
+    if (unlikely (this->ran_out_of_room || this->end - this->head < ptrdiff_t (size))) {
       this->ran_out_of_room = true;
       return NULL;
     }
       this->ran_out_of_room = true;
       return NULL;
     }
@@ -567,6 +581,7 @@ struct IntType
   DEFINE_SIZE_STATIC (Size);
 };
 
   DEFINE_SIZE_STATIC (Size);
 };
 
+typedef                uint8_t      BYTE;      /* 8-bit unsigned integer. */
 typedef IntType<uint16_t, 2> USHORT;   /* 16-bit unsigned integer. */
 typedef IntType<int16_t,  2> SHORT;    /* 16-bit signed integer. */
 typedef IntType<uint32_t, 4> ULONG;    /* 32-bit unsigned integer. */
 typedef IntType<uint16_t, 2> USHORT;   /* 16-bit unsigned integer. */
 typedef IntType<int16_t,  2> SHORT;    /* 16-bit signed integer. */
 typedef IntType<uint32_t, 4> ULONG;    /* 32-bit unsigned integer. */
@@ -587,7 +602,7 @@ struct LONGDATETIME
     TRACE_SANITIZE (this);
     return TRACE_RETURN (likely (c->check_struct (this)));
   }
     TRACE_SANITIZE (this);
     return TRACE_RETURN (likely (c->check_struct (this)));
   }
-  private:
+  protected:
   LONG major;
   ULONG minor;
   public:
   LONG major;
   ULONG minor;
   public:
@@ -611,39 +626,38 @@ typedef USHORT GlyphID;
 
 /* Script/language-system/feature index */
 struct Index : USHORT {
 
 /* Script/language-system/feature index */
 struct Index : USHORT {
-  static const unsigned int NOT_FOUND_INDEX = 0xFFFF;
+  static const unsigned int NOT_FOUND_INDEX = 0xFFFFu;
 };
 DEFINE_NULL_DATA (Index, "\xff\xff");
 
 };
 DEFINE_NULL_DATA (Index, "\xff\xff");
 
-/* Offset to a table, same as uint16 (length = 16 bits), Null offset = 0x0000 */
-struct Offset : USHORT
+/* Offset, Null offset = 0 */
+template <typename Type=USHORT>
+struct Offset : Type
 {
   inline bool is_null (void) const { return 0 == *this; }
   public:
 {
   inline bool is_null (void) const { return 0 == *this; }
   public:
-  DEFINE_SIZE_STATIC (2);
-};
-
-/* LongOffset to a table, same as uint32 (length = 32 bits), Null offset = 0x00000000 */
-struct LongOffset : ULONG
-{
-  inline bool is_null (void) const { return 0 == *this; }
-  public:
-  DEFINE_SIZE_STATIC (4);
+  DEFINE_SIZE_STATIC (sizeof(Type));
 };
 
 
 /* CheckSum */
 struct CheckSum : ULONG
 {
 };
 
 
 /* CheckSum */
 struct CheckSum : ULONG
 {
-  static uint32_t CalcTableChecksum (ULONG *Table, uint32_t Length)
+  /* This is reference implementation from the spec. */
+  static inline uint32_t CalcTableChecksum (const ULONG *Table, uint32_t Length)
   {
     uint32_t Sum = 0L;
   {
     uint32_t Sum = 0L;
-    ULONG *EndPtr = Table+((Length+3) & ~3) / ULONG::static_size;
+    const ULONG *EndPtr = Table+((Length+3) & ~3) / ULONG::static_size;
 
     while (Table < EndPtr)
       Sum += *Table++;
     return Sum;
   }
 
     while (Table < EndPtr)
       Sum += *Table++;
     return Sum;
   }
+
+  /* Note: data should be 4byte aligned and have 4byte padding at the end. */
+  inline void set_for_data (const void *data, unsigned int length)
+  { set (CalcTableChecksum ((const ULONG *) data, length)); }
+
   public:
   DEFINE_SIZE_STATIC (4);
 };
   public:
   DEFINE_SIZE_STATIC (4);
 };
@@ -671,12 +685,12 @@ struct FixedVersion
 
 
 /*
 
 
 /*
- * Template subclasses of Offset and LongOffset that do the dereferencing.
+ * Template subclasses of Offset that do the dereferencing.
  * Use: (base+offset)
  */
 
  * Use: (base+offset)
  */
 
-template <typename OffsetType, typename Type>
-struct GenericOffsetTo : OffsetType
+template <typename Type, typename OffsetType=USHORT>
+struct OffsetTo : Offset<OffsetType>
 {
   inline const Type& operator () (const void *base) const
   {
 {
   inline const Type& operator () (const void *base) const
   {
@@ -684,11 +698,6 @@ struct GenericOffsetTo : OffsetType
     if (unlikely (!offset)) return Null(Type);
     return StructAtOffset<Type> (base, offset);
   }
     if (unlikely (!offset)) return Null(Type);
     return StructAtOffset<Type> (base, offset);
   }
-  inline Type& operator () (void *base)
-  {
-    unsigned int offset = *this;
-    return StructAtOffset<Type> (base, offset);
-  }
 
   inline Type& serialize (hb_serialize_context_t *c, void *base)
   {
 
   inline Type& serialize (hb_serialize_context_t *c, void *base)
   {
@@ -715,40 +724,25 @@ struct GenericOffsetTo : OffsetType
     return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
   }
 
     return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
   }
 
-  inline bool try_set (hb_sanitize_context_t *c, const OffsetType &v) {
-    if (c->may_edit (this, this->static_size)) {
-      this->set (v);
-      return true;
-    }
-    return false;
-  }
   /* Set the offset to Null */
   inline bool neuter (hb_sanitize_context_t *c) {
   /* Set the offset to Null */
   inline bool neuter (hb_sanitize_context_t *c) {
-    if (c->may_edit (this, this->static_size)) {
-      this->set (0); /* 0 is Null offset */
-      return true;
-    }
-    return false;
+    return c->try_set (this, 0);
   }
   }
+  DEFINE_SIZE_STATIC (sizeof(OffsetType));
 };
 template <typename Base, typename OffsetType, typename Type>
 };
 template <typename Base, typename OffsetType, typename Type>
-inline const Type& operator + (const Base &base, const GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
+static inline const Type& operator + (const Base &base, const OffsetTo<Type, OffsetType> &offset) { return offset (base); }
 template <typename Base, typename OffsetType, typename Type>
 template <typename Base, typename OffsetType, typename Type>
-inline Type& operator + (Base &base, GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
-
-template <typename Type>
-struct OffsetTo : GenericOffsetTo<Offset, Type> {};
-
-template <typename Type>
-struct LongOffsetTo : GenericOffsetTo<LongOffset, Type> {};
+static inline Type& operator + (Base &base, OffsetTo<Type, OffsetType> &offset) { return offset (base); }
 
 
 /*
  * Array Types
  */
 
 
 
 /*
  * Array Types
  */
 
-template <typename LenType, typename Type>
-struct GenericArrayOf
+/* An array with a number of elements. */
+template <typename Type, typename LenType=USHORT>
+struct ArrayOf
 {
   const Type *sub_array (unsigned int start_offset, unsigned int *pcount /* IN/OUT */) const
   {
 {
   const Type *sub_array (unsigned int start_offset, unsigned int *pcount /* IN/OUT */) const
   {
@@ -831,6 +825,16 @@ struct GenericArrayOf
     return TRACE_RETURN (true);
   }
 
     return TRACE_RETURN (true);
   }
 
+  template <typename SearchType>
+  inline int lsearch (const SearchType &x) const
+  {
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+      if (!this->array[i].cmp (x))
+        return i;
+    return -1;
+  }
+
   private:
   inline bool sanitize_shallow (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
   private:
   inline bool sanitize_shallow (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
@@ -844,26 +848,10 @@ struct GenericArrayOf
   DEFINE_SIZE_ARRAY (sizeof (LenType), array);
 };
 
   DEFINE_SIZE_ARRAY (sizeof (LenType), array);
 };
 
-/* An array with a USHORT number of elements. */
-template <typename Type>
-struct ArrayOf : GenericArrayOf<USHORT, Type> {};
-
-/* An array with a ULONG number of elements. */
-template <typename Type>
-struct LongArrayOf : GenericArrayOf<ULONG, Type> {};
-
 /* Array of Offset's */
 template <typename Type>
 struct OffsetArrayOf : ArrayOf<OffsetTo<Type> > {};
 
 /* Array of Offset's */
 template <typename Type>
 struct OffsetArrayOf : ArrayOf<OffsetTo<Type> > {};
 
-/* Array of LongOffset's */
-template <typename Type>
-struct LongOffsetArrayOf : ArrayOf<LongOffsetTo<Type> > {};
-
-/* LongArray of LongOffset's */
-template <typename Type>
-struct LongOffsetLongArrayOf : LongArrayOf<LongOffsetTo<Type> > {};
-
 /* Array of offsets relative to the beginning of the array itself. */
 template <typename Type>
 struct OffsetListOf : OffsetArrayOf<Type>
 /* Array of offsets relative to the beginning of the array itself. */
 template <typename Type>
 struct OffsetListOf : OffsetArrayOf<Type>
@@ -886,9 +874,8 @@ struct OffsetListOf : OffsetArrayOf<Type>
 };
 
 
 };
 
 
-/* An array with a USHORT number of elements,
- * starting at second element. */
-template <typename Type>
+/* An array starting at second element. */
+template <typename Type, typename LenType=USHORT>
 struct HeadlessArrayOf
 {
   inline const Type& operator [] (unsigned int i) const
 struct HeadlessArrayOf
 {
   inline const Type& operator [] (unsigned int i) const
@@ -935,33 +922,34 @@ struct HeadlessArrayOf
     return TRACE_RETURN (true);
   }
 
     return TRACE_RETURN (true);
   }
 
-  USHORT len;
+  LenType len;
   Type array[VAR];
   public:
   Type array[VAR];
   public:
-  DEFINE_SIZE_ARRAY (sizeof (USHORT), array);
+  DEFINE_SIZE_ARRAY (sizeof (LenType), array);
 };
 
 
 /* An array with sorted elements.  Supports binary searching. */
 };
 
 
 /* An array with sorted elements.  Supports binary searching. */
-template <typename Type>
-struct SortedArrayOf : ArrayOf<Type> {
-
+template <typename Type, typename LenType=USHORT>
+struct SortedArrayOf : ArrayOf<Type, LenType>
+{
   template <typename SearchType>
   template <typename SearchType>
-  inline int search (const SearchType &x) const {
-    unsigned int count = this->len;
-    /* Linear search is *much* faster for small counts. */
-    if (likely (count < 32)) {
-      for (unsigned int i = 0; i < count; i++)
-       if (this->array[i].cmp (x) == 0)
-         return i;
-      return -1;
-    } else {
-      struct Cmp {
-       static int cmp (const SearchType *a, const Type *b) { return b->cmp (*a); }
-      };
-      const Type *p = (const Type *) bsearch (&x, this->array, this->len, sizeof (this->array[0]), (hb_compare_func_t) Cmp::cmp);
-      return p ? p - this->array : -1;
+  inline int bsearch (const SearchType &x) const
+  {
+    /* Hand-coded bsearch here since this is in the hot inner loop. */
+    int min = 0, max = (int) this->len - 1;
+    while (min <= max)
+    {
+      int mid = (min + max) / 2;
+      int c = this->array[mid].cmp (x);
+      if (c < 0)
+        max = mid - 1;
+      else if (c > 0)
+        min = mid + 1;
+      else
+        return mid;
     }
     }
+    return -1;
   }
 };
 
   }
 };
 
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
new file mode 100644 (file)
index 0000000..d531411
--- /dev/null
@@ -0,0 +1,517 @@
+/*
+ * Copyright © 2014  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_CMAP_TABLE_HH
+#define HB_OT_CMAP_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+
+namespace OT {
+
+
+/*
+ * cmap -- Character To Glyph Index Mapping Table
+ */
+
+#define HB_OT_TAG_cmap HB_TAG('c','m','a','p')
+
+
+struct CmapSubtableFormat0
+{
+  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+  {
+    hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0;
+    if (!gid)
+      return false;
+    *glyph = gid;
+    return true;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this));
+  }
+
+  protected:
+  USHORT       format;         /* Format number is set to 0. */
+  USHORT       lengthZ;        /* Byte length of this subtable. */
+  USHORT       languageZ;      /* Ignore. */
+  BYTE         glyphIdArray[256];/* An array that maps character
+                                * code to glyph index values. */
+  public:
+  DEFINE_SIZE_STATIC (6 + 256);
+};
+
+struct CmapSubtableFormat4
+{
+  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+  {
+    unsigned int segCount;
+    const USHORT *endCount;
+    const USHORT *startCount;
+    const USHORT *idDelta;
+    const USHORT *idRangeOffset;
+    const USHORT *glyphIdArray;
+    unsigned int glyphIdArrayLength;
+
+    segCount = this->segCountX2 / 2;
+    endCount = this->values;
+    startCount = endCount + segCount + 1;
+    idDelta = startCount + segCount;
+    idRangeOffset = idDelta + segCount;
+    glyphIdArray = idRangeOffset + segCount;
+    glyphIdArrayLength = (this->length - 16 - 8 * segCount) / 2;
+
+    /* Custom two-array bsearch. */
+    int min = 0, max = (int) segCount - 1;
+    unsigned int i;
+    while (min <= max)
+    {
+      int mid = (min + max) / 2;
+      if (codepoint < startCount[mid])
+        max = mid - 1;
+      else if (codepoint > endCount[mid])
+        min = mid + 1;
+      else
+      {
+       i = mid;
+       goto found;
+      }
+    }
+    return false;
+
+  found:
+    hb_codepoint_t gid;
+    unsigned int rangeOffset = idRangeOffset[i];
+    if (rangeOffset == 0)
+      gid = codepoint + idDelta[i];
+    else
+    {
+      /* Somebody has been smoking... */
+      unsigned int index = rangeOffset / 2 + (codepoint - startCount[i]) + i - segCount;
+      if (unlikely (index >= glyphIdArrayLength))
+       return false;
+      gid = glyphIdArray[index];
+      if (unlikely (!gid))
+       return false;
+      gid += idDelta[i];
+    }
+
+    *glyph = gid & 0xFFFFu;
+    return true;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c)
+  {
+    TRACE_SANITIZE (this);
+    if (unlikely (!c->check_struct (this)))
+      return TRACE_RETURN (false);
+
+    if (unlikely (!c->check_range (this, length)))
+    {
+      /* Some broken fonts have too long of a "length" value.
+       * If that is the case, just change the value to truncate
+       * the subtable at the end of the blob. */
+      uint16_t new_length = (uint16_t) MIN ((uintptr_t) 65535,
+                                           (uintptr_t) (c->end -
+                                                        (char *) this));
+      if (!c->try_set (&length, new_length))
+       return TRACE_RETURN (false);
+    }
+
+    return TRACE_RETURN (16 + 4 * (unsigned int) segCountX2 <= length);
+  }
+
+  protected:
+  USHORT       format;         /* Format number is set to 4. */
+  USHORT       length;         /* This is the length in bytes of the
+                                * subtable. */
+  USHORT       languageZ;      /* Ignore. */
+  USHORT       segCountX2;     /* 2 x segCount. */
+  USHORT       searchRangeZ;   /* 2 * (2**floor(log2(segCount))) */
+  USHORT       entrySelectorZ; /* log2(searchRange/2) */
+  USHORT       rangeShiftZ;    /* 2 x segCount - searchRange */
+
+  USHORT       values[VAR];
+#if 0
+  USHORT       endCount[segCount];     /* End characterCode for each segment,
+                                        * last=0xFFFFu. */
+  USHORT       reservedPad;            /* Set to 0. */
+  USHORT       startCount[segCount];   /* Start character code for each segment. */
+  SHORT                idDelta[segCount];      /* Delta for all character codes in segment. */
+  USHORT       idRangeOffset[segCount];/* Offsets into glyphIdArray or 0 */
+  USHORT       glyphIdArray[VAR];      /* Glyph index array (arbitrary length) */
+#endif
+
+  public:
+  DEFINE_SIZE_ARRAY (14, values);
+};
+
+struct CmapSubtableLongGroup
+{
+  friend struct CmapSubtableFormat12;
+  friend struct CmapSubtableFormat13;
+
+  int cmp (hb_codepoint_t codepoint) const
+  {
+    if (codepoint < startCharCode) return -1;
+    if (codepoint > endCharCode)   return +1;
+    return 0;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this));
+  }
+
+  private:
+  ULONG                startCharCode;  /* First character code in this group. */
+  ULONG                endCharCode;    /* Last character code in this group. */
+  ULONG                glyphID;        /* Glyph index; interpretation depends on
+                                * subtable format. */
+  public:
+  DEFINE_SIZE_STATIC (12);
+};
+
+template <typename UINT>
+struct CmapSubtableTrimmed
+{
+  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+  {
+    /* Rely on our implicit array bound-checking. */
+    hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode];
+    if (!gid)
+      return false;
+    *glyph = gid;
+    return true;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) && glyphIdArray.sanitize (c));
+  }
+
+  protected:
+  UINT         formatReserved; /* Subtable format and (maybe) padding. */
+  UINT         lengthZ;        /* Byte length of this subtable. */
+  UINT         languageZ;      /* Ignore. */
+  UINT         startCharCode;  /* First character code covered. */
+  ArrayOf<GlyphID, UINT>
+               glyphIdArray;   /* Array of glyph index values for character
+                                * codes in the range. */
+  public:
+  DEFINE_SIZE_ARRAY (5 * sizeof (UINT), glyphIdArray);
+};
+
+struct CmapSubtableFormat6  : CmapSubtableTrimmed<USHORT> {};
+struct CmapSubtableFormat10 : CmapSubtableTrimmed<ULONG > {};
+
+template <typename T>
+struct CmapSubtableLongSegmented
+{
+  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+  {
+    int i = groups.bsearch (codepoint);
+    if (i == -1)
+      return false;
+    *glyph = T::group_get_glyph (groups[i], codepoint);
+    return true;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) && groups.sanitize (c));
+  }
+
+  protected:
+  USHORT       format;         /* Subtable format; set to 12. */
+  USHORT       reservedZ;      /* Reserved; set to 0. */
+  ULONG                lengthZ;        /* Byte length of this subtable. */
+  ULONG                languageZ;      /* Ignore. */
+  SortedArrayOf<CmapSubtableLongGroup, ULONG>
+               groups;         /* Groupings. */
+  public:
+  DEFINE_SIZE_ARRAY (16, groups);
+};
+
+struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
+{
+  static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+                                               hb_codepoint_t u)
+  { return group.glyphID + (u - group.startCharCode); }
+};
+
+struct CmapSubtableFormat13 : CmapSubtableLongSegmented<CmapSubtableFormat13>
+{
+  static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+                                               hb_codepoint_t u HB_UNUSED)
+  { return group.glyphID; }
+};
+
+typedef enum
+{
+  GLYPH_VARIANT_NOT_FOUND = 0,
+  GLYPH_VARIANT_FOUND = 1,
+  GLYPH_VARIANT_USE_DEFAULT = 2
+} glyph_variant_t;
+
+struct UnicodeValueRange
+{
+  inline int cmp (const hb_codepoint_t &codepoint) const
+  {
+    if (codepoint < startUnicodeValue) return -1;
+    if (codepoint > startUnicodeValue + additionalCount) return +1;
+    return 0;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this));
+  }
+
+  UINT24       startUnicodeValue;      /* First value in this range. */
+  BYTE         additionalCount;        /* Number of additional values in this
+                                        * range. */
+  public:
+  DEFINE_SIZE_STATIC (4);
+};
+
+typedef SortedArrayOf<UnicodeValueRange, ULONG> DefaultUVS;
+
+struct UVSMapping
+{
+  inline int cmp (const hb_codepoint_t &codepoint) const
+  {
+    return unicodeValue.cmp (codepoint);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this));
+  }
+
+  UINT24       unicodeValue;   /* Base Unicode value of the UVS */
+  GlyphID      glyphID;        /* Glyph ID of the UVS */
+  public:
+  DEFINE_SIZE_STATIC (5);
+};
+
+typedef SortedArrayOf<UVSMapping, ULONG> NonDefaultUVS;
+
+struct VariationSelectorRecord
+{
+  inline glyph_variant_t get_glyph (hb_codepoint_t codepoint,
+                                   hb_codepoint_t *glyph,
+                                   const void *base) const
+  {
+    int i;
+    const DefaultUVS &defaults = base+defaultUVS;
+    i = defaults.bsearch (codepoint);
+    if (i != -1)
+      return GLYPH_VARIANT_USE_DEFAULT;
+    const NonDefaultUVS &nonDefaults = base+nonDefaultUVS;
+    i = nonDefaults.bsearch (codepoint);
+    if (i != -1)
+    {
+      *glyph = nonDefaults[i].glyphID;
+       return GLYPH_VARIANT_FOUND;
+    }
+    return GLYPH_VARIANT_NOT_FOUND;
+  }
+
+  inline int cmp (const hb_codepoint_t &variation_selector) const
+  {
+    return varSelector.cmp (variation_selector);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        defaultUVS.sanitize (c, base) &&
+                        nonDefaultUVS.sanitize (c, base));
+  }
+
+  UINT24       varSelector;    /* Variation selector. */
+  OffsetTo<DefaultUVS, ULONG>
+               defaultUVS;     /* Offset to Default UVS Table. May be 0. */
+  OffsetTo<NonDefaultUVS, ULONG>
+               nonDefaultUVS;  /* Offset to Non-Default UVS Table. May be 0. */
+  public:
+  DEFINE_SIZE_STATIC (11);
+};
+
+struct CmapSubtableFormat14
+{
+  inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
+                                           hb_codepoint_t variation_selector,
+                                           hb_codepoint_t *glyph) const
+  {
+    return record[record.bsearch(variation_selector)].get_glyph (codepoint, glyph, this);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        record.sanitize (c, this));
+  }
+
+  protected:
+  USHORT       format;         /* Format number is set to 0. */
+  ULONG                lengthZ;        /* Byte length of this subtable. */
+  SortedArrayOf<VariationSelectorRecord, ULONG>
+               record;         /* Variation selector records; sorted
+                                * in increasing order of `varSelector'. */
+  public:
+  DEFINE_SIZE_ARRAY (10, record);
+};
+
+struct CmapSubtable
+{
+  /* Note: We intentionally do NOT implement subtable formats 2 and 8. */
+
+  inline bool get_glyph (hb_codepoint_t codepoint,
+                        hb_codepoint_t *glyph) const
+  {
+    switch (u.format) {
+    case  0: return u.format0 .get_glyph(codepoint, glyph);
+    case  4: return u.format4 .get_glyph(codepoint, glyph);
+    case  6: return u.format6 .get_glyph(codepoint, glyph);
+    case 10: return u.format10.get_glyph(codepoint, glyph);
+    case 12: return u.format12.get_glyph(codepoint, glyph);
+    case 13: return u.format13.get_glyph(codepoint, glyph);
+    case 14:
+    default: return false;
+    }
+  }
+
+  inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
+                                           hb_codepoint_t variation_selector,
+                                           hb_codepoint_t *glyph) const
+  {
+    switch (u.format) {
+    case 14: return u.format14.get_glyph_variant(codepoint, variation_selector, glyph);
+    default: return GLYPH_VARIANT_NOT_FOUND;
+    }
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
+    switch (u.format) {
+    case  0: return TRACE_RETURN (u.format0 .sanitize (c));
+    case  4: return TRACE_RETURN (u.format4 .sanitize (c));
+    case  6: return TRACE_RETURN (u.format6 .sanitize (c));
+    case 10: return TRACE_RETURN (u.format10.sanitize (c));
+    case 12: return TRACE_RETURN (u.format12.sanitize (c));
+    case 13: return TRACE_RETURN (u.format13.sanitize (c));
+    case 14: return TRACE_RETURN (u.format14.sanitize (c));
+    default:return TRACE_RETURN (true);
+    }
+  }
+
+  protected:
+  union {
+  USHORT               format;         /* Format identifier */
+  CmapSubtableFormat0  format0;
+  CmapSubtableFormat4  format4;
+  CmapSubtableFormat6  format6;
+  CmapSubtableFormat10 format10;
+  CmapSubtableFormat12 format12;
+  CmapSubtableFormat13 format13;
+  CmapSubtableFormat14 format14;
+  } u;
+  public:
+  DEFINE_SIZE_UNION (2, format);
+};
+
+
+struct EncodingRecord
+{
+  inline int cmp (const EncodingRecord &other) const
+  {
+    int ret;
+    ret = platformID.cmp (other.platformID);
+    if (ret) return ret;
+    ret = encodingID.cmp (other.encodingID);
+    if (ret) return ret;
+    return 0;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        subtable.sanitize (c, base));
+  }
+
+  USHORT       platformID;     /* Platform ID. */
+  USHORT       encodingID;     /* Platform-specific encoding ID. */
+  OffsetTo<CmapSubtable, ULONG>
+               subtable;       /* Byte offset from beginning of table to the subtable for this encoding. */
+  public:
+  DEFINE_SIZE_STATIC (8);
+};
+
+struct cmap
+{
+  static const hb_tag_t tableTag       = HB_OT_TAG_cmap;
+
+  inline const CmapSubtable *find_subtable (unsigned int platform_id,
+                                           unsigned int encoding_id) const
+  {
+    EncodingRecord key;
+    key.platformID.set (platform_id);
+    key.encodingID.set (encoding_id);
+
+    /* Note: We can use bsearch, but since it has no performance
+     * implications, we use lsearch and as such accept fonts with
+     * unsorted subtable list. */
+    int result = encodingRecord./*bsearch*/lsearch (key);
+    if (result == -1 || !encodingRecord[result].subtable)
+      return NULL;
+
+    return &(this+encodingRecord[result].subtable);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        likely (version == 0) &&
+                        encodingRecord.sanitize (c, this));
+  }
+
+  USHORT               version;        /* Table version number (0). */
+  SortedArrayOf<EncodingRecord>
+                       encodingRecord; /* Encoding tables. */
+  public:
+  DEFINE_SIZE_ARRAY (4, encodingRecord);
+};
+
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_CMAP_TABLE_HH */
diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc
new file mode 100644 (file)
index 0000000..c9890c5
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ * Copyright © 2011,2014  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, Roozbeh Pournader
+ */
+
+#include "hb-private.hh"
+
+#include "hb-ot.h"
+
+#include "hb-font-private.hh"
+
+#include "hb-ot-cmap-table.hh"
+#include "hb-ot-hhea-table.hh"
+#include "hb-ot-hmtx-table.hh"
+
+
+
+struct hb_ot_font_t
+{
+  unsigned int num_glyphs;
+  unsigned int num_hmetrics;
+  const OT::hmtx *hmtx;
+  hb_blob_t *hmtx_blob;
+
+  const OT::CmapSubtable *cmap;
+  const OT::CmapSubtable *cmap_uvs;
+  hb_blob_t *cmap_blob;
+};
+
+
+static hb_ot_font_t *
+_hb_ot_font_create (hb_font_t *font)
+{
+  hb_ot_font_t *ot_font = (hb_ot_font_t *) calloc (1, sizeof (hb_ot_font_t));
+
+  if (unlikely (!ot_font))
+    return NULL;
+
+  ot_font->num_glyphs = font->face->get_num_glyphs ();
+
+  {
+    hb_blob_t *hhea_blob = OT::Sanitizer<OT::hhea>::sanitize (font->face->reference_table (HB_OT_TAG_hhea));
+    const OT::hhea *hhea = OT::Sanitizer<OT::hhea>::lock_instance (hhea_blob);
+    ot_font->num_hmetrics = hhea->numberOfHMetrics;
+    hb_blob_destroy (hhea_blob);
+  }
+  ot_font->hmtx_blob = OT::Sanitizer<OT::hmtx>::sanitize (font->face->reference_table (HB_OT_TAG_hmtx));
+  if (unlikely (!ot_font->num_hmetrics ||
+               2 * (ot_font->num_hmetrics + ot_font->num_glyphs) < hb_blob_get_length (ot_font->hmtx_blob)))
+  {
+    hb_blob_destroy (ot_font->hmtx_blob);
+    free (ot_font);
+    return NULL;
+  }
+  ot_font->hmtx = OT::Sanitizer<OT::hmtx>::lock_instance (ot_font->hmtx_blob);
+
+  ot_font->cmap_blob = OT::Sanitizer<OT::cmap>::sanitize (font->face->reference_table (HB_OT_TAG_cmap));
+  const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (ot_font->cmap_blob);
+  const OT::CmapSubtable *subtable = NULL;
+  const OT::CmapSubtable *subtable_uvs = NULL;
+
+  /* 32-bit subtables. */
+  if (!subtable) subtable = cmap->find_subtable (0, 6);
+  if (!subtable) subtable = cmap->find_subtable (0, 4);
+  if (!subtable) subtable = cmap->find_subtable (3, 10);
+  /* 16-bit subtables. */
+  if (!subtable) subtable = cmap->find_subtable (0, 3);
+  if (!subtable) subtable = cmap->find_subtable (3, 1);
+  /* Meh. */
+  if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
+
+  /* UVS subtable. */
+  if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
+  /* Meh. */
+  if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
+
+  ot_font->cmap = subtable;
+  ot_font->cmap_uvs = subtable_uvs;
+
+  return ot_font;
+}
+
+static void
+_hb_ot_font_destroy (hb_ot_font_t *ot_font)
+{
+  hb_blob_destroy (ot_font->cmap_blob);
+  hb_blob_destroy (ot_font->hmtx_blob);
+
+  free (ot_font);
+}
+
+
+static hb_bool_t
+hb_ot_get_glyph (hb_font_t *font HB_UNUSED,
+                void *font_data,
+                hb_codepoint_t unicode,
+                hb_codepoint_t variation_selector,
+                hb_codepoint_t *glyph,
+                void *user_data HB_UNUSED)
+
+{
+  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+
+  if (unlikely (variation_selector))
+  {
+    switch (ot_font->cmap_uvs->get_glyph_variant (unicode,
+                                                 variation_selector,
+                                                 glyph))
+    {
+      case OT::GLYPH_VARIANT_NOT_FOUND:                return false;
+      case OT::GLYPH_VARIANT_FOUND:            return true;
+      case OT::GLYPH_VARIANT_USE_DEFAULT:      break;
+    }
+  }
+
+  return ot_font->cmap->get_glyph (unicode, glyph);
+}
+
+static hb_position_t
+hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
+                          void *font_data,
+                          hb_codepoint_t glyph,
+                          void *user_data HB_UNUSED)
+{
+  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+
+  if (unlikely (glyph >= ot_font->num_glyphs))
+    return 0; /* Maybe better to return notdef's advance instead? */
+
+  if (glyph >= ot_font->num_hmetrics)
+    glyph = ot_font->num_hmetrics - 1;
+
+  return font->em_scale_x (ot_font->hmtx->longHorMetric[glyph].advanceWidth);
+}
+
+static hb_position_t
+hb_ot_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
+                          void *font_data,
+                          hb_codepoint_t glyph,
+                          void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return 0;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_h_origin (hb_font_t *font HB_UNUSED,
+                         void *font_data HB_UNUSED,
+                         hb_codepoint_t glyph HB_UNUSED,
+                         hb_position_t *x HB_UNUSED,
+                         hb_position_t *y HB_UNUSED,
+                         void *user_data HB_UNUSED)
+{
+  /* We always work in the horizontal coordinates. */
+  return true;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_v_origin (hb_font_t *font HB_UNUSED,
+                         void *font_data,
+                         hb_codepoint_t glyph,
+                         hb_position_t *x,
+                         hb_position_t *y,
+                         void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return false;
+}
+
+static hb_position_t
+hb_ot_get_glyph_h_kerning (hb_font_t *font,
+                          void *font_data,
+                          hb_codepoint_t left_glyph,
+                          hb_codepoint_t right_glyph,
+                          void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return 0;
+}
+
+static hb_position_t
+hb_ot_get_glyph_v_kerning (hb_font_t *font HB_UNUSED,
+                          void *font_data HB_UNUSED,
+                          hb_codepoint_t top_glyph HB_UNUSED,
+                          hb_codepoint_t bottom_glyph HB_UNUSED,
+                          void *user_data HB_UNUSED)
+{
+  return 0;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_extents (hb_font_t *font HB_UNUSED,
+                        void *font_data,
+                        hb_codepoint_t glyph,
+                        hb_glyph_extents_t *extents,
+                        void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return false;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_contour_point (hb_font_t *font HB_UNUSED,
+                              void *font_data,
+                              hb_codepoint_t glyph,
+                              unsigned int point_index,
+                              hb_position_t *x,
+                              hb_position_t *y,
+                              void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return false;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_name (hb_font_t *font HB_UNUSED,
+                     void *font_data,
+                     hb_codepoint_t glyph,
+                     char *name, unsigned int size,
+                     void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return false;
+}
+
+static hb_bool_t
+hb_ot_get_glyph_from_name (hb_font_t *font HB_UNUSED,
+                          void *font_data,
+                          const char *name, int len, /* -1 means nul-terminated */
+                          hb_codepoint_t *glyph,
+                          void *user_data HB_UNUSED)
+{
+  /* TODO */
+  return false;
+}
+
+
+static hb_font_funcs_t *
+_hb_ot_get_font_funcs (void)
+{
+  static const hb_font_funcs_t ot_ffuncs = {
+    HB_OBJECT_HEADER_STATIC,
+
+    true, /* immutable */
+
+    {
+#define HB_FONT_FUNC_IMPLEMENT(name) hb_ot_get_##name,
+      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_FONT_FUNC_IMPLEMENT
+    }
+  };
+
+  return const_cast<hb_font_funcs_t *> (&ot_ffuncs);
+}
+
+
+void
+hb_ot_font_set_funcs (hb_font_t *font)
+{
+  hb_ot_font_t *ot_font = _hb_ot_font_create (font);
+  if (unlikely (!ot_font))
+    return;
+
+  hb_font_set_funcs (font,
+                    _hb_ot_get_font_funcs (),
+                    ot_font,
+                    (hb_destroy_func_t) _hb_ot_font_destroy);
+}
similarity index 68%
rename from src/hb-old/harfbuzz.h
rename to src/hb-ot-font.h
index e91a33e..7a8c04a 100644 (file)
@@ -1,8 +1,7 @@
 /*
 /*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2006  Behdad Esfahbod
+ * Copyright © 2014  Google, Inc.
  *
  *
- * This is part of HarfBuzz, an OpenType Layout engine library.
+ *  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
  *
  * Permission is hereby granted, without written agreement and without
  * license or royalty fees, to use, copy, modify, and distribute this
  * 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.
  * 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, Roozbeh Pournader
  */
 
  */
 
-#ifndef HARFBUZZ_H
-#define HARFBUZZ_H
+#ifndef HB_OT_FONT_H
+#define HB_OT_FONT_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+
+void
+hb_ot_font_set_funcs (hb_font_t *font);
+
 
 
-#include "harfbuzz-external.h"
-#include "harfbuzz-global.h"
-#include "harfbuzz-buffer.h"
-#include "harfbuzz-gdef.h"
-#include "harfbuzz-gsub.h"
-#include "harfbuzz-gpos.h"
-#include "harfbuzz-open.h"
-#include "harfbuzz-shaper.h"
+HB_END_DECLS
 
 
-#endif /* HARFBUZZ_OPEN_H */
+#endif /* HB_OT_FONT_H */
index 3a94512..ec4e8c9 100644 (file)
@@ -43,7 +43,7 @@ namespace OT {
 
 struct head
 {
 
 struct head
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_head;
+  static const hb_tag_t tableTag       = HB_OT_TAG_head;
 
   inline unsigned int get_upem (void) const {
     unsigned int upem = unitsPerEm;
 
   inline unsigned int get_upem (void) const {
     unsigned int upem = unitsPerEm;
@@ -58,12 +58,12 @@ struct head
 
   protected:
   FixedVersion version;                /* Version of the head table--currently
 
   protected:
   FixedVersion version;                /* Version of the head table--currently
-                                        * 0x00010000 for version 1.0. */
+                                        * 0x00010000u for version 1.0. */
   FixedVersion fontRevision;           /* Set by font manufacturer. */
   ULONG                checkSumAdjustment;     /* To compute: set it to 0, sum the
                                         * entire font as ULONG, then store
   FixedVersion fontRevision;           /* Set by font manufacturer. */
   ULONG                checkSumAdjustment;     /* To compute: set it to 0, sum the
                                         * entire font as ULONG, then store
-                                        * 0xB1B0AFBA - sum. */
-  ULONG                magicNumber;            /* Set to 0x5F0F3CF5. */
+                                        * 0xB1B0AFBAu - sum. */
+  ULONG                magicNumber;            /* Set to 0x5F0F3CF5u. */
   USHORT       flags;                  /* Bit 0: Baseline for font at y=0;
                                         * Bit 1: Left sidebearing point at x=0;
                                         * Bit 2: Instructions may depend on point size;
   USHORT       flags;                  /* Bit 0: Baseline for font at y=0;
                                         * Bit 1: Left sidebearing point at x=0;
                                         * Bit 2: Instructions may depend on point size;
index 2b89c4e..d433200 100644 (file)
@@ -42,15 +42,15 @@ namespace OT {
 
 struct hhea
 {
 
 struct hhea
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_hhea;
+  static const hb_tag_t tableTag       = HB_OT_TAG_hhea;
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
-  protected:
-  FixedVersion version;                /* 0x00010000 for version 1.0. */
+  public:
+  FixedVersion version;                /* 0x00010000u for version 1.0. */
   FWORD                ascender;               /* Typographic ascent. <a
                                         * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
                                         * (Distance from baseline of highest
   FWORD                ascender;               /* Typographic ascent. <a
                                         * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
                                         * (Distance from baseline of highest
index b94337d..e918e3b 100644 (file)
@@ -50,7 +50,7 @@ struct LongHorMetric
 
 struct hmtx
 {
 
 struct hmtx
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_hmtx;
+  static const hb_tag_t tableTag       = HB_OT_TAG_hmtx;
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
@@ -59,7 +59,7 @@ struct hmtx
     return TRACE_RETURN (true);
   }
 
     return TRACE_RETURN (true);
   }
 
-  protected:
+  public:
   LongHorMetric        longHorMetric[VAR];     /* Paired advance width and left side
                                         * bearing values for each glyph. The
                                         * value numOfHMetrics comes from
   LongHorMetric        longHorMetric[VAR];     /* Paired advance width and left side
                                         * bearing values for each glyph. The
                                         * value numOfHMetrics comes from
index e6018db..abd063c 100644 (file)
@@ -39,6 +39,7 @@ namespace OT {
 
 #define NOT_COVERED            ((unsigned int) -1)
 #define MAX_NESTING_LEVEL      8
 
 #define NOT_COVERED            ((unsigned int) -1)
 #define MAX_NESTING_LEVEL      8
+#define MAX_CONTEXT_LENGTH     64
 
 
 
 
 
 
@@ -102,7 +103,8 @@ struct RecordArrayOf : SortedArrayOf<Record<Type> > {
   }
   inline bool find_index (hb_tag_t tag, unsigned int *index) const
   {
   }
   inline bool find_index (hb_tag_t tag, unsigned int *index) const
   {
-    int i = this->search (tag);
+    /* If we want to allow non-sorted data, we can lsearch(). */
+    int i = this->/*lsearch*/bsearch (tag);
     if (i != -1) {
         if (index) *index = i;
         return true;
     if (i != -1) {
         if (index) *index = i;
         return true;
@@ -129,8 +131,7 @@ struct RecordListOf : RecordArrayOf<Type>
 struct RangeRecord
 {
   inline int cmp (hb_codepoint_t g) const {
 struct RangeRecord
 {
   inline int cmp (hb_codepoint_t g) const {
-    hb_codepoint_t a = start, b = end;
-    return g < a ? -1 : g <= b ? 0 : +1 ;
+    return g < start ? -1 : g <= end ? 0 : +1 ;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
@@ -189,10 +190,10 @@ struct LangSys
                                           unsigned int *feature_indexes /* OUT */) const
   { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
 
                                           unsigned int *feature_indexes /* OUT */) const
   { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
 
-  inline bool has_required_feature (void) const { return reqFeatureIndex != 0xffff; }
+  inline bool has_required_feature (void) const { return reqFeatureIndex != 0xFFFFu; }
   inline unsigned int get_required_feature_index (void) const
   {
   inline unsigned int get_required_feature_index (void) const
   {
-    if (reqFeatureIndex == 0xffff)
+    if (reqFeatureIndex == 0xFFFFu)
       return Index::NOT_FOUND_INDEX;
    return reqFeatureIndex;;
   }
       return Index::NOT_FOUND_INDEX;
    return reqFeatureIndex;;
   }
@@ -203,11 +204,11 @@ struct LangSys
     return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
   }
 
     return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
   }
 
-  Offset       lookupOrder;    /* = Null (reserved for an offset to a
+  Offset<>     lookupOrderZ;   /* = Null (reserved for an offset to a
                                 * reordering table) */
   USHORT       reqFeatureIndex;/* Index of a feature required for this
                                 * language system--if no required features
                                 * reordering table) */
   USHORT       reqFeatureIndex;/* Index of a feature required for this
                                 * language system--if no required features
-                                * = 0xFFFF */
+                                * = 0xFFFFu */
   IndexArray   featureIndex;   /* Array of indices into the FeatureList */
   public:
   DEFINE_SIZE_ARRAY (6, featureIndex);
   IndexArray   featureIndex;   /* Array of indices into the FeatureList */
   public:
   DEFINE_SIZE_ARRAY (6, featureIndex);
@@ -377,7 +378,7 @@ struct FeatureParamsStylisticSet
     return TRACE_RETURN (c->check_struct (this));
   }
 
     return TRACE_RETURN (c->check_struct (this));
   }
 
-  USHORT       minorVersion;   /* (set to 0): This corresponds to a “minor”
+  USHORT       version;        /* (set to 0): This corresponds to a “minor”
                                 * version number. Additional data may be
                                 * added to the end of this Feature Parameters
                                 * table in the future. */
                                 * version number. Additional data may be
                                 * added to the end of this Feature Parameters
                                 * table in the future. */
@@ -400,6 +401,7 @@ struct FeatureParamsStylisticSet
   DEFINE_SIZE_STATIC (4);
 };
 
   DEFINE_SIZE_STATIC (4);
 };
 
+/* http://www.microsoft.com/typography/otspec/features_ae.htm#cv01-cv99 */
 struct FeatureParamsCharacterVariants
 {
   inline bool sanitize (hb_sanitize_context_t *c) {
 struct FeatureParamsCharacterVariants
 {
   inline bool sanitize (hb_sanitize_context_t *c) {
@@ -446,9 +448,9 @@ struct FeatureParams
     TRACE_SANITIZE (this);
     if (tag == HB_TAG ('s','i','z','e'))
       return TRACE_RETURN (u.size.sanitize (c));
     TRACE_SANITIZE (this);
     if (tag == HB_TAG ('s','i','z','e'))
       return TRACE_RETURN (u.size.sanitize (c));
-    if ((tag & 0xFFFF0000) == HB_TAG ('s','s','\0','\0')) /* ssXX */
+    if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
       return TRACE_RETURN (u.stylisticSet.sanitize (c));
       return TRACE_RETURN (u.stylisticSet.sanitize (c));
-    if ((tag & 0xFFFF0000) == HB_TAG ('c','v','\0','\0')) /* cvXX */
+    if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
       return TRACE_RETURN (u.characterVariants.sanitize (c));
     return TRACE_RETURN (true);
   }
       return TRACE_RETURN (u.characterVariants.sanitize (c));
     return TRACE_RETURN (true);
   }
@@ -500,11 +502,11 @@ struct Feature
      * Adobe tools, only the 'size' feature had FeatureParams defined.
      */
 
      * Adobe tools, only the 'size' feature had FeatureParams defined.
      */
 
-    Offset orig_offset = featureParams;
+    OffsetTo<FeatureParams> orig_offset = featureParams;
     if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
       return TRACE_RETURN (false);
 
     if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
       return TRACE_RETURN (false);
 
-    if (likely (!orig_offset))
+    if (likely (orig_offset.is_null ()))
       return TRACE_RETURN (true);
 
     if (featureParams == 0 && closure &&
       return TRACE_RETURN (true);
 
     if (featureParams == 0 && closure &&
@@ -512,13 +514,13 @@ struct Feature
        closure->list_base && closure->list_base < this)
     {
       unsigned int new_offset_int = (unsigned int) orig_offset -
        closure->list_base && closure->list_base < this)
     {
       unsigned int new_offset_int = (unsigned int) orig_offset -
-                                   ((char *) this - (char *) closure->list_base);
+                                   (((char *) this) - ((char *) closure->list_base));
 
 
-      Offset new_offset;
+      OffsetTo<FeatureParams> new_offset;
       /* Check that it did not overflow. */
       new_offset.set (new_offset_int);
       if (new_offset == new_offset_int &&
       /* Check that it did not overflow. */
       new_offset.set (new_offset_int);
       if (new_offset == new_offset_int &&
-         featureParams.try_set (c, new_offset) &&
+         c->try_set (&featureParams, new_offset) &&
          !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
        return TRACE_RETURN (false);
     }
          !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
        return TRACE_RETURN (false);
     }
@@ -583,7 +585,7 @@ struct Lookup
     TRACE_SERIALIZE (this);
     if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     lookupType.set (lookup_type);
     TRACE_SERIALIZE (this);
     if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     lookupType.set (lookup_type);
-    lookupFlag.set (lookup_props & 0xFFFF);
+    lookupFlag.set (lookup_props & 0xFFFFu);
     if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN (false);
     if (lookupFlag & LookupFlag::UseMarkFilteringSet)
     {
     if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN (false);
     if (lookupFlag & LookupFlag::UseMarkFilteringSet)
     {
@@ -607,7 +609,7 @@ struct Lookup
 
   USHORT       lookupType;             /* Different enumerations for GSUB and GPOS */
   USHORT       lookupFlag;             /* Lookup qualifiers */
 
   USHORT       lookupType;             /* Different enumerations for GSUB and GPOS */
   USHORT       lookupFlag;             /* Lookup qualifiers */
-  ArrayOf<Offset>
+  ArrayOf<Offset<> >
                subTable;               /* Array of SubTables */
   USHORT       markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
                                         * structure. This field is only present if bit
                subTable;               /* Array of SubTables */
   USHORT       markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
                                         * structure. This field is only present if bit
@@ -630,7 +632,7 @@ struct CoverageFormat1
   private:
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
   private:
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
-    int i = glyphArray.search (glyph_id);
+    int i = glyphArray.bsearch (glyph_id);
     ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED);
     return i;
   }
     ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED);
     return i;
   }
@@ -695,7 +697,7 @@ struct CoverageFormat2
   private:
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
   private:
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
-    int i = rangeRecord.search (glyph_id);
+    int i = rangeRecord.bsearch (glyph_id);
     if (i != -1) {
       const RangeRecord &range = rangeRecord[i];
       return (unsigned int) range.value + (glyph_id - range.start);
     if (i != -1) {
       const RangeRecord &range = rangeRecord[i];
       return (unsigned int) range.value + (glyph_id - range.start);
@@ -872,16 +874,16 @@ struct Coverage
     inline void init (const Coverage &c_) {
       format = c_.u.format;
       switch (format) {
     inline void init (const Coverage &c_) {
       format = c_.u.format;
       switch (format) {
-      case 1: return u.format1.init (c_.u.format1);
-      case 2: return u.format2.init (c_.u.format2);
-      default:return;
+      case 1: u.format1.init (c_.u.format1); return;
+      case 2: u.format2.init (c_.u.format2); return;
+      default:                               return;
       }
     }
     inline bool more (void) {
       switch (format) {
       case 1: return u.format1.more ();
       case 2: return u.format2.more ();
       }
     }
     inline bool more (void) {
       switch (format) {
       case 1: return u.format1.more ();
       case 2: return u.format2.more ();
-      default:return true;
+      default:return false;
       }
     }
     inline void next (void) {
       }
     }
     inline void next (void) {
@@ -895,14 +897,14 @@ struct Coverage
       switch (format) {
       case 1: return u.format1.get_glyph ();
       case 2: return u.format2.get_glyph ();
       switch (format) {
       case 1: return u.format1.get_glyph ();
       case 2: return u.format2.get_glyph ();
-      default:return true;
+      default:return 0;
       }
     }
     inline uint16_t get_coverage (void) {
       switch (format) {
       case 1: return u.format1.get_coverage ();
       case 2: return u.format2.get_coverage ();
       }
     }
     inline uint16_t get_coverage (void) {
       switch (format) {
       case 1: return u.format1.get_coverage ();
       case 2: return u.format2.get_coverage ();
-      default:return true;
+      default:return -1;
       }
     }
 
       }
     }
 
@@ -956,6 +958,19 @@ struct ClassDefFormat1
 
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = classValue.len;
 
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = classValue.len;
+    if (klass == 0)
+    {
+      /* Match if there's any glyph that is not listed! */
+      hb_codepoint_t g = -1;
+      if (!hb_set_next (glyphs, &g))
+        return false;
+      if (g < startGlyph)
+        return true;
+      g = startGlyph + count - 1;
+      if (hb_set_next (glyphs, &g))
+        return true;
+      /* Fall through. */
+    }
     for (unsigned int i = 0; i < count; i++)
       if (classValue[i] == klass && glyphs->has (startGlyph + i))
         return true;
     for (unsigned int i = 0; i < count; i++)
       if (classValue[i] == klass && glyphs->has (startGlyph + i))
         return true;
@@ -978,7 +993,7 @@ struct ClassDefFormat2
   private:
   inline unsigned int get_class (hb_codepoint_t glyph_id) const
   {
   private:
   inline unsigned int get_class (hb_codepoint_t glyph_id) const
   {
-    int i = rangeRecord.search (glyph_id);
+    int i = rangeRecord.bsearch (glyph_id);
     if (i != -1)
       return rangeRecord[i].value;
     return 0;
     if (i != -1)
       return rangeRecord[i].value;
     return 0;
@@ -999,6 +1014,22 @@ struct ClassDefFormat2
 
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = rangeRecord.len;
 
   inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
     unsigned int count = rangeRecord.len;
+    if (klass == 0)
+    {
+      /* Match if there's any glyph that is not listed! */
+      hb_codepoint_t g = (hb_codepoint_t) -1;
+      for (unsigned int i = 0; i < count; i++)
+      {
+       if (!hb_set_next (glyphs, &g))
+         break;
+       if (g < rangeRecord[i].start)
+         return true;
+       g = rangeRecord[i].end;
+      }
+      if (g != (hb_codepoint_t) -1 && hb_set_next (glyphs, &g))
+        return true;
+      /* Fall through. */
+    }
     for (unsigned int i = 0; i < count; i++)
       if (rangeRecord[i].value == klass && rangeRecord[i].intersects (glyphs))
         return true;
     for (unsigned int i = 0; i < count; i++)
       if (rangeRecord[i].value == klass && rangeRecord[i].intersects (glyphs))
         return true;
@@ -1083,7 +1114,7 @@ struct Device
 
     if (!pixels) return 0;
 
 
     if (!pixels) return 0;
 
-    return pixels * (int64_t) scale / ppem;
+    return (int) (pixels * (int64_t) scale / ppem);
   }
 
 
   }
 
 
@@ -1100,7 +1131,7 @@ struct Device
 
     unsigned int byte = deltaValue[s >> (4 - f)];
     unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
 
     unsigned int byte = deltaValue[s >> (4 - f)];
     unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
-    unsigned int mask = (0xFFFF >> (16 - (1 << f)));
+    unsigned int mask = (0xFFFFu >> (16 - (1 << f)));
 
     int delta = bits & mask;
 
 
     int delta = bits & mask;
 
index ff2d09c..84a5e79 100644 (file)
@@ -282,7 +282,7 @@ struct MarkGlyphSetsFormat1
 
   protected:
   USHORT       format;                 /* Format identifier--format = 1 */
 
   protected:
   USHORT       format;                 /* Format identifier--format = 1 */
-  LongOffsetArrayOf<Coverage>
+  ArrayOf<OffsetTo<Coverage, ULONG> >
                coverage;               /* Array of long offsets to mark set
                                         * coverage tables */
   public:
                coverage;               /* Array of long offsets to mark set
                                         * coverage tables */
   public:
@@ -324,7 +324,7 @@ struct MarkGlyphSets
 
 struct GDEF
 {
 
 struct GDEF
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_GDEF;
+  static const hb_tag_t tableTag       = HB_OT_TAG_GDEF;
 
   enum GlyphClasses {
     UnclassifiedGlyph  = 0,
 
   enum GlyphClasses {
     UnclassifiedGlyph  = 0,
@@ -360,9 +360,9 @@ struct GDEF
                                      hb_position_t *caret_array /* OUT */) const
   { return (this+ligCaretList).get_lig_carets (font, direction, glyph_id, start_offset, caret_count, caret_array); }
 
                                      hb_position_t *caret_array /* OUT */) const
   { return (this+ligCaretList).get_lig_carets (font, direction, glyph_id, start_offset, caret_count, caret_array); }
 
-  inline bool has_mark_sets (void) const { return version.to_int () >= 0x00010002 && markGlyphSetsDef[0] != 0; }
+  inline bool has_mark_sets (void) const { return version.to_int () >= 0x00010002u && markGlyphSetsDef[0] != 0; }
   inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
   inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
-  { return version.to_int () >= 0x00010002 && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); }
+  { return version.to_int () >= 0x00010002u && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
@@ -372,7 +372,7 @@ struct GDEF
                         attachList.sanitize (c, this) &&
                         ligCaretList.sanitize (c, this) &&
                         markAttachClassDef.sanitize (c, this) &&
                         attachList.sanitize (c, this) &&
                         ligCaretList.sanitize (c, this) &&
                         markAttachClassDef.sanitize (c, this) &&
-                        (version.to_int () < 0x00010002 || markGlyphSetsDef[0].sanitize (c, this)));
+                        (version.to_int () < 0x00010002u || markGlyphSetsDef[0].sanitize (c, this)));
   }
 
 
   }
 
 
@@ -383,12 +383,14 @@ struct GDEF
   {
     unsigned int klass = get_glyph_class (glyph);
 
   {
     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) {
     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 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);
     case MarkGlyph:
          klass = get_mark_attachment_type (glyph);
          return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8);
@@ -398,7 +400,7 @@ struct GDEF
 
   protected:
   FixedVersion version;                /* Version of the GDEF table--currently
 
   protected:
   FixedVersion version;                /* Version of the GDEF table--currently
-                                        * 0x00010002 */
+                                        * 0x00010002u */
   OffsetTo<ClassDef>
                glyphClassDef;          /* Offset to class definition table
                                         * for glyph type--from beginning of
   OffsetTo<ClassDef>
                glyphClassDef;          /* Offset to class definition table
                                         * for glyph type--from beginning of
index 3e43694..8e2860c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2007,2008,2009,2010  Red Hat, Inc.
 /*
  * Copyright © 2007,2008,2009,2010  Red Hat, Inc.
- * Copyright © 2010,2012  Google, Inc.
+ * Copyright © 2010,2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -49,18 +49,18 @@ typedef Value ValueRecord[VAR];
 struct ValueFormat : USHORT
 {
   enum Flags {
 struct ValueFormat : USHORT
 {
   enum Flags {
-    xPlacement = 0x0001      /* Includes horizontal adjustment for placement */
-    yPlacement = 0x0002      /* Includes vertical adjustment for placement */
-    xAdvance   = 0x0004      /* Includes horizontal adjustment for advance */
-    yAdvance   = 0x0008      /* Includes vertical adjustment for advance */
-    xPlaDevice = 0x0010      /* Includes horizontal Device table for placement */
-    yPlaDevice = 0x0020      /* Includes vertical Device table for placement */
-    xAdvDevice = 0x0040      /* Includes horizontal Device table for advance */
-    yAdvDevice = 0x0080      /* Includes vertical Device table for advance */
-    ignored    = 0x0F00      /* Was used in TrueType Open for MM fonts */
-    reserved   = 0xF000      /* For future use */
-
-    devices    = 0x00F0        /* Mask for having any Device table */
+    xPlacement = 0x0001u,      /* Includes horizontal adjustment for placement */
+    yPlacement = 0x0002u,      /* Includes vertical adjustment for placement */
+    xAdvance   = 0x0004u,      /* Includes horizontal adjustment for advance */
+    yAdvance   = 0x0008u,      /* Includes vertical adjustment for advance */
+    xPlaDevice = 0x0010u,      /* Includes horizontal Device table for placement */
+    yPlaDevice = 0x0020u,      /* Includes vertical Device table for placement */
+    xAdvDevice = 0x0040u,      /* Includes horizontal Device table for advance */
+    yAdvDevice = 0x0080u,      /* Includes vertical Device table for advance */
+    ignored    = 0x0F00u,      /* Was used in TrueType Open for MM fonts */
+    reserved   = 0xF000u,      /* For future use */
+
+    devices    = 0x00F0u       /* Mask for having any Device table */
   };
 
 /* All fields are options.  Only those available advance the value pointer. */
   };
 
 /* All fields are options.  Only those available advance the value pointer. */
@@ -109,11 +109,13 @@ struct ValueFormat : USHORT
     if (format & xPlacement) glyph_pos.x_offset  += font->em_scale_x (get_short (values++));
     if (format & yPlacement) glyph_pos.y_offset  += font->em_scale_y (get_short (values++));
     if (format & xAdvance) {
     if (format & xPlacement) glyph_pos.x_offset  += font->em_scale_x (get_short (values++));
     if (format & yPlacement) glyph_pos.y_offset  += font->em_scale_y (get_short (values++));
     if (format & xAdvance) {
-      if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values++)); else values++;
+      if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values));
+      values++;
     }
     /* y_advance values grow downward but font-space grows upward, hence negation */
     if (format & yAdvance) {
     }
     /* y_advance values grow downward but font-space grows upward, hence negation */
     if (format & yAdvance) {
-      if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values++)); else values++;
+      if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values));
+      values++;
     }
 
     if (!has_device ()) return;
     }
 
     if (!has_device ()) return;
@@ -125,17 +127,21 @@ struct ValueFormat : USHORT
 
     /* pixel -> fractional pixel */
     if (format & xPlaDevice) {
 
     /* pixel -> fractional pixel */
     if (format & xPlaDevice) {
-      if (x_ppem) glyph_pos.x_offset  += (base + get_device (values++)).get_x_delta (font); else values++;
+      if (x_ppem) glyph_pos.x_offset  += (base + get_device (values)).get_x_delta (font);
+      values++;
     }
     if (format & yPlaDevice) {
     }
     if (format & yPlaDevice) {
-      if (y_ppem) glyph_pos.y_offset  += (base + get_device (values++)).get_y_delta (font); else values++;
+      if (y_ppem) glyph_pos.y_offset  += (base + get_device (values)).get_y_delta (font);
+      values++;
     }
     if (format & xAdvDevice) {
     }
     if (format & xAdvDevice) {
-      if (horizontal && x_ppem) glyph_pos.x_advance += (base + get_device (values++)).get_x_delta (font); else values++;
+      if (horizontal && x_ppem) glyph_pos.x_advance += (base + get_device (values)).get_x_delta (font);
+      values++;
     }
     if (format & yAdvDevice) {
       /* y_advance values grow downward but font-space grows upward, hence negation */
     }
     if (format & yAdvDevice) {
       /* y_advance values grow downward but font-space grows upward, hence negation */
-      if (!horizontal && y_ppem) glyph_pos.y_advance -= (base + get_device (values++)).get_y_delta (font); else values++;
+      if (!horizontal && y_ppem) glyph_pos.y_advance -= (base + get_device (values)).get_y_delta (font);
+      values++;
     }
   }
 
     }
   }
 
@@ -240,12 +246,12 @@ struct AnchorFormat2
       unsigned int x_ppem = font->x_ppem;
       unsigned int y_ppem = font->y_ppem;
       hb_position_t cx, cy;
       unsigned int x_ppem = font->x_ppem;
       unsigned int y_ppem = font->y_ppem;
       hb_position_t cx, cy;
-      hb_bool_t ret = false;
+      hb_bool_t ret;
 
 
-      if (x_ppem || y_ppem)
-       ret = font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
-      *x = x_ppem && ret ? cx : font->em_scale_x (xCoordinate);
-      *y = y_ppem && ret ? cy : font->em_scale_y (yCoordinate);
+      ret = (x_ppem || y_ppem) &&
+             font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
+      *x = ret && x_ppem ? cx : font->em_scale_x (xCoordinate);
+      *y = ret && y_ppem ? cy : font->em_scale_y (yCoordinate);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
@@ -390,6 +396,7 @@ struct MarkArray : ArrayOf<MarkRecord>      /* Array of MarkRecords--in Coverage orde
                     unsigned int glyph_pos) const
   {
     TRACE_APPLY (this);
                     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;
 
     const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index);
     unsigned int mark_class = record.klass;
 
@@ -402,15 +409,15 @@ struct MarkArray : ArrayOf<MarkRecord>    /* Array of MarkRecords--in Coverage orde
 
     hb_position_t mark_x, mark_y, base_x, base_y;
 
 
     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.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);
   }
 
     return TRACE_RETURN (true);
   }
 
@@ -439,13 +446,14 @@ struct SinglePosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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,
     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);
   }
 
     return TRACE_RETURN (true);
   }
 
@@ -484,16 +492,17 @@ struct SinglePosFormat2
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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 ()],
     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);
   }
 
     return TRACE_RETURN (true);
   }
 
@@ -519,12 +528,12 @@ struct SinglePosFormat2
 struct SinglePos
 {
   template <typename context_t>
 struct SinglePos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    case 2: return TRACE_RETURN (c->process (u.format2));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    case 2: return TRACE_RETURN (c->dispatch (u.format2));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -588,6 +597,7 @@ struct PairSet
                     unsigned int pos) const
   {
     TRACE_APPLY (this);
                     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);
     unsigned int len1 = valueFormats[0].get_len ();
     unsigned int len2 = valueFormats[1].get_len ();
     unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
@@ -596,15 +606,16 @@ struct PairSet
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
     {
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
     {
-      if (c->buffer->info[pos].codepoint == record->secondGlyph)
+      /* TODO bsearch */
+      if (buffer->info[pos].codepoint == record->secondGlyph)
       {
        valueFormats[0].apply_value (c->font, c->direction, this,
       {
        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,
        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++;
        if (len2)
          pos++;
-       c->buffer->idx = pos;
+       buffer->idx = pos;
        return TRACE_RETURN (true);
       }
       record = &StructAtOffset<PairValueRecord> (record, record_size);
        return TRACE_RETURN (true);
       }
       record = &StructAtOffset<PairValueRecord> (record, record_size);
@@ -658,10 +669,11 @@ struct PairPosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    hb_apply_context_t::mark_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);
 
     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);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (!skippy_iter.next ()) return TRACE_RETURN (false);
@@ -709,8 +721,6 @@ struct PairPosFormat2
     TRACE_COLLECT_GLYPHS (this);
     /* (this+coverage).add_coverage (c->input); // Don't need this. */
 
     TRACE_COLLECT_GLYPHS (this);
     /* (this+coverage).add_coverage (c->input); // Don't need this. */
 
-    /* TODO only add values for pairs that have nonzero adjustments. */
-
     unsigned int count1 = class1Count;
     const ClassDef &klass1 = this+classDef1;
     for (unsigned int i = 0; i < count1; i++)
     unsigned int count1 = class1Count;
     const ClassDef &klass1 = this+classDef1;
     for (unsigned int i = 0; i < count1; i++)
@@ -730,10 +740,11 @@ struct PairPosFormat2
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    hb_apply_context_t::mark_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);
 
     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);
     if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     if (!skippy_iter.next ()) return TRACE_RETURN (false);
@@ -742,19 +753,19 @@ struct PairPosFormat2
     unsigned int len2 = valueFormat2.get_len ();
     unsigned int record_len = len1 + len2;
 
     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,
     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,
     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)
     if (len2)
-      c->buffer->idx++;
+      buffer->idx++;
 
     return TRACE_RETURN (true);
   }
 
     return TRACE_RETURN (true);
   }
@@ -809,12 +820,12 @@ struct PairPosFormat2
 struct PairPos
 {
   template <typename context_t>
 struct PairPos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    case 2: return TRACE_RETURN (c->process (u.format2));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    case 2: return TRACE_RETURN (c->dispatch (u.format2));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -876,29 +887,30 @@ struct CursivePosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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. */
 
     /* We don't handle mark glyphs here. */
-    if (c->property & 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::mark_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);
 
     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);
 
     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);
 
     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;
     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 */
 
     hb_position_t d;
     /* Main-direction adjustment */
@@ -951,7 +963,7 @@ struct CursivePosFormat1
        pos[j].x_offset = exit_x - entry_x;
     }
 
        pos[j].x_offset = exit_x - entry_x;
     }
 
-    c->buffer->idx = j;
+    buffer->idx = j;
     return TRACE_RETURN (true);
   }
 
     return TRACE_RETURN (true);
   }
 
@@ -975,11 +987,11 @@ struct CursivePosFormat1
 struct CursivePos
 {
   template <typename context_t>
 struct CursivePos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1013,7 +1025,6 @@ struct MarkBasePosFormat1
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+baseCoverage).add_coverage (c->input);
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+baseCoverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1024,23 +1035,24 @@ struct MarkBasePosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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 */
     if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a non-mark glyph */
-    unsigned int property;
-    hb_apply_context_t::mark_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 {
     do {
-      if (!skippy_iter.prev (&property, LookupFlag::IgnoreMarks)) return TRACE_RETURN (false);
+      if (!skippy_iter.prev ()) return TRACE_RETURN (false);
       /* We only want to attach to the first of a MultipleSubst sequence.  Reject others. */
       /* We only want to attach to the first of a MultipleSubst sequence.  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);
 
       skippy_iter.reject ();
     } while (1);
 
-    /* The following assertion is too strong, so we've disabled it. */
-    if (!(property & 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));
     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));
@@ -1074,11 +1086,11 @@ struct MarkBasePosFormat1
 struct MarkBasePos
 {
   template <typename context_t>
 struct MarkBasePos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1117,7 +1129,6 @@ struct MarkLigPosFormat1
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+ligatureCoverage).add_coverage (c->input);
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+ligatureCoverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1128,19 +1139,20 @@ struct MarkLigPosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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 */
     if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a non-mark glyph */
-    unsigned int property;
-    hb_apply_context_t::mark_skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1);
-    if (!skippy_iter.prev (&property, LookupFlag::IgnoreMarks)) return TRACE_RETURN (false);
+    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 (!(property & 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 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;
     if (lig_index == NOT_COVERED) return TRACE_RETURN (false);
 
     const LigatureArray& lig_array = this+ligatureArray;
@@ -1155,11 +1167,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;
      * 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)
     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;
 
     else
       comp_index = comp_count - 1;
 
@@ -1195,11 +1207,11 @@ struct MarkLigPosFormat1
 struct MarkLigPos
 {
   template <typename context_t>
 struct MarkLigPos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1233,7 +1245,6 @@ struct MarkMarkPosFormat1
     TRACE_COLLECT_GLYPHS (this);
     (this+mark1Coverage).add_coverage (c->input);
     (this+mark2Coverage).add_coverage (c->input);
     TRACE_COLLECT_GLYPHS (this);
     (this+mark1Coverage).add_coverage (c->input);
     (this+mark2Coverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1244,22 +1255,23 @@ struct MarkMarkPosFormat1
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   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 */
     if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a suitable mark glyph until a non-mark glyph */
-    unsigned int property;
-    hb_apply_context_t::mark_skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1);
-    if (!skippy_iter.prev (&property)) return TRACE_RETURN (false);
+    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 (!(property & 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 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. */
 
     if (likely (id1 == id2)) {
       if (id1 == 0) /* Marks belonging to the same base. */
@@ -1277,7 +1289,7 @@ struct MarkMarkPosFormat1
     return TRACE_RETURN (false);
 
     good:
     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));
     if (mark2_index == NOT_COVERED) return TRACE_RETURN (false);
 
     return TRACE_RETURN ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
@@ -1314,11 +1326,11 @@ struct MarkMarkPosFormat1
 struct MarkMarkPos
 {
   template <typename context_t>
 struct MarkMarkPos
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1373,19 +1385,19 @@ struct PosLookupSubTable
   };
 
   template <typename context_t>
   };
 
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
+  inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (lookup_type) {
     switch (lookup_type) {
-    case Single:               return TRACE_RETURN (u.single.process (c));
-    case Pair:                 return TRACE_RETURN (u.pair.process (c));
-    case Cursive:              return TRACE_RETURN (u.cursive.process (c));
-    case MarkBase:             return TRACE_RETURN (u.markBase.process (c));
-    case MarkLig:              return TRACE_RETURN (u.markLig.process (c));
-    case MarkMark:             return TRACE_RETURN (u.markMark.process (c));
-    case Context:              return TRACE_RETURN (u.context.process (c));
-    case ChainContext:         return TRACE_RETURN (u.chainContext.process (c));
-    case Extension:            return TRACE_RETURN (u.extension.process (c));
+    case Single:               return TRACE_RETURN (u.single.dispatch (c));
+    case Pair:                 return TRACE_RETURN (u.pair.dispatch (c));
+    case Cursive:              return TRACE_RETURN (u.cursive.dispatch (c));
+    case MarkBase:             return TRACE_RETURN (u.markBase.dispatch (c));
+    case MarkLig:              return TRACE_RETURN (u.markLig.dispatch (c));
+    case MarkMark:             return TRACE_RETURN (u.markMark.dispatch (c));
+    case Context:              return TRACE_RETURN (u.context.dispatch (c));
+    case ChainContext:         return TRACE_RETURN (u.chainContext.dispatch (c));
+    case Extension:            return TRACE_RETURN (u.extension.dispatch (c));
     default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1433,27 +1445,16 @@ struct PosLookup : Lookup
   inline const PosLookupSubTable& get_subtable (unsigned int i) const
   { return this+CastR<OffsetArrayOf<PosLookupSubTable> > (subTable)[i]; }
 
   inline const PosLookupSubTable& get_subtable (unsigned int i) const
   { return this+CastR<OffsetArrayOf<PosLookupSubTable> > (subTable)[i]; }
 
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline bool is_reverse (void) const
   {
   {
-    TRACE_PROCESS (this);
-    unsigned int lookup_type = get_type ();
-    unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++) {
-      typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
-      if (c->stop_sublookup_iteration (r))
-        return TRACE_RETURN (r);
-    }
-    return TRACE_RETURN (c->default_return_value ());
+    return false;
   }
   }
-  template <typename context_t>
-  static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
 
 
-  inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
+  inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
   {
     TRACE_COLLECT_GLYPHS (this);
     c->set_recurse_func (NULL);
   {
     TRACE_COLLECT_GLYPHS (this);
     c->set_recurse_func (NULL);
-    return TRACE_RETURN (process (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   template <typename set_t>
   }
 
   template <typename set_t>
@@ -1463,7 +1464,7 @@ struct PosLookup : Lookup
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
-      const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+      const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
       if (coverage != last) {
         coverage->add_coverage (glyphs);
         last = coverage;
       if (coverage != last) {
         coverage->add_coverage (glyphs);
         last = coverage;
@@ -1474,36 +1475,28 @@ struct PosLookup : Lookup
   inline bool apply_once (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   inline bool apply_once (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props, &c->property))
+    if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
       return TRACE_RETURN (false);
       return TRACE_RETURN (false);
-    return TRACE_RETURN (process (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
 
   }
 
   static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
 
-  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
-  {
-    bool ret = false;
-
-    if (unlikely (!c->buffer->len || !c->lookup_mask))
-      return false;
-
-    c->set_recurse_func (apply_recurse_func);
-    c->set_lookup (*this);
-
-    c->buffer->idx = 0;
+  template <typename context_t>
+  static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
 
 
-    while (c->buffer->idx < c->buffer->len)
-    {
-      if ((c->buffer->cur().mask & c->lookup_mask) &&
-         digest->may_have (c->buffer->cur().codepoint) &&
-         apply_once (c))
-       ret = true;
-      else
-       c->buffer->idx++;
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    unsigned int lookup_type = get_type ();
+    unsigned int count = get_subtable_count ();
+    for (unsigned int i = 0; i < count; i++) {
+      typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
+      if (c->stop_sublookup_iteration (r))
+        return TRACE_RETURN (r);
     }
     }
-
-    return ret;
+    return TRACE_RETURN (c->default_return_value ());
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) {
@@ -1522,13 +1515,13 @@ typedef OffsetListOf<PosLookup> PosLookupList;
 
 struct GPOS : GSUBGPOS
 {
 
 struct GPOS : GSUBGPOS
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_GPOS;
+  static const hb_tag_t tableTag       = HB_OT_TAG_GPOS;
 
   inline const PosLookup& get_lookup (unsigned int i) const
   { return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
 
   static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
 
   inline const PosLookup& get_lookup (unsigned int i) const
   { return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
 
   static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
-  static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attahced_marks);
+  static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer);
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
@@ -1561,17 +1554,13 @@ fix_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction
 }
 
 static void
 }
 
 static void
-fix_mark_attachment (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, hb_bool_t zero_width_attached_marks)
+fix_mark_attachment (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
 {
   if (likely (!(pos[i].attach_lookback())))
     return;
 
   unsigned int j = i - pos[i].attach_lookback();
 
 {
   if (likely (!(pos[i].attach_lookback())))
     return;
 
   unsigned int j = i - pos[i].attach_lookback();
 
-  if (zero_width_attached_marks) {
-    pos[i].x_advance = 0;
-    pos[i].y_advance = 0;
-  }
   pos[i].x_offset += pos[j].x_offset;
   pos[i].y_offset += pos[j].y_offset;
 
   pos[i].x_offset += pos[j].x_offset;
   pos[i].y_offset += pos[j].y_offset;
 
@@ -1598,8 +1587,10 @@ GPOS::position_start (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
 }
 
 void
 }
 
 void
-GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer, hb_bool_t zero_width_attached_marks)
+GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
 {
 {
+  _hb_buffer_assert_gsubgpos_vars (buffer);
+
   unsigned int len;
   hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
   hb_direction_t direction = buffer->props.direction;
   unsigned int len;
   hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
   hb_direction_t direction = buffer->props.direction;
@@ -1610,34 +1601,28 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer, hb_bool_t
 
   /* Handle attachments */
   for (unsigned int i = 0; i < len; i++)
 
   /* Handle attachments */
   for (unsigned int i = 0; i < len; i++)
-    fix_mark_attachment (pos, i, direction, zero_width_attached_marks);
-
-  HB_BUFFER_DEALLOCATE_VAR (buffer, syllable);
-  HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props);
-  HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_props);
+    fix_mark_attachment (pos, i, direction);
 }
 
 
 /* Out-of-class implementation for methods recursing */
 
 template <typename context_t>
 }
 
 
 /* Out-of-class implementation for methods recursing */
 
 template <typename context_t>
-inline typename context_t::return_t PosLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
+/*static*/ inline typename context_t::return_t PosLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
 {
   const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
   const PosLookup &l = gpos.get_lookup (lookup_index);
 {
   const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
   const PosLookup &l = gpos.get_lookup (lookup_index);
-  return l.process (c);
+  return l.dispatch (c);
 }
 
 }
 
-inline bool PosLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
+/*static*/ inline bool PosLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
 {
   const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
   const PosLookup &l = gpos.get_lookup (lookup_index);
   unsigned int saved_lookup_props = c->lookup_props;
 {
   const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
   const PosLookup &l = gpos.get_lookup (lookup_index);
   unsigned int saved_lookup_props = c->lookup_props;
-  unsigned int saved_property = c->property;
   c->set_lookup (l);
   bool ret = l.apply_once (c);
   c->lookup_props = saved_lookup_props;
   c->set_lookup (l);
   bool ret = l.apply_once (c);
   c->lookup_props = saved_lookup_props;
-  c->property = saved_property;
   return ret;
 }
 
   return ret;
 }
 
index 2642acb..2b421a9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2007,2008,2009,2010  Red Hat, Inc.
 /*
  * Copyright © 2007,2008,2009,2010  Red Hat, Inc.
- * Copyright © 2010,2012  Google, Inc.
+ * Copyright © 2010,2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -44,7 +44,7 @@ struct SingleSubstFormat1
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
       if (c->glyphs->has (glyph_id))
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
       if (c->glyphs->has (glyph_id))
-       c->glyphs->add ((glyph_id + deltaGlyphID) & 0xFFFF);
+       c->glyphs->add ((glyph_id + deltaGlyphID) & 0xFFFFu);
     }
   }
 
     }
   }
 
@@ -55,7 +55,7 @@ struct SingleSubstFormat1
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
       c->input->add (glyph_id);
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
       c->input->add (glyph_id);
-      c->output->add ((glyph_id + deltaGlyphID) & 0xFFFF);
+      c->output->add ((glyph_id + deltaGlyphID) & 0xFFFFu);
     }
   }
 
     }
   }
 
@@ -79,7 +79,7 @@ struct SingleSubstFormat1
 
     /* According to the Adobe Annotated OpenType Suite, result is always
      * limited to 16bit. */
 
     /* According to the Adobe Annotated OpenType Suite, result is always
      * limited to 16bit. */
-    glyph_id = (glyph_id + deltaGlyphID) & 0xFFFF;
+    glyph_id = (glyph_id + deltaGlyphID) & 0xFFFFu;
     c->replace_glyph (glyph_id);
 
     return TRACE_RETURN (true);
     c->replace_glyph (glyph_id);
 
     return TRACE_RETURN (true);
@@ -192,17 +192,6 @@ struct SingleSubstFormat2
 
 struct SingleSubst
 {
 
 struct SingleSubst
 {
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
-  {
-    TRACE_PROCESS (this);
-    switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    case 2: return TRACE_RETURN (c->process (u.format2));
-    default:return TRACE_RETURN (c->default_return_value ());
-    }
-  }
-
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<GlyphID> &substitutes,
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<GlyphID> &substitutes,
@@ -230,6 +219,17 @@ struct SingleSubst
     }
   }
 
     }
   }
 
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    switch (u.format) {
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    case 2: return TRACE_RETURN (c->dispatch (u.format2));
+    default:return TRACE_RETURN (c->default_return_value ());
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -270,13 +270,32 @@ struct Sequence
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    if (unlikely (!substitute.len)) return TRACE_RETURN (false);
-
-    unsigned int klass = c->property & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE ? HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
     unsigned int count = substitute.len;
     unsigned int count = substitute.len;
+
+    /* TODO:
+     * Testing shows that Uniscribe actually allows zero-len susbstitute,
+     * which essentially deletes a glyph.  We don't allow for now.  It
+     * can be confusing to the client since the cluster from the deleted
+     * glyph won't be merged with any output cluster...  Also, currently
+     * buffer->move_to() makes assumptions about this too.  Perhaps fix
+     * in the future after figuring out what to do with the clusters.
+     */
+    if (unlikely (!count)) return TRACE_RETURN (false);
+
+    /* Special-case to make it in-place and not consider this
+     * as a "multiplied" substitution. */
+    if (unlikely (count == 1))
+    {
+      c->replace_glyph (substitute.array[0]);
+      return TRACE_RETURN (true);
+    }
+
+    unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
+                        HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
+
     for (unsigned int i = 0; i < count; i++) {
     for (unsigned int i = 0; i < count; i++) {
-      set_lig_props_for_component (c->buffer->cur(), i);
-      c->output_glyph (substitute.array[i], klass);
+      _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
+      c->output_glyph_for_component (substitute.array[i], klass);
     }
     c->buffer->skip_glyph ();
 
     }
     c->buffer->skip_glyph ();
 
@@ -384,16 +403,6 @@ struct MultipleSubstFormat1
 
 struct MultipleSubst
 {
 
 struct MultipleSubst
 {
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
-  {
-    TRACE_PROCESS (this);
-    switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    default:return TRACE_RETURN (c->default_return_value ());
-    }
-  }
-
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<unsigned int> &substitute_len_list,
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<unsigned int> &substitute_len_list,
@@ -410,6 +419,16 @@ struct MultipleSubst
     }
   }
 
     }
   }
 
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    switch (u.format) {
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -535,16 +554,6 @@ struct AlternateSubstFormat1
 
 struct AlternateSubst
 {
 
 struct AlternateSubst
 {
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
-  {
-    TRACE_PROCESS (this);
-    switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    default:return TRACE_RETURN (c->default_return_value ());
-    }
-  }
-
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<unsigned int> &alternate_len_list,
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &glyphs,
                         Supplier<unsigned int> &alternate_len_list,
@@ -561,6 +570,16 @@ struct AlternateSubst
     }
   }
 
     }
   }
 
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    switch (u.format) {
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -616,30 +635,38 @@ struct Ligature
   {
     TRACE_APPLY (this);
     unsigned int count = component.len;
   {
     TRACE_APPLY (this);
     unsigned int count = component.len;
-    if (unlikely (count < 1)) return TRACE_RETURN (false);
 
 
-    unsigned int end_offset = 0;
+    if (unlikely (!count)) return TRACE_RETURN (false);
+
+    /* Special-case to make it in-place and not consider this
+     * as a "ligated" substitution. */
+    if (unlikely (count == 1))
+    {
+      c->replace_glyph (ligGlyph);
+      return TRACE_RETURN (true);
+    }
+
     bool is_mark_ligature = false;
     unsigned int total_component_count = 0;
 
     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,
     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);
 
                              &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,
     ligate_input (c,
                  count,
-                 &component[1],
+                 match_positions,
+                 match_length,
                  ligGlyph,
                  ligGlyph,
-                 match_glyph,
-                 NULL,
                  is_mark_ligature,
                  total_component_count);
 
                  is_mark_ligature,
                  total_component_count);
 
@@ -840,16 +867,6 @@ struct LigatureSubstFormat1
 
 struct LigatureSubst
 {
 
 struct LigatureSubst
 {
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
-  {
-    TRACE_PROCESS (this);
-    switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    default:return TRACE_RETURN (c->default_return_value ());
-    }
-  }
-
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &first_glyphs,
                         Supplier<unsigned int> &ligature_per_first_glyph_count_list,
   inline bool serialize (hb_serialize_context_t *c,
                         Supplier<GlyphID> &first_glyphs,
                         Supplier<unsigned int> &ligature_per_first_glyph_count_list,
@@ -869,6 +886,16 @@ struct LigatureSubst
     }
   }
 
     }
   }
 
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    switch (u.format) {
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -981,7 +1008,9 @@ struct ReverseChainSingleSubstFormat1
                         1))
     {
       c->replace_glyph_inplace (substitute[index]);
                         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);
     }
 
       return TRACE_RETURN (true);
     }
 
@@ -1022,11 +1051,11 @@ struct ReverseChainSingleSubstFormat1
 struct ReverseChainSingleSubst
 {
   template <typename context_t>
 struct ReverseChainSingleSubst
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1069,18 +1098,18 @@ struct SubstLookupSubTable
   };
 
   template <typename context_t>
   };
 
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
+  inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (lookup_type) {
     switch (lookup_type) {
-    case Single:               return TRACE_RETURN (u.single.process (c));
-    case Multiple:             return TRACE_RETURN (u.multiple.process (c));
-    case Alternate:            return TRACE_RETURN (u.alternate.process (c));
-    case Ligature:             return TRACE_RETURN (u.ligature.process (c));
-    case Context:              return TRACE_RETURN (u.context.process (c));
-    case ChainContext:         return TRACE_RETURN (u.chainContext.process (c));
-    case Extension:            return TRACE_RETURN (u.extension.process (c));
-    case ReverseChainSingle:   return TRACE_RETURN (u.reverseChainContextSingle.process (c));
+    case Single:               return TRACE_RETURN (u.single.dispatch (c));
+    case Multiple:             return TRACE_RETURN (u.multiple.dispatch (c));
+    case Alternate:            return TRACE_RETURN (u.alternate.dispatch (c));
+    case Ligature:             return TRACE_RETURN (u.ligature.dispatch (c));
+    case Context:              return TRACE_RETURN (u.context.dispatch (c));
+    case ChainContext:         return TRACE_RETURN (u.chainContext.dispatch (c));
+    case Extension:            return TRACE_RETURN (u.extension.dispatch (c));
+    case ReverseChainSingle:   return TRACE_RETURN (u.reverseChainContextSingle.dispatch (c));
     default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:                   return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1137,34 +1166,18 @@ struct SubstLookup : Lookup
     return lookup_type_is_reverse (type);
   }
 
     return lookup_type_is_reverse (type);
   }
 
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
-  {
-    TRACE_PROCESS (this);
-    unsigned int lookup_type = get_type ();
-    unsigned int count = get_subtable_count ();
-    for (unsigned int i = 0; i < count; i++) {
-      typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
-      if (c->stop_sublookup_iteration (r))
-        return TRACE_RETURN (r);
-    }
-    return TRACE_RETURN (c->default_return_value ());
-  }
-  template <typename context_t>
-  static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
-
   inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE (this);
   inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE (this);
-    c->set_recurse_func (process_recurse_func<hb_closure_context_t>);
-    return TRACE_RETURN (process (c));
+    c->set_recurse_func (dispatch_recurse_func<hb_closure_context_t>);
+    return TRACE_RETURN (dispatch (c));
   }
 
   }
 
-  inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
+  inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
   {
     TRACE_COLLECT_GLYPHS (this);
   {
     TRACE_COLLECT_GLYPHS (this);
-    c->set_recurse_func (process_recurse_func<hb_collect_glyphs_context_t>);
-    return TRACE_RETURN (process (c));
+    c->set_recurse_func (dispatch_recurse_func<hb_collect_glyphs_context_t>);
+    return TRACE_RETURN (dispatch (c));
   }
 
   template <typename set_t>
   }
 
   template <typename set_t>
@@ -1174,7 +1187,7 @@ struct SubstLookup : Lookup
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
     const Coverage *last = NULL;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++) {
-      const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+      const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
       if (coverage != last) {
         coverage->add_coverage (glyphs);
         last = coverage;
       if (coverage != last) {
         coverage->add_coverage (glyphs);
         last = coverage;
@@ -1187,66 +1200,18 @@ struct SubstLookup : Lookup
     TRACE_WOULD_APPLY (this);
     if (unlikely (!c->len))  return TRACE_RETURN (false);
     if (!digest->may_have (c->glyphs[0]))  return TRACE_RETURN (false);
     TRACE_WOULD_APPLY (this);
     if (unlikely (!c->len))  return TRACE_RETURN (false);
     if (!digest->may_have (c->glyphs[0]))  return TRACE_RETURN (false);
-      return TRACE_RETURN (process (c));
+      return TRACE_RETURN (dispatch (c));
   }
 
   inline bool apply_once (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
   }
 
   inline bool apply_once (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props, &c->property))
+    if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
       return TRACE_RETURN (false);
       return TRACE_RETURN (false);
-    return TRACE_RETURN (process (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
   }
 
   static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
-  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
-  {
-    bool ret = false;
-
-    if (unlikely (!c->buffer->len || !c->lookup_mask))
-      return false;
-
-    c->set_recurse_func (apply_recurse_func);
-    c->set_lookup (*this);
-
-    if (likely (!is_reverse ()))
-    {
-       /* in/out forward substitution */
-       c->buffer->clear_output ();
-       c->buffer->idx = 0;
-
-       while (c->buffer->idx < c->buffer->len)
-       {
-         if ((c->buffer->cur().mask & c->lookup_mask) &&
-             digest->may_have (c->buffer->cur().codepoint) &&
-             apply_once (c))
-           ret = true;
-         else
-           c->buffer->next_glyph ();
-       }
-       if (ret)
-         c->buffer->swap_buffers ();
-    }
-    else
-    {
-       /* in-place backward substitution */
-       c->buffer->remove_output ();
-       c->buffer->idx = c->buffer->len - 1;
-       do
-       {
-         if ((c->buffer->cur().mask & c->lookup_mask) &&
-             digest->may_have (c->buffer->cur().codepoint) &&
-             apply_once (c))
-           ret = true;
-         else
-           c->buffer->idx--;
-
-       }
-       while ((int) c->buffer->idx >= 0);
-    }
-
-    return ret;
-  }
 
   inline SubstLookupSubTable& serialize_subtable (hb_serialize_context_t *c,
                                                  unsigned int i)
 
   inline SubstLookupSubTable& serialize_subtable (hb_serialize_context_t *c,
                                                  unsigned int i)
@@ -1304,6 +1269,23 @@ struct SubstLookup : Lookup
                                                                         ligatures_list, component_count_list, component_list));
   }
 
                                                                         ligatures_list, component_count_list, component_list));
   }
 
+  template <typename context_t>
+  static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
+
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    TRACE_DISPATCH (this);
+    unsigned int lookup_type = get_type ();
+    unsigned int count = get_subtable_count ();
+    for (unsigned int i = 0; i < count; i++) {
+      typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
+      if (c->stop_sublookup_iteration (r))
+        return TRACE_RETURN (r);
+    }
+    return TRACE_RETURN (c->default_return_value ());
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c)
   {
     TRACE_SANITIZE (this);
   inline bool sanitize (hb_sanitize_context_t *c)
   {
     TRACE_SANITIZE (this);
@@ -1315,9 +1297,7 @@ struct SubstLookup : Lookup
     {
       /* The spec says all subtables of an Extension lookup should
        * have the same type.  This is specially important if one has
     {
       /* The spec says all subtables of an Extension lookup should
        * have the same type.  This is specially important if one has
-       * a reverse type!
-       *
-       * We just check that they are all either forward, or reverse. */
+       * a reverse type! */
       unsigned int type = get_subtable (0).u.extension.get_type ();
       unsigned int count = get_subtable_count ();
       for (unsigned int i = 1; i < count; i++)
       unsigned int type = get_subtable (0).u.extension.get_type ();
       unsigned int count = get_subtable_count ();
       for (unsigned int i = 1; i < count; i++)
@@ -1336,7 +1316,7 @@ typedef OffsetListOf<SubstLookup> SubstLookupList;
 
 struct GSUB : GSUBGPOS
 {
 
 struct GSUB : GSUBGPOS
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_GSUB;
+  static const hb_tag_t tableTag       = HB_OT_TAG_GSUB;
 
   inline const SubstLookup& get_lookup (unsigned int i) const
   { return CastR<SubstLookup> (GSUBGPOS::get_lookup (i)); }
 
   inline const SubstLookup& get_lookup (unsigned int i) const
   { return CastR<SubstLookup> (GSUBGPOS::get_lookup (i)); }
@@ -1358,15 +1338,15 @@ struct GSUB : GSUBGPOS
 void
 GSUB::substitute_start (hb_font_t *font, hb_buffer_t *buffer)
 {
 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_assert_gsubgpos_vars (buffer);
 
   const GDEF &gdef = *hb_ot_layout_from_face (font->face)->gdef;
   unsigned int count = buffer->len;
 
   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;
   }
 }
 
   }
 }
 
@@ -1378,7 +1358,7 @@ GSUB::substitute_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer HB_UNUSE
 
 /* Out-of-class implementation for methods recursing */
 
 
 /* Out-of-class implementation for methods recursing */
 
-inline bool ExtensionSubst::is_reverse (void) const
+/*static*/ inline bool ExtensionSubst::is_reverse (void) const
 {
   unsigned int type = get_type ();
   if (unlikely (type == SubstLookupSubTable::Extension))
 {
   unsigned int type = get_type ();
   if (unlikely (type == SubstLookupSubTable::Extension))
@@ -1387,23 +1367,21 @@ inline bool ExtensionSubst::is_reverse (void) const
 }
 
 template <typename context_t>
 }
 
 template <typename context_t>
-inline typename context_t::return_t SubstLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
+/*static*/ inline typename context_t::return_t SubstLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
-  return l.process (c);
+  return l.dispatch (c);
 }
 
 }
 
-inline bool SubstLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
+/*static*/ inline bool SubstLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
   unsigned int saved_lookup_props = c->lookup_props;
 {
   const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
   unsigned int saved_lookup_props = c->lookup_props;
-  unsigned int saved_property = c->property;
   c->set_lookup (l);
   bool ret = l.apply_once (c);
   c->lookup_props = saved_lookup_props;
   c->set_lookup (l);
   bool ret = l.apply_once (c);
   c->lookup_props = saved_lookup_props;
-  c->property = saved_property;
   return ret;
 }
 
   return ret;
 }
 
index 0b00005..546ff4b 100644 (file)
@@ -38,12 +38,11 @@ namespace OT {
 
 
 
 
 
 
-#define TRACE_PROCESS(this) \
+#define TRACE_DISPATCH(this) \
        hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
        hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
-
 #ifndef HB_DEBUG_CLOSURE
 #define HB_DEBUG_CLOSURE (HB_DEBUG+0)
 #endif
 #ifndef HB_DEBUG_CLOSURE
 #define HB_DEBUG_CLOSURE (HB_DEBUG+0)
 #endif
@@ -60,7 +59,7 @@ struct hb_closure_context_t
   typedef hb_void_t return_t;
   typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
   template <typename T>
   typedef hb_void_t return_t;
   typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
   template <typename T>
-  inline return_t process (const T &obj) { obj.closure (this); return HB_VOID; }
+  inline return_t dispatch (const T &obj) { obj.closure (this); return HB_VOID; }
   static return_t default_return_value (void) { return HB_VOID; }
   bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
   return_t recurse (unsigned int lookup_index)
   static return_t default_return_value (void) { return HB_VOID; }
   bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
   return_t recurse (unsigned int lookup_index)
@@ -109,7 +108,7 @@ struct hb_would_apply_context_t
   static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
   typedef bool return_t;
   template <typename T>
   static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
   typedef bool return_t;
   template <typename T>
-  inline return_t process (const T &obj) { return obj.would_apply (this); }
+  inline return_t dispatch (const T &obj) { return obj.would_apply (this); }
   static return_t default_return_value (void) { return false; }
   bool stop_sublookup_iteration (return_t r) const { return r; }
 
   static return_t default_return_value (void) { return false; }
   bool stop_sublookup_iteration (return_t r) const { return r; }
 
@@ -148,7 +147,7 @@ struct hb_collect_glyphs_context_t
   typedef hb_void_t return_t;
   typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
   template <typename T>
   typedef hb_void_t return_t;
   typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
   template <typename T>
-  inline return_t process (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
+  inline return_t dispatch (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
   static return_t default_return_value (void) { return HB_VOID; }
   bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
   return_t recurse (unsigned int lookup_index)
   static return_t default_return_value (void) { return HB_VOID; }
   bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
   return_t recurse (unsigned int lookup_index)
@@ -158,7 +157,13 @@ struct hb_collect_glyphs_context_t
 
     /* Note that GPOS sets recurse_func to NULL already, so it doesn't get
      * past the previous check.  For GSUB, we only want to collect the output
 
     /* Note that GPOS sets recurse_func to NULL already, so it doesn't get
      * past the previous check.  For GSUB, we only want to collect the output
-     * glyphs in the recursion.  If output is not requested, we can go home now. */
+     * glyphs in the recursion.  If output is not requested, we can go home now.
+     *
+     * Note further, that the above is not exactly correct.  A recursed lookup
+     * is allowed to match input that is not matched in the context, but that's
+     * not how most fonts are built.  It's possible to relax that and recurse
+     * with all sets here if it proves to be an issue.
+     */
 
     if (output == hb_set_get_empty ())
       return HB_VOID;
 
     if (output == hb_set_get_empty ())
       return HB_VOID;
@@ -214,7 +219,7 @@ struct hb_get_coverage_context_t
   static const unsigned int max_debug_depth = 0;
   typedef const Coverage &return_t;
   template <typename T>
   static const unsigned int max_debug_depth = 0;
   typedef const Coverage &return_t;
   template <typename T>
-  inline return_t process (const T &obj) { return obj.get_coverage (); }
+  inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
   static return_t default_return_value (void) { return Null(Coverage); }
 
   hb_get_coverage_context_t (void) :
   static return_t default_return_value (void) { return Null(Coverage); }
 
   hb_get_coverage_context_t (void) :
@@ -241,7 +246,7 @@ struct hb_apply_context_t
   typedef bool return_t;
   typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
   template <typename T>
   typedef bool return_t;
   typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
   template <typename T>
-  inline return_t process (const T &obj) { return obj.apply (this); }
+  inline return_t dispatch (const T &obj) { return obj.apply (this); }
   static return_t default_return_value (void) { return false; }
   bool stop_sublookup_iteration (return_t r) const { return r; }
   return_t recurse (unsigned int lookup_index)
   static return_t default_return_value (void) { return false; }
   bool stop_sublookup_iteration (return_t r) const { return r; }
   return_t recurse (unsigned int lookup_index)
@@ -255,132 +260,255 @@ struct hb_apply_context_t
     return ret;
   }
 
     return ret;
   }
 
+  unsigned int table_index; /* GSUB/GPOS */
   hb_font_t *font;
   hb_face_t *face;
   hb_buffer_t *buffer;
   hb_direction_t direction;
   hb_mask_t lookup_mask;
   hb_font_t *font;
   hb_face_t *face;
   hb_buffer_t *buffer;
   hb_direction_t direction;
   hb_mask_t lookup_mask;
+  bool auto_zwj;
   recurse_func_t recurse_func;
   unsigned int nesting_level_left;
   unsigned int lookup_props;
   recurse_func_t recurse_func;
   unsigned int nesting_level_left;
   unsigned int lookup_props;
-  unsigned int property; /* propety of first glyph */
   const GDEF &gdef;
   bool has_glyph_classes;
   unsigned int debug_depth;
 
 
   const GDEF &gdef;
   bool has_glyph_classes;
   unsigned int debug_depth;
 
 
-  hb_apply_context_t (hb_font_t *font_,
-                     hb_buffer_t *buffer_,
-                     hb_mask_t lookup_mask_) :
+  hb_apply_context_t (unsigned int table_index_,
+                     hb_font_t *font_,
+                     hb_buffer_t *buffer_) :
+                       table_index (table_index_),
                        font (font_), face (font->face), buffer (buffer_),
                        direction (buffer_->props.direction),
                        font (font_), face (font->face), buffer (buffer_),
                        direction (buffer_->props.direction),
-                       lookup_mask (lookup_mask_),
+                       lookup_mask (1),
+                       auto_zwj (true),
                        recurse_func (NULL),
                        nesting_level_left (MAX_NESTING_LEVEL),
                        recurse_func (NULL),
                        nesting_level_left (MAX_NESTING_LEVEL),
-                       lookup_props (0), property (0),
+                       lookup_props (0),
                        gdef (*hb_ot_layout_from_face (face)->gdef),
                        has_glyph_classes (gdef.has_glyph_classes ()),
                        debug_depth (0) {}
 
                        gdef (*hb_ot_layout_from_face (face)->gdef),
                        has_glyph_classes (gdef.has_glyph_classes ()),
                        debug_depth (0) {}
 
-  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
-  void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
-  void set_lookup (const Lookup &l) { lookup_props = l.get_props (); }
+  inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; }
+  inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; }
+  inline void set_recurse_func (recurse_func_t func) { recurse_func = func; }
+  inline void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
+  inline void set_lookup (const Lookup &l) { lookup_props = l.get_props (); }
+
+  struct matcher_t
+  {
+    inline matcher_t (void) :
+            lookup_props (0),
+            ignore_zwnj (false),
+            ignore_zwj (false),
+            mask (-1),
+#define arg1(arg) (arg) /* Remove the macro to see why it's needed! */
+            syllable arg1(0),
+#undef arg1
+            match_func (NULL),
+            match_data (NULL) {};
+
+    typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const void *data);
+
+    inline void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
+    inline void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
+    inline void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
+    inline void set_mask (hb_mask_t mask_) { mask = mask_; }
+    inline void set_syllable (uint8_t syllable_)  { syllable = syllable_; }
+    inline void set_match_func (match_func_t match_func_,
+                               const void *match_data_)
+    { match_func = match_func_; match_data = match_data_; }
+
+    enum may_match_t {
+      MATCH_NO,
+      MATCH_YES,
+      MATCH_MAYBE
+    };
 
 
-  struct mark_skipping_forward_iterator_t
-  {
-    inline mark_skipping_forward_iterator_t (hb_apply_context_t *c_,
-                                            unsigned int start_index_,
-                                            unsigned int num_items_,
-                                            bool context_match = false)
+    inline may_match_t may_match (const hb_glyph_info_t &info,
+                                 const USHORT          *glyph_data) const
     {
     {
-      c = c_;
-      idx = start_index_;
-      num_items = num_items_;
-      mask = context_match ? -1 : c->lookup_mask;
-      syllable = context_match ? 0 : c->buffer->cur().syllable ();
-      end = c->buffer->len;
+      if (!(info.mask & mask) ||
+         (syllable && syllable != info.syllable ()))
+       return MATCH_NO;
+
+      if (match_func)
+        return match_func (info.codepoint, *glyph_data, match_data) ? MATCH_YES : MATCH_NO;
+
+      return MATCH_MAYBE;
     }
     }
-    inline bool has_no_chance (void) const
+
+    enum may_skip_t {
+      SKIP_NO,
+      SKIP_YES,
+      SKIP_MAYBE
+    };
+
+    inline may_skip_t
+    may_skip (const hb_apply_context_t *c,
+             const hb_glyph_info_t    &info) const
     {
     {
-      return unlikely (num_items && idx + num_items >= end);
+      if (!c->check_glyph_property (&info, lookup_props))
+       return SKIP_YES;
+
+      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)) &&
+                   !_hb_glyph_info_ligated (&info)))
+       return SKIP_MAYBE;
+
+      return SKIP_NO;
     }
     }
-    inline void reject (void)
+
+    protected:
+    unsigned int lookup_props;
+    bool ignore_zwnj;
+    bool ignore_zwj;
+    hb_mask_t mask;
+    uint8_t syllable;
+    match_func_t match_func;
+    const void *match_data;
+  };
+
+  struct skipping_forward_iterator_t
+  {
+    inline skipping_forward_iterator_t (hb_apply_context_t *c_,
+                                       unsigned int start_index_,
+                                       unsigned int num_items_,
+                                       bool context_match = false) :
+                                        idx (start_index_),
+                                        c (c_),
+                                        match_glyph_data (NULL),
+                                        num_items (num_items_),
+                                        end (c->buffer->len)
     {
     {
-      num_items++;
+      matcher.set_lookup_props (c->lookup_props);
+      /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
+      matcher.set_ignore_zwnj (context_match || c->table_index == 1);
+      /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
+      matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
+      if (!context_match)
+       matcher.set_mask (c->lookup_mask);
+      matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
     }
     }
-    inline bool next (unsigned int *property_out,
-                     unsigned int  lookup_props)
+    inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
+    inline void set_syllable (unsigned int syllable) { matcher.set_syllable (syllable); }
+    inline void set_match_func (matcher_t::match_func_t match_func,
+                               const void *match_data,
+                               const USHORT glyph_data[])
+    {
+      matcher.set_match_func (match_func, match_data);
+      match_glyph_data = glyph_data;
+    }
+
+    inline bool has_no_chance (void) const { return unlikely (num_items && idx + num_items >= end); }
+    inline void reject (void) { num_items++; match_glyph_data--; }
+    inline bool next (void)
     {
       assert (num_items > 0);
     {
       assert (num_items > 0);
-      do
+      while (!has_no_chance ())
       {
       {
-       if (has_no_chance ())
-         return false;
        idx++;
        idx++;
-      } while (c->should_skip_mark (&c->buffer->info[idx], lookup_props, property_out));
-      num_items--;
-      return (c->buffer->info[idx].mask & mask) && (!syllable || syllable == c->buffer->info[idx].syllable ());
-    }
-    inline bool next (unsigned int *property_out = NULL)
-    {
-      return next (property_out, c->lookup_props);
+       const hb_glyph_info_t &info = c->buffer->info[idx];
+
+       matcher_t::may_skip_t skip = matcher.may_skip (c, info);
+       if (unlikely (skip == matcher_t::SKIP_YES))
+         continue;
+
+       matcher_t::may_match_t match = matcher.may_match (info, match_glyph_data);
+       if (match == matcher_t::MATCH_YES ||
+           (match == matcher_t::MATCH_MAYBE &&
+            skip == matcher_t::SKIP_NO))
+       {
+         num_items--;
+         match_glyph_data++;
+         return true;
+       }
+
+       if (skip == matcher_t::SKIP_NO)
+         return false;
+      }
+      return false;
     }
 
     unsigned int idx;
     protected:
     hb_apply_context_t *c;
     }
 
     unsigned int idx;
     protected:
     hb_apply_context_t *c;
+    matcher_t matcher;
+    const USHORT *match_glyph_data;
+
     unsigned int num_items;
     unsigned int num_items;
-    hb_mask_t mask;
-    uint8_t syllable;
     unsigned int end;
   };
 
     unsigned int end;
   };
 
-  struct mark_skipping_backward_iterator_t
+  struct skipping_backward_iterator_t
   {
   {
-    inline mark_skipping_backward_iterator_t (hb_apply_context_t *c_,
-                                             unsigned int start_index_,
-                                             unsigned int num_items_,
-                                             hb_mask_t mask_ = 0,
-                                             bool match_syllable_ = true)
-    {
-      c = c_;
-      idx = start_index_;
-      num_items = num_items_;
-      mask = mask_ ? mask_ : c->lookup_mask;
-      syllable = match_syllable_ ? c->buffer->cur().syllable () : 0;
-    }
-    inline bool has_no_chance (void) const
+    inline skipping_backward_iterator_t (hb_apply_context_t *c_,
+                                        unsigned int start_index_,
+                                        unsigned int num_items_,
+                                        bool context_match = false) :
+                                         idx (start_index_),
+                                         c (c_),
+                                         match_glyph_data (NULL),
+                                         num_items (num_items_)
     {
     {
-      return unlikely (idx < num_items);
+      matcher.set_lookup_props (c->lookup_props);
+      /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
+      matcher.set_ignore_zwnj (context_match || c->table_index == 1);
+      /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
+      matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
+      if (!context_match)
+       matcher.set_mask (c->lookup_mask);
+      matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
     }
     }
-    inline void reject (void)
+    inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
+    inline void set_syllable (unsigned int syllable) { matcher.set_syllable (syllable); }
+    inline void set_match_func (matcher_t::match_func_t match_func,
+                               const void *match_data,
+                               const USHORT glyph_data[])
     {
     {
-      num_items++;
+      matcher.set_match_func (match_func, match_data);
+      match_glyph_data = glyph_data;
     }
     }
-    inline bool prev (unsigned int *property_out,
-                     unsigned int  lookup_props)
+
+    inline bool has_no_chance (void) const { return unlikely (idx < num_items); }
+    inline void reject (void) { num_items++; }
+    inline bool prev (void)
     {
       assert (num_items > 0);
     {
       assert (num_items > 0);
-      do
+      while (!has_no_chance ())
       {
       {
-       if (has_no_chance ())
-         return false;
        idx--;
        idx--;
-      } while (c->should_skip_mark (&c->buffer->out_info[idx], lookup_props, property_out));
-      num_items--;
-      return (c->buffer->out_info[idx].mask & mask) && (!syllable || syllable == c->buffer->out_info[idx].syllable ());
-    }
-    inline bool prev (unsigned int *property_out = NULL)
-    {
-      return prev (property_out, c->lookup_props);
+       const hb_glyph_info_t &info = c->buffer->out_info[idx];
+
+       matcher_t::may_skip_t skip = matcher.may_skip (c, info);
+       if (unlikely (skip == matcher_t::SKIP_YES))
+         continue;
+
+       matcher_t::may_match_t match = matcher.may_match (info, match_glyph_data);
+       if (match == matcher_t::MATCH_YES ||
+           (match == matcher_t::MATCH_MAYBE &&
+            skip == matcher_t::SKIP_NO))
+       {
+         num_items--;
+         match_glyph_data++;
+         return true;
+       }
+
+       if (skip == matcher_t::SKIP_NO)
+         return false;
+      }
+      return false;
     }
 
     unsigned int idx;
     protected:
     hb_apply_context_t *c;
     }
 
     unsigned int idx;
     protected:
     hb_apply_context_t *c;
+    matcher_t matcher;
+    const USHORT *match_glyph_data;
+
     unsigned int num_items;
     unsigned int num_items;
-    hb_mask_t mask;
-    uint8_t syllable;
   };
 
   inline bool
   };
 
   inline bool
@@ -405,10 +533,12 @@ struct hb_apply_context_t
   }
 
   inline bool
   }
 
   inline bool
-  match_properties (hb_codepoint_t  glyph,
-                   unsigned int    glyph_props,
-                   unsigned int    lookup_props) const
+  check_glyph_property (const hb_glyph_info_t *info,
+                       unsigned int  lookup_props) const
   {
   {
+    hb_codepoint_t glyph = info->codepoint;
+    unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info);
+
     /* Not covered, if, for example, glyph class is ligature and
      * lookup_props includes LookupFlags::IgnoreLigatures
      */
     /* Not covered, if, for example, glyph class is ligature and
      * lookup_props includes LookupFlags::IgnoreLigatures
      */
@@ -421,69 +551,54 @@ struct hb_apply_context_t
     return true;
   }
 
     return true;
   }
 
-  inline bool
-  check_glyph_property (hb_glyph_info_t *info,
-                       unsigned int  lookup_props,
-                       unsigned int *property_out) const
-  {
-    unsigned int property;
-
-    property = info->glyph_props();
-    *property_out = property;
-
-    return match_properties (info->codepoint, property, lookup_props);
-  }
-
-  inline bool
-  should_skip_mark (hb_glyph_info_t *info,
-                  unsigned int  lookup_props,
-                  unsigned int *property_out) const
-  {
-    unsigned int property;
-
-    property = info->glyph_props();
-    if (property_out)
-      *property_out = property;
-
-    /* If it's a mark, skip it if we don't accept it. */
-    if (unlikely (property & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
-      return !match_properties (info->codepoint, property, lookup_props);
-
-    /* If not a mark, don't skip. */
-    return false;
-  }
-
-
-  inline bool should_mark_skip_current_glyph (void) const
-  {
-    return should_skip_mark (&buffer->cur(), lookup_props, NULL);
-  }
-
-  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,
+                         bool component = false) const
   {
   {
+    unsigned int add_in = _hb_glyph_info_get_glyph_props (&buffer->cur()) &
+                         HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
+    add_in |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
+    if (ligature)
+    {
+      add_in |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
+      /* In the only place that the MULTIPLIED bit is used, Uniscribe
+       * seems to only care about the "last" transformation between
+       * Ligature and Multiple substitions.  Ie. if you ligate, expand,
+       * and ligate again, it forgives the multiplication and acts as
+       * if only ligation happened.  As such, clear MULTIPLIED bit.
+       */
+      add_in &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
+    }
+    if (component)
+      add_in |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
     if (likely (has_glyph_classes))
     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)
     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);
   }
     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_for_component (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, false, true);
+    buffer->output_glyph (glyph_index);
   }
 };
 
   }
 };
 
@@ -596,13 +711,19 @@ 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,
                                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);
 
                                bool *p_is_mark_ligature = NULL,
                                unsigned int *p_total_component_count = NULL)
 {
   TRACE_APPLY (NULL);
 
-  hb_apply_context_t::mark_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);
 
   /*
   if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
   /*
@@ -623,24 +744,23 @@ static inline bool match_input (hb_apply_context_t *c,
    *   ligate with a conjunct...)
    */
 
    *   ligate with a conjunct...)
    */
 
-  bool is_mark_ligature = !!(c->property & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
+  bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur());
 
   unsigned int total_component_count = 0;
 
   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++)
   {
   for (unsigned int i = 1; i < count; i++)
   {
-    unsigned int property;
-
-    if (!skippy_iter.next (&property)) return TRACE_RETURN (false);
+    if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
 
-    if (likely (!match_func (c->buffer->info[skippy_iter.idx].codepoint, input[i - 1], match_data))) return TRACE_RETURN (false);
+    match_positions[i] = skippy_iter.idx;
 
 
-    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]);
+    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,
 
     if (first_lig_id && first_lig_comp) {
       /* If first component was attached to a previous ligature component,
@@ -656,12 +776,11 @@ static inline bool match_input (hb_apply_context_t *c,
        return TRACE_RETURN (false);
     }
 
        return TRACE_RETURN (false);
     }
 
-    is_mark_ligature = is_mark_ligature && (property & 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;
 
   if (p_is_mark_ligature)
     *p_is_mark_ligature = is_mark_ligature;
@@ -672,14 +791,19 @@ static inline bool match_input (hb_apply_context_t *c,
   return TRACE_RETURN (true);
 }
 static inline void ligate_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[] HB_UNUSED, /* Array of input values--start with second glyph */
+                                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,
                                 hb_codepoint_t lig_glyph,
-                                match_func_t match_func HB_UNUSED,
-                                const void *match_data HB_UNUSED,
                                 bool is_mark_ligature,
                                 unsigned int total_component_count)
 {
                                 bool is_mark_ligature,
                                 unsigned int total_component_count)
 {
+  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
    *   the ligature to keep its old ligature id.  This will allow it to attach to
   /*
    * - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
    *   the ligature to keep its old ligature id.  This will allow it to attach to
@@ -709,46 +833,54 @@ 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 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)
   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);
-  c->replace_glyph (lig_glyph, klass);
+  {
+    _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);
+      _hb_glyph_info_set_modified_combining_class (&buffer->cur(), 0);
+    }
+  }
+  c->replace_glyph_with_ligature (lig_glyph, klass);
 
   for (unsigned int i = 1; i < count; i++)
   {
 
   for (unsigned int i = 1; i < count; i++)
   {
-    while (c->should_mark_skip_current_glyph ())
+    while (buffer->idx < match_positions[i])
     {
       if (!is_mark_ligature) {
        unsigned int new_lig_comp = components_so_far - last_num_components +
     {
       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 */
     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. */
   }
 
   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 +
        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;
     }
   }
       } else
        break;
     }
   }
+  TRACE_RETURN (true);
 }
 
 static inline bool match_backtrack (hb_apply_context_t *c,
 }
 
 static inline bool match_backtrack (hb_apply_context_t *c,
@@ -759,19 +891,14 @@ static inline bool match_backtrack (hb_apply_context_t *c,
 {
   TRACE_APPLY (NULL);
 
 {
   TRACE_APPLY (NULL);
 
-  hb_apply_context_t::mark_skipping_backward_iterator_t skippy_iter (c, c->buffer->backtrack_len (), count, true);
-  if (skippy_iter.has_no_chance ())
-    return TRACE_RETURN (false);
+  hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, c->buffer->backtrack_len (), count, true);
+  skippy_iter.set_match_func (match_func, match_data, backtrack);
+  if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
   for (unsigned int i = 0; i < count; i++)
 
   for (unsigned int i = 0; i < count; i++)
-  {
     if (!skippy_iter.prev ())
       return TRACE_RETURN (false);
 
     if (!skippy_iter.prev ())
       return TRACE_RETURN (false);
 
-    if (likely (!match_func (c->buffer->out_info[skippy_iter.idx].codepoint, backtrack[i], match_data)))
-      return TRACE_RETURN (false);
-  }
-
   return TRACE_RETURN (true);
 }
 
   return TRACE_RETURN (true);
 }
 
@@ -784,19 +911,14 @@ static inline bool match_lookahead (hb_apply_context_t *c,
 {
   TRACE_APPLY (NULL);
 
 {
   TRACE_APPLY (NULL);
 
-  hb_apply_context_t::mark_skipping_forward_iterator_t skippy_iter (c, c->buffer->idx + offset - 1, count, true);
-  if (skippy_iter.has_no_chance ())
-    return TRACE_RETURN (false);
+  hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx + offset - 1, count, true);
+  skippy_iter.set_match_func (match_func, match_data, lookahead);
+  if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
 
   for (unsigned int i = 0; i < count; i++)
 
   for (unsigned int i = 0; i < count; i++)
-  {
     if (!skippy_iter.next ())
       return TRACE_RETURN (false);
 
     if (!skippy_iter.next ())
       return TRACE_RETURN (false);
 
-    if (likely (!match_func (c->buffer->info[skippy_iter.idx].codepoint, lookahead[i], match_data)))
-      return TRACE_RETURN (false);
-  }
-
   return TRACE_RETURN (true);
 }
 
   return TRACE_RETURN (true);
 }
 
@@ -824,65 +946,89 @@ static inline void recurse_lookups (context_t *c,
                                    const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
 {
   for (unsigned int i = 0; i < lookupCount; i++)
                                    const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
 {
   for (unsigned int i = 0; i < lookupCount; i++)
-    c->recurse (lookupRecord->lookupListIndex);
+    c->recurse (lookupRecord[i].lookupListIndex);
 }
 
 static inline bool apply_lookup (hb_apply_context_t *c,
                                 unsigned int count, /* Including the first glyph */
 }
 
 static inline bool apply_lookup (hb_apply_context_t *c,
                                 unsigned int count, /* Including the first glyph */
+                                unsigned int match_positions[MAX_CONTEXT_LENGTH], /* Including the first glyph */
                                 unsigned int lookupCount,
                                 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);
 
 {
   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. */
+  /* All positions are distance from beginning of *output* buffer.
+   * Adjust. */
+  {
+    unsigned int bl = buffer->backtrack_len ();
+    end = bl + match_length;
 
 
-  /* 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.
-   */
-  for (unsigned int i = 0; i < count; /* NOP */)
+    int delta = bl - buffer->idx;
+    /* Convert positions to new indexing. */
+    for (unsigned int j = 0; j < count; j++)
+      match_positions[j] += delta;
+  }
+
+  for (unsigned int i = 0; i < lookupCount; i++)
   {
   {
-    if (unlikely (c->buffer->idx == end))
-      return TRACE_RETURN (true);
-    while (c->should_mark_skip_current_glyph ())
-    {
-      /* No lookup applied for this index */
-      c->buffer->next_glyph ();
-      if (unlikely (c->buffer->idx == end))
-       return TRACE_RETURN (true);
-    }
+    unsigned int idx = lookupRecord[i].sequenceIndex;
+    if (idx >= count)
+      continue;
 
 
-    if (lookupCount && i == lookupRecord->sequenceIndex)
-    {
-      unsigned int old_pos = c->buffer->idx;
+    buffer->move_to (match_positions[idx]);
+
+    unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();
+    if (!c->recurse (lookupRecord[i].lookupListIndex))
+      continue;
+
+    unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len ();
+    int delta = new_len - orig_len;
+
+    if (!delta)
+        continue;
+
+    /* Recursed lookup changed buffer len.  Adjust. */
 
 
-      /* Apply a lookup */
-      bool done = c->recurse (lookupRecord->lookupListIndex);
+    /* end can't go back past the current match position.
+     * Note: this is only true because we do NOT allow MultipleSubst
+     * with zero sequence len. */
+    end = MAX ((int) match_positions[idx] + 1, int (end) + delta);
 
 
-      lookupRecord++;
-      lookupCount--;
-      /* Err, this is wrong if the lookup jumped over some glyphs */
-      i += c->buffer->idx - old_pos;
-      if (unlikely (c->buffer->idx == end))
-       return TRACE_RETURN (true);
+    unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
 
 
-      if (!done)
-       goto not_applied;
+    if (delta > 0)
+    {
+      if (unlikely (delta + count > MAX_CONTEXT_LENGTH))
+       break;
     }
     else
     {
     }
     else
     {
-    not_applied:
-      /* 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);
 }
 
   return TRACE_RETURN (true);
 }
 
@@ -954,12 +1100,16 @@ static inline bool context_apply_lookup (hb_apply_context_t *c,
                                         const LookupRecord lookupRecord[],
                                         ContextApplyLookupContext &lookup_context)
 {
                                         const LookupRecord lookupRecord[],
                                         ContextApplyLookupContext &lookup_context)
 {
+  unsigned int match_length = 0;
+  unsigned int match_positions[MAX_CONTEXT_LENGTH];
   return match_input (c,
                      inputCount, input,
   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,
       && apply_lookup (c,
-                      inputCount,
-                      lookupCount, lookupRecord);
+                      inputCount, match_positions,
+                      lookupCount, lookupRecord,
+                      match_length);
 }
 
 struct Rule
 }
 
 struct Rule
@@ -1353,13 +1503,13 @@ struct ContextFormat3
 struct Context
 {
   template <typename context_t>
 struct Context
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    case 2: return TRACE_RETURN (c->process (u.format2));
-    case 3: return TRACE_RETURN (c->process (u.format3));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    case 2: return TRACE_RETURN (c->dispatch (u.format2));
+    case 3: return TRACE_RETURN (c->dispatch (u.format3));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -1422,7 +1572,7 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
    && intersects_array (c,
                        inputCount ? inputCount - 1 : 0, input,
                        lookup_context.funcs.intersects, lookup_context.intersects_data[1])
    && intersects_array (c,
                        inputCount ? inputCount - 1 : 0, input,
                        lookup_context.funcs.intersects, lookup_context.intersects_data[1])
-  && intersects_array (c,
+   && intersects_array (c,
                       lookaheadCount, lookahead,
                       lookup_context.funcs.intersects, lookup_context.intersects_data[2]))
     recurse_lookups (c,
                       lookaheadCount, lookahead,
                       lookup_context.funcs.intersects, lookup_context.intersects_data[2]))
     recurse_lookups (c,
@@ -1481,21 +1631,23 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
                                               const LookupRecord lookupRecord[],
                                               ChainContextApplyLookupContext &lookup_context)
 {
                                               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],
   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],
       && 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,
       && apply_lookup (c,
-                      inputCount,
-                      lookupCount, lookupRecord);
+                      inputCount, match_positions,
+                      lookupCount, lookupRecord,
+                      match_length);
 }
 
 struct ChainRule
 }
 
 struct ChainRule
@@ -1968,13 +2120,13 @@ struct ChainContextFormat3
 struct ChainContext
 {
   template <typename context_t>
 struct ChainContext
 {
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    TRACE_PROCESS (this);
+    TRACE_DISPATCH (this);
     switch (u.format) {
     switch (u.format) {
-    case 1: return TRACE_RETURN (c->process (u.format1));
-    case 2: return TRACE_RETURN (c->process (u.format2));
-    case 3: return TRACE_RETURN (c->process (u.format3));
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    case 2: return TRACE_RETURN (c->dispatch (u.format2));
+    case 3: return TRACE_RETURN (c->dispatch (u.format3));
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
     default:return TRACE_RETURN (c->default_return_value ());
     }
   }
@@ -2048,9 +2200,9 @@ struct Extension
   }
 
   template <typename context_t>
   }
 
   template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const
+  inline typename context_t::return_t dispatch (context_t *c) const
   {
   {
-    return get_subtable<typename T::LookupSubTable> ().process (c, get_type ());
+    return get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ());
   }
 
   inline bool sanitize_self (hb_sanitize_context_t *c) {
   }
 
   inline bool sanitize_self (hb_sanitize_context_t *c) {
@@ -2102,8 +2254,8 @@ struct GSUBGPOS
 
   inline unsigned int get_feature_count (void) const
   { return (this+featureList).len; }
 
   inline unsigned int get_feature_count (void) const
   { return (this+featureList).len; }
-  inline const Tag& get_feature_tag (unsigned int i) const
-  { return (this+featureList).get_tag (i); }
+  inline hb_tag_t get_feature_tag (unsigned int i) const
+  { return i == Index::NOT_FOUND_INDEX ? HB_TAG_NONE : (this+featureList).get_tag (i); }
   inline unsigned int get_feature_tags (unsigned int start_offset,
                                        unsigned int *feature_count /* IN/OUT */,
                                        hb_tag_t     *feature_tags /* OUT */) const
   inline unsigned int get_feature_tags (unsigned int start_offset,
                                        unsigned int *feature_count /* IN/OUT */,
                                        hb_tag_t     *feature_tags /* OUT */) const
@@ -2128,7 +2280,7 @@ struct GSUBGPOS
 
   protected:
   FixedVersion version;        /* Version of the GSUB/GPOS table--initially set
 
   protected:
   FixedVersion version;        /* Version of the GSUB/GPOS table--initially set
-                                * to 0x00010000 */
+                                * to 0x00010000u */
   OffsetTo<ScriptList>
                scriptList;     /* ScriptList table */
   OffsetTo<FeatureList>
   OffsetTo<ScriptList>
                scriptList;     /* ScriptList table */
   OffsetTo<FeatureList>
diff --git a/src/hb-ot-layout-jstf-table.hh b/src/hb-ot-layout-jstf-table.hh
new file mode 100644 (file)
index 0000000..67a6df5
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_JSTF_TABLE_HH
+#define HB_OT_LAYOUT_JSTF_TABLE_HH
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-layout-gpos-table.hh"
+
+
+namespace OT {
+
+
+/*
+ * JstfModList -- Justification Modification List Tables
+ */
+
+typedef IndexArray JstfModList;
+
+
+/*
+ * JstfMax -- Justification Maximum Table
+ */
+
+typedef OffsetListOf<PosLookup> JstfMax;
+
+
+/*
+ * JstfPriority -- Justification Priority Table
+ */
+
+struct JstfPriority
+{
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) &&
+                        shrinkageEnableGSUB.sanitize (c, this) &&
+                        shrinkageDisableGSUB.sanitize (c, this) &&
+                        shrinkageEnableGPOS.sanitize (c, this) &&
+                        shrinkageDisableGPOS.sanitize (c, this) &&
+                        shrinkageJstfMax.sanitize (c, this) &&
+                        extensionEnableGSUB.sanitize (c, this) &&
+                        extensionDisableGSUB.sanitize (c, this) &&
+                        extensionEnableGPOS.sanitize (c, this) &&
+                        extensionDisableGPOS.sanitize (c, this) &&
+                        extensionJstfMax.sanitize (c, this));
+  }
+
+  protected:
+  OffsetTo<JstfModList>
+               shrinkageEnableGSUB;    /* Offset to Shrinkage Enable GSUB
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               shrinkageDisableGSUB;   /* Offset to Shrinkage Disable GSUB
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               shrinkageEnableGPOS;    /* Offset to Shrinkage Enable GPOS
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               shrinkageDisableGPOS;   /* Offset to Shrinkage Disable GPOS
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfMax>
+               shrinkageJstfMax;       /* Offset to Shrinkage JstfMax table--
+                                        * from beginning of JstfPriority table
+                                        * --may be NULL */
+  OffsetTo<JstfModList>
+               extensionEnableGSUB;    /* Offset to Extension Enable GSUB
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               extensionDisableGSUB;   /* Offset to Extension Disable GSUB
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               extensionEnableGPOS;    /* Offset to Extension Enable GPOS
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfModList>
+               extensionDisableGPOS;   /* Offset to Extension Disable GPOS
+                                        * JstfModList table--from beginning of
+                                        * JstfPriority table--may be NULL */
+  OffsetTo<JstfMax>
+               extensionJstfMax;       /* Offset to Extension JstfMax table--
+                                        * from beginning of JstfPriority table
+                                        * --may be NULL */
+
+  public:
+  DEFINE_SIZE_STATIC (20);
+};
+
+
+/*
+ * JstfLangSys -- Justification Language System Table
+ */
+
+struct JstfLangSys : OffsetListOf<JstfPriority>
+{
+  inline bool sanitize (hb_sanitize_context_t *c,
+                       const Record<JstfLangSys>::sanitize_closure_t * = NULL) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (OffsetListOf<JstfPriority>::sanitize (c));
+  }
+};
+
+
+/*
+ * ExtenderGlyphs -- Extender Glyph Table
+ */
+
+typedef SortedArrayOf<GlyphID> ExtenderGlyphs;
+
+
+/*
+ * JstfScript -- The Justification Table
+ */
+
+struct JstfScript
+{
+  inline unsigned int get_lang_sys_count (void) const
+  { return langSys.len; }
+  inline const Tag& get_lang_sys_tag (unsigned int i) const
+  { return langSys.get_tag (i); }
+  inline unsigned int get_lang_sys_tags (unsigned int start_offset,
+                                        unsigned int *lang_sys_count /* IN/OUT */,
+                                        hb_tag_t     *lang_sys_tags /* OUT */) const
+  { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
+  inline const JstfLangSys& get_lang_sys (unsigned int i) const
+  {
+    if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
+    return this+langSys[i].offset;
+  }
+  inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
+  { return langSys.find_index (tag, index); }
+
+  inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
+  inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
+
+  inline bool sanitize (hb_sanitize_context_t *c,
+                       const Record<JstfScript>::sanitize_closure_t * = NULL) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (extenderGlyphs.sanitize (c, this) &&
+                        defaultLangSys.sanitize (c, this) &&
+                        langSys.sanitize (c, this));
+  }
+
+  protected:
+  OffsetTo<ExtenderGlyphs>
+               extenderGlyphs; /* Offset to ExtenderGlyph table--from beginning
+                                * of JstfScript table-may be NULL */
+  OffsetTo<JstfLangSys>
+               defaultLangSys; /* Offset to DefaultJstfLangSys table--from
+                                * beginning of JstfScript table--may be Null */
+  RecordArrayOf<JstfLangSys>
+               langSys;        /* Array of JstfLangSysRecords--listed
+                                * alphabetically by LangSysTag */
+  public:
+  DEFINE_SIZE_ARRAY (6, langSys);
+};
+
+
+/*
+ * JSTF -- The Justification Table
+ */
+
+struct JSTF
+{
+  static const hb_tag_t tableTag       = HB_OT_TAG_JSTF;
+
+  inline unsigned int get_script_count (void) const
+  { return scriptList.len; }
+  inline const Tag& get_script_tag (unsigned int i) const
+  { return scriptList.get_tag (i); }
+  inline unsigned int get_script_tags (unsigned int start_offset,
+                                      unsigned int *script_count /* IN/OUT */,
+                                      hb_tag_t     *script_tags /* OUT */) const
+  { return scriptList.get_tags (start_offset, script_count, script_tags); }
+  inline const JstfScript& get_script (unsigned int i) const
+  { return this+scriptList[i].offset; }
+  inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
+  { return scriptList.find_index (tag, index); }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
+                        scriptList.sanitize (c, this));
+  }
+
+  protected:
+  FixedVersion version;        /* Version of the JSTF table--initially set
+                                * to 0x00010000u */
+  RecordArrayOf<JstfScript>
+               scriptList;     /* Array of JstfScripts--listed
+                                * alphabetically by ScriptTag */
+  public:
+  DEFINE_SIZE_ARRAY (6, scriptList);
+};
+
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_LAYOUT_JSTF_TABLE_HH */
index 49093de..ae7daa6 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2007,2008,2009  Red Hat, Inc.
 /*
  * 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.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-ot-layout.h"
-
 #include "hb-font-private.hh"
 #include "hb-buffer-private.hh"
 #include "hb-set-private.hh"
 
 
 #include "hb-font-private.hh"
 #include "hb-buffer-private.hh"
 #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 */
-
-#define hb_ot_layout_from_face(face) ((hb_ot_layout_t *) face->shaper_data.ot)
-
 /*
  * GDEF
  */
 
 /*
  * GDEF
  */
 
-typedef enum {
-  HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED        = 0x0001,
-  HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH  = 0x0002,
-  HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE    = 0x0004,
-  HB_OT_LAYOUT_GLYPH_PROPS_MARK                = 0x0008,
-  HB_OT_LAYOUT_GLYPH_PROPS_COMPONENT   = 0x0010
+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_MULTIPLIED  = 0x40u,
+
+  HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE     = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED |
+                                         HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
+                                         HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED
 } hb_ot_layout_glyph_class_mask_t;
 
 
 } hb_ot_layout_glyph_class_mask_t;
 
 
-
 /*
  * GSUB/GPOS
  */
 
 /*
  * GSUB/GPOS
  */
 
-/* lig_id / lig_comp
+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_UNUSED)
+  {
+  }
+
+  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
+};
+
+static 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) ? MASK0_IGNORABLE : 0) |
+                          (info->codepoint == 0x200Cu ? MASK0_ZWNJ : 0) |
+                          (info->codepoint == 0x200Du ? MASK0_ZWJ : 0);
+  info->unicode_props1() = unicode->modified_combining_class (info->codepoint);
+}
+
+static inline void
+_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()) & ~MASK0_GEN_CAT);
+}
+
+static 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() & MASK0_GEN_CAT);
+}
+
+static inline void
+_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info,
+                                            unsigned int modified_class)
+{
+  info->unicode_props1() = modified_class;
+}
+
+static inline unsigned int
+_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
+{
+  return info->unicode_props1();
+}
+
+static inline hb_bool_t
+_hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
+{
+  return !!(info->unicode_props0() & MASK0_IGNORABLE);
+}
+
+static inline hb_bool_t
+_hb_glyph_info_is_zwnj (const hb_glyph_info_t *info)
+{
+  return !!(info->unicode_props0() & MASK0_ZWNJ);
+}
+
+static inline hb_bool_t
+_hb_glyph_info_is_zwj (const hb_glyph_info_t *info)
+{
+  return !!(info->unicode_props0() & MASK0_ZWJ);
+}
+
+static inline void
+_hb_glyph_info_flip_joiners (hb_glyph_info_t *info)
+{
+  info->unicode_props0() ^= MASK0_ZWNJ | MASK0_ZWJ;
+}
+
+/* lig_props: aka lig_id / lig_comp
  *
  * When a ligature is formed:
  *
  *
  * When a ligature is formed:
  *
@@ -73,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
  *   - 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:
  *
  *
  * When a multiple-substitution is done:
  *
@@ -83,138 +267,194 @@ typedef enum {
  *     multiple substitution in MarkBasePos.
  *
  * The numbers are also used in GPOS to do mark-to-mark positioning only
  *     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
 #define IS_LIG_BASE 0x10
+
 static inline void
 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
 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
 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
 }
 
 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
 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
 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 0;
   else
-    return info.lig_props() & 0x0F;
+    return info->lig_props() & 0x0F;
 }
 }
+
 static inline unsigned int
 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;
 }
 
   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))
   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;
 }
 
   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);
+static inline void
+_hb_glyph_info_set_glyph_props (hb_glyph_info_t *info, unsigned int props)
+{
+  info->glyph_props() = props;
+}
 
 
+static inline unsigned int
+_hb_glyph_info_get_glyph_props (const hb_glyph_info_t *info)
+{
+  return info->glyph_props();
+}
 
 
-/* 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);
+static inline bool
+_hb_glyph_info_is_base_glyph (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH);
+}
 
 
-HB_INTERNAL hb_bool_t
-hb_ot_layout_substitute_lookup (hb_font_t    *font,
-                               hb_buffer_t  *buffer,
-                               unsigned int  lookup_index,
-                               hb_mask_t     mask);
+static inline bool
+_hb_glyph_info_is_ligature (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE);
+}
 
 
-/* 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);
+static inline bool
+_hb_glyph_info_is_mark (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
+}
 
 
+static inline bool
+_hb_glyph_info_substituted (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
+}
 
 
-/* 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);
+static inline bool
+_hb_glyph_info_ligated (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
+}
 
 
-HB_INTERNAL hb_bool_t
-hb_ot_layout_position_lookup (hb_font_t    *font,
-                             hb_buffer_t  *buffer,
-                             unsigned int  lookup_index,
-                             hb_mask_t     mask);
+static inline bool
+_hb_glyph_info_multiplied (const hb_glyph_info_t *info)
+{
+  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
+}
 
 
-/* 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_bool_t     zero_width_attached_marks);
+static inline bool
+_hb_glyph_info_ligated_and_didnt_multiply (const hb_glyph_info_t *info)
+{
+  return _hb_glyph_info_ligated (info) && !_hb_glyph_info_multiplied (info);
+}
 
 
+static inline void
+_hb_glyph_info_clear_ligated_and_multiplied (hb_glyph_info_t *info)
+{
+  info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
+                          HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
+}
 
 
 
 
-/*
- * hb_ot_layout_t
- */
+/* Allocation / deallocation. */
 
 
-namespace OT {
-  struct GDEF;
-  struct GSUB;
-  struct GPOS;
+static 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);
 }
 
 }
 
-struct hb_ot_layout_t
+static inline void
+_hb_buffer_deallocate_unicode_vars (hb_buffer_t *buffer)
 {
 {
-  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_BUFFER_DEALLOCATE_VAR (buffer, unicode_props0);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props1);
+}
 
 
-  hb_set_digest_t *gsub_digests;
-  hb_set_digest_t *gpos_digests;
-};
+static inline void
+_hb_buffer_assert_unicode_vars (hb_buffer_t *buffer)
+{
+  HB_BUFFER_ASSERT_VAR (buffer, unicode_props0);
+  HB_BUFFER_ASSERT_VAR (buffer, unicode_props1);
+}
 
 
+static 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 hb_ot_layout_t *
-_hb_ot_layout_create (hb_face_t *face);
+static 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);
+}
 
 
-HB_INTERNAL void
-_hb_ot_layout_destroy (hb_ot_layout_t *layout);
+static inline void
+_hb_buffer_assert_gsubgpos_vars (hb_buffer_t *buffer)
+{
+  HB_BUFFER_ASSERT_VAR (buffer, glyph_props);
+  HB_BUFFER_ASSERT_VAR (buffer, lig_props);
+  HB_BUFFER_ASSERT_VAR (buffer, syllable);
+}
 
 
+/* 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 */
 
 
 #endif /* HB_OT_LAYOUT_PRIVATE_HH */
index 3ff6fc8..661d90e 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright © 1998-2004  David Turner and Werner Lemberg
  * Copyright © 2006  Behdad Esfahbod
  * Copyright © 2007,2008,2009  Red Hat, Inc.
  * Copyright © 1998-2004  David Turner and Werner Lemberg
  * Copyright © 2006  Behdad Esfahbod
  * 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.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -33,6 +33,9 @@
 #include "hb-ot-layout-gdef-table.hh"
 #include "hb-ot-layout-gsub-table.hh"
 #include "hb-ot-layout-gpos-table.hh"
 #include "hb-ot-layout-gdef-table.hh"
 #include "hb-ot-layout-gsub-table.hh"
 #include "hb-ot-layout-gpos-table.hh"
+#include "hb-ot-layout-jstf-table.hh"
+
+#include "hb-ot-map-private.hh"
 
 #include <stdlib.h>
 #include <string.h>
 
 #include <stdlib.h>
 #include <string.h>
@@ -59,20 +62,20 @@ _hb_ot_layout_create (hb_face_t *face)
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
   layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
 
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
   layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
 
-  layout->gsub_digests = (hb_set_digest_t *) calloc (layout->gsub->get_lookup_count (), sizeof (hb_set_digest_t));
-  layout->gpos_digests = (hb_set_digest_t *) calloc (layout->gpos->get_lookup_count (), sizeof (hb_set_digest_t));
+  layout->gsub_accels = (hb_ot_layout_lookup_accelerator_t *) calloc (layout->gsub->get_lookup_count (), sizeof (hb_ot_layout_lookup_accelerator_t));
+  layout->gpos_accels = (hb_ot_layout_lookup_accelerator_t *) calloc (layout->gpos->get_lookup_count (), sizeof (hb_ot_layout_lookup_accelerator_t));
 
 
-  if (unlikely ((layout->gsub_lookup_count && !layout->gsub_digests) ||
-               (layout->gpos_lookup_count && !layout->gpos_digests)))
+  if (unlikely ((layout->gsub_lookup_count && !layout->gsub_accels) ||
+               (layout->gpos_lookup_count && !layout->gpos_accels)))
   {
     _hb_ot_layout_destroy (layout);
     return NULL;
   }
 
   for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
   {
     _hb_ot_layout_destroy (layout);
     return NULL;
   }
 
   for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
-    layout->gsub->get_lookup (i).add_coverage (&layout->gsub_digests[i]);
+    layout->gsub_accels[i].init (layout->gsub->get_lookup (i));
   for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
   for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
-    layout->gpos->get_lookup (i).add_coverage (&layout->gpos_digests[i]);
+    layout->gpos_accels[i].init (layout->gpos->get_lookup (i));
 
   return layout;
 }
 
   return layout;
 }
@@ -80,13 +83,18 @@ _hb_ot_layout_create (hb_face_t *face)
 void
 _hb_ot_layout_destroy (hb_ot_layout_t *layout)
 {
 void
 _hb_ot_layout_destroy (hb_ot_layout_t *layout)
 {
+  for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
+    layout->gsub_accels[i].fini (layout->gsub->get_lookup (i));
+  for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
+    layout->gpos_accels[i].fini (layout->gpos->get_lookup (i));
+
+  free (layout->gsub_accels);
+  free (layout->gpos_accels);
+
   hb_blob_destroy (layout->gdef_blob);
   hb_blob_destroy (layout->gsub_blob);
   hb_blob_destroy (layout->gpos_blob);
 
   hb_blob_destroy (layout->gdef_blob);
   hb_blob_destroy (layout->gsub_blob);
   hb_blob_destroy (layout->gpos_blob);
 
-  free (layout->gsub_digests);
-  free (layout->gpos_digests);
-
   free (layout);
 }
 
   free (layout);
 }
 
@@ -319,9 +327,28 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index)
 {
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index)
 {
-  const OT::LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
+  return hb_ot_layout_language_get_required_feature (face,
+                                                    table_tag,
+                                                    script_index,
+                                                    language_index,
+                                                    feature_index,
+                                                    NULL);
+}
 
 
-  if (feature_index) *feature_index = l.get_required_feature_index ();
+hb_bool_t
+hb_ot_layout_language_get_required_feature (hb_face_t    *face,
+                                           hb_tag_t      table_tag,
+                                           unsigned int  script_index,
+                                           unsigned int  language_index,
+                                           unsigned int *feature_index,
+                                           hb_tag_t     *feature_tag)
+{
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+
+  unsigned int index = l.get_required_feature_index ();
+  if (feature_index) *feature_index = index;
+  if (feature_tag) *feature_tag = g.get_feature_tag (index);
 
   return l.has_required_feature ();
 }
 
   return l.has_required_feature ();
 }
@@ -406,6 +433,24 @@ hb_ot_layout_feature_get_lookups (hb_face_t    *face,
   return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 }
 
   return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 }
 
+unsigned int
+hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
+                                    hb_tag_t      table_tag)
+{
+  switch (table_tag)
+  {
+    case HB_OT_TAG_GSUB:
+    {
+      return hb_ot_layout_from_face (face)->gsub_lookup_count;
+    }
+    case HB_OT_TAG_GPOS:
+    {
+      return hb_ot_layout_from_face (face)->gpos_lookup_count;
+    }
+  }
+  return 0;
+}
+
 static void
 _hb_ot_layout_collect_lookups_lookups (hb_face_t      *face,
                                       hb_tag_t        table_tag,
 static void
 _hb_ot_layout_collect_lookups_lookups (hb_face_t      *face,
                                       hb_tag_t        table_tag,
@@ -439,19 +484,20 @@ _hb_ot_layout_collect_lookups_features (hb_face_t      *face,
                                        const hb_tag_t *features,
                                        hb_set_t       *lookup_indexes /* OUT */)
 {
                                        const hb_tag_t *features,
                                        hb_set_t       *lookup_indexes /* OUT */)
 {
-  unsigned int required_feature_index;
-  if (hb_ot_layout_language_get_required_feature_index (face,
-                                                       table_tag,
-                                                       script_index,
-                                                       language_index,
-                                                       &required_feature_index))
-    _hb_ot_layout_collect_lookups_lookups (face,
-                                          table_tag,
-                                          required_feature_index,
-                                          lookup_indexes);
-
   if (!features)
   {
   if (!features)
   {
+    unsigned int required_feature_index;
+    if (hb_ot_layout_language_get_required_feature (face,
+                                                   table_tag,
+                                                   script_index,
+                                                   language_index,
+                                                   &required_feature_index,
+                                                   NULL))
+      _hb_ot_layout_collect_lookups_lookups (face,
+                                            table_tag,
+                                            required_feature_index,
+                                            lookup_indexes);
+
     /* All features */
     unsigned int feature_indices[32];
     unsigned int offset, len;
     /* All features */
     unsigned int feature_indices[32];
     unsigned int offset, len;
@@ -607,13 +653,13 @@ hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
     case HB_OT_TAG_GSUB:
     {
       const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
     case HB_OT_TAG_GSUB:
     {
       const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
-      l.collect_glyphs_lookup (&c);
+      l.collect_glyphs (&c);
       return;
     }
     case HB_OT_TAG_GPOS:
     {
       const OT::PosLookup& l = hb_ot_layout_from_face (face)->gpos->get_lookup (lookup_index);
       return;
     }
     case HB_OT_TAG_GPOS:
     {
       const OT::PosLookup& l = hb_ot_layout_from_face (face)->gpos->get_lookup (lookup_index);
-      l.collect_glyphs_lookup (&c);
+      l.collect_glyphs (&c);
       return;
     }
   }
       return;
     }
   }
@@ -653,7 +699,7 @@ hb_ot_layout_lookup_would_substitute_fast (hb_face_t            *face,
 
   const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
 
 
   const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
 
-  return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
+  return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_accels[lookup_index].digest);
 }
 
 void
 }
 
 void
@@ -662,21 +708,6 @@ hb_ot_layout_substitute_start (hb_font_t *font, hb_buffer_t *buffer)
   OT::GSUB::substitute_start (font, buffer);
 }
 
   OT::GSUB::substitute_start (font, buffer);
 }
 
-hb_bool_t
-hb_ot_layout_substitute_lookup (hb_font_t    *font,
-                               hb_buffer_t  *buffer,
-                               unsigned int  lookup_index,
-                               hb_mask_t     mask)
-{
-  if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
-
-  OT::hb_apply_context_t c (font, buffer, mask);
-
-  const OT::SubstLookup& l = hb_ot_layout_from_face (font->face)->gsub->get_lookup (lookup_index);
-
-  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
-}
-
 void
 hb_ot_layout_substitute_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
 void
 hb_ot_layout_substitute_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
@@ -711,25 +742,10 @@ hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
   OT::GPOS::position_start (font, buffer);
 }
 
   OT::GPOS::position_start (font, buffer);
 }
 
-hb_bool_t
-hb_ot_layout_position_lookup (hb_font_t    *font,
-                             hb_buffer_t  *buffer,
-                             unsigned int  lookup_index,
-                             hb_mask_t     mask)
-{
-  if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
-
-  OT::hb_apply_context_t c (font, buffer, mask);
-
-  const OT::PosLookup& l = hb_ot_layout_from_face (font->face)->gpos->get_lookup (lookup_index);
-
-  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
-}
-
 void
 void
-hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attached_marks)
+hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
 {
-  OT::GPOS::position_finish (font, buffer, zero_width_attached_marks);
+  OT::GPOS::position_finish (font, buffer);
 }
 
 hb_bool_t
 }
 
 hb_bool_t
@@ -776,3 +792,159 @@ hb_ot_layout_get_size_params (hb_face_t    *face,
 
   return false;
 }
 
   return false;
 }
+
+
+/*
+ * Parts of different types are implemented here such that they have direct
+ * access to GSUB/GPOS lookups.
+ */
+
+
+struct GSUBProxy
+{
+  static const unsigned int table_index = 0;
+  static const bool inplace = false;
+  typedef OT::SubstLookup Lookup;
+
+  GSUBProxy (hb_face_t *face) :
+    table (*hb_ot_layout_from_face (face)->gsub),
+    accels (hb_ot_layout_from_face (face)->gsub_accels) {}
+
+  const OT::GSUB &table;
+  const hb_ot_layout_lookup_accelerator_t *accels;
+};
+
+struct GPOSProxy
+{
+  static const unsigned int table_index = 1;
+  static const bool inplace = true;
+  typedef OT::PosLookup Lookup;
+
+  GPOSProxy (hb_face_t *face) :
+    table (*hb_ot_layout_from_face (face)->gpos),
+    accels (hb_ot_layout_from_face (face)->gpos_accels) {}
+
+  const OT::GPOS &table;
+  const hb_ot_layout_lookup_accelerator_t *accels;
+};
+
+
+template <typename Lookup>
+static inline bool apply_once (OT::hb_apply_context_t *c,
+                              const Lookup &lookup)
+{
+  if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
+    return false;
+  return lookup.dispatch (c);
+}
+
+template <typename Proxy>
+static inline bool
+apply_string (OT::hb_apply_context_t *c,
+             const typename Proxy::Lookup &lookup,
+             const hb_ot_layout_lookup_accelerator_t &accel)
+{
+  bool ret = false;
+  hb_buffer_t *buffer = c->buffer;
+
+  if (unlikely (!buffer->len || !c->lookup_mask))
+    return false;
+
+  c->set_lookup (lookup);
+
+  if (likely (!lookup.is_reverse ()))
+  {
+    /* in/out forward substitution/positioning */
+    if (Proxy::table_index == 0)
+      buffer->clear_output ();
+    buffer->idx = 0;
+
+    while (buffer->idx < buffer->len)
+    {
+      if (accel.digest.may_have (buffer->cur().codepoint) &&
+         (buffer->cur().mask & c->lookup_mask) &&
+         apply_once (c, lookup))
+       ret = true;
+      else
+       buffer->next_glyph ();
+    }
+    if (ret)
+    {
+      if (!Proxy::inplace)
+       buffer->swap_buffers ();
+      else
+        assert (!buffer->has_separate_output ());
+    }
+  }
+  else
+  {
+    /* in-place backward substitution/positioning */
+    if (Proxy::table_index == 0)
+      buffer->remove_output ();
+    buffer->idx = buffer->len - 1;
+    do
+    {
+      if (accel.digest.may_have (buffer->cur().codepoint) &&
+         (buffer->cur().mask & c->lookup_mask) &&
+         apply_once (c, lookup))
+       ret = true;
+      /* The reverse lookup doesn't "advance" cursor (for good reason). */
+      buffer->idx--;
+
+    }
+    while ((int) buffer->idx >= 0);
+  }
+
+  return ret;
+}
+
+template <typename Proxy>
+inline void hb_ot_map_t::apply (const Proxy &proxy,
+                               const hb_ot_shape_plan_t *plan,
+                               hb_font_t *font,
+                               hb_buffer_t *buffer) const
+{
+  const unsigned int table_index = proxy.table_index;
+  unsigned int i = 0;
+  OT::hb_apply_context_t c (table_index, font, buffer);
+  c.set_recurse_func (Proxy::Lookup::apply_recurse_func);
+
+  for (unsigned int stage_index = 0; stage_index < stages[table_index].len; stage_index++) {
+    const stage_map_t *stage = &stages[table_index][stage_index];
+    for (; i < stage->last_lookup; i++)
+    {
+      unsigned int lookup_index = lookups[table_index][i].index;
+      c.set_lookup_mask (lookups[table_index][i].mask);
+      c.set_auto_zwj (lookups[table_index][i].auto_zwj);
+      apply_string<Proxy> (&c,
+                          proxy.table.get_lookup (lookup_index),
+                          proxy.accels[lookup_index]);
+    }
+
+    if (stage->pause_func)
+    {
+      buffer->clear_output ();
+      stage->pause_func (plan, font, buffer);
+    }
+  }
+}
+
+void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
+{
+  GSUBProxy proxy (font->face);
+  apply (proxy, plan, font, buffer);
+}
+
+void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
+{
+  GPOSProxy proxy (font->face);
+  apply (proxy, plan, font, buffer);
+}
+
+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)
+{
+  apply_string<GSUBProxy> (c, lookup, accel);
+}
index 134f1a6..949678a 100644 (file)
@@ -41,6 +41,7 @@ HB_BEGIN_DECLS
 #define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
 #define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
 #define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
 #define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
 #define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
 #define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
+#define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
 
 
 /*
 
 
 /*
@@ -91,9 +92,9 @@ hb_ot_layout_get_ligature_carets (hb_font_t      *font,
  * GSUB/GPOS feature query and enumeration interface
  */
 
  * GSUB/GPOS feature query and enumeration interface
  */
 
-#define HB_OT_LAYOUT_NO_SCRIPT_INDEX           ((unsigned int) 0xFFFF)
-#define HB_OT_LAYOUT_NO_FEATURE_INDEX          ((unsigned int) 0xFFFF)
-#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX    ((unsigned int) 0xFFFF)
+#define HB_OT_LAYOUT_NO_SCRIPT_INDEX           0xFFFFu
+#define HB_OT_LAYOUT_NO_FEATURE_INDEX          0xFFFFu
+#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX    0xFFFFu
 
 unsigned int
 hb_ot_layout_table_get_script_tags (hb_face_t    *face,
 
 unsigned int
 hb_ot_layout_table_get_script_tags (hb_face_t    *face,
@@ -145,6 +146,14 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index);
 
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index);
 
+hb_bool_t
+hb_ot_layout_language_get_required_feature (hb_face_t    *face,
+                                           hb_tag_t      table_tag,
+                                           unsigned int  script_index,
+                                           unsigned int  language_index,
+                                           unsigned int *feature_index,
+                                           hb_tag_t     *feature_tag);
+
 unsigned int
 hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
                                           hb_tag_t      table_tag,
 unsigned int
 hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
                                           hb_tag_t      table_tag,
@@ -179,6 +188,11 @@ hb_ot_layout_feature_get_lookups (hb_face_t    *face,
                                  unsigned int *lookup_count /* IN/OUT */,
                                  unsigned int *lookup_indexes /* OUT */);
 
                                  unsigned int *lookup_count /* IN/OUT */,
                                  unsigned int *lookup_indexes /* OUT */);
 
+unsigned int
+hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
+                                    hb_tag_t      table_tag);
+
+
 void
 hb_ot_layout_collect_lookups (hb_face_t      *face,
                              hb_tag_t        table_tag,
 void
 hb_ot_layout_collect_lookups (hb_face_t      *face,
                              hb_tag_t        table_tag,
@@ -188,11 +202,6 @@ hb_ot_layout_collect_lookups (hb_face_t      *face,
                              hb_set_t       *lookup_indexes /* OUT */);
 
 void
                              hb_set_t       *lookup_indexes /* OUT */);
 
 void
-hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
-                                 hb_tag_t         table_tag,
-                                 hb_set_t        *lookup_indexes /* OUT */);
-
-void
 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
                                    hb_tag_t      table_tag,
                                    unsigned int  lookup_index,
 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
                                    hb_tag_t      table_tag,
                                    unsigned int  lookup_index,
index b140207..86b7e9f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
- * Copyright © 2010,2011,2012  Google, Inc.
+ * Copyright © 2010,2011,2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -31,8 +31,8 @@
 
 #include "hb-buffer-private.hh"
 
 
 #include "hb-buffer-private.hh"
 
-#include "hb-ot-layout-private.hh"
 
 
+struct hb_ot_shape_plan_t;
 
 static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS};
 
 
 static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS};
 
@@ -49,14 +49,16 @@ struct hb_ot_map_t
     unsigned int shift;
     hb_mask_t mask;
     hb_mask_t _1_mask; /* mask for value=1, for quick access */
     unsigned int shift;
     hb_mask_t mask;
     hb_mask_t _1_mask; /* mask for value=1, for quick access */
-    hb_bool_t needs_fallback;
+    unsigned int needs_fallback : 1;
+    unsigned int auto_zwj : 1;
 
     static int cmp (const feature_map_t *a, const feature_map_t *b)
     { return a->tag < b->tag ? -1 : a->tag > b->tag ? 1 : 0; }
   };
 
   struct lookup_map_t {
 
     static int cmp (const feature_map_t *a, const feature_map_t *b)
     { return a->tag < b->tag ? -1 : a->tag > b->tag ? 1 : 0; }
   };
 
   struct lookup_map_t {
-    unsigned int index;
+    unsigned short index;
+    unsigned short auto_zwj : 1;
     hb_mask_t mask;
 
     static int cmp (const lookup_map_t *a, const lookup_map_t *b)
     hb_mask_t mask;
 
     static int cmp (const lookup_map_t *a, const lookup_map_t *b)
@@ -65,9 +67,9 @@ struct hb_ot_map_t
 
   typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer);
 
 
   typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer);
 
-  struct pause_map_t {
-    unsigned int num_lookups; /* Cumulative */
-    pause_func_t callback;
+  struct stage_map_t {
+    unsigned int last_lookup; /* Cumulative */
+    pause_func_t pause_func;
   };
 
 
   };
 
 
@@ -108,23 +110,27 @@ struct hb_ot_map_t
       *lookup_count = 0;
       return;
     }
       *lookup_count = 0;
       return;
     }
-    assert (stage <= pauses[table_index].len);
-    unsigned int start = stage ? pauses[table_index][stage - 1].num_lookups : 0;
-    unsigned int end   = stage < pauses[table_index].len ? pauses[table_index][stage].num_lookups : lookups[table_index].len;
+    assert (stage <= stages[table_index].len);
+    unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0;
+    unsigned int end   = stage < stages[table_index].len ? stages[table_index][stage].last_lookup : lookups[table_index].len;
     *plookups = &lookups[table_index][start];
     *lookup_count = end - start;
   }
 
   HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
     *plookups = &lookups[table_index][start];
     *lookup_count = end - start;
   }
 
   HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
+  template <typename Proxy>
+  HB_INTERNAL inline void apply (const Proxy &proxy,
+                                const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
 
   inline void finish (void) {
     features.finish ();
   HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
 
   inline void finish (void) {
     features.finish ();
-    lookups[0].finish ();
-    lookups[1].finish ();
-    pauses[0].finish ();
-    pauses[1].finish ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      lookups[table_index].finish ();
+      stages[table_index].finish ();
+    }
   }
 
   public:
   }
 
   public:
@@ -136,14 +142,39 @@ struct hb_ot_map_t
   HB_INTERNAL void add_lookups (hb_face_t    *face,
                                unsigned int  table_index,
                                unsigned int  feature_index,
   HB_INTERNAL void add_lookups (hb_face_t    *face,
                                unsigned int  table_index,
                                unsigned int  feature_index,
-                               hb_mask_t     mask);
+                               hb_mask_t     mask,
+                               bool          auto_zwj);
 
   hb_mask_t global_mask;
 
   hb_prealloced_array_t<feature_map_t, 8> features;
   hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
 
   hb_mask_t global_mask;
 
   hb_prealloced_array_t<feature_map_t, 8> features;
   hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
-  hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */
+  hb_prealloced_array_t<stage_map_t, 4> stages[2]; /* GSUB/GPOS */
+};
+
+enum hb_ot_map_feature_flags_t {
+  F_NONE               = 0x0000u,
+  F_GLOBAL             = 0x0001u,
+  F_HAS_FALLBACK       = 0x0002u,
+  F_MANUAL_ZWJ         = 0x0004u
 };
 };
+/* Macro version for where const is desired. */
+#define F_COMBINE(l,r) (hb_ot_map_feature_flags_t ((unsigned int) (l) | (unsigned int) (r)))
+static inline hb_ot_map_feature_flags_t
+operator | (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r)
+{ return hb_ot_map_feature_flags_t ((unsigned int) l | (unsigned int) r); }
+static inline hb_ot_map_feature_flags_t
+operator & (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r)
+{ return hb_ot_map_feature_flags_t ((unsigned int) l & (unsigned int) r); }
+static inline hb_ot_map_feature_flags_t
+operator ~ (hb_ot_map_feature_flags_t r)
+{ return hb_ot_map_feature_flags_t (~(unsigned int) r); }
+static inline hb_ot_map_feature_flags_t&
+operator |= (hb_ot_map_feature_flags_t &l, hb_ot_map_feature_flags_t r)
+{ l = l | r; return l; }
+static inline hb_ot_map_feature_flags_t&
+operator &= (hb_ot_map_feature_flags_t& l, hb_ot_map_feature_flags_t r)
+{ l = l & r; return l; }
 
 
 struct hb_ot_map_builder_t
 
 
 struct hb_ot_map_builder_t
@@ -153,10 +184,11 @@ struct hb_ot_map_builder_t
   HB_INTERNAL hb_ot_map_builder_t (hb_face_t *face_,
                                   const hb_segment_properties_t *props_);
 
   HB_INTERNAL hb_ot_map_builder_t (hb_face_t *face_,
                                   const hb_segment_properties_t *props_);
 
-  HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value, bool global, bool has_fallback = false);
+  HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value,
+                               hb_ot_map_feature_flags_t flags);
 
 
-  inline void add_bool_feature (hb_tag_t tag, bool global = true, bool has_fallback = false)
-  { add_feature (tag, 1, global, has_fallback); }
+  inline void add_global_bool_feature (hb_tag_t tag)
+  { add_feature (tag, 1, F_GLOBAL); }
 
   inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
   { add_pause (0, pause_func); }
 
   inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
   { add_pause (0, pause_func); }
@@ -167,8 +199,10 @@ struct hb_ot_map_builder_t
 
   inline void finish (void) {
     feature_infos.finish ();
 
   inline void finish (void) {
     feature_infos.finish ();
-    pauses[0].finish ();
-    pauses[1].finish ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      stages[table_index].finish ();
+    }
   }
 
   private:
   }
 
   private:
@@ -177,8 +211,7 @@ struct hb_ot_map_builder_t
     hb_tag_t tag;
     unsigned int seq; /* sequence#, used for stable sorting only */
     unsigned int max_value;
     hb_tag_t tag;
     unsigned int seq; /* sequence#, used for stable sorting only */
     unsigned int max_value;
-    bool global; /* whether the feature applies value to every glyph in the buffer */
-    bool has_fallback; /* whether to allocate bits even if feature not found */
+    hb_ot_map_feature_flags_t flags;
     unsigned int default_value; /* for non-global features, what should the unset glyphs take */
     unsigned int stage[2]; /* GSUB/GPOS */
 
     unsigned int default_value; /* for non-global features, what should the unset glyphs take */
     unsigned int stage[2]; /* GSUB/GPOS */
 
@@ -186,9 +219,9 @@ struct hb_ot_map_builder_t
     { return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); }
   };
 
     { return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); }
   };
 
-  struct pause_info_t {
-    unsigned int stage;
-    hb_ot_map_t::pause_func_t callback;
+  struct stage_info_t {
+    unsigned int index;
+    hb_ot_map_t::pause_func_t pause_func;
   };
 
   HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func);
   };
 
   HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func);
@@ -205,8 +238,8 @@ struct hb_ot_map_builder_t
   private:
 
   unsigned int current_stage[2]; /* GSUB/GPOS */
   private:
 
   unsigned int current_stage[2]; /* GSUB/GPOS */
-  hb_prealloced_array_t<feature_info_t,16> feature_infos;
-  hb_prealloced_array_t<pause_info_t, 1> pauses[2]; /* GSUB/GPOS */
+  hb_prealloced_array_t<feature_info_t, 32> feature_infos;
+  hb_prealloced_array_t<stage_info_t, 8> stages[2]; /* GSUB/GPOS */
 };
 
 
 };
 
 
index 62f7904..4985eb2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
- * Copyright © 2010,2011  Google, Inc.
+ * Copyright © 2010,2011,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
 
 #include "hb-ot-map-private.hh"
 
 
 #include "hb-ot-map-private.hh"
 
+#include "hb-ot-layout-private.hh"
+
 
 void
 hb_ot_map_t::add_lookups (hb_face_t    *face,
                          unsigned int  table_index,
                          unsigned int  feature_index,
 
 void
 hb_ot_map_t::add_lookups (hb_face_t    *face,
                          unsigned int  table_index,
                          unsigned int  feature_index,
-                         hb_mask_t     mask)
+                         hb_mask_t     mask,
+                         bool          auto_zwj)
 {
   unsigned int lookup_indices[32];
   unsigned int offset, len;
 {
   unsigned int lookup_indices[32];
   unsigned int offset, len;
+  unsigned int table_lookup_count;
+
+  table_lookup_count = hb_ot_layout_table_get_lookup_count (face, table_tags[table_index]);
 
   offset = 0;
   do {
 
   offset = 0;
   do {
@@ -47,12 +53,16 @@ hb_ot_map_t::add_lookups (hb_face_t    *face,
                                      offset, &len,
                                      lookup_indices);
 
                                      offset, &len,
                                      lookup_indices);
 
-    for (unsigned int i = 0; i < len; i++) {
+    for (unsigned int i = 0; i < len; i++)
+    {
+      if (lookup_indices[i] >= table_lookup_count)
+       continue;
       hb_ot_map_t::lookup_map_t *lookup = lookups[table_index].push ();
       if (unlikely (!lookup))
         return;
       lookup->mask = mask;
       lookup->index = lookup_indices[i];
       hb_ot_map_t::lookup_map_t *lookup = lookups[table_index].push ();
       if (unlikely (!lookup))
         return;
       lookup->mask = mask;
       lookup->index = lookup_indices[i];
+      lookup->auto_zwj = auto_zwj;
     }
 
     offset += len;
     }
 
     offset += len;
@@ -84,59 +94,21 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
   }
 }
 
   }
 }
 
-void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, bool global, bool has_fallback)
+void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value,
+                                      hb_ot_map_feature_flags_t flags)
 {
   feature_info_t *info = feature_infos.push();
   if (unlikely (!info)) return;
 {
   feature_info_t *info = feature_infos.push();
   if (unlikely (!info)) return;
+  if (unlikely (!tag)) return;
   info->tag = tag;
   info->seq = feature_infos.len;
   info->max_value = value;
   info->tag = tag;
   info->seq = feature_infos.len;
   info->max_value = value;
-  info->global = global;
-  info->has_fallback = has_fallback;
-  info->default_value = global ? value : 0;
+  info->flags = flags;
+  info->default_value = (flags & F_GLOBAL) ? value : 0;
   info->stage[0] = current_stage[0];
   info->stage[1] = current_stage[1];
 }
 
   info->stage[0] = current_stage[0];
   info->stage[1] = current_stage[1];
 }
 
-/* Keep the next two functions in sync. */
-
-void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
-{
-  const unsigned int table_index = 0;
-  unsigned int i = 0;
-
-  for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) {
-    const pause_map_t *pause = &pauses[table_index][pause_index];
-    for (; i < pause->num_lookups; i++)
-      hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
-
-    buffer->clear_output ();
-
-    if (pause->callback)
-      pause->callback (plan, font, buffer);
-  }
-
-  for (; i < lookups[table_index].len; i++)
-    hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
-}
-
-void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
-{
-  const unsigned int table_index = 1;
-  unsigned int i = 0;
-
-  for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) {
-    const pause_map_t *pause = &pauses[table_index][pause_index];
-    for (; i < pause->num_lookups; i++)
-      hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
-
-    if (pause->callback)
-      pause->callback (plan, font, buffer);
-  }
-
-  for (; i < lookups[table_index].len; i++)
-    hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
-}
 
 void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const
 {
 
 void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const
 {
@@ -146,10 +118,10 @@ void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_o
 
 void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func)
 {
 
 void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func)
 {
-  pause_info_t *p = pauses[table_index].push ();
-  if (likely (p)) {
-    p->stage = current_stage[table_index];
-    p->callback = pause_func;
+  stage_info_t *s = stages[table_index].push ();
+  if (likely (s)) {
+    s->index = current_stage[table_index];
+    s->pause_func = pause_func;
   }
 
   current_stage[table_index]++;
   }
 
   current_stage[table_index]++;
@@ -160,9 +132,25 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
 {
   m.global_mask = 1;
 
 {
   m.global_mask = 1;
 
-  for (unsigned int table_index = 0; table_index < 2; table_index++) {
+  unsigned int required_feature_index[2];
+  hb_tag_t required_feature_tag[2];
+  /* We default to applying required feature in stage 0.  If the required
+   * feature has a tag that is known to the shaper, we apply required feature
+   * in the stage for that tag.
+   */
+  unsigned int required_feature_stage[2] = {0, 0};
+
+  for (unsigned int table_index = 0; table_index < 2; table_index++)
+  {
     m.chosen_script[table_index] = chosen_script[table_index];
     m.found_script[table_index] = found_script[table_index];
     m.chosen_script[table_index] = chosen_script[table_index];
     m.found_script[table_index] = found_script[table_index];
+
+    hb_ot_layout_language_get_required_feature (face,
+                                               table_tags[table_index],
+                                               script_index[table_index],
+                                               language_index[table_index],
+                                               &required_feature_index[table_index],
+                                               &required_feature_tag[table_index]);
   }
 
   if (!feature_infos.len)
   }
 
   if (!feature_infos.len)
@@ -170,24 +158,24 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
 
   /* Sort features and merge duplicates */
   {
 
   /* Sort features and merge duplicates */
   {
-    feature_infos.sort ();
+    feature_infos.qsort ();
     unsigned int j = 0;
     for (unsigned int i = 1; i < feature_infos.len; i++)
       if (feature_infos[i].tag != feature_infos[j].tag)
        feature_infos[++j] = feature_infos[i];
       else {
     unsigned int j = 0;
     for (unsigned int i = 1; i < feature_infos.len; i++)
       if (feature_infos[i].tag != feature_infos[j].tag)
        feature_infos[++j] = feature_infos[i];
       else {
-       if (feature_infos[i].global) {
-         feature_infos[j].global = true;
+       if (feature_infos[i].flags & F_GLOBAL) {
+         feature_infos[j].flags |= F_GLOBAL;
          feature_infos[j].max_value = feature_infos[i].max_value;
          feature_infos[j].default_value = feature_infos[i].default_value;
        } else {
          feature_infos[j].max_value = feature_infos[i].max_value;
          feature_infos[j].default_value = feature_infos[i].default_value;
        } else {
-         feature_infos[j].global = false;
+         feature_infos[j].flags &= ~F_GLOBAL;
          feature_infos[j].max_value = MAX (feature_infos[j].max_value, feature_infos[i].max_value);
          feature_infos[j].max_value = MAX (feature_infos[j].max_value, feature_infos[i].max_value);
+         /* Inherit default_value from j */
        }
        }
-       feature_infos[j].has_fallback = feature_infos[j].has_fallback || feature_infos[i].has_fallback;
+       feature_infos[j].flags |= (feature_infos[i].flags & F_HAS_FALLBACK);
        feature_infos[j].stage[0] = MIN (feature_infos[j].stage[0], feature_infos[i].stage[0]);
        feature_infos[j].stage[1] = MIN (feature_infos[j].stage[1], feature_infos[i].stage[1]);
        feature_infos[j].stage[0] = MIN (feature_infos[j].stage[0], feature_infos[i].stage[0]);
        feature_infos[j].stage[1] = MIN (feature_infos[j].stage[1], feature_infos[i].stage[1]);
-       /* Inherit default_value from j */
       }
     feature_infos.shrink (j + 1);
   }
       }
     feature_infos.shrink (j + 1);
   }
@@ -195,12 +183,13 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
 
   /* Allocate bits now */
   unsigned int next_bit = 1;
 
   /* Allocate bits now */
   unsigned int next_bit = 1;
-  for (unsigned int i = 0; i < feature_infos.len; i++) {
+  for (unsigned int i = 0; i < feature_infos.len; i++)
+  {
     const feature_info_t *info = &feature_infos[i];
 
     unsigned int bits_needed;
 
     const feature_info_t *info = &feature_infos[i];
 
     unsigned int bits_needed;
 
-    if (info->global && info->max_value == 1)
+    if ((info->flags & F_GLOBAL) && info->max_value == 1)
       /* Uses the global bit */
       bits_needed = 0;
     else
       /* Uses the global bit */
       bits_needed = 0;
     else
@@ -210,16 +199,24 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
       continue; /* Feature disabled, or not enough bits. */
 
 
       continue; /* Feature disabled, or not enough bits. */
 
 
-    bool found = false;
+    hb_bool_t found = false;
     unsigned int feature_index[2];
     for (unsigned int table_index = 0; table_index < 2; table_index++)
     unsigned int feature_index[2];
     for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      if (required_feature_tag[table_index] == info->tag)
+      {
+       required_feature_stage[table_index] = info->stage[table_index];
+       found = true;
+       continue;
+      }
       found |= hb_ot_layout_language_find_feature (face,
                                                   table_tags[table_index],
                                                   script_index[table_index],
                                                   language_index[table_index],
                                                   info->tag,
                                                   &feature_index[table_index]);
       found |= hb_ot_layout_language_find_feature (face,
                                                   table_tags[table_index],
                                                   script_index[table_index],
                                                   language_index[table_index],
                                                   info->tag,
                                                   &feature_index[table_index]);
-    if (!found && !info->has_fallback)
+    }
+    if (!found && !(info->flags & F_HAS_FALLBACK))
       continue;
 
 
       continue;
 
 
@@ -232,7 +229,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
     map->index[1] = feature_index[1];
     map->stage[0] = info->stage[0];
     map->stage[1] = info->stage[1];
     map->index[1] = feature_index[1];
     map->stage[0] = info->stage[0];
     map->stage[1] = info->stage[1];
-    if (info->global && info->max_value == 1) {
+    map->auto_zwj = !(info->flags & F_MANUAL_ZWJ);
+    if ((info->flags & F_GLOBAL) && info->max_value == 1) {
       /* Uses the global bit */
       map->shift = 0;
       map->mask = 1;
       /* Uses the global bit */
       map->shift = 0;
       map->mask = 1;
@@ -240,8 +238,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
       map->shift = next_bit;
       map->mask = (1 << (next_bit + bits_needed)) - (1 << next_bit);
       next_bit += bits_needed;
       map->shift = next_bit;
       map->mask = (1 << (next_bit + bits_needed)) - (1 << next_bit);
       next_bit += bits_needed;
-      if (info->global)
-       m.global_mask |= (info->default_value << map->shift) & map->mask;
+      m.global_mask |= (info->default_value << map->shift) & map->mask;
     }
     map->_1_mask = (1 << map->shift) & map->mask;
     map->needs_fallback = !found;
     }
     map->_1_mask = (1 << map->shift) & map->mask;
     map->needs_fallback = !found;
@@ -253,51 +250,55 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
   add_gsub_pause (NULL);
   add_gpos_pause (NULL);
 
   add_gsub_pause (NULL);
   add_gpos_pause (NULL);
 
-  for (unsigned int table_index = 0; table_index < 2; table_index++) {
-    hb_tag_t table_tag = table_tags[table_index];
-
+  for (unsigned int table_index = 0; table_index < 2; table_index++)
+  {
     /* Collect lookup indices for features */
 
     /* Collect lookup indices for features */
 
-    unsigned int required_feature_index;
-    if (hb_ot_layout_language_get_required_feature_index (face,
-                                                         table_tag,
-                                                         script_index[table_index],
-                                                         language_index[table_index],
-                                                         &required_feature_index))
-      m.add_lookups (face, table_index, required_feature_index, 1);
-
-    unsigned int pause_index = 0;
+    unsigned int stage_index = 0;
     unsigned int last_num_lookups = 0;
     for (unsigned stage = 0; stage < current_stage[table_index]; stage++)
     {
     unsigned int last_num_lookups = 0;
     for (unsigned stage = 0; stage < current_stage[table_index]; stage++)
     {
+      if (required_feature_index[table_index] != HB_OT_LAYOUT_NO_FEATURE_INDEX &&
+         required_feature_stage[table_index] == stage)
+       m.add_lookups (face, table_index,
+                      required_feature_index[table_index],
+                      1 /* mask */,
+                      true /* auto_zwj */);
+
       for (unsigned i = 0; i < m.features.len; i++)
         if (m.features[i].stage[table_index] == stage)
       for (unsigned i = 0; i < m.features.len; i++)
         if (m.features[i].stage[table_index] == stage)
-         m.add_lookups (face, table_index, m.features[i].index[table_index], m.features[i].mask);
+         m.add_lookups (face, table_index,
+                        m.features[i].index[table_index],
+                        m.features[i].mask,
+                        m.features[i].auto_zwj);
 
       /* Sort lookups and merge duplicates */
       if (last_num_lookups < m.lookups[table_index].len)
       {
 
       /* Sort lookups and merge duplicates */
       if (last_num_lookups < m.lookups[table_index].len)
       {
-       m.lookups[table_index].sort (last_num_lookups, m.lookups[table_index].len);
+       m.lookups[table_index].qsort (last_num_lookups, m.lookups[table_index].len);
 
        unsigned int j = last_num_lookups;
        for (unsigned int i = j + 1; i < m.lookups[table_index].len; i++)
          if (m.lookups[table_index][i].index != m.lookups[table_index][j].index)
            m.lookups[table_index][++j] = m.lookups[table_index][i];
          else
 
        unsigned int j = last_num_lookups;
        for (unsigned int i = j + 1; i < m.lookups[table_index].len; i++)
          if (m.lookups[table_index][i].index != m.lookups[table_index][j].index)
            m.lookups[table_index][++j] = m.lookups[table_index][i];
          else
+         {
            m.lookups[table_index][j].mask |= m.lookups[table_index][i].mask;
            m.lookups[table_index][j].mask |= m.lookups[table_index][i].mask;
+           m.lookups[table_index][j].auto_zwj &= m.lookups[table_index][i].auto_zwj;
+         }
        m.lookups[table_index].shrink (j + 1);
       }
 
       last_num_lookups = m.lookups[table_index].len;
 
        m.lookups[table_index].shrink (j + 1);
       }
 
       last_num_lookups = m.lookups[table_index].len;
 
-      if (pause_index < pauses[table_index].len && pauses[table_index][pause_index].stage == stage) {
-       hb_ot_map_t::pause_map_t *pause_map = m.pauses[table_index].push ();
-       if (likely (pause_map)) {
-         pause_map->num_lookups = last_num_lookups;
-         pause_map->callback = pauses[table_index][pause_index].callback;
+      if (stage_index < stages[table_index].len && stages[table_index][stage_index].index == stage) {
+       hb_ot_map_t::stage_map_t *stage_map = m.stages[table_index].push ();
+       if (likely (stage_map)) {
+         stage_map->last_lookup = last_num_lookups;
+         stage_map->pause_func = stages[table_index][stage_index].pause_func;
        }
 
        }
 
-       pause_index++;
+       stage_index++;
       }
     }
   }
       }
     }
   }
index 0ce3ebc..b1f8328 100644 (file)
@@ -41,7 +41,7 @@ namespace OT {
 
 struct maxp
 {
 
 struct maxp
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_maxp;
+  static const hb_tag_t tableTag       = HB_OT_TAG_maxp;
 
   inline unsigned int get_num_glyphs (void) const {
     return numGlyphs;
 
   inline unsigned int get_num_glyphs (void) const {
     return numGlyphs;
@@ -50,13 +50,13 @@ struct maxp
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) &&
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     return TRACE_RETURN (c->check_struct (this) &&
-                        likely (version.major == 1 || (version.major == 0 && version.minor == 0x5000)));
+                        likely (version.major == 1 || (version.major == 0 && version.minor == 0x5000u)));
   }
 
   /* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
   protected:
   FixedVersion version;                /* Version of the maxp table (0.5 or 1.0),
   }
 
   /* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
   protected:
   FixedVersion version;                /* Version of the maxp table (0.5 or 1.0),
-                                        * 0x00005000 or 0x00010000. */
+                                        * 0x00005000u or 0x00010000u. */
   USHORT       numGlyphs;              /* The number of glyphs in the font. */
   public:
   DEFINE_SIZE_STATIC (6);
   USHORT       numGlyphs;              /* The number of glyphs in the font. */
   public:
   DEFINE_SIZE_STATIC (6);
index 75a1b94..31d9fac 100644 (file)
@@ -74,7 +74,7 @@ struct NameRecord
 
 struct name
 {
 
 struct name
 {
-  static const hb_tag_t Tag    = HB_OT_TAG_name;
+  static const hb_tag_t tableTag       = HB_OT_TAG_name;
 
   inline unsigned int get_name (unsigned int platform_id,
                                unsigned int encoding_id,
 
   inline unsigned int get_name (unsigned int platform_id,
                                unsigned int encoding_id,
@@ -98,6 +98,9 @@ struct name
     return length;
   }
 
     return length;
   }
 
+  inline unsigned int get_size (void) const
+  { return min_size + count * nameRecord[0].min_size; }
+
   inline bool sanitize_records (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     char *string_pool = (char *) this + stringOffset;
   inline bool sanitize_records (hb_sanitize_context_t *c) {
     TRACE_SANITIZE (this);
     char *string_pool = (char *) this + stringOffset;
@@ -116,10 +119,9 @@ struct name
   }
 
   /* We only implement format 0 for now. */
   }
 
   /* We only implement format 0 for now. */
-  protected:
   USHORT       format;                 /* Format selector (=0/1). */
   USHORT       count;                  /* Number of name records. */
   USHORT       format;                 /* Format selector (=0/1). */
   USHORT       count;                  /* Number of name records. */
-  Offset       stringOffset;           /* Offset to start of string storage (from start of table). */
+  Offset<>     stringOffset;           /* Offset to start of string storage (from start of table). */
   NameRecord   nameRecord[VAR];        /* The name records where count is the number of records. */
   public:
   DEFINE_SIZE_ARRAY (6, nameRecord);
   NameRecord   nameRecord[VAR];        /* The name records where count is the number of records. */
   public:
   DEFINE_SIZE_ARRAY (6, nameRecord);
index 4fcd0a2..e5b7ed4 100644 (file)
@@ -33,6 +33,8 @@
 #include "hb-ot-layout-gsub-table.hh"
 
 
 #include "hb-ot-layout-gsub-table.hh"
 
 
+/* Features ordered the same as the entries in shaping_table rows,
+ * followed by rlig.  Don't change. */
 static const hb_tag_t arabic_fallback_features[] =
 {
   HB_TAG('i','n','i','t'),
 static const hb_tag_t arabic_fallback_features[] =
 {
   HB_TAG('i','n','i','t'),
@@ -42,16 +44,6 @@ static const hb_tag_t arabic_fallback_features[] =
   HB_TAG('r','l','i','g'),
 };
 
   HB_TAG('r','l','i','g'),
 };
 
-/* Same order as the fallback feature array */
-enum {
-  FALLBACK_INIT,
-  FALLBACK_MEDI,
-  FALLBACK_FINA,
-  FALLBACK_ISOL,
-  FALLBACK_RLIG,
-  ARABIC_NUM_FALLBACK_FEATURES
-};
-
 static OT::SubstLookup *
 arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUSED,
                                          hb_font_t *font,
 static OT::SubstLookup *
 arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUSED,
                                          hb_font_t *font,
@@ -71,7 +63,7 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
        !hb_font_get_glyph (font, u, 0, &u_glyph) ||
        !hb_font_get_glyph (font, s, 0, &s_glyph) ||
        u_glyph == s_glyph ||
        !hb_font_get_glyph (font, u, 0, &u_glyph) ||
        !hb_font_get_glyph (font, s, 0, &s_glyph) ||
        u_glyph == s_glyph ||
-       u_glyph > 0xFFFF || s_glyph > 0xFFFF)
+       u_glyph > 0xFFFFu || s_glyph > 0xFFFFu)
       continue;
 
     glyphs[num_glyphs].set (u_glyph);
       continue;
 
     glyphs[num_glyphs].set (u_glyph);
@@ -80,6 +72,9 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
     num_glyphs++;
   }
 
     num_glyphs++;
   }
 
+  if (!num_glyphs)
+    return NULL;
+
   /* Bubble-sort!
    * May not be good-enough for presidential candidate interviews, but good-enough for us... */
   hb_bubble_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
   /* Bubble-sort!
    * May not be good-enough for presidential candidate interviews, but good-enough for us... */
   hb_bubble_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
@@ -157,6 +152,9 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
     }
   }
 
     }
   }
 
+  if (!num_ligatures)
+    return NULL;
+
   OT::Supplier<OT::GlyphID>   first_glyphs_supplier                      (first_glyphs, num_first_glyphs);
   OT::Supplier<unsigned int > ligature_per_first_glyph_count_supplier    (ligature_per_first_glyph_count_list, num_first_glyphs);
   OT::Supplier<OT::GlyphID>   ligatures_supplier                         (ligature_list, num_ligatures);
   OT::Supplier<OT::GlyphID>   first_glyphs_supplier                      (first_glyphs, num_first_glyphs);
   OT::Supplier<unsigned int > ligature_per_first_glyph_count_supplier    (ligature_per_first_glyph_count_list, num_first_glyphs);
   OT::Supplier<OT::GlyphID>   ligatures_supplier                         (ligature_list, num_ligatures);
@@ -193,17 +191,108 @@ arabic_fallback_synthesize_lookup (const hb_ot_shape_plan_t *plan,
     return arabic_fallback_synthesize_lookup_ligature (plan, font);
 }
 
     return arabic_fallback_synthesize_lookup_ligature (plan, font);
 }
 
+#define ARABIC_FALLBACK_MAX_LOOKUPS 5
+
 struct arabic_fallback_plan_t
 {
   ASSERT_POD ();
 
 struct arabic_fallback_plan_t
 {
   ASSERT_POD ();
 
-  hb_mask_t mask_array[ARABIC_NUM_FALLBACK_FEATURES];
-  OT::SubstLookup *lookup_array[ARABIC_NUM_FALLBACK_FEATURES];
-  hb_set_digest_t digest_array[ARABIC_NUM_FALLBACK_FEATURES];
+  unsigned int num_lookups;
+  bool free_lookups;
+
+  hb_mask_t mask_array[ARABIC_FALLBACK_MAX_LOOKUPS];
+  OT::SubstLookup *lookup_array[ARABIC_FALLBACK_MAX_LOOKUPS];
+  hb_ot_layout_lookup_accelerator_t accel_array[ARABIC_FALLBACK_MAX_LOOKUPS];
 };
 
 static const arabic_fallback_plan_t arabic_fallback_plan_nil = {};
 
 };
 
 static const arabic_fallback_plan_t arabic_fallback_plan_nil = {};
 
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(HB_WITH_WIN1256)
+#define HB_WITH_WIN1256
+#endif
+
+#ifdef HB_WITH_WIN1256
+#include "hb-ot-shape-complex-arabic-win1256.hh"
+#endif
+
+struct ManifestLookup {
+  OT::Tag tag;
+  OT::OffsetTo<OT::SubstLookup> lookupOffset;
+};
+typedef OT::ArrayOf<ManifestLookup> Manifest;
+
+static bool
+arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan,
+                                  const hb_ot_shape_plan_t *plan,
+                                  hb_font_t *font)
+{
+#ifdef HB_WITH_WIN1256
+  /* Does this font look like it's Windows-1256-encoded? */
+  hb_codepoint_t g;
+  if (!(hb_font_get_glyph (font, 0x0627u, 0, &g) && g == 199 /* ALEF */ &&
+       hb_font_get_glyph (font, 0x0644u, 0, &g) && g == 225 /* LAM */ &&
+       hb_font_get_glyph (font, 0x0649u, 0, &g) && g == 236 /* ALEF MAKSURA */ &&
+       hb_font_get_glyph (font, 0x064Au, 0, &g) && g == 237 /* YEH */ &&
+       hb_font_get_glyph (font, 0x0652u, 0, &g) && g == 250 /* SUKUN */))
+    return false;
+
+  const Manifest &manifest = reinterpret_cast<const Manifest&> (arabic_win1256_gsub_lookups.manifest);
+  ASSERT_STATIC (sizeof (arabic_win1256_gsub_lookups.manifestData) / sizeof (ManifestLookup)
+                <= ARABIC_FALLBACK_MAX_LOOKUPS);
+  /* TODO sanitize the table? */
+
+  unsigned j = 0;
+  unsigned int count = manifest.len;
+  for (unsigned int i = 0; i < count; i++)
+  {
+    fallback_plan->mask_array[j] = plan->map.get_1_mask (manifest[i].tag);
+    if (fallback_plan->mask_array[j])
+    {
+      fallback_plan->lookup_array[j] = const_cast<OT::SubstLookup*> (&(&manifest+manifest[i].lookupOffset));
+      if (fallback_plan->lookup_array[j])
+      {
+       fallback_plan->accel_array[j].init (*fallback_plan->lookup_array[j]);
+       j++;
+      }
+    }
+  }
+
+  fallback_plan->num_lookups = j;
+  fallback_plan->free_lookups = false;
+
+  return j > 0;
+#else
+  return false;
+#endif
+}
+
+static bool
+arabic_fallback_plan_init_unicode (arabic_fallback_plan_t *fallback_plan,
+                                  const hb_ot_shape_plan_t *plan,
+                                  hb_font_t *font)
+{
+  ASSERT_STATIC (ARRAY_LENGTH_CONST(arabic_fallback_features) <= ARABIC_FALLBACK_MAX_LOOKUPS);
+  unsigned int j = 0;
+  for (unsigned int i = 0; i < ARRAY_LENGTH(arabic_fallback_features) ; i++)
+  {
+    fallback_plan->mask_array[j] = plan->map.get_1_mask (arabic_fallback_features[i]);
+    if (fallback_plan->mask_array[j])
+    {
+      fallback_plan->lookup_array[j] = arabic_fallback_synthesize_lookup (plan, font, i);
+      if (fallback_plan->lookup_array[j])
+      {
+       fallback_plan->accel_array[j].init (*fallback_plan->lookup_array[j]);
+       j++;
+      }
+    }
+  }
+
+  fallback_plan->num_lookups = j;
+  fallback_plan->free_lookups = true;
+
+  return j > 0;
+}
+
 static arabic_fallback_plan_t *
 arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
                             hb_font_t *font)
 static arabic_fallback_plan_t *
 arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
                             hb_font_t *font)
@@ -212,16 +301,21 @@ arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
   if (unlikely (!fallback_plan))
     return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil);
 
   if (unlikely (!fallback_plan))
     return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil);
 
-  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) {
-    fallback_plan->mask_array[i] = plan->map.get_1_mask (arabic_fallback_features[i]);
-    if (fallback_plan->mask_array[i]) {
-      fallback_plan->lookup_array[i] = arabic_fallback_synthesize_lookup (plan, font, i);
-      if (fallback_plan->lookup_array[i])
-       fallback_plan->lookup_array[i]->add_coverage (&fallback_plan->digest_array[i]);
-    }
-  }
+  fallback_plan->num_lookups = 0;
+  fallback_plan->free_lookups = false;
+
+  /* Try synthesizing GSUB table using Unicode Arabic Presentation Forms,
+   * in case the font has cmap entries for the presentation-forms characters. */
+  if (arabic_fallback_plan_init_unicode (fallback_plan, plan, font))
+    return fallback_plan;
 
 
-  return fallback_plan;
+  /* See if this looks like a Windows-1256-encoded font.  If it does, use a
+   * hand-coded GSUB table. */
+  if (arabic_fallback_plan_init_win1256 (fallback_plan, plan, font))
+    return fallback_plan;
+
+  free (fallback_plan);
+  return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil);
 }
 
 static void
 }
 
 static void
@@ -230,9 +324,13 @@ arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan)
   if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil)
     return;
 
   if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil)
     return;
 
-  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++)
+  for (unsigned int i = 0; i < fallback_plan->num_lookups; i++)
     if (fallback_plan->lookup_array[i])
     if (fallback_plan->lookup_array[i])
-      free (fallback_plan->lookup_array[i]);
+    {
+      fallback_plan->accel_array[i].fini (fallback_plan->lookup_array[i]);
+      if (fallback_plan->free_lookups)
+       free (fallback_plan->lookup_array[i]);
+    }
 
   free (fallback_plan);
 }
 
   free (fallback_plan);
 }
@@ -242,10 +340,13 @@ arabic_fallback_plan_shape (arabic_fallback_plan_t *fallback_plan,
                            hb_font_t *font,
                            hb_buffer_t *buffer)
 {
                            hb_font_t *font,
                            hb_buffer_t *buffer)
 {
-  for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++)
+  OT::hb_apply_context_t c (0, font, buffer);
+  for (unsigned int i = 0; i < fallback_plan->num_lookups; i++)
     if (fallback_plan->lookup_array[i]) {
     if (fallback_plan->lookup_array[i]) {
-      OT::hb_apply_context_t c (font, buffer, fallback_plan->mask_array[i]);
-      fallback_plan->lookup_array[i]->apply_string (&c, &fallback_plan->digest_array[i]);
+      c.set_lookup_mask (fallback_plan->mask_array[i]);
+      hb_ot_layout_substitute_lookup (&c,
+                                     *fallback_plan->lookup_array[i],
+                                     fallback_plan->accel_array[i]);
     }
 }
 
     }
 }
 
index 730a275..1710049 100644 (file)
@@ -2,12 +2,14 @@
 /*
  * The following table is generated by running:
  *
 /*
  * The following table is generated by running:
  *
- *   ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
+ *   ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
  *
  * on files with these headers:
  *
  *
  * on files with these headers:
  *
- * # ArabicShaping-6.2.0.txt
- * # Date: 2012-05-15, 21:05:00 GMT [KW]
+ * # ArabicShaping-7.0.0.txt
+ * # Date: 2014-02-14, 21:00:00 GMT [RP, KW, LI]
+ * # Blocks-7.0.0.txt
+ * # Date: 2014-04-03, 23:23:00 GMT [RP, KW]
  * UnicodeData.txt does not have a header.
  */
 
  * UnicodeData.txt does not have a header.
  */
 
 #define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
 
 
 #define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
 
 
+#define X      JOINING_TYPE_X
+#define R      JOINING_TYPE_R
+#define U      JOINING_TYPE_U
+#define A      JOINING_GROUP_ALAPH
+#define DR     JOINING_GROUP_DALATH_RISH
+#define L      JOINING_TYPE_L
+#define C      JOINING_TYPE_C
+#define D      JOINING_TYPE_D
+
 static const uint8_t joining_table[] =
 {
 
 static const uint8_t joining_table[] =
 {
 
-  /* Arabic Characters */
-
-  JOINING_TYPE_U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0603; ARABIC SIGN SAFHA; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0604; ARABIC SIGN SAMVAT; U; No_Joining_Group */
-  JOINING_TYPE_X, /* 0605 */
-  JOINING_TYPE_X, /* 0606 */
-  JOINING_TYPE_X, /* 0607 */
-  JOINING_TYPE_U, /* 0608; ARABIC RAY; U; No_Joining_Group */
-  JOINING_TYPE_X, /* 0609 */
-  JOINING_TYPE_X, /* 060A */
-  JOINING_TYPE_U, /* 060B; AFGHANI SIGN; U; No_Joining_Group */
-  JOINING_TYPE_X, /* 060C */
-  JOINING_TYPE_X, /* 060D */
-  JOINING_TYPE_X, /* 060E */
-  JOINING_TYPE_X, /* 060F */
-  JOINING_TYPE_X, /* 0610 */
-  JOINING_TYPE_X, /* 0611 */
-  JOINING_TYPE_X, /* 0612 */
-  JOINING_TYPE_X, /* 0613 */
-  JOINING_TYPE_X, /* 0614 */
-  JOINING_TYPE_X, /* 0615 */
-  JOINING_TYPE_X, /* 0616 */
-  JOINING_TYPE_X, /* 0617 */
-  JOINING_TYPE_X, /* 0618 */
-  JOINING_TYPE_X, /* 0619 */
-  JOINING_TYPE_X, /* 061A */
-  JOINING_TYPE_X, /* 061B */
-  JOINING_TYPE_X, /* 061C */
-  JOINING_TYPE_X, /* 061D */
-  JOINING_TYPE_X, /* 061E */
-  JOINING_TYPE_X, /* 061F */
-  JOINING_TYPE_D, /* 0620; DOTLESS YEH WITH SEPARATE RING BELOW; D; YEH */
-  JOINING_TYPE_U, /* 0621; HAMZA; U; No_Joining_Group */
-  JOINING_TYPE_R, /* 0622; ALEF WITH MADDA ABOVE; R; ALEF */
-  JOINING_TYPE_R, /* 0623; ALEF WITH HAMZA ABOVE; R; ALEF */
-  JOINING_TYPE_R, /* 0624; WAW WITH HAMZA ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 0625; ALEF WITH HAMZA BELOW; R; ALEF */
-  JOINING_TYPE_D, /* 0626; DOTLESS YEH WITH HAMZA ABOVE; D; YEH */
-  JOINING_TYPE_R, /* 0627; ALEF; R; ALEF */
-  JOINING_TYPE_D, /* 0628; BEH; D; BEH */
-  JOINING_TYPE_R, /* 0629; TEH MARBUTA; R; TEH MARBUTA */
-  JOINING_TYPE_D, /* 062A; DOTLESS BEH WITH 2 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 062B; DOTLESS BEH WITH 3 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 062C; HAH WITH DOT BELOW; D; HAH */
-  JOINING_TYPE_D, /* 062D; HAH; D; HAH */
-  JOINING_TYPE_D, /* 062E; HAH WITH DOT ABOVE; D; HAH */
-  JOINING_TYPE_R, /* 062F; DAL; R; DAL */
-  JOINING_TYPE_R, /* 0630; DAL WITH DOT ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 0631; REH; R; REH */
-  JOINING_TYPE_R, /* 0632; REH WITH DOT ABOVE; R; REH */
-  JOINING_TYPE_D, /* 0633; SEEN; D; SEEN */
-  JOINING_TYPE_D, /* 0634; SEEN WITH 3 DOTS ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 0635; SAD; D; SAD */
-  JOINING_TYPE_D, /* 0636; SAD WITH DOT ABOVE; D; SAD */
-  JOINING_TYPE_D, /* 0637; TAH; D; TAH */
-  JOINING_TYPE_D, /* 0638; TAH WITH DOT ABOVE; D; TAH */
-  JOINING_TYPE_D, /* 0639; AIN; D; AIN */
-  JOINING_TYPE_D, /* 063A; AIN WITH DOT ABOVE; D; AIN */
-  JOINING_TYPE_D, /* 063B; KEHEH WITH 2 DOTS ABOVE; D; GAF */
-  JOINING_TYPE_D, /* 063C; KEHEH WITH 3 DOTS BELOW; D; GAF */
-  JOINING_TYPE_D, /* 063D; FARSI YEH WITH INVERTED V ABOVE; D; FARSI YEH */
-  JOINING_TYPE_D, /* 063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH */
-  JOINING_TYPE_D, /* 063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH */
-  JOINING_TYPE_C, /* 0640; TATWEEL; C; No_Joining_Group */
-  JOINING_TYPE_D, /* 0641; FEH; D; FEH */
-  JOINING_TYPE_D, /* 0642; QAF; D; QAF */
-  JOINING_TYPE_D, /* 0643; KAF; D; KAF */
-  JOINING_TYPE_D, /* 0644; LAM; D; LAM */
-  JOINING_TYPE_D, /* 0645; MEEM; D; MEEM */
-  JOINING_TYPE_D, /* 0646; NOON; D; NOON */
-  JOINING_TYPE_D, /* 0647; HEH; D; HEH */
-  JOINING_TYPE_R, /* 0648; WAW; R; WAW */
-  JOINING_TYPE_D, /* 0649; DOTLESS YEH; D; YEH */
-  JOINING_TYPE_D, /* 064A; YEH; D; YEH */
-  JOINING_TYPE_X, /* 064B */
-  JOINING_TYPE_X, /* 064C */
-  JOINING_TYPE_X, /* 064D */
-  JOINING_TYPE_X, /* 064E */
-  JOINING_TYPE_X, /* 064F */
-  JOINING_TYPE_X, /* 0650 */
-  JOINING_TYPE_X, /* 0651 */
-  JOINING_TYPE_X, /* 0652 */
-  JOINING_TYPE_X, /* 0653 */
-  JOINING_TYPE_X, /* 0654 */
-  JOINING_TYPE_X, /* 0655 */
-  JOINING_TYPE_X, /* 0656 */
-  JOINING_TYPE_X, /* 0657 */
-  JOINING_TYPE_X, /* 0658 */
-  JOINING_TYPE_X, /* 0659 */
-  JOINING_TYPE_X, /* 065A */
-  JOINING_TYPE_X, /* 065B */
-  JOINING_TYPE_X, /* 065C */
-  JOINING_TYPE_X, /* 065D */
-  JOINING_TYPE_X, /* 065E */
-  JOINING_TYPE_X, /* 065F */
-  JOINING_TYPE_X, /* 0660 */
-  JOINING_TYPE_X, /* 0661 */
-  JOINING_TYPE_X, /* 0662 */
-  JOINING_TYPE_X, /* 0663 */
-  JOINING_TYPE_X, /* 0664 */
-  JOINING_TYPE_X, /* 0665 */
-  JOINING_TYPE_X, /* 0666 */
-  JOINING_TYPE_X, /* 0667 */
-  JOINING_TYPE_X, /* 0668 */
-  JOINING_TYPE_X, /* 0669 */
-  JOINING_TYPE_X, /* 066A */
-  JOINING_TYPE_X, /* 066B */
-  JOINING_TYPE_X, /* 066C */
-  JOINING_TYPE_X, /* 066D */
-  JOINING_TYPE_D, /* 066E; DOTLESS BEH; D; BEH */
-  JOINING_TYPE_D, /* 066F; DOTLESS QAF; D; QAF */
-  JOINING_TYPE_X, /* 0670 */
-  JOINING_TYPE_R, /* 0671; ALEF WITH WASLA ABOVE; R; ALEF */
-  JOINING_TYPE_R, /* 0672; ALEF WITH WAVY HAMZA ABOVE; R; ALEF */
-  JOINING_TYPE_R, /* 0673; ALEF WITH WAVY HAMZA BELOW; R; ALEF */
-  JOINING_TYPE_U, /* 0674; HIGH HAMZA; U; No_Joining_Group */
-  JOINING_TYPE_R, /* 0675; HIGH HAMZA ALEF; R; ALEF */
-  JOINING_TYPE_R, /* 0676; HIGH HAMZA WAW; R; WAW */
-  JOINING_TYPE_R, /* 0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW */
-  JOINING_TYPE_D, /* 0678; HIGH HAMZA DOTLESS YEH; D; YEH */
-  JOINING_TYPE_D, /* 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 067B; DOTLESS BEH WITH VERTICAL 2 DOTS BELOW; D; BEH */
-  JOINING_TYPE_D, /* 067C; DOTLESS BEH WITH ATTACHED RING BELOW AND 2 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 067D; DOTLESS BEH WITH INVERTED 3 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 067E; DOTLESS BEH WITH 3 DOTS BELOW; D; BEH */
-  JOINING_TYPE_D, /* 067F; DOTLESS BEH WITH 4 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 0680; DOTLESS BEH WITH 4 DOTS BELOW; D; BEH */
-  JOINING_TYPE_D, /* 0681; HAH WITH HAMZA ABOVE; D; HAH */
-  JOINING_TYPE_D, /* 0682; HAH WITH VERTICAL 2 DOTS ABOVE; D; HAH */
-  JOINING_TYPE_D, /* 0683; HAH WITH 2 DOTS BELOW; D; HAH */
-  JOINING_TYPE_D, /* 0684; HAH WITH VERTICAL 2 DOTS BELOW; D; HAH */
-  JOINING_TYPE_D, /* 0685; HAH WITH 3 DOTS ABOVE; D; HAH */
-  JOINING_TYPE_D, /* 0686; HAH WITH 3 DOTS BELOW; D; HAH */
-  JOINING_TYPE_D, /* 0687; HAH WITH 4 DOTS BELOW; D; HAH */
-  JOINING_TYPE_R, /* 0688; DAL WITH TAH ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 0689; DAL WITH ATTACHED RING BELOW; R; DAL */
-  JOINING_TYPE_R, /* 068A; DAL WITH DOT BELOW; R; DAL */
-  JOINING_TYPE_R, /* 068B; DAL WITH DOT BELOW AND TAH ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 068C; DAL WITH 2 DOTS ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 068D; DAL WITH 2 DOTS BELOW; R; DAL */
-  JOINING_TYPE_R, /* 068E; DAL WITH 3 DOTS ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 068F; DAL WITH INVERTED 3 DOTS ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 0690; DAL WITH 4 DOTS ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 0691; REH WITH TAH ABOVE; R; REH */
-  JOINING_TYPE_R, /* 0692; REH WITH V ABOVE; R; REH */
-  JOINING_TYPE_R, /* 0693; REH WITH ATTACHED RING BELOW; R; REH */
-  JOINING_TYPE_R, /* 0694; REH WITH DOT BELOW; R; REH */
-  JOINING_TYPE_R, /* 0695; REH WITH V BELOW; R; REH */
-  JOINING_TYPE_R, /* 0696; REH WITH DOT BELOW AND DOT WITHIN; R; REH */
-  JOINING_TYPE_R, /* 0697; REH WITH 2 DOTS ABOVE; R; REH */
-  JOINING_TYPE_R, /* 0698; REH WITH 3 DOTS ABOVE; R; REH */
-  JOINING_TYPE_R, /* 0699; REH WITH 4 DOTS ABOVE; R; REH */
-  JOINING_TYPE_D, /* 069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 069B; SEEN WITH 3 DOTS BELOW; D; SEEN */
-  JOINING_TYPE_D, /* 069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 069D; SAD WITH 2 DOTS BELOW; D; SAD */
-  JOINING_TYPE_D, /* 069E; SAD WITH 3 DOTS ABOVE; D; SAD */
-  JOINING_TYPE_D, /* 069F; TAH WITH 3 DOTS ABOVE; D; TAH */
-  JOINING_TYPE_D, /* 06A0; AIN WITH 3 DOTS ABOVE; D; AIN */
-  JOINING_TYPE_D, /* 06A1; DOTLESS FEH; D; FEH */
-  JOINING_TYPE_D, /* 06A2; DOTLESS FEH WITH DOT BELOW; D; FEH */
-  JOINING_TYPE_D, /* 06A3; FEH WITH DOT BELOW; D; FEH */
-  JOINING_TYPE_D, /* 06A4; DOTLESS FEH WITH 3 DOTS ABOVE; D; FEH */
-  JOINING_TYPE_D, /* 06A5; DOTLESS FEH WITH 3 DOTS BELOW; D; FEH */
-  JOINING_TYPE_D, /* 06A6; DOTLESS FEH WITH 4 DOTS ABOVE; D; FEH */
-  JOINING_TYPE_D, /* 06A7; DOTLESS QAF WITH DOT ABOVE; D; QAF */
-  JOINING_TYPE_D, /* 06A8; DOTLESS QAF WITH 3 DOTS ABOVE; D; QAF */
-  JOINING_TYPE_D, /* 06A9; KEHEH; D; GAF */
-  JOINING_TYPE_D, /* 06AA; SWASH KAF; D; SWASH KAF */
-  JOINING_TYPE_D, /* 06AB; KEHEH WITH ATTACHED RING BELOW; D; GAF */
-  JOINING_TYPE_D, /* 06AC; KAF WITH DOT ABOVE; D; KAF */
-  JOINING_TYPE_D, /* 06AD; KAF WITH 3 DOTS ABOVE; D; KAF */
-  JOINING_TYPE_D, /* 06AE; KAF WITH 3 DOTS BELOW; D; KAF */
-  JOINING_TYPE_D, /* 06AF; GAF; D; GAF */
-  JOINING_TYPE_D, /* 06B0; GAF WITH ATTACHED RING BELOW; D; GAF */
-  JOINING_TYPE_D, /* 06B1; GAF WITH 2 DOTS ABOVE; D; GAF */
-  JOINING_TYPE_D, /* 06B2; GAF WITH 2 DOTS BELOW; D; GAF */
-  JOINING_TYPE_D, /* 06B3; GAF WITH VERTICAL 2 DOTS BELOW; D; GAF */
-  JOINING_TYPE_D, /* 06B4; GAF WITH 3 DOTS ABOVE; D; GAF */
-  JOINING_TYPE_D, /* 06B5; LAM WITH V ABOVE; D; LAM */
-  JOINING_TYPE_D, /* 06B6; LAM WITH DOT ABOVE; D; LAM */
-  JOINING_TYPE_D, /* 06B7; LAM WITH 3 DOTS ABOVE; D; LAM */
-  JOINING_TYPE_D, /* 06B8; LAM WITH 3 DOTS BELOW; D; LAM */
-  JOINING_TYPE_D, /* 06B9; NOON WITH DOT BELOW; D; NOON */
-  JOINING_TYPE_D, /* 06BA; DOTLESS NOON; D; NOON */
-  JOINING_TYPE_D, /* 06BB; DOTLESS NOON WITH TAH ABOVE; D; NOON */
-  JOINING_TYPE_D, /* 06BC; NOON WITH ATTACHED RING BELOW; D; NOON */
-  JOINING_TYPE_D, /* 06BD; NYA; D; NYA */
-  JOINING_TYPE_D, /* 06BE; KNOTTED HEH; D; KNOTTED HEH */
-  JOINING_TYPE_D, /* 06BF; HAH WITH 3 DOTS BELOW AND DOT ABOVE; D; HAH */
-  JOINING_TYPE_R, /* 06C0; DOTLESS TEH MARBUTA WITH HAMZA ABOVE; R; TEH MARBUTA */
-  JOINING_TYPE_D, /* 06C1; HEH GOAL; D; HEH GOAL */
-  JOINING_TYPE_D, /* 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL */
-  JOINING_TYPE_R, /* 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL */
-  JOINING_TYPE_R, /* 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW */
-  JOINING_TYPE_R, /* 06C5; WAW WITH BAR; R; WAW */
-  JOINING_TYPE_R, /* 06C6; WAW WITH V ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 06C7; WAW WITH DAMMA ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 06C8; WAW WITH ALEF ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 06C9; WAW WITH INVERTED V ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 06CA; WAW WITH 2 DOTS ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 06CB; WAW WITH 3 DOTS ABOVE; R; WAW */
-  JOINING_TYPE_D, /* 06CC; FARSI YEH; D; FARSI YEH */
-  JOINING_TYPE_R, /* 06CD; YEH WITH TAIL; R; YEH WITH TAIL */
-  JOINING_TYPE_D, /* 06CE; FARSI YEH WITH V ABOVE; D; FARSI YEH */
-  JOINING_TYPE_R, /* 06CF; WAW WITH DOT ABOVE; R; WAW */
-  JOINING_TYPE_D, /* 06D0; DOTLESS YEH WITH VERTICAL 2 DOTS BELOW; D; YEH */
-  JOINING_TYPE_D, /* 06D1; DOTLESS YEH WITH 3 DOTS BELOW; D; YEH */
-  JOINING_TYPE_R, /* 06D2; YEH BARREE; R; YEH BARREE */
-  JOINING_TYPE_R, /* 06D3; YEH BARREE WITH HAMZA ABOVE; R; YEH BARREE */
-  JOINING_TYPE_X, /* 06D4 */
-  JOINING_TYPE_R, /* 06D5; DOTLESS TEH MARBUTA; R; TEH MARBUTA */
-  JOINING_TYPE_X, /* 06D6 */
-  JOINING_TYPE_X, /* 06D7 */
-  JOINING_TYPE_X, /* 06D8 */
-  JOINING_TYPE_X, /* 06D9 */
-  JOINING_TYPE_X, /* 06DA */
-  JOINING_TYPE_X, /* 06DB */
-  JOINING_TYPE_X, /* 06DC */
-  JOINING_TYPE_U, /* 06DD; ARABIC END OF AYAH; U; No_Joining_Group */
-  JOINING_TYPE_X, /* 06DE */
-  JOINING_TYPE_X, /* 06DF */
-  JOINING_TYPE_X, /* 06E0 */
-  JOINING_TYPE_X, /* 06E1 */
-  JOINING_TYPE_X, /* 06E2 */
-  JOINING_TYPE_X, /* 06E3 */
-  JOINING_TYPE_X, /* 06E4 */
-  JOINING_TYPE_X, /* 06E5 */
-  JOINING_TYPE_X, /* 06E6 */
-  JOINING_TYPE_X, /* 06E7 */
-  JOINING_TYPE_X, /* 06E8 */
-  JOINING_TYPE_X, /* 06E9 */
-  JOINING_TYPE_X, /* 06EA */
-  JOINING_TYPE_X, /* 06EB */
-  JOINING_TYPE_X, /* 06EC */
-  JOINING_TYPE_X, /* 06ED */
-  JOINING_TYPE_R, /* 06EE; DAL WITH INVERTED V ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 06EF; REH WITH INVERTED V ABOVE; R; REH */
-  JOINING_TYPE_X, /* 06F0 */
-  JOINING_TYPE_X, /* 06F1 */
-  JOINING_TYPE_X, /* 06F2 */
-  JOINING_TYPE_X, /* 06F3 */
-  JOINING_TYPE_X, /* 06F4 */
-  JOINING_TYPE_X, /* 06F5 */
-  JOINING_TYPE_X, /* 06F6 */
-  JOINING_TYPE_X, /* 06F7 */
-  JOINING_TYPE_X, /* 06F8 */
-  JOINING_TYPE_X, /* 06F9 */
-  JOINING_TYPE_D, /* 06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 06FB; SAD WITH DOT BELOW AND DOT ABOVE; D; SAD */
-  JOINING_TYPE_D, /* 06FC; AIN WITH DOT BELOW AND DOT ABOVE; D; AIN */
-  JOINING_TYPE_X, /* 06FD */
-  JOINING_TYPE_X, /* 06FE */
-  JOINING_TYPE_D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */
-
-  /* Syriac Characters */
-
-  JOINING_TYPE_X, /* 0700 */
-  JOINING_TYPE_X, /* 0701 */
-  JOINING_TYPE_X, /* 0702 */
-  JOINING_TYPE_X, /* 0703 */
-  JOINING_TYPE_X, /* 0704 */
-  JOINING_TYPE_X, /* 0705 */
-  JOINING_TYPE_X, /* 0706 */
-  JOINING_TYPE_X, /* 0707 */
-  JOINING_TYPE_X, /* 0708 */
-  JOINING_TYPE_X, /* 0709 */
-  JOINING_TYPE_X, /* 070A */
-  JOINING_TYPE_X, /* 070B */
-  JOINING_TYPE_X, /* 070C */
-  JOINING_TYPE_X, /* 070D */
-  JOINING_TYPE_X, /* 070E */
-  JOINING_TYPE_X, /* 070F */
-  JOINING_GROUP_ALAPH, /* 0710; ALAPH; R; ALAPH */
-  JOINING_TYPE_X, /* 0711 */
-  JOINING_TYPE_D, /* 0712; BETH; D; BETH */
-  JOINING_TYPE_D, /* 0713; GAMAL; D; GAMAL */
-  JOINING_TYPE_D, /* 0714; GAMAL GARSHUNI; D; GAMAL */
-  JOINING_GROUP_DALATH_RISH, /* 0715; DALATH; R; DALATH RISH */
-  JOINING_GROUP_DALATH_RISH, /* 0716; DOTLESS DALATH RISH; R; DALATH RISH */
-  JOINING_TYPE_R, /* 0717; HE; R; HE */
-  JOINING_TYPE_R, /* 0718; WAW; R; SYRIAC WAW */
-  JOINING_TYPE_R, /* 0719; ZAIN; R; ZAIN */
-  JOINING_TYPE_D, /* 071A; HETH; D; HETH */
-  JOINING_TYPE_D, /* 071B; TETH; D; TETH */
-  JOINING_TYPE_D, /* 071C; TETH GARSHUNI; D; TETH */
-  JOINING_TYPE_D, /* 071D; YUDH; D; YUDH */
-  JOINING_TYPE_R, /* 071E; YUDH HE; R; YUDH HE */
-  JOINING_TYPE_D, /* 071F; KAPH; D; KAPH */
-  JOINING_TYPE_D, /* 0720; LAMADH; D; LAMADH */
-  JOINING_TYPE_D, /* 0721; MIM; D; MIM */
-  JOINING_TYPE_D, /* 0722; NUN; D; NUN */
-  JOINING_TYPE_D, /* 0723; SEMKATH; D; SEMKATH */
-  JOINING_TYPE_D, /* 0724; FINAL SEMKATH; D; FINAL SEMKATH */
-  JOINING_TYPE_D, /* 0725; E; D; E */
-  JOINING_TYPE_D, /* 0726; PE; D; PE */
-  JOINING_TYPE_D, /* 0727; REVERSED PE; D; REVERSED PE */
-  JOINING_TYPE_R, /* 0728; SADHE; R; SADHE */
-  JOINING_TYPE_D, /* 0729; QAPH; D; QAPH */
-  JOINING_GROUP_DALATH_RISH, /* 072A; RISH; R; DALATH RISH */
-  JOINING_TYPE_D, /* 072B; SHIN; D; SHIN */
-  JOINING_TYPE_R, /* 072C; TAW; R; TAW */
-  JOINING_TYPE_D, /* 072D; PERSIAN BHETH; D; BETH */
-  JOINING_TYPE_D, /* 072E; PERSIAN GHAMAL; D; GAMAL */
-  JOINING_GROUP_DALATH_RISH, /* 072F; PERSIAN DHALATH; R; DALATH RISH */
-  JOINING_TYPE_X, /* 0730 */
-  JOINING_TYPE_X, /* 0731 */
-  JOINING_TYPE_X, /* 0732 */
-  JOINING_TYPE_X, /* 0733 */
-  JOINING_TYPE_X, /* 0734 */
-  JOINING_TYPE_X, /* 0735 */
-  JOINING_TYPE_X, /* 0736 */
-  JOINING_TYPE_X, /* 0737 */
-  JOINING_TYPE_X, /* 0738 */
-  JOINING_TYPE_X, /* 0739 */
-  JOINING_TYPE_X, /* 073A */
-  JOINING_TYPE_X, /* 073B */
-  JOINING_TYPE_X, /* 073C */
-  JOINING_TYPE_X, /* 073D */
-  JOINING_TYPE_X, /* 073E */
-  JOINING_TYPE_X, /* 073F */
-  JOINING_TYPE_X, /* 0740 */
-  JOINING_TYPE_X, /* 0741 */
-  JOINING_TYPE_X, /* 0742 */
-  JOINING_TYPE_X, /* 0743 */
-  JOINING_TYPE_X, /* 0744 */
-  JOINING_TYPE_X, /* 0745 */
-  JOINING_TYPE_X, /* 0746 */
-  JOINING_TYPE_X, /* 0747 */
-  JOINING_TYPE_X, /* 0748 */
-  JOINING_TYPE_X, /* 0749 */
-  JOINING_TYPE_X, /* 074A */
-  JOINING_TYPE_X, /* 074B */
-  JOINING_TYPE_X, /* 074C */
-  JOINING_TYPE_R, /* 074D; SOGDIAN ZHAIN; R; ZHAIN */
-  JOINING_TYPE_D, /* 074E; SOGDIAN KHAPH; D; KHAPH */
-  JOINING_TYPE_D, /* 074F; SOGDIAN FE; D; FE */
-
-  /* Arabic Supplement Characters */
-
-  JOINING_TYPE_D, /* 0750; DOTLESS BEH WITH HORIZONTAL 3 DOTS BELOW; D; BEH */
-  JOINING_TYPE_D, /* 0751; BEH WITH 3 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 0752; DOTLESS BEH WITH INVERTED 3 DOTS BELOW; D; BEH */
-  JOINING_TYPE_D, /* 0753; DOTLESS BEH WITH INVERTED 3 DOTS BELOW AND 2 DOTS ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 0754; DOTLESS BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 0755; DOTLESS BEH WITH INVERTED V BELOW; D; BEH */
-  JOINING_TYPE_D, /* 0756; DOTLESS BEH WITH V ABOVE; D; BEH */
-  JOINING_TYPE_D, /* 0757; HAH WITH 2 DOTS ABOVE; D; HAH */
-  JOINING_TYPE_D, /* 0758; HAH WITH INVERTED 3 DOTS BELOW; D; HAH */
-  JOINING_TYPE_R, /* 0759; DAL WITH VERTICAL 2 DOTS BELOW AND TAH ABOVE; R; DAL */
-  JOINING_TYPE_R, /* 075A; DAL WITH INVERTED V BELOW; R; DAL */
-  JOINING_TYPE_R, /* 075B; REH WITH BAR; R; REH */
-  JOINING_TYPE_D, /* 075C; SEEN WITH 4 DOTS ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 075D; AIN WITH 2 DOTS ABOVE; D; AIN */
-  JOINING_TYPE_D, /* 075E; AIN WITH INVERTED 3 DOTS ABOVE; D; AIN */
-  JOINING_TYPE_D, /* 075F; AIN WITH VERTICAL 2 DOTS ABOVE; D; AIN */
-  JOINING_TYPE_D, /* 0760; DOTLESS FEH WITH 2 DOTS BELOW; D; FEH */
-  JOINING_TYPE_D, /* 0761; DOTLESS FEH WITH INVERTED 3 DOTS BELOW; D; FEH */
-  JOINING_TYPE_D, /* 0762; KEHEH WITH DOT ABOVE; D; GAF */
-  JOINING_TYPE_D, /* 0763; KEHEH WITH 3 DOTS ABOVE; D; GAF */
-  JOINING_TYPE_D, /* 0764; KEHEH WITH INVERTED 3 DOTS BELOW; D; GAF */
-  JOINING_TYPE_D, /* 0765; MEEM WITH DOT ABOVE; D; MEEM */
-  JOINING_TYPE_D, /* 0766; MEEM WITH DOT BELOW; D; MEEM */
-  JOINING_TYPE_D, /* 0767; NOON WITH 2 DOTS BELOW; D; NOON */
-  JOINING_TYPE_D, /* 0768; NOON WITH TAH ABOVE; D; NOON */
-  JOINING_TYPE_D, /* 0769; NOON WITH V ABOVE; D; NOON */
-  JOINING_TYPE_D, /* 076A; LAM WITH BAR; D; LAM */
-  JOINING_TYPE_R, /* 076B; REH WITH VERTICAL 2 DOTS ABOVE; R; REH */
-  JOINING_TYPE_R, /* 076C; REH WITH HAMZA ABOVE; R; REH */
-  JOINING_TYPE_D, /* 076D; SEEN WITH VERTICAL 2 DOTS ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 076E; HAH WITH TAH BELOW; D; HAH */
-  JOINING_TYPE_D, /* 076F; HAH WITH TAH AND 2 DOTS BELOW; D; HAH */
-  JOINING_TYPE_D, /* 0770; SEEN WITH 2 DOTS AND TAH ABOVE; D; SEEN */
-  JOINING_TYPE_R, /* 0771; REH WITH 2 DOTS AND TAH ABOVE; R; REH */
-  JOINING_TYPE_D, /* 0772; HAH WITH TAH ABOVE; D; HAH */
-  JOINING_TYPE_R, /* 0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF */
-  JOINING_TYPE_R, /* 0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF */
-  JOINING_TYPE_D, /* 0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH */
-  JOINING_TYPE_D, /* 0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH */
-  JOINING_TYPE_D, /* 0777; DOTLESS YEH WITH DIGIT FOUR BELOW; D; YEH */
-  JOINING_TYPE_R, /* 0778; WAW WITH DIGIT TWO ABOVE; R; WAW */
-  JOINING_TYPE_R, /* 0779; WAW WITH DIGIT THREE ABOVE; R; WAW */
-  JOINING_TYPE_D, /* 077A; BURUSHASKI YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE */
-  JOINING_TYPE_D, /* 077B; BURUSHASKI YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE */
-  JOINING_TYPE_D, /* 077C; HAH WITH DIGIT FOUR BELOW; D; HAH */
-  JOINING_TYPE_D, /* 077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */
-  JOINING_TYPE_D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */
-
-  /* N'Ko Characters */
-
-  JOINING_TYPE_X, /* 0780 */
-  JOINING_TYPE_X, /* 0781 */
-  JOINING_TYPE_X, /* 0782 */
-  JOINING_TYPE_X, /* 0783 */
-  JOINING_TYPE_X, /* 0784 */
-  JOINING_TYPE_X, /* 0785 */
-  JOINING_TYPE_X, /* 0786 */
-  JOINING_TYPE_X, /* 0787 */
-  JOINING_TYPE_X, /* 0788 */
-  JOINING_TYPE_X, /* 0789 */
-  JOINING_TYPE_X, /* 078A */
-  JOINING_TYPE_X, /* 078B */
-  JOINING_TYPE_X, /* 078C */
-  JOINING_TYPE_X, /* 078D */
-  JOINING_TYPE_X, /* 078E */
-  JOINING_TYPE_X, /* 078F */
-  JOINING_TYPE_X, /* 0790 */
-  JOINING_TYPE_X, /* 0791 */
-  JOINING_TYPE_X, /* 0792 */
-  JOINING_TYPE_X, /* 0793 */
-  JOINING_TYPE_X, /* 0794 */
-  JOINING_TYPE_X, /* 0795 */
-  JOINING_TYPE_X, /* 0796 */
-  JOINING_TYPE_X, /* 0797 */
-  JOINING_TYPE_X, /* 0798 */
-  JOINING_TYPE_X, /* 0799 */
-  JOINING_TYPE_X, /* 079A */
-  JOINING_TYPE_X, /* 079B */
-  JOINING_TYPE_X, /* 079C */
-  JOINING_TYPE_X, /* 079D */
-  JOINING_TYPE_X, /* 079E */
-  JOINING_TYPE_X, /* 079F */
-  JOINING_TYPE_X, /* 07A0 */
-  JOINING_TYPE_X, /* 07A1 */
-  JOINING_TYPE_X, /* 07A2 */
-  JOINING_TYPE_X, /* 07A3 */
-  JOINING_TYPE_X, /* 07A4 */
-  JOINING_TYPE_X, /* 07A5 */
-  JOINING_TYPE_X, /* 07A6 */
-  JOINING_TYPE_X, /* 07A7 */
-  JOINING_TYPE_X, /* 07A8 */
-  JOINING_TYPE_X, /* 07A9 */
-  JOINING_TYPE_X, /* 07AA */
-  JOINING_TYPE_X, /* 07AB */
-  JOINING_TYPE_X, /* 07AC */
-  JOINING_TYPE_X, /* 07AD */
-  JOINING_TYPE_X, /* 07AE */
-  JOINING_TYPE_X, /* 07AF */
-  JOINING_TYPE_X, /* 07B0 */
-  JOINING_TYPE_X, /* 07B1 */
-  JOINING_TYPE_X, /* 07B2 */
-  JOINING_TYPE_X, /* 07B3 */
-  JOINING_TYPE_X, /* 07B4 */
-  JOINING_TYPE_X, /* 07B5 */
-  JOINING_TYPE_X, /* 07B6 */
-  JOINING_TYPE_X, /* 07B7 */
-  JOINING_TYPE_X, /* 07B8 */
-  JOINING_TYPE_X, /* 07B9 */
-  JOINING_TYPE_X, /* 07BA */
-  JOINING_TYPE_X, /* 07BB */
-  JOINING_TYPE_X, /* 07BC */
-  JOINING_TYPE_X, /* 07BD */
-  JOINING_TYPE_X, /* 07BE */
-  JOINING_TYPE_X, /* 07BF */
-  JOINING_TYPE_X, /* 07C0 */
-  JOINING_TYPE_X, /* 07C1 */
-  JOINING_TYPE_X, /* 07C2 */
-  JOINING_TYPE_X, /* 07C3 */
-  JOINING_TYPE_X, /* 07C4 */
-  JOINING_TYPE_X, /* 07C5 */
-  JOINING_TYPE_X, /* 07C6 */
-  JOINING_TYPE_X, /* 07C7 */
-  JOINING_TYPE_X, /* 07C8 */
-  JOINING_TYPE_X, /* 07C9 */
-  JOINING_TYPE_D, /* 07CA; NKO A; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07CB; NKO EE; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07CC; NKO I; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07CD; NKO E; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07CE; NKO U; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07CF; NKO OO; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D0; NKO O; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D1; NKO DAGBASINNA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D2; NKO N; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D3; NKO BA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D4; NKO PA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D5; NKO TA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D6; NKO JA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D7; NKO CHA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D8; NKO DA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07D9; NKO RA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DA; NKO RRA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DB; NKO SA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DC; NKO GBA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DD; NKO FA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DE; NKO KA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07DF; NKO LA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E0; NKO NA WOLOSO; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E1; NKO MA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E2; NKO NYA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E3; NKO NA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E4; NKO HA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E5; NKO WA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E6; NKO YA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E7; NKO NYA WOLOSO; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E8; NKO JONA JA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07E9; NKO JONA CHA; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 07EA; NKO JONA RA; D; No_Joining_Group */
-  JOINING_TYPE_X, /* 07EB */
-  JOINING_TYPE_X, /* 07EC */
-  JOINING_TYPE_X, /* 07ED */
-  JOINING_TYPE_X, /* 07EE */
-  JOINING_TYPE_X, /* 07EF */
-  JOINING_TYPE_X, /* 07F0 */
-  JOINING_TYPE_X, /* 07F1 */
-  JOINING_TYPE_X, /* 07F2 */
-  JOINING_TYPE_X, /* 07F3 */
-  JOINING_TYPE_X, /* 07F4 */
-  JOINING_TYPE_X, /* 07F5 */
-  JOINING_TYPE_X, /* 07F6 */
-  JOINING_TYPE_X, /* 07F7 */
-  JOINING_TYPE_X, /* 07F8 */
-  JOINING_TYPE_X, /* 07F9 */
-  JOINING_TYPE_C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */
-
-  /* Mandaic Characters */
-
-  JOINING_TYPE_X, /* 07FB */
-  JOINING_TYPE_X, /* 07FC */
-  JOINING_TYPE_X, /* 07FD */
-  JOINING_TYPE_X, /* 07FE */
-  JOINING_TYPE_X, /* 07FF */
-  JOINING_TYPE_X, /* 0800 */
-  JOINING_TYPE_X, /* 0801 */
-  JOINING_TYPE_X, /* 0802 */
-  JOINING_TYPE_X, /* 0803 */
-  JOINING_TYPE_X, /* 0804 */
-  JOINING_TYPE_X, /* 0805 */
-  JOINING_TYPE_X, /* 0806 */
-  JOINING_TYPE_X, /* 0807 */
-  JOINING_TYPE_X, /* 0808 */
-  JOINING_TYPE_X, /* 0809 */
-  JOINING_TYPE_X, /* 080A */
-  JOINING_TYPE_X, /* 080B */
-  JOINING_TYPE_X, /* 080C */
-  JOINING_TYPE_X, /* 080D */
-  JOINING_TYPE_X, /* 080E */
-  JOINING_TYPE_X, /* 080F */
-  JOINING_TYPE_X, /* 0810 */
-  JOINING_TYPE_X, /* 0811 */
-  JOINING_TYPE_X, /* 0812 */
-  JOINING_TYPE_X, /* 0813 */
-  JOINING_TYPE_X, /* 0814 */
-  JOINING_TYPE_X, /* 0815 */
-  JOINING_TYPE_X, /* 0816 */
-  JOINING_TYPE_X, /* 0817 */
-  JOINING_TYPE_X, /* 0818 */
-  JOINING_TYPE_X, /* 0819 */
-  JOINING_TYPE_X, /* 081A */
-  JOINING_TYPE_X, /* 081B */
-  JOINING_TYPE_X, /* 081C */
-  JOINING_TYPE_X, /* 081D */
-  JOINING_TYPE_X, /* 081E */
-  JOINING_TYPE_X, /* 081F */
-  JOINING_TYPE_X, /* 0820 */
-  JOINING_TYPE_X, /* 0821 */
-  JOINING_TYPE_X, /* 0822 */
-  JOINING_TYPE_X, /* 0823 */
-  JOINING_TYPE_X, /* 0824 */
-  JOINING_TYPE_X, /* 0825 */
-  JOINING_TYPE_X, /* 0826 */
-  JOINING_TYPE_X, /* 0827 */
-  JOINING_TYPE_X, /* 0828 */
-  JOINING_TYPE_X, /* 0829 */
-  JOINING_TYPE_X, /* 082A */
-  JOINING_TYPE_X, /* 082B */
-  JOINING_TYPE_X, /* 082C */
-  JOINING_TYPE_X, /* 082D */
-  JOINING_TYPE_X, /* 082E */
-  JOINING_TYPE_X, /* 082F */
-  JOINING_TYPE_X, /* 0830 */
-  JOINING_TYPE_X, /* 0831 */
-  JOINING_TYPE_X, /* 0832 */
-  JOINING_TYPE_X, /* 0833 */
-  JOINING_TYPE_X, /* 0834 */
-  JOINING_TYPE_X, /* 0835 */
-  JOINING_TYPE_X, /* 0836 */
-  JOINING_TYPE_X, /* 0837 */
-  JOINING_TYPE_X, /* 0838 */
-  JOINING_TYPE_X, /* 0839 */
-  JOINING_TYPE_X, /* 083A */
-  JOINING_TYPE_X, /* 083B */
-  JOINING_TYPE_X, /* 083C */
-  JOINING_TYPE_X, /* 083D */
-  JOINING_TYPE_X, /* 083E */
-  JOINING_TYPE_X, /* 083F */
-  JOINING_TYPE_R, /* 0840; MANDAIC HALQA; R; No_Joining_Group */
-  JOINING_TYPE_D, /* 0841; MANDAIC AB; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0842; MANDAIC AG; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0843; MANDAIC AD; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0844; MANDAIC AH; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0845; MANDAIC USHENNA; D; No_Joining_Group */
-  JOINING_TYPE_R, /* 0846; MANDAIC AZ; R; No_Joining_Group */
-  JOINING_TYPE_D, /* 0847; MANDAIC IT; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0848; MANDAIC ATT; D; No_Joining_Group */
-  JOINING_TYPE_R, /* 0849; MANDAIC AKSA; R; No_Joining_Group */
-  JOINING_TYPE_D, /* 084A; MANDAIC AK; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 084B; MANDAIC AL; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 084C; MANDAIC AM; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 084D; MANDAIC AN; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 084E; MANDAIC AS; D; No_Joining_Group */
-  JOINING_TYPE_R, /* 084F; MANDAIC IN; R; No_Joining_Group */
-  JOINING_TYPE_D, /* 0850; MANDAIC AP; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0851; MANDAIC ASZ; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0852; MANDAIC AQ; D; No_Joining_Group */
-  JOINING_TYPE_D, /* 0853; MANDAIC AR; D; No_Joining_Group */
-  JOINING_TYPE_R, /* 0854; MANDAIC ASH; R; No_Joining_Group */
-  JOINING_TYPE_D, /* 0855; MANDAIC AT; D; No_Joining_Group */
-  JOINING_TYPE_U, /* 0856; MANDAIC DUSHENNA; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0857; MANDAIC KAD; U; No_Joining_Group */
-  JOINING_TYPE_U, /* 0858; MANDAIC AIN; U; No_Joining_Group */
-
-  /* Arabic Extended-A Characters */
-
-  JOINING_TYPE_X, /* 0859 */
-  JOINING_TYPE_X, /* 085A */
-  JOINING_TYPE_X, /* 085B */
-  JOINING_TYPE_X, /* 085C */
-  JOINING_TYPE_X, /* 085D */
-  JOINING_TYPE_X, /* 085E */
-  JOINING_TYPE_X, /* 085F */
-  JOINING_TYPE_X, /* 0860 */
-  JOINING_TYPE_X, /* 0861 */
-  JOINING_TYPE_X, /* 0862 */
-  JOINING_TYPE_X, /* 0863 */
-  JOINING_TYPE_X, /* 0864 */
-  JOINING_TYPE_X, /* 0865 */
-  JOINING_TYPE_X, /* 0866 */
-  JOINING_TYPE_X, /* 0867 */
-  JOINING_TYPE_X, /* 0868 */
-  JOINING_TYPE_X, /* 0869 */
-  JOINING_TYPE_X, /* 086A */
-  JOINING_TYPE_X, /* 086B */
-  JOINING_TYPE_X, /* 086C */
-  JOINING_TYPE_X, /* 086D */
-  JOINING_TYPE_X, /* 086E */
-  JOINING_TYPE_X, /* 086F */
-  JOINING_TYPE_X, /* 0870 */
-  JOINING_TYPE_X, /* 0871 */
-  JOINING_TYPE_X, /* 0872 */
-  JOINING_TYPE_X, /* 0873 */
-  JOINING_TYPE_X, /* 0874 */
-  JOINING_TYPE_X, /* 0875 */
-  JOINING_TYPE_X, /* 0876 */
-  JOINING_TYPE_X, /* 0877 */
-  JOINING_TYPE_X, /* 0878 */
-  JOINING_TYPE_X, /* 0879 */
-  JOINING_TYPE_X, /* 087A */
-  JOINING_TYPE_X, /* 087B */
-  JOINING_TYPE_X, /* 087C */
-  JOINING_TYPE_X, /* 087D */
-  JOINING_TYPE_X, /* 087E */
-  JOINING_TYPE_X, /* 087F */
-  JOINING_TYPE_X, /* 0880 */
-  JOINING_TYPE_X, /* 0881 */
-  JOINING_TYPE_X, /* 0882 */
-  JOINING_TYPE_X, /* 0883 */
-  JOINING_TYPE_X, /* 0884 */
-  JOINING_TYPE_X, /* 0885 */
-  JOINING_TYPE_X, /* 0886 */
-  JOINING_TYPE_X, /* 0887 */
-  JOINING_TYPE_X, /* 0888 */
-  JOINING_TYPE_X, /* 0889 */
-  JOINING_TYPE_X, /* 088A */
-  JOINING_TYPE_X, /* 088B */
-  JOINING_TYPE_X, /* 088C */
-  JOINING_TYPE_X, /* 088D */
-  JOINING_TYPE_X, /* 088E */
-  JOINING_TYPE_X, /* 088F */
-  JOINING_TYPE_X, /* 0890 */
-  JOINING_TYPE_X, /* 0891 */
-  JOINING_TYPE_X, /* 0892 */
-  JOINING_TYPE_X, /* 0893 */
-  JOINING_TYPE_X, /* 0894 */
-  JOINING_TYPE_X, /* 0895 */
-  JOINING_TYPE_X, /* 0896 */
-  JOINING_TYPE_X, /* 0897 */
-  JOINING_TYPE_X, /* 0898 */
-  JOINING_TYPE_X, /* 0899 */
-  JOINING_TYPE_X, /* 089A */
-  JOINING_TYPE_X, /* 089B */
-  JOINING_TYPE_X, /* 089C */
-  JOINING_TYPE_X, /* 089D */
-  JOINING_TYPE_X, /* 089E */
-  JOINING_TYPE_X, /* 089F */
-  JOINING_TYPE_D, /* 08A0; DOTLESS BEH WITH V BELOW; D; BEH */
-  JOINING_TYPE_X, /* 08A1 */
-  JOINING_TYPE_D, /* 08A2; HAH WITH DOT BELOW AND 2 DOTS ABOVE; D; HAH */
-  JOINING_TYPE_D, /* 08A3; TAH WITH 2 DOTS ABOVE; D; TAH */
-  JOINING_TYPE_D, /* 08A4; DOTLESS FEH WITH DOT BELOW AND 3 DOTS ABOVE; D; FEH */
-  JOINING_TYPE_D, /* 08A5; QAF WITH DOT BELOW; D; QAF */
-  JOINING_TYPE_D, /* 08A6; LAM WITH DOUBLE BAR; D; LAM */
-  JOINING_TYPE_D, /* 08A7; MEEM WITH 3 DOTS ABOVE; D; MEEM */
-  JOINING_TYPE_D, /* 08A8; YEH WITH HAMZA ABOVE; D; YEH */
-  JOINING_TYPE_D, /* 08A9; YEH WITH DOT ABOVE; D; YEH */
-  JOINING_TYPE_R, /* 08AA; REH WITH LOOP; R; REH */
-  JOINING_TYPE_R, /* 08AB; WAW WITH DOT WITHIN; R; WAW */
-  JOINING_TYPE_R, /* 08AC; ROHINGYA YEH; R; ROHINGYA YEH */
+#define joining_offset_0x0600u 0
 
 
-};
+  /* Arabic */
+
+  /* 0600 */ U,U,U,U,U,U,X,X,U,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 0620 */ D,U,R,R,R,R,D,R,D,R,D,D,D,D,D,R,R,R,R,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 0640 */ C,D,D,D,D,D,D,D,R,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 0660 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,D,D,X,R,R,R,U,R,R,R,D,D,D,D,D,D,D,D,
+  /* 0680 */ D,D,D,D,D,D,D,D,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,
+  /* 06A0 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 06C0 */ R,D,D,R,R,R,R,R,R,R,R,R,D,R,D,R,D,D,R,R,X,R,X,X,X,X,X,X,X,U,X,X,
+  /* 06E0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,R,R,X,X,X,X,X,X,X,X,X,X,D,D,D,X,X,D,
+
+  /* Syriac */
+
+  /* 0700 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,A,X,D,D,D,DR,DR,R,R,R,D,D,D,D,R,D,
+  /* 0720 */ D,D,D,D,D,D,D,D,R,D,DR,D,R,D,D,DR,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 0740 */ X,X,X,X,X,X,X,X,X,X,X,X,X,R,D,D,
+
+  /* Arabic Supplement */
+
+  /* 0740 */                                 D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
+  /* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
+
+  /* FILLER */
+
+  /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+  /* NKo */
+
+  /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
+
+  /* FILLER */
+
+  /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+  /* Mandaic */
+
+  /* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
+  /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+  /* Arabic Extended-A */
+
+  /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,
+
+#define joining_offset_0x1806u 691
+
+  /* Mongolian */
+
+  /* 1800 */             U,D,X,X,C,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 1820 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 1840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 1860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,
+  /* 1880 */ U,U,U,U,U,U,U,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
+
+#define joining_offset_0x200cu 856
+
+  /* General Punctuation */
+
+  /* 2000 */                         U,C,
+
+#define joining_offset_0x2066u 858
+
+  /* General Punctuation */
+
+  /* 2060 */             U,U,U,U,
+
+#define joining_offset_0xa840u 862
+
+  /* Phags-pa */
+
+  /* A840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* A860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
+
+#define joining_offset_0x10ac0u 914
+
+  /* Manichaean */
+
+  /* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
+  /* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
+
+#define joining_offset_0x10b80u 962
+
+  /* Psalter Pahlavi */
+
+  /* 10B80 */ D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
+
+}; /* Table items: 1010; occupancy: 57% */
+
+
+static unsigned int
+joining_type (hb_codepoint_t u)
+{
+  switch (u >> 12)
+  {
+    case 0x0u:
+      if (hb_in_range (u, 0x0600u, 0x08B2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
+      break;
+
+    case 0x1u:
+      if (hb_in_range (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
+      break;
+
+    case 0x2u:
+      if (hb_in_range (u, 0x200Cu, 0x200Du)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
+      if (hb_in_range (u, 0x2066u, 0x2069u)) return joining_table[u - 0x2066u + joining_offset_0x2066u];
+      break;
+
+    case 0xAu:
+      if (hb_in_range (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
+      break;
+
+    case 0x10u:
+      if (hb_in_range (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
+      if (hb_in_range (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
+      break;
+
+    default:
+      break;
+  }
+  return X;
+}
 
 
-#define JOINING_TABLE_FIRST    0x0600
-#define JOINING_TABLE_LAST     0x08AC
+#undef X
+#undef R
+#undef U
+#undef A
+#undef DR
+#undef L
+#undef C
+#undef D
 
 
 static const uint16_t shaping_table[][4] =
 {
 
 
 static const uint16_t shaping_table[][4] =
 {
-  {0x0000, 0x0000, 0x0000, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
-  {0x0000, 0x0000, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
-  {0x0000, 0x0000, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  {0x0000, 0x0000, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
-  {0x0000, 0x0000, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
-  {0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
-  {0x0000, 0x0000, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
-  {0xFE91, 0xFE92, 0xFE90, 0xFE8F}, /* U+0628 ARABIC LETTER BEH */
-  {0x0000, 0x0000, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
-  {0xFE97, 0xFE98, 0xFE96, 0xFE95}, /* U+062A ARABIC LETTER TEH */
-  {0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, /* U+062B ARABIC LETTER THEH */
-  {0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, /* U+062C ARABIC LETTER JEEM */
-  {0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, /* U+062D ARABIC LETTER HAH */
-  {0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, /* U+062E ARABIC LETTER KHAH */
-  {0x0000, 0x0000, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
-  {0x0000, 0x0000, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
-  {0x0000, 0x0000, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
-  {0x0000, 0x0000, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
-  {0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, /* U+0633 ARABIC LETTER SEEN */
-  {0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, /* U+0634 ARABIC LETTER SHEEN */
-  {0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, /* U+0635 ARABIC LETTER SAD */
-  {0xFEBF, 0xFEC0, 0xFEBE, 0xFEBD}, /* U+0636 ARABIC LETTER DAD */
-  {0xFEC3, 0xFEC4, 0xFEC2, 0xFEC1}, /* U+0637 ARABIC LETTER TAH */
-  {0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, /* U+0638 ARABIC LETTER ZAH */
-  {0xFECB, 0xFECC, 0xFECA, 0xFEC9}, /* U+0639 ARABIC LETTER AIN */
-  {0xFECF, 0xFED0, 0xFECE, 0xFECD}, /* U+063A ARABIC LETTER GHAIN */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063B  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063D  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063E  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0640  */
-  {0xFED3, 0xFED4, 0xFED2, 0xFED1}, /* U+0641 ARABIC LETTER FEH */
-  {0xFED7, 0xFED8, 0xFED6, 0xFED5}, /* U+0642 ARABIC LETTER QAF */
-  {0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, /* U+0643 ARABIC LETTER KAF */
-  {0xFEDF, 0xFEE0, 0xFEDE, 0xFEDD}, /* U+0644 ARABIC LETTER LAM */
-  {0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, /* U+0645 ARABIC LETTER MEEM */
-  {0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, /* U+0646 ARABIC LETTER NOON */
-  {0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, /* U+0647 ARABIC LETTER HEH */
-  {0x0000, 0x0000, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
-  {0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, /* U+0649 ARABIC LETTER */
-  {0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, /* U+064A ARABIC LETTER YEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064B  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064D  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064E  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0650  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0651  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0652  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0653  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0654  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0655  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0656  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0657  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0658  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0659  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065A  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065B  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065D  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065E  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0660  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0661  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0662  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0663  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0664  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0665  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0666  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0667  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0668  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0669  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066A  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066B  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066D  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066E  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0670  */
-  {0x0000, 0x0000, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0672  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0673  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0674  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0675  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0676  */
-  {0x0000, 0x0000, 0x0000, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0678  */
-  {0xFB68, 0xFB69, 0xFB67, 0xFB66}, /* U+0679 ARABIC LETTER TTEH */
-  {0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, /* U+067A ARABIC LETTER TTEHEH */
-  {0xFB54, 0xFB55, 0xFB53, 0xFB52}, /* U+067B ARABIC LETTER BEEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067D  */
-  {0xFB58, 0xFB59, 0xFB57, 0xFB56}, /* U+067E ARABIC LETTER PEH */
-  {0xFB64, 0xFB65, 0xFB63, 0xFB62}, /* U+067F ARABIC LETTER TEHEH */
-  {0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, /* U+0680 ARABIC LETTER BEHEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0681  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0682  */
-  {0xFB78, 0xFB79, 0xFB77, 0xFB76}, /* U+0683 ARABIC LETTER NYEH */
-  {0xFB74, 0xFB75, 0xFB73, 0xFB72}, /* U+0684 ARABIC LETTER DYEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0685  */
-  {0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, /* U+0686 ARABIC LETTER TCHEH */
-  {0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, /* U+0687 ARABIC LETTER TCHEHEH */
-  {0x0000, 0x0000, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0689  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068A  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068B  */
-  {0x0000, 0x0000, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
-  {0x0000, 0x0000, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
-  {0x0000, 0x0000, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0690  */
-  {0x0000, 0x0000, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0692  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0693  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0694  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0695  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0696  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0697  */
-  {0x0000, 0x0000, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0699  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069A  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069B  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069C  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069D  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069E  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069F  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A0  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A1  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A2  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A3  */
-  {0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, /* U+06A4 ARABIC LETTER VEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A5  */
-  {0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, /* U+06A6 ARABIC LETTER PEHEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A7  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A8  */
-  {0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, /* U+06A9 ARABIC LETTER KEHEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AA  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AB  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AC  */
-  {0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, /* U+06AD ARABIC LETTER NG */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AE  */
-  {0xFB94, 0xFB95, 0xFB93, 0xFB92}, /* U+06AF ARABIC LETTER GAF */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B0  */
-  {0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, /* U+06B1 ARABIC LETTER NGOEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B2  */
-  {0xFB98, 0xFB99, 0xFB97, 0xFB96}, /* U+06B3 ARABIC LETTER GUEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B4  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B5  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B6  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B7  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B8  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B9  */
-  {0x0000, 0x0000, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
-  {0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, /* U+06BB ARABIC LETTER RNOON */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BC  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BD  */
-  {0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BF  */
-  {0x0000, 0x0000, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
-  {0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, /* U+06C1 ARABIC LETTER HEH GOAL */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C2  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C3  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C4  */
-  {0x0000, 0x0000, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
-  {0x0000, 0x0000, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
-  {0x0000, 0x0000, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
-  {0x0000, 0x0000, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
-  {0x0000, 0x0000, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CA  */
-  {0x0000, 0x0000, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
-  {0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, /* U+06CC ARABIC LETTER FARSI YEH */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CD  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CE  */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CF  */
-  {0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, /* U+06D0 ARABIC LETTER E */
-  {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06D1  */
-  {0x0000, 0x0000, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
-  {0x0000, 0x0000, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
+  {0x0000u, 0x0000u, 0x0000u, 0xFE80u}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
+  {0x0000u, 0x0000u, 0xFE82u, 0xFE81u}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
+  {0x0000u, 0x0000u, 0xFE84u, 0xFE83u}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
+  {0x0000u, 0x0000u, 0xFE86u, 0xFE85u}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
+  {0x0000u, 0x0000u, 0xFE88u, 0xFE87u}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
+  {0xFE8Bu, 0xFE8Cu, 0xFE8Au, 0xFE89u}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
+  {0x0000u, 0x0000u, 0xFE8Eu, 0xFE8Du}, /* U+0627 ARABIC LETTER ALEF */
+  {0xFE91u, 0xFE92u, 0xFE90u, 0xFE8Fu}, /* U+0628 ARABIC LETTER BEH */
+  {0x0000u, 0x0000u, 0xFE94u, 0xFE93u}, /* U+0629 ARABIC LETTER TEH MARBUTA */
+  {0xFE97u, 0xFE98u, 0xFE96u, 0xFE95u}, /* U+062A ARABIC LETTER TEH */
+  {0xFE9Bu, 0xFE9Cu, 0xFE9Au, 0xFE99u}, /* U+062B ARABIC LETTER THEH */
+  {0xFE9Fu, 0xFEA0u, 0xFE9Eu, 0xFE9Du}, /* U+062C ARABIC LETTER JEEM */
+  {0xFEA3u, 0xFEA4u, 0xFEA2u, 0xFEA1u}, /* U+062D ARABIC LETTER HAH */
+  {0xFEA7u, 0xFEA8u, 0xFEA6u, 0xFEA5u}, /* U+062E ARABIC LETTER KHAH */
+  {0x0000u, 0x0000u, 0xFEAAu, 0xFEA9u}, /* U+062F ARABIC LETTER DAL */
+  {0x0000u, 0x0000u, 0xFEACu, 0xFEABu}, /* U+0630 ARABIC LETTER THAL */
+  {0x0000u, 0x0000u, 0xFEAEu, 0xFEADu}, /* U+0631 ARABIC LETTER REH */
+  {0x0000u, 0x0000u, 0xFEB0u, 0xFEAFu}, /* U+0632 ARABIC LETTER ZAIN */
+  {0xFEB3u, 0xFEB4u, 0xFEB2u, 0xFEB1u}, /* U+0633 ARABIC LETTER SEEN */
+  {0xFEB7u, 0xFEB8u, 0xFEB6u, 0xFEB5u}, /* U+0634 ARABIC LETTER SHEEN */
+  {0xFEBBu, 0xFEBCu, 0xFEBAu, 0xFEB9u}, /* U+0635 ARABIC LETTER SAD */
+  {0xFEBFu, 0xFEC0u, 0xFEBEu, 0xFEBDu}, /* U+0636 ARABIC LETTER DAD */
+  {0xFEC3u, 0xFEC4u, 0xFEC2u, 0xFEC1u}, /* U+0637 ARABIC LETTER TAH */
+  {0xFEC7u, 0xFEC8u, 0xFEC6u, 0xFEC5u}, /* U+0638 ARABIC LETTER ZAH */
+  {0xFECBu, 0xFECCu, 0xFECAu, 0xFEC9u}, /* U+0639 ARABIC LETTER AIN */
+  {0xFECFu, 0xFED0u, 0xFECEu, 0xFECDu}, /* U+063A ARABIC LETTER GHAIN */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063B  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063D  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063E  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0640  */
+  {0xFED3u, 0xFED4u, 0xFED2u, 0xFED1u}, /* U+0641 ARABIC LETTER FEH */
+  {0xFED7u, 0xFED8u, 0xFED6u, 0xFED5u}, /* U+0642 ARABIC LETTER QAF */
+  {0xFEDBu, 0xFEDCu, 0xFEDAu, 0xFED9u}, /* U+0643 ARABIC LETTER KAF */
+  {0xFEDFu, 0xFEE0u, 0xFEDEu, 0xFEDDu}, /* U+0644 ARABIC LETTER LAM */
+  {0xFEE3u, 0xFEE4u, 0xFEE2u, 0xFEE1u}, /* U+0645 ARABIC LETTER MEEM */
+  {0xFEE7u, 0xFEE8u, 0xFEE6u, 0xFEE5u}, /* U+0646 ARABIC LETTER NOON */
+  {0xFEEBu, 0xFEECu, 0xFEEAu, 0xFEE9u}, /* U+0647 ARABIC LETTER HEH */
+  {0x0000u, 0x0000u, 0xFEEEu, 0xFEEDu}, /* U+0648 ARABIC LETTER WAW */
+  {0xFBE8u, 0xFBE9u, 0xFEF0u, 0xFEEFu}, /* U+0649 ARABIC LETTER */
+  {0xFEF3u, 0xFEF4u, 0xFEF2u, 0xFEF1u}, /* U+064A ARABIC LETTER YEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064B  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064D  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064E  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0650  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0651  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0652  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0653  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0654  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0655  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0656  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0657  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0658  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0659  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065A  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065B  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065D  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065E  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0660  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0661  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0662  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0663  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0664  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0665  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0666  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0667  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0668  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0669  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066A  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066B  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066D  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066E  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0670  */
+  {0x0000u, 0x0000u, 0xFB51u, 0xFB50u}, /* U+0671 ARABIC LETTER ALEF WASLA */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0672  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0673  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0674  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0675  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0676  */
+  {0x0000u, 0x0000u, 0x0000u, 0xFBDDu}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0678  */
+  {0xFB68u, 0xFB69u, 0xFB67u, 0xFB66u}, /* U+0679 ARABIC LETTER TTEH */
+  {0xFB60u, 0xFB61u, 0xFB5Fu, 0xFB5Eu}, /* U+067A ARABIC LETTER TTEHEH */
+  {0xFB54u, 0xFB55u, 0xFB53u, 0xFB52u}, /* U+067B ARABIC LETTER BEEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+067C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+067D  */
+  {0xFB58u, 0xFB59u, 0xFB57u, 0xFB56u}, /* U+067E ARABIC LETTER PEH */
+  {0xFB64u, 0xFB65u, 0xFB63u, 0xFB62u}, /* U+067F ARABIC LETTER TEHEH */
+  {0xFB5Cu, 0xFB5Du, 0xFB5Bu, 0xFB5Au}, /* U+0680 ARABIC LETTER BEHEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0681  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0682  */
+  {0xFB78u, 0xFB79u, 0xFB77u, 0xFB76u}, /* U+0683 ARABIC LETTER NYEH */
+  {0xFB74u, 0xFB75u, 0xFB73u, 0xFB72u}, /* U+0684 ARABIC LETTER DYEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0685  */
+  {0xFB7Cu, 0xFB7Du, 0xFB7Bu, 0xFB7Au}, /* U+0686 ARABIC LETTER TCHEH */
+  {0xFB80u, 0xFB81u, 0xFB7Fu, 0xFB7Eu}, /* U+0687 ARABIC LETTER TCHEHEH */
+  {0x0000u, 0x0000u, 0xFB89u, 0xFB88u}, /* U+0688 ARABIC LETTER DDAL */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0689  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068A  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068B  */
+  {0x0000u, 0x0000u, 0xFB85u, 0xFB84u}, /* U+068C ARABIC LETTER DAHAL */
+  {0x0000u, 0x0000u, 0xFB83u, 0xFB82u}, /* U+068D ARABIC LETTER DDAHAL */
+  {0x0000u, 0x0000u, 0xFB87u, 0xFB86u}, /* U+068E ARABIC LETTER DUL */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0690  */
+  {0x0000u, 0x0000u, 0xFB8Du, 0xFB8Cu}, /* U+0691 ARABIC LETTER RREH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0692  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0693  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0694  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0695  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0696  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0697  */
+  {0x0000u, 0x0000u, 0xFB8Bu, 0xFB8Au}, /* U+0698 ARABIC LETTER JEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0699  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069A  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069B  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069C  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069D  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069E  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069F  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A0  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A1  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A2  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A3  */
+  {0xFB6Cu, 0xFB6Du, 0xFB6Bu, 0xFB6Au}, /* U+06A4 ARABIC LETTER VEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A5  */
+  {0xFB70u, 0xFB71u, 0xFB6Fu, 0xFB6Eu}, /* U+06A6 ARABIC LETTER PEHEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A7  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A8  */
+  {0xFB90u, 0xFB91u, 0xFB8Fu, 0xFB8Eu}, /* U+06A9 ARABIC LETTER KEHEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AA  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AB  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AC  */
+  {0xFBD5u, 0xFBD6u, 0xFBD4u, 0xFBD3u}, /* U+06AD ARABIC LETTER NG */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AE  */
+  {0xFB94u, 0xFB95u, 0xFB93u, 0xFB92u}, /* U+06AF ARABIC LETTER GAF */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B0  */
+  {0xFB9Cu, 0xFB9Du, 0xFB9Bu, 0xFB9Au}, /* U+06B1 ARABIC LETTER NGOEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B2  */
+  {0xFB98u, 0xFB99u, 0xFB97u, 0xFB96u}, /* U+06B3 ARABIC LETTER GUEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B4  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B5  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B6  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B7  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B8  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B9  */
+  {0x0000u, 0x0000u, 0xFB9Fu, 0xFB9Eu}, /* U+06BA ARABIC LETTER NOON GHUNNA */
+  {0xFBA2u, 0xFBA3u, 0xFBA1u, 0xFBA0u}, /* U+06BB ARABIC LETTER RNOON */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BC  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BD  */
+  {0xFBACu, 0xFBADu, 0xFBABu, 0xFBAAu}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BF  */
+  {0x0000u, 0x0000u, 0xFBA5u, 0xFBA4u}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
+  {0xFBA8u, 0xFBA9u, 0xFBA7u, 0xFBA6u}, /* U+06C1 ARABIC LETTER HEH GOAL */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C2  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C3  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C4  */
+  {0x0000u, 0x0000u, 0xFBE1u, 0xFBE0u}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
+  {0x0000u, 0x0000u, 0xFBDAu, 0xFBD9u}, /* U+06C6 ARABIC LETTER OE */
+  {0x0000u, 0x0000u, 0xFBD8u, 0xFBD7u}, /* U+06C7 ARABIC LETTER U */
+  {0x0000u, 0x0000u, 0xFBDCu, 0xFBDBu}, /* U+06C8 ARABIC LETTER YU */
+  {0x0000u, 0x0000u, 0xFBE3u, 0xFBE2u}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CA  */
+  {0x0000u, 0x0000u, 0xFBDFu, 0xFBDEu}, /* U+06CB ARABIC LETTER VE */
+  {0xFBFEu, 0xFBFFu, 0xFBFDu, 0xFBFCu}, /* U+06CC ARABIC LETTER FARSI YEH */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CD  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CE  */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CF  */
+  {0xFBE6u, 0xFBE7u, 0xFBE5u, 0xFBE4u}, /* U+06D0 ARABIC LETTER E */
+  {0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06D1  */
+  {0x0000u, 0x0000u, 0xFBAFu, 0xFBAEu}, /* U+06D2 ARABIC LETTER YEH BARREE */
+  {0x0000u, 0x0000u, 0xFBB1u, 0xFBB0u}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
 };
 
 };
 
-#define SHAPING_TABLE_FIRST    0x0621
-#define SHAPING_TABLE_LAST     0x06D3
+#define SHAPING_TABLE_FIRST    0x0621u
+#define SHAPING_TABLE_LAST     0x06D3u
 
 
 static const struct ligature_set_t {
 
 
 static const struct ligature_set_t {
@@ -922,17 +363,17 @@ static const struct ligature_set_t {
  } ligatures[4];
 } ligature_table[] =
 {
  } ligatures[4];
 } ligature_table[] =
 {
-  { 0xFEDF, {
-    { 0xFE88, 0xFEF9 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
-    { 0xFE82, 0xFEF5 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
-    { 0xFE8E, 0xFEFB }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
-    { 0xFE84, 0xFEF7 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
+  { 0xFEDFu, {
+    { 0xFE88u, 0xFEF9u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
+    { 0xFE82u, 0xFEF5u }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
+    { 0xFE8Eu, 0xFEFBu }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
+    { 0xFE84u, 0xFEF7u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
   }},
   }},
-  { 0xFEE0, {
-    { 0xFE88, 0xFEFA }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
-    { 0xFE82, 0xFEF6 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
-    { 0xFE8E, 0xFEFC }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
-    { 0xFE84, 0xFEF8 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
+  { 0xFEE0u, {
+    { 0xFE88u, 0xFEFAu }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
+    { 0xFE82u, 0xFEF6u }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
+    { 0xFE8Eu, 0xFEFCu }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
+    { 0xFE84u, 0xFEF8u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
   }},
 };
 
   }},
 };
 
diff --git a/src/hb-ot-shape-complex-arabic-win1256.hh b/src/hb-ot-shape-complex-arabic-win1256.hh
new file mode 100644 (file)
index 0000000..63ed3f8
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+ * Copyright © 2014  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_ARABIC_WIN1256_HH
+
+
+/*
+ * The macros in the first part of this file are generic macros that can
+ * be used to define the bytes for OpenType table data in code in a
+ * readable manner.  We can move the macros to reside with their respective
+ * struct types, but since we only use these to define one data table, the
+ * Windows-1256 Arabic shaping table in this file, we keep them here.
+ */
+
+
+/* First we measure, then we cut. */
+#ifndef OT_MEASURE
+#define OT_MEASURE
+#define OT_TABLE_START                 static const struct TABLE_NAME {
+#define OT_TABLE_END                   }
+#define OT_LABEL_START(Name)           unsigned char Name[
+#define OT_LABEL_END                   ];
+#define OT_BYTE(u8)                    +1/*byte*/
+#define OT_USHORT(u16)                 +2/*bytes*/
+#else
+#undef  OT_MEASURE
+#define OT_TABLE_START                 TABLE_NAME = {
+#define OT_TABLE_END                   };
+#define OT_LABEL_START(Name)           {
+#define OT_LABEL_END                   },
+#define OT_BYTE(u8)                    (u8),
+#define OT_USHORT(u16)                 (unsigned char)((u16)>>8), (unsigned char)((u16)&0xFFu),
+#define OT_COUNT(Name, ItemSize)       ((unsigned int) sizeof(((struct TABLE_NAME*)0)->Name) \
+                                        / (unsigned int)(ItemSize) \
+                                        /* OT_ASSERT it's divisible (and positive). */)
+#define OT_DISTANCE(From,To)           ((unsigned int) \
+                                        ((char*)(&((struct TABLE_NAME*)0)->To) - \
+                                         (char*)(&((struct TABLE_NAME*)0)->From)) \
+                                        /* OT_ASSERT it's positive. */)
+#endif
+
+
+#define OT_LABEL(Name) \
+       OT_LABEL_END \
+       OT_LABEL_START(Name)
+
+/* Whenever we receive an argument that is a list, it will expand to
+ * contain commas.  That cannot be passed to another macro because the
+ * commas will throw off the preprocessor.  The solution is to wrap
+ * the passed-in argument in OT_LIST() before passing to the next macro.
+ * Unfortunately this trick requires vararg macros. */
+#define OT_LIST(...) __VA_ARGS__
+
+
+/*
+ * Basic Types
+ */
+
+#define OT_TAG(a,b,c,d) \
+       OT_BYTE(a) OT_BYTE(b) OT_BYTE(c) OT_BYTE(d)
+
+#define OT_OFFSET(From, To) /* Offset from From to To in bytes */ \
+       OT_USHORT(OT_DISTANCE(From, To))
+
+#define OT_GLYPHID /* GlyphID */ \
+       OT_USHORT
+
+#define OT_UARRAY(Name, Items) \
+       OT_LABEL_START(Name) \
+       OT_USHORT(OT_COUNT(Name##Data, 2)) \
+       OT_LABEL(Name##Data) \
+       Items \
+       OT_LABEL_END
+
+#define OT_UHEADLESSARRAY(Name, Items) \
+       OT_LABEL_START(Name) \
+       OT_USHORT(OT_COUNT(Name##Data, 2) + 1) \
+       OT_LABEL(Name##Data) \
+       Items \
+       OT_LABEL_END
+
+
+/*
+ * Common Types
+ */
+
+#define OT_LOOKUP_FLAG_IGNORE_MARKS    0x08u
+
+#define OT_LOOKUP(Name, LookupType, LookupFlag, SubLookupOffsets) \
+       OT_LABEL_START(Name) \
+       OT_USHORT(LookupType) \
+       OT_USHORT(LookupFlag) \
+       OT_LABEL_END \
+       OT_UARRAY(Name##SubLookupOffsetsArray, OT_LIST(SubLookupOffsets))
+
+#define OT_SUBLOOKUP(Name, SubFormat, Items) \
+       OT_LABEL_START(Name) \
+       OT_USHORT(SubFormat) \
+       Items
+
+#define OT_COVERAGE1(Name, Items) \
+       OT_LABEL_START(Name) \
+       OT_USHORT(1) \
+       OT_LABEL_END \
+       OT_UARRAY(Name##Glyphs, OT_LIST(Items))
+
+
+/*
+ * GSUB
+ */
+
+#define OT_LOOKUP_TYPE_SUBST_SINGLE    1u
+#define OT_LOOKUP_TYPE_SUBST_MULTIPLE  2u
+#define OT_LOOKUP_TYPE_SUBST_LIGATURE  4u
+
+#define OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(Name, FromGlyphs, ToGlyphs) \
+       OT_SUBLOOKUP(Name, 2, \
+               OT_OFFSET(Name, Name##Coverage) \
+               OT_LABEL_END \
+               OT_UARRAY(Name##Substitute, OT_LIST(ToGlyphs)) \
+       ) \
+       OT_COVERAGE1(Name##Coverage, OT_LIST(FromGlyphs)) \
+       /* ASSERT_STATIC_EXPR len(FromGlyphs) == len(ToGlyphs) */
+
+#define OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(Name, FirstGlyphs, LigatureSetOffsets) \
+       OT_SUBLOOKUP(Name, 1, \
+               OT_OFFSET(Name, Name##Coverage) \
+               OT_LABEL_END \
+               OT_UARRAY(Name##LigatureSetOffsetsArray, OT_LIST(LigatureSetOffsets)) \
+       ) \
+       OT_COVERAGE1(Name##Coverage, OT_LIST(FirstGlyphs)) \
+       /* ASSERT_STATIC_EXPR len(FirstGlyphs) == len(LigatureSetOffsets) */
+
+#define OT_LIGATURE_SET(Name, LigatureSetOffsets) \
+       OT_UARRAY(Name, OT_LIST(LigatureSetOffsets))
+
+#define OT_LIGATURE(Name, Components, LigGlyph) \
+       OT_LABEL_START(Name) \
+       LigGlyph \
+       OT_LABEL_END \
+       OT_UHEADLESSARRAY(Name##ComponentsArray, OT_LIST(Components))
+
+/*
+ *
+ * Start of Windows-1256 shaping table.
+ *
+ */
+
+/* Table name. */
+#define TABLE_NAME arabic_win1256_gsub_lookups
+
+/* Table manifest. */
+#define MANIFEST(Items) \
+       OT_LABEL_START(manifest) \
+       OT_USHORT(OT_COUNT(manifestData, 6)) \
+       OT_LABEL(manifestData) \
+       Items \
+       OT_LABEL_END
+
+#define MANIFEST_LOOKUP(Tag, Name) \
+       Tag \
+       OT_OFFSET(manifest, Name)
+
+/* Shorthand. */
+#define G      OT_GLYPHID
+
+/*
+ * Table Start
+ */
+OT_TABLE_START
+
+
+/*
+ * Manifest
+ */
+MANIFEST(
+       MANIFEST_LOOKUP(OT_TAG('r','l','i','g'), rligLookup)
+       MANIFEST_LOOKUP(OT_TAG('i','n','i','t'), initLookup)
+       MANIFEST_LOOKUP(OT_TAG('m','e','d','i'), mediLookup)
+       MANIFEST_LOOKUP(OT_TAG('f','i','n','a'), finaLookup)
+       MANIFEST_LOOKUP(OT_TAG('r','l','i','g'), rligMarksLookup)
+)
+
+/*
+ * Lookups
+ */
+OT_LOOKUP(initLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
+       OT_OFFSET(initLookup, initmediSubLookup)
+       OT_OFFSET(initLookup, initSubLookup)
+)
+OT_LOOKUP(mediLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
+       OT_OFFSET(mediLookup, initmediSubLookup)
+       OT_OFFSET(mediLookup, mediSubLookup)
+       OT_OFFSET(mediLookup, medifinaLamAlefSubLookup)
+)
+OT_LOOKUP(finaLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
+       OT_OFFSET(finaLookup, finaSubLookup)
+       /* We don't need this one currently as the sequence inherits masks
+        * from the first item.  Just in case we change that in the future
+        * to be smart about Arabic masks when ligating... */
+       OT_OFFSET(finaLookup, medifinaLamAlefSubLookup)
+)
+OT_LOOKUP(rligLookup, OT_LOOKUP_TYPE_SUBST_LIGATURE, OT_LOOKUP_FLAG_IGNORE_MARKS,
+       OT_OFFSET(rligLookup, lamAlefLigaturesSubLookup)
+)
+OT_LOOKUP(rligMarksLookup, OT_LOOKUP_TYPE_SUBST_LIGATURE, 0,
+       OT_OFFSET(rligMarksLookup, shaddaLigaturesSubLookup)
+)
+
+/*
+ * init/medi/fina forms
+ */
+OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(initmediSubLookup,
+       G(198)  G(200)  G(201)  G(202)  G(203)  G(204)  G(205)  G(206)  G(211)
+       G(212)  G(213)  G(214)  G(223)  G(225)  G(227)  G(228)  G(236)  G(237),
+       G(162)  G(4)    G(5)    G(5)    G(6)    G(7)    G(9)    G(11)   G(13)
+       G(14)   G(15)   G(26)   G(140)  G(141)  G(142)  G(143)  G(154)  G(154)
+)
+OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(initSubLookup,
+       G(218)  G(219)  G(221)  G(222)  G(229),
+       G(27)   G(30)   G(128)  G(131)  G(144)
+)
+OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(mediSubLookup,
+       G(218)  G(219)  G(221)  G(222)  G(229),
+       G(28)   G(31)   G(129)  G(138)  G(149)
+)
+OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(finaSubLookup,
+       G(194)  G(195)  G(197)  G(198)  G(199)  G(201)  G(204)  G(205)  G(206)
+       G(218)  G(219)  G(229)  G(236)  G(237),
+       G(2)    G(1)    G(3)    G(181)  G(0)    G(159)  G(8)    G(10)   G(12)
+       G(29)   G(127)  G(152) G(160)   G(156)
+)
+OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(medifinaLamAlefSubLookup,
+       G(165)  G(178)  G(180)  G(252),
+       G(170)  G(179)  G(185)  G(255)
+)
+
+/*
+ * Lam+Alef ligatures
+ */
+OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(lamAlefLigaturesSubLookup,
+       G(225),
+       OT_OFFSET(lamAlefLigaturesSubLookup, lamLigatureSet)
+)
+OT_LIGATURE_SET(lamLigatureSet,
+       OT_OFFSET(lamLigatureSet, lamInitLigature1)
+       OT_OFFSET(lamLigatureSet, lamInitLigature2)
+       OT_OFFSET(lamLigatureSet, lamInitLigature3)
+       OT_OFFSET(lamLigatureSet, lamInitLigature4)
+)
+OT_LIGATURE(lamInitLigature1, G(199), G(165))
+OT_LIGATURE(lamInitLigature2, G(195), G(178))
+OT_LIGATURE(lamInitLigature3, G(194), G(180))
+OT_LIGATURE(lamInitLigature4, G(197), G(252))
+
+/*
+ * Shadda ligatures
+ */
+OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(shaddaLigaturesSubLookup,
+       G(248),
+       OT_OFFSET(shaddaLigaturesSubLookup, shaddaLigatureSet)
+)
+OT_LIGATURE_SET(shaddaLigatureSet,
+       OT_OFFSET(shaddaLigatureSet, shaddaLigature1)
+       OT_OFFSET(shaddaLigatureSet, shaddaLigature2)
+       OT_OFFSET(shaddaLigatureSet, shaddaLigature3)
+)
+OT_LIGATURE(shaddaLigature1, G(243), G(172))
+OT_LIGATURE(shaddaLigature2, G(245), G(173))
+OT_LIGATURE(shaddaLigature3, G(246), G(175))
+
+/*
+ * Table end
+ */
+OT_TABLE_END
+
+
+/*
+ * Clean up
+ */
+#undef OT_TABLE_START
+#undef OT_TABLE_END
+#undef OT_LABEL_START
+#undef OT_LABEL_END
+#undef OT_BYTE
+#undef OT_USHORT
+#undef OT_DISTANCE
+#undef OT_COUNT
+
+/*
+ * Include a second time to get the table data...
+ */
+#ifdef OT_MEASURE
+#include __FILE__
+#endif
+
+#define HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH
+#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH */
index 35356fe..ae90864 100644 (file)
  */
 enum {
   JOINING_TYPE_U               = 0,
  */
 enum {
   JOINING_TYPE_U               = 0,
-  JOINING_TYPE_R               = 1,
-  JOINING_TYPE_D               = 2,
+  JOINING_TYPE_L               = 1,
+  JOINING_TYPE_R               = 2,
+  JOINING_TYPE_D               = 3,
   JOINING_TYPE_C               = JOINING_TYPE_D,
   JOINING_TYPE_C               = JOINING_TYPE_D,
-  JOINING_GROUP_ALAPH          = 3,
-  JOINING_GROUP_DALATH_RISH    = 4,
-  NUM_STATE_MACHINE_COLS       = 5,
+  JOINING_GROUP_ALAPH          = 4,
+  JOINING_GROUP_DALATH_RISH    = 5,
+  NUM_STATE_MACHINE_COLS       = 6,
 
 
-  /* We deliberately don't have a JOINING_TYPE_L since that's unused in Unicode. */
-
-  JOINING_TYPE_T = 6,
-  JOINING_TYPE_X = 7  /* means: use general-category to choose between U or T. */
+  JOINING_TYPE_T = 7,
+  JOINING_TYPE_X = 8  /* means: use general-category to choose between U or T. */
 };
 
 /*
 };
 
 /*
@@ -58,69 +57,41 @@ enum {
 
 static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_category_t gen_cat)
 {
 
 static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_category_t gen_cat)
 {
-  if (likely (hb_in_range<hb_codepoint_t> (u, JOINING_TABLE_FIRST, JOINING_TABLE_LAST))) {
-    unsigned int j_type = joining_table[u - JOINING_TABLE_FIRST];
-    if (likely (j_type != JOINING_TYPE_X))
-      return j_type;
-  }
-
-  /* Mongolian joining data is not in ArabicJoining.txt yet. */
-  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1800, 0x18AF)))
-  {
-    if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1880, 0x1886)))
-      return JOINING_TYPE_U;
-
-    /* All letters, SIBE SYLLABLE BOUNDARY MARKER, and NIRUGU are D */
-    if ((FLAG(gen_cat) & (FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) |
-                         FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER)))
-       || u == 0x1807 || u == 0x180A)
-      return JOINING_TYPE_D;
-  }
-
-  /* 'Phags-pa joining data is not in ArabicJoining.txt yet. */
-  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xA840, 0xA872)))
-  {
-      if (unlikely (u == 0xA872))
-       /* XXX Looks like this should be TYPE_L, but we don't support that yet! */
-       return JOINING_TYPE_R;
-
-      return JOINING_TYPE_D;
-  }
-
-  if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x200C, 0x200D)))
-  {
-    return u == 0x200C ? JOINING_TYPE_U : JOINING_TYPE_C;
-  }
-
-  return (FLAG(gen_cat) & (FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))) ?
-        JOINING_TYPE_T : JOINING_TYPE_U;
+  unsigned int j_type = joining_type(u);
+  if (likely (j_type != JOINING_TYPE_X))
+    return j_type;
+
+  return (FLAG(gen_cat) &
+         (FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) |
+          FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
+          FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))
+        ) ?  JOINING_TYPE_T : JOINING_TYPE_U;
 }
 
 }
 
+#define FEATURE_IS_SYRIAC(tag) hb_in_range<unsigned char> ((unsigned char) (tag), '2', '3')
+
 static const hb_tag_t arabic_features[] =
 {
 static const hb_tag_t arabic_features[] =
 {
-  HB_TAG('i','n','i','t'),
-  HB_TAG('m','e','d','i'),
-  HB_TAG('f','i','n','a'),
   HB_TAG('i','s','o','l'),
   HB_TAG('i','s','o','l'),
-  /* Syriac */
-  HB_TAG('m','e','d','2'),
+  HB_TAG('f','i','n','a'),
   HB_TAG('f','i','n','2'),
   HB_TAG('f','i','n','3'),
   HB_TAG('f','i','n','2'),
   HB_TAG('f','i','n','3'),
+  HB_TAG('m','e','d','i'),
+  HB_TAG('m','e','d','2'),
+  HB_TAG('i','n','i','t'),
   HB_TAG_NONE
 };
 
 
 /* Same order as the feature array */
 enum {
   HB_TAG_NONE
 };
 
 
 /* Same order as the feature array */
 enum {
-  INIT,
-  MEDI,
-  FINA,
   ISOL,
   ISOL,
-
-  /* Syriac */
-  MED2,
+  FINA,
   FIN2,
   FIN3,
   FIN2,
   FIN3,
+  MEDI,
+  MED2,
+  INIT,
 
   NONE,
 
 
   NONE,
 
@@ -133,32 +104,37 @@ static const struct arabic_state_table_entry {
        uint16_t next_state;
 } arabic_state_table[][NUM_STATE_MACHINE_COLS] =
 {
        uint16_t next_state;
 } arabic_state_table[][NUM_STATE_MACHINE_COLS] =
 {
-  /*   jt_U,          jt_R,          jt_D,          jg_ALAPH,      jg_DALATH_RISH */
+  /*   jt_U,          jt_L,          jt_R,          jt_D,          jg_ALAPH,      jg_DALATH_RISH */
 
   /* State 0: prev was U, not willing to join. */
 
   /* State 0: prev was U, not willing to join. */
-  { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,6}, },
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,6}, },
 
   /* State 1: prev was R or ISOL/ALAPH, not willing to join. */
 
   /* State 1: prev was R or ISOL/ALAPH, not willing to join. */
-  { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN2,5}, {NONE,ISOL,6}, },
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN2,5}, {NONE,ISOL,6}, },
 
 
-  /* State 2: prev was D/ISOL, willing to join. */
-  { {NONE,NONE,0}, {INIT,FINA,1}, {INIT,FINA,3}, {INIT,FINA,4}, {INIT,FINA,6}, },
+  /* State 2: prev was D/L in ISOL form, willing to join. */
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {INIT,FINA,1}, {INIT,FINA,3}, {INIT,FINA,4}, {INIT,FINA,6}, },
 
 
-  /* State 3: prev was D/FINA, willing to join. */
-  { {NONE,NONE,0}, {MEDI,FINA,1}, {MEDI,FINA,3}, {MEDI,FINA,4}, {MEDI,FINA,6}, },
+  /* State 3: prev was D in FINA form, willing to join. */
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {MEDI,FINA,1}, {MEDI,FINA,3}, {MEDI,FINA,4}, {MEDI,FINA,6}, },
 
   /* State 4: prev was FINA ALAPH, not willing to join. */
 
   /* State 4: prev was FINA ALAPH, not willing to join. */
-  { {NONE,NONE,0}, {MED2,ISOL,1}, {MED2,ISOL,2}, {MED2,FIN2,5}, {MED2,ISOL,6}, },
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {MED2,ISOL,1}, {MED2,ISOL,2}, {MED2,FIN2,5}, {MED2,ISOL,6}, },
 
   /* State 5: prev was FIN2/FIN3 ALAPH, not willing to join. */
 
   /* State 5: prev was FIN2/FIN3 ALAPH, not willing to join. */
-  { {NONE,NONE,0}, {ISOL,ISOL,1}, {ISOL,ISOL,2}, {ISOL,FIN2,5}, {ISOL,ISOL,6}, },
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {ISOL,ISOL,1}, {ISOL,ISOL,2}, {ISOL,FIN2,5}, {ISOL,ISOL,6}, },
 
   /* State 6: prev was DALATH/RISH, not willing to join. */
 
   /* State 6: prev was DALATH/RISH, not willing to join. */
-  { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN3,5}, {NONE,ISOL,6}, }
+  { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN3,5}, {NONE,ISOL,6}, }
 };
 
 
 static void
 };
 
 
 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);
 arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
                       hb_font_t *font,
                       hb_buffer_t *buffer);
@@ -168,35 +144,56 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
 {
   hb_ot_map_builder_t *map = &plan->map;
 
 {
   hb_ot_map_builder_t *map = &plan->map;
 
-  /* For Language forms (in ArabicOT speak), we do the iso/fina/medi/init together,
-   * then rlig and calt each in their own stage.  This makes IranNastaliq's ALLAH
-   * ligature work correctly. It's unfortunate though...
+  /* We apply features according to the Arabic spec, with pauses
+   * in between most.
    *
    *
-   * This also makes Arial Bold in Windows7 work.  See:
+   * The pause between init/medi/... and rlig is required.  See eg:
    * https://bugzilla.mozilla.org/show_bug.cgi?id=644184
    *
    * https://bugzilla.mozilla.org/show_bug.cgi?id=644184
    *
-   * TODO: Add test cases for these two.
+   * The pauses between init/medi/... themselves are not necessarily
+   * needed as only one of those features is applied to any character.
+   * The only difference it makes is when fonts have contextual
+   * substitutions.  We now follow the order of the spec, which makes
+   * for better experience if that's what Uniscribe is doing.
+   *
+   * At least for Arabic, looks like Uniscribe has a pause between
+   * rlig and calt.  Otherwise the IranNastaliq's ALLAH ligature won't
+   * work.  However, testing shows that rlig and calt are applied
+   * together for Mongolian in Uniscribe.  As such, we only add a
+   * pause for Arabic, not other scripts.
    */
 
    */
 
-  map->add_bool_feature (HB_TAG('c','c','m','p'));
-  map->add_bool_feature (HB_TAG('l','o','c','l'));
+  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'));
 
   map->add_gsub_pause (NULL);
 
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++)
 
   map->add_gsub_pause (NULL);
 
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++)
-    map->add_bool_feature (arabic_features[i], false, i < 4); /* The first four features have fallback. */
-
-  map->add_gsub_pause (NULL);
+  {
+    bool has_fallback = plan->props.script == HB_SCRIPT_ARABIC && !FEATURE_IS_SYRIAC (arabic_features[i]);
+    map->add_feature (arabic_features[i], 1, has_fallback ? F_HAS_FALLBACK : F_NONE);
+    map->add_gsub_pause (NULL);
+  }
 
 
-  map->add_bool_feature (HB_TAG('r','l','i','g'), true, true);
-  map->add_gsub_pause (arabic_fallback_shape);
+  map->add_feature (HB_TAG('r','l','i','g'), 1, F_GLOBAL|F_HAS_FALLBACK);
+  if (plan->props.script == HB_SCRIPT_ARABIC)
+    map->add_gsub_pause (arabic_fallback_shape);
 
 
-  map->add_bool_feature (HB_TAG('c','a','l','t'));
+  map->add_global_bool_feature (HB_TAG('c','a','l','t'));
   map->add_gsub_pause (NULL);
 
   map->add_gsub_pause (NULL);
 
-  map->add_bool_feature (HB_TAG('c','s','w','h'));
-  map->add_bool_feature (HB_TAG('d','l','i','g'));
-  map->add_bool_feature (HB_TAG('m','s','e','t'));
+  /* The spec includes 'cswh'.  Earlier versions of Windows
+   * used to enable this by default, but testing suggests
+   * that Windows 8 and later do not enable it by default,
+   * and spec now says 'Off by default'.
+   * We disabled this in ae23c24c32.
+   * Note that IranNastaliq uses this feature extensively
+   * to fixup broken glyph sequences.  Oh well...
+   * Test case: U+0643,U+0640,U+0631. */
+  //map->add_global_bool_feature (HB_TAG('c','s','w','h'));
+  map->add_global_bool_feature (HB_TAG('m','s','e','t'));
 }
 
 #include "hb-ot-shape-complex-arabic-fallback.hh"
 }
 
 #include "hb-ot-shape-complex-arabic-fallback.hh"
@@ -225,8 +222,9 @@ data_create_arabic (const hb_ot_shape_plan_t *plan)
   arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++) {
     arabic_plan->mask_array[i] = plan->map.get_1_mask (arabic_features[i]);
   arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
   for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++) {
     arabic_plan->mask_array[i] = plan->map.get_1_mask (arabic_features[i]);
-    if (i < 4)
-      arabic_plan->do_fallback = arabic_plan->do_fallback && plan->map.needs_fallback (arabic_features[i]);
+    arabic_plan->do_fallback = arabic_plan->do_fallback &&
+                              (FEATURE_IS_SYRIAC (arabic_features[i]) ||
+                               plan->map.needs_fallback (arabic_features[i]));
   }
 
   return arabic_plan;
   }
 
   return arabic_plan;
@@ -246,60 +244,65 @@ static void
 arabic_joining (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
 arabic_joining (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   unsigned int prev = (unsigned int) -1, state = 0;
 
   unsigned int prev = (unsigned int) -1, state = 0;
 
-  HB_BUFFER_ALLOCATE_VAR (buffer, arabic_shaping_action);
-
   /* Check pre-context */
   /* Check pre-context */
-  if (!(buffer->flags & HB_BUFFER_FLAG_BOT))
-    for (unsigned int i = 0; i < buffer->context_len[0]; i++)
-    {
-      unsigned int this_type = get_joining_type (buffer->context[0][i], buffer->unicode->general_category (buffer->context[0][i]));
+  for (unsigned int i = 0; i < buffer->context_len[0]; i++)
+  {
+    unsigned int this_type = get_joining_type (buffer->context[0][i], buffer->unicode->general_category (buffer->context[0][i]));
 
 
-      if (unlikely (this_type == JOINING_TYPE_T))
-       continue;
+    if (unlikely (this_type == JOINING_TYPE_T))
+      continue;
 
 
-      const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
-      state = entry->next_state;
-      break;
-    }
+    const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
+    state = entry->next_state;
+    break;
+  }
 
   for (unsigned int i = 0; i < count; i++)
   {
 
   for (unsigned int i = 0; i < count; i++)
   {
-    unsigned int this_type = get_joining_type (buffer->info[i].codepoint, _hb_glyph_info_get_general_category (&buffer->info[i]));
+    unsigned int this_type = get_joining_type (info[i].codepoint, _hb_glyph_info_get_general_category (&info[i]));
 
     if (unlikely (this_type == JOINING_TYPE_T)) {
 
     if (unlikely (this_type == JOINING_TYPE_T)) {
-      buffer->info[i].arabic_shaping_action() = NONE;
+      info[i].arabic_shaping_action() = NONE;
       continue;
     }
 
     const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
 
     if (entry->prev_action != NONE && prev != (unsigned int) -1)
       continue;
     }
 
     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;
+      info[prev].arabic_shaping_action() = entry->prev_action;
 
 
-    buffer->info[i].arabic_shaping_action() = entry->curr_action;
+    info[i].arabic_shaping_action() = entry->curr_action;
 
     prev = i;
     state = entry->next_state;
   }
 
 
     prev = i;
     state = entry->next_state;
   }
 
-  if (!(buffer->flags & HB_BUFFER_FLAG_EOT))
-    for (unsigned int i = 0; i < buffer->context_len[1]; i++)
-    {
-      unsigned int this_type = get_joining_type (buffer->context[1][i], buffer->unicode->general_category (buffer->context[1][i]));
-
-      if (unlikely (this_type == JOINING_TYPE_T))
-       continue;
+  for (unsigned int i = 0; i < buffer->context_len[1]; i++)
+  {
+    unsigned int this_type = get_joining_type (buffer->context[1][i], buffer->unicode->general_category (buffer->context[1][i]));
 
 
-      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;
-      break;
-    }
+    if (unlikely (this_type == JOINING_TYPE_T))
+      continue;
 
 
+    const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
+    if (entry->prev_action != NONE && prev != (unsigned int) -1)
+      info[prev].arabic_shaping_action() = entry->prev_action;
+    break;
+  }
+}
 
 
-  HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
+static void
+mongolian_variation_selectors (hb_buffer_t *buffer)
+{
+  /* Copy arabic_shaping_action() from base to Mongolian variation selectors. */
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 1; i < count; i++)
+    if (unlikely (hb_in_range (info[i].codepoint, 0x180Bu, 0x180Du)))
+      info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
 }
 
 static void
 }
 
 static void
@@ -307,16 +310,36 @@ setup_masks_arabic (const hb_ot_shape_plan_t *plan,
                    hb_buffer_t              *buffer,
                    hb_font_t                *font HB_UNUSED)
 {
                    hb_buffer_t              *buffer,
                    hb_font_t                *font HB_UNUSED)
 {
+  HB_BUFFER_ALLOCATE_VAR (buffer, arabic_shaping_action);
+
   const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
 
   arabic_joining (buffer);
   const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
 
   arabic_joining (buffer);
+  if (plan->props.script == HB_SCRIPT_MONGOLIAN)
+    mongolian_variation_selectors (buffer);
+
   unsigned int count = buffer->len;
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    buffer->info[i].mask |= arabic_plan->mask_array[buffer->info[i].arabic_shaping_action()];
+    info[i].mask |= arabic_plan->mask_array[info[i].arabic_shaping_action()];
+
+  HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
 }
 
 
 static void
 }
 
 
 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;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    if (_hb_glyph_info_is_zwj (&info[i]))
+      _hb_glyph_info_flip_joiners (&info[i]);
+}
+
+static void
 arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
                       hb_font_t *font,
                       hb_buffer_t *buffer)
 arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
                       hb_font_t *font,
                       hb_buffer_t *buffer)
@@ -350,10 +373,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
   data_create_arabic,
   data_destroy_arabic,
   NULL, /* preprocess_text_arabic */
   data_create_arabic,
   data_destroy_arabic,
   NULL, /* preprocess_text_arabic */
-  NULL, /* normalization_preference */
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
   setup_masks_arabic,
   NULL, /* decompose */
   NULL, /* compose */
   setup_masks_arabic,
-  true, /* zero_width_attached_marks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };
   true, /* fallback_position */
 };
index 5340293..f7f097e 100644 (file)
 #include "hb-ot-shape-complex-private.hh"
 
 
 #include "hb-ot-shape-complex-private.hh"
 
 
-/* TODO Add kana, and other small shapers here */
-
-
-/* The default shaper *only* adds additional per-script features.*/
-
-static const hb_tag_t hangul_features[] =
-{
-  HB_TAG('l','j','m','o'),
-  HB_TAG('v','j','m','o'),
-  HB_TAG('t','j','m','o'),
-  HB_TAG_NONE
-};
-
-static const hb_tag_t tibetan_features[] =
-{
-  HB_TAG('a','b','v','s'),
-  HB_TAG('b','l','w','s'),
-  HB_TAG('a','b','v','m'),
-  HB_TAG('b','l','w','m'),
-  HB_TAG_NONE
-};
-
-static void
-collect_features_default (hb_ot_shape_planner_t *plan)
-{
-  const hb_tag_t *script_features = NULL;
-
-  switch ((hb_tag_t) plan->props.script)
-  {
-    /* Unicode-1.1 additions */
-    case HB_SCRIPT_HANGUL:
-      script_features = hangul_features;
-      break;
-
-    /* Unicode-2.0 additions */
-    case HB_SCRIPT_TIBETAN:
-      script_features = tibetan_features;
-      break;
-  }
-
-  for (; script_features && *script_features; script_features++)
-    plan->map.add_bool_feature (*script_features);
-}
-
-static hb_ot_shape_normalization_mode_t
-normalization_preference_default (const hb_segment_properties_t *props)
-{
-  switch ((hb_tag_t) props->script)
-  {
-    /* Unicode-1.1 additions */
-    case HB_SCRIPT_HANGUL:
-      return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL;
-  }
-  return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
-}
-
-static bool
-compose_default (const hb_ot_shape_normalize_context_t *c,
-                hb_codepoint_t  a,
-                hb_codepoint_t  b,
-                hb_codepoint_t *ab)
-{
-  /* Hebrew presentation-form shaping.
-   * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
-   * Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
-   * Note that some letters do not have a dagesh presForm encoded.
-   */
-  static const hb_codepoint_t sDageshForms[0x05EA - 0x05D0 + 1] = {
-    0xFB30, /* ALEF */
-    0xFB31, /* BET */
-    0xFB32, /* GIMEL */
-    0xFB33, /* DALET */
-    0xFB34, /* HE */
-    0xFB35, /* VAV */
-    0xFB36, /* ZAYIN */
-    0x0000, /* HET */
-    0xFB38, /* TET */
-    0xFB39, /* YOD */
-    0xFB3A, /* FINAL KAF */
-    0xFB3B, /* KAF */
-    0xFB3C, /* LAMED */
-    0x0000, /* FINAL MEM */
-    0xFB3E, /* MEM */
-    0x0000, /* FINAL NUN */
-    0xFB40, /* NUN */
-    0xFB41, /* SAMEKH */
-    0x0000, /* AYIN */
-    0xFB43, /* FINAL PE */
-    0xFB44, /* PE */
-    0x0000, /* FINAL TSADI */
-    0xFB46, /* TSADI */
-    0xFB47, /* QOF */
-    0xFB48, /* RESH */
-    0xFB49, /* SHIN */
-    0xFB4A /* TAV */
-  };
-
-  bool found = c->unicode->compose (a, b, ab);
-
-  if (!found && (b & ~0x7F) == 0x0580) {
-      /* Special-case Hebrew presentation forms that are excluded from
-       * standard normalization, but wanted for old fonts. */
-      switch (b) {
-      case 0x05B4: /* HIRIQ */
-         if (a == 0x05D9) { /* YOD */
-             *ab = 0xFB1D;
-             found = true;
-         }
-         break;
-      case 0x05B7: /* patah */
-         if (a == 0x05F2) { /* YIDDISH YOD YOD */
-             *ab = 0xFB1F;
-             found = true;
-         } else if (a == 0x05D0) { /* ALEF */
-             *ab = 0xFB2E;
-             found = true;
-         }
-         break;
-      case 0x05B8: /* QAMATS */
-         if (a == 0x05D0) { /* ALEF */
-             *ab = 0xFB2F;
-             found = true;
-         }
-         break;
-      case 0x05B9: /* HOLAM */
-         if (a == 0x05D5) { /* VAV */
-             *ab = 0xFB4B;
-             found = true;
-         }
-         break;
-      case 0x05BC: /* DAGESH */
-         if (a >= 0x05D0 && a <= 0x05EA) {
-             *ab = sDageshForms[a - 0x05D0];
-             found = (*ab != 0);
-         } else if (a == 0xFB2A) { /* SHIN WITH SHIN DOT */
-             *ab = 0xFB2C;
-             found = true;
-         } else if (a == 0xFB2B) { /* SHIN WITH SIN DOT */
-             *ab = 0xFB2D;
-             found = true;
-         }
-         break;
-      case 0x05BF: /* RAFE */
-         switch (a) {
-         case 0x05D1: /* BET */
-             *ab = 0xFB4C;
-             found = true;
-             break;
-         case 0x05DB: /* KAF */
-             *ab = 0xFB4D;
-             found = true;
-             break;
-         case 0x05E4: /* PE */
-             *ab = 0xFB4E;
-             found = true;
-             break;
-         }
-         break;
-      case 0x05C1: /* SHIN DOT */
-         if (a == 0x05E9) { /* SHIN */
-             *ab = 0xFB2A;
-             found = true;
-         } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
-             *ab = 0xFB2C;
-             found = true;
-         }
-         break;
-      case 0x05C2: /* SIN DOT */
-         if (a == 0x05E9) { /* SHIN */
-             *ab = 0xFB2B;
-             found = true;
-         } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
-             *ab = 0xFB2D;
-             found = true;
-         }
-         break;
-      }
-  }
-
-  return found;
-}
-
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
 {
   "default",
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
 {
   "default",
-  collect_features_default,
+  NULL, /* collect_features */
   NULL, /* override_features */
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
   NULL, /* override_features */
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  normalization_preference_default,
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* decompose */
-  compose_default,
+  NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* setup_masks */
-  true, /* zero_width_attached_marks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
   true, /* fallback_position */
 };
   true, /* fallback_position */
 };
diff --git a/src/hb-ot-shape-complex-hangul.cc b/src/hb-ot-shape-complex-hangul.cc
new file mode 100644 (file)
index 0000000..6ac18b0
--- /dev/null
@@ -0,0 +1,426 @@
+/*
+ * Copyright © 2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+/* Hangul shaper */
+
+
+/* Same order as the feature array below */
+enum {
+  NONE,
+
+  LJMO,
+  VJMO,
+  TJMO,
+
+  FIRST_HANGUL_FEATURE = LJMO,
+  HANGUL_FEATURE_COUNT = TJMO + 1
+};
+
+static const hb_tag_t hangul_features[HANGUL_FEATURE_COUNT] =
+{
+  HB_TAG_NONE,
+  HB_TAG('l','j','m','o'),
+  HB_TAG('v','j','m','o'),
+  HB_TAG('t','j','m','o')
+};
+
+static void
+collect_features_hangul (hb_ot_shape_planner_t *plan)
+{
+  hb_ot_map_builder_t *map = &plan->map;
+
+  for (unsigned int i = FIRST_HANGUL_FEATURE; i < HANGUL_FEATURE_COUNT; i++)
+    map->add_feature (hangul_features[i], 1, F_NONE);
+}
+
+static void
+override_features_hangul (hb_ot_shape_planner_t *plan)
+{
+  /* Uniscribe does not apply 'calt' for Hangul, and certain fonts
+   * (Noto Sans CJK, Source Sans Han, etc) apply all of jamo lookups
+   * in calt, which is not desirable. */
+  plan->map.add_feature (HB_TAG('c','a','l','t'), 0, F_GLOBAL);
+}
+
+struct hangul_shape_plan_t
+{
+  ASSERT_POD ();
+
+  hb_mask_t mask_array[HANGUL_FEATURE_COUNT];
+};
+
+static void *
+data_create_hangul (const hb_ot_shape_plan_t *plan)
+{
+  hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) calloc (1, sizeof (hangul_shape_plan_t));
+  if (unlikely (!hangul_plan))
+    return NULL;
+
+  for (unsigned int i = 0; i < HANGUL_FEATURE_COUNT; i++)
+    hangul_plan->mask_array[i] = plan->map.get_1_mask (hangul_features[i]);
+
+  return hangul_plan;
+}
+
+static void
+data_destroy_hangul (void *data)
+{
+  free (data);
+}
+
+/* Constants for algorithmic hangul syllable [de]composition. */
+#define LBase 0x1100u
+#define VBase 0x1161u
+#define TBase 0x11A7u
+#define LCount 19u
+#define VCount 21u
+#define TCount 28u
+#define SBase 0xAC00u
+#define NCount (VCount * TCount)
+#define SCount (LCount * NCount)
+
+#define isCombiningL(u) (hb_in_range ((u), LBase, LBase+LCount-1))
+#define isCombiningV(u) (hb_in_range ((u), VBase, VBase+VCount-1))
+#define isCombiningT(u) (hb_in_range ((u), TBase+1, TBase+TCount-1))
+#define isCombinedS(u) (hb_in_range ((u), SBase, SBase+SCount-1))
+
+#define isL(u) (hb_in_ranges ((u), 0x1100u, 0x115Fu, 0xA960u, 0xA97Cu))
+#define isV(u) (hb_in_ranges ((u), 0x1160u, 0x11A7u, 0xD7B0u, 0xD7C6u))
+#define isT(u) (hb_in_ranges ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
+
+#define isHangulTone(u) (hb_in_range ((u), 0x302Eu, 0x302Fu))
+
+/* buffer var allocations */
+#define hangul_shaping_feature() complex_var_u8_0() /* hangul jamo shaping feature */
+
+static bool
+is_zero_width_char (hb_font_t *font,
+                   hb_codepoint_t unicode)
+{
+  hb_codepoint_t glyph;
+  return hb_font_get_glyph (font, unicode, 0, &glyph) && hb_font_get_glyph_h_advance (font, glyph) == 0;
+}
+
+static void
+preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
+                       hb_buffer_t              *buffer,
+                       hb_font_t                *font)
+{
+  HB_BUFFER_ALLOCATE_VAR (buffer, hangul_shaping_feature);
+
+  /* Hangul syllables come in two shapes: LV, and LVT.  Of those:
+   *
+   *   - LV can be precomposed, or decomposed.  Lets call those
+   *     <LV> and <L,V>,
+   *   - LVT can be fully precomposed, partically precomposed, or
+   *     fully decomposed.  Ie. <LVT>, <LV,T>, or <L,V,T>.
+   *
+   * The composition / decomposition is mechanical.  However, not
+   * all <L,V> sequences compose, and not all <LV,T> sequences
+   * compose.
+   *
+   * Here are the specifics:
+   *
+   *   - <L>: U+1100..115F, U+A960..A97F
+   *   - <V>: U+1160..11A7, U+D7B0..D7C7
+   *   - <T>: U+11A8..11FF, U+D7CB..D7FB
+   *
+   *   - Only the <L,V> sequences for the 11xx ranges combine.
+   *   - Only <LV,T> sequences for T in U+11A8..11C3 combine.
+   *
+   * Here is what we want to accomplish in this shaper:
+   *
+   *   - If the whole syllable can be precomposed, do that,
+   *   - Otherwise, fully decompose and apply ljmo/vjmo/tjmo features.
+   *   - If a valid syllable is followed by a Hangul tone mark, reorder the tone
+   *     mark to precede the whole syllable - unless it is a zero-width glyph, in
+   *     which case we leave it untouched, assuming it's designed to overstrike.
+   *
+   * That is, of the different possible syllables:
+   *
+   *   <L>
+   *   <L,V>
+   *   <L,V,T>
+   *   <LV>
+   *   <LVT>
+   *   <LV, T>
+   *
+   * - <L> needs no work.
+   *
+   * - <LV> and <LVT> can stay the way they are if the font supports them, otherwise we
+   *   should fully decompose them if font supports.
+   *
+   * - <L,V> and <L,V,T> we should compose if the whole thing can be composed.
+   *
+   * - <LV,T> we should compose if the whole thing can be composed, otherwise we should
+   *   decompose.
+   */
+
+  buffer->clear_output ();
+  unsigned int start = 0, end = 0; /* Extent of most recently seen syllable;
+                                   * valid only if start < end
+                                   */
+  unsigned int count = buffer->len;
+
+  for (buffer->idx = 0; buffer->idx < count;)
+  {
+    hb_codepoint_t u = buffer->cur().codepoint;
+
+    if (isHangulTone (u))
+    {
+      /*
+       * We could cache the width of the tone marks and the existence of dotted-circle,
+       * but the use of the Hangul tone mark characters seems to be rare enough that
+       * I didn't bother for now.
+       */
+      if (start < end && end == buffer->out_len)
+      {
+       /* Tone mark follows a valid syllable; move it in front, unless it's zero width. */
+       buffer->next_glyph ();
+       if (!is_zero_width_char (font, u))
+       {
+         hb_glyph_info_t *info = buffer->out_info;
+         hb_glyph_info_t tone = info[end];
+         memmove (&info[start + 1], &info[start], (end - start) * sizeof (hb_glyph_info_t));
+         info[start] = tone;
+       }
+       /* Merge clusters across the (possibly reordered) syllable+tone.
+        * We want to merge even in the zero-width tone mark case here,
+        * so that clustering behavior isn't dependent on how the tone mark
+        * is handled by the font.
+        */
+       buffer->merge_out_clusters (start, end + 1);
+      }
+      else
+      {
+       /* No valid syllable as base for tone mark; try to insert dotted circle. */
+       if (font->has_glyph (0x25CCu))
+       {
+         hb_codepoint_t chars[2];
+         if (!is_zero_width_char (font, u)) {
+           chars[0] = u;
+           chars[1] = 0x25CCu;
+         } else {
+           chars[0] = 0x25CCu;
+           chars[1] = u;
+         }
+         buffer->replace_glyphs (1, 2, chars);
+       }
+       else
+       {
+         /* No dotted circle available in the font; just leave tone mark untouched. */
+         buffer->next_glyph ();
+       }
+      }
+      start = end = buffer->out_len;
+      continue;
+    }
+
+    start = buffer->out_len; /* Remember current position as a potential syllable start;
+                             * will only be used if we set end to a later position.
+                             */
+
+    if (isL (u) && buffer->idx + 1 < count)
+    {
+      hb_codepoint_t l = u;
+      hb_codepoint_t v = buffer->cur(+1).codepoint;
+      if (isV (v))
+      {
+       /* Have <L,V> or <L,V,T>. */
+       hb_codepoint_t t = 0;
+       unsigned int tindex = 0;
+       if (buffer->idx + 2 < count)
+       {
+         t = buffer->cur(+2).codepoint;
+         if (isT (t))
+           tindex = t - TBase; /* Only used if isCombiningT (t); otherwise invalid. */
+         else
+           t = 0; /* The next character was not a trailing jamo. */
+       }
+
+       /* We've got a syllable <L,V,T?>; see if it can potentially be composed. */
+       if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
+       {
+         /* Try to compose; if this succeeds, end is set to start+1. */
+         hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
+         if (font->has_glyph (s))
+         {
+           buffer->replace_glyphs (t ? 3 : 2, 1, &s);
+           if (unlikely (buffer->in_error))
+             return;
+           end = start + 1;
+           continue;
+         }
+       }
+
+       /* We didn't compose, either because it's an Old Hangul syllable without a
+        * precomposed character in Unicode, or because the font didn't support the
+        * necessary precomposed glyph.
+        * Set jamo features on the individual glyphs, and advance past them.
+        */
+       buffer->cur().hangul_shaping_feature() = LJMO;
+       buffer->next_glyph ();
+       buffer->cur().hangul_shaping_feature() = VJMO;
+       buffer->next_glyph ();
+       if (t)
+       {
+         buffer->cur().hangul_shaping_feature() = TJMO;
+         buffer->next_glyph ();
+         end = start + 3;
+       }
+       else
+         end = start + 2;
+       buffer->merge_out_clusters (start, end);
+       continue;
+      }
+    }
+
+    else if (isCombinedS (u))
+    {
+      /* Have <LV>, <LVT>, or <LV,T> */
+      hb_codepoint_t s = u;
+      bool has_glyph = font->has_glyph (s);
+      unsigned int lindex = (s - SBase) / NCount;
+      unsigned int nindex = (s - SBase) % NCount;
+      unsigned int vindex = nindex / TCount;
+      unsigned int tindex = nindex % TCount;
+
+      if (!tindex &&
+         buffer->idx + 1 < count &&
+         isCombiningT (buffer->cur(+1).codepoint))
+      {
+       /* <LV,T>, try to combine. */
+       unsigned int new_tindex = buffer->cur(+1).codepoint - TBase;
+       hb_codepoint_t new_s = s + new_tindex;
+       if (font->has_glyph (new_s))
+       {
+         buffer->replace_glyphs (2, 1, &new_s);
+         if (unlikely (buffer->in_error))
+           return;
+         end = start + 1;
+         continue;
+       }
+      }
+
+      /* Otherwise, decompose if font doesn't support <LV> or <LVT>,
+       * or if having non-combining <LV,T>.  Note that we already handled
+       * combining <LV,T> above. */
+      if (!has_glyph ||
+         (!tindex &&
+          buffer->idx + 1 < count &&
+          isT (buffer->cur(+1).codepoint)))
+      {
+       hb_codepoint_t decomposed[3] = {LBase + lindex,
+                                       VBase + vindex,
+                                       TBase + tindex};
+       if (font->has_glyph (decomposed[0]) &&
+           font->has_glyph (decomposed[1]) &&
+           (!tindex || font->has_glyph (decomposed[2])))
+       {
+         unsigned int s_len = tindex ? 3 : 2;
+         buffer->replace_glyphs (1, s_len, decomposed);
+         if (unlikely (buffer->in_error))
+           return;
+
+         /* We decomposed S: apply jamo features to the individual glyphs
+          * that are now in buffer->out_info.
+          */
+         hb_glyph_info_t *info = buffer->out_info;
+
+         /* If we decomposed an LV because of a non-combining T following,
+          * we want to include this T in the syllable.
+          */
+         if (has_glyph && !tindex)
+         {
+            buffer->next_glyph ();
+            s_len++;
+          }
+          end = start + s_len;
+
+         unsigned int i = start;
+         info[i++].hangul_shaping_feature() = LJMO;
+         info[i++].hangul_shaping_feature() = VJMO;
+         if (i < end)
+           info[i++].hangul_shaping_feature() = TJMO;
+         buffer->merge_out_clusters (start, end);
+         continue;
+       }
+      }
+
+      if (has_glyph)
+      {
+        /* We didn't decompose the S, so just advance past it. */
+       end = start + 1;
+       buffer->next_glyph ();
+       continue;
+      }
+    }
+
+    /* Didn't find a recognizable syllable, so we leave end <= start;
+     * this will prevent tone-mark reordering happening.
+     */
+    buffer->next_glyph ();
+  }
+  buffer->swap_buffers ();
+}
+
+static void
+setup_masks_hangul (const hb_ot_shape_plan_t *plan,
+                   hb_buffer_t              *buffer,
+                   hb_font_t                *font HB_UNUSED)
+{
+  const hangul_shape_plan_t *hangul_plan = (const hangul_shape_plan_t *) plan->data;
+
+  if (likely (hangul_plan))
+  {
+    unsigned int count = buffer->len;
+    hb_glyph_info_t *info = buffer->info;
+    for (unsigned int i = 0; i < count; i++, info++)
+      info->mask |= hangul_plan->mask_array[info->hangul_shaping_feature()];
+  }
+
+  HB_BUFFER_DEALLOCATE_VAR (buffer, hangul_shaping_feature);
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul =
+{
+  "hangul",
+  collect_features_hangul,
+  override_features_hangul,
+  data_create_hangul, /* data_create */
+  data_destroy_hangul, /* data_destroy */
+  preprocess_text_hangul,
+  HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
+  NULL, /* decompose */
+  NULL, /* compose */
+  setup_masks_hangul, /* setup_masks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
+  false, /* fallback_position */
+};
diff --git a/src/hb-ot-shape-complex-hebrew.cc b/src/hb-ot-shape-complex-hebrew.cc
new file mode 100644 (file)
index 0000000..c7b7a5e
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright © 2010,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
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+static bool
+compose_hebrew (const hb_ot_shape_normalize_context_t *c,
+               hb_codepoint_t  a,
+               hb_codepoint_t  b,
+               hb_codepoint_t *ab)
+{
+  /* Hebrew presentation-form shaping.
+   * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
+   * Hebrew presentation forms with dagesh, for characters U+05D0..05EA;
+   * Note that some letters do not have a dagesh presForm encoded.
+   */
+  static const hb_codepoint_t sDageshForms[0x05EAu - 0x05D0u + 1] = {
+    0xFB30u, /* ALEF */
+    0xFB31u, /* BET */
+    0xFB32u, /* GIMEL */
+    0xFB33u, /* DALET */
+    0xFB34u, /* HE */
+    0xFB35u, /* VAV */
+    0xFB36u, /* ZAYIN */
+    0x0000u, /* HET */
+    0xFB38u, /* TET */
+    0xFB39u, /* YOD */
+    0xFB3Au, /* FINAL KAF */
+    0xFB3Bu, /* KAF */
+    0xFB3Cu, /* LAMED */
+    0x0000u, /* FINAL MEM */
+    0xFB3Eu, /* MEM */
+    0x0000u, /* FINAL NUN */
+    0xFB40u, /* NUN */
+    0xFB41u, /* SAMEKH */
+    0x0000u, /* AYIN */
+    0xFB43u, /* FINAL PE */
+    0xFB44u, /* PE */
+    0x0000u, /* FINAL TSADI */
+    0xFB46u, /* TSADI */
+    0xFB47u, /* QOF */
+    0xFB48u, /* RESH */
+    0xFB49u, /* SHIN */
+    0xFB4Au /* TAV */
+  };
+
+  bool found = c->unicode->compose (a, b, ab);
+
+  if (!found && !c->plan->has_mark)
+  {
+      /* Special-case Hebrew presentation forms that are excluded from
+       * standard normalization, but wanted for old fonts. */
+      switch (b) {
+      case 0x05B4u: /* HIRIQ */
+         if (a == 0x05D9u) { /* YOD */
+             *ab = 0xFB1Du;
+             found = true;
+         }
+         break;
+      case 0x05B7u: /* patah */
+         if (a == 0x05F2u) { /* YIDDISH YOD YOD */
+             *ab = 0xFB1Fu;
+             found = true;
+         } else if (a == 0x05D0u) { /* ALEF */
+             *ab = 0xFB2Eu;
+             found = true;
+         }
+         break;
+      case 0x05B8u: /* QAMATS */
+         if (a == 0x05D0u) { /* ALEF */
+             *ab = 0xFB2Fu;
+             found = true;
+         }
+         break;
+      case 0x05B9u: /* HOLAM */
+         if (a == 0x05D5u) { /* VAV */
+             *ab = 0xFB4Bu;
+             found = true;
+         }
+         break;
+      case 0x05BCu: /* DAGESH */
+         if (a >= 0x05D0u && a <= 0x05EAu) {
+             *ab = sDageshForms[a - 0x05D0u];
+             found = (*ab != 0);
+         } else if (a == 0xFB2Au) { /* SHIN WITH SHIN DOT */
+             *ab = 0xFB2Cu;
+             found = true;
+         } else if (a == 0xFB2Bu) { /* SHIN WITH SIN DOT */
+             *ab = 0xFB2Du;
+             found = true;
+         }
+         break;
+      case 0x05BFu: /* RAFE */
+         switch (a) {
+         case 0x05D1u: /* BET */
+             *ab = 0xFB4Cu;
+             found = true;
+             break;
+         case 0x05DBu: /* KAF */
+             *ab = 0xFB4Du;
+             found = true;
+             break;
+         case 0x05E4u: /* PE */
+             *ab = 0xFB4Eu;
+             found = true;
+             break;
+         }
+         break;
+      case 0x05C1u: /* SHIN DOT */
+         if (a == 0x05E9u) { /* SHIN */
+             *ab = 0xFB2Au;
+             found = true;
+         } else if (a == 0xFB49u) { /* SHIN WITH DAGESH */
+             *ab = 0xFB2Cu;
+             found = true;
+         }
+         break;
+      case 0x05C2u: /* SIN DOT */
+         if (a == 0x05E9u) { /* SHIN */
+             *ab = 0xFB2Bu;
+             found = true;
+         } else if (a == 0xFB49u) { /* SHIN WITH DAGESH */
+             *ab = 0xFB2Du;
+             found = true;
+         }
+         break;
+      }
+  }
+
+  return found;
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew =
+{
+  "hebrew",
+  NULL, /* collect_features */
+  NULL, /* override_features */
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
+  NULL, /* decompose */
+  compose_hebrew,
+  NULL, /* setup_masks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+  true, /* fallback_position */
+};
index ed40b96..5fbdcc8 100644 (file)
@@ -55,48 +55,52 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = {
        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, 
        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, 
+       6u, 6u, 16u, 16u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u, 
+       5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
+       3u, 10u, 8u, 10u, 3u, 10u, 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, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 31u, 3u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u, 
+       5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
+       3u, 10u, 8u, 10u, 3u, 10u, 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, 
        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, 
+       6u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       4u, 14u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 
+       4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 
+       4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u, 5u, 10u, 
+       9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 3u, 10u, 
+       8u, 10u, 3u, 10u, 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, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       4u, 14u, 3u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u, 
+       5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
+       3u, 10u, 8u, 10u, 3u, 10u, 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, 
        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
+       6u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 14u, 1u, 16u, 3u, 31u, 
+       3u, 31u, 4u, 31u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 
+       5u, 10u, 3u, 31u, 3u, 31u, 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, 13u, 3u, 10u, 8u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 3u, 10u, 8u, 10u, 
+       5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 0
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
@@ -121,48 +125,52 @@ static const char _indic_syllable_machine_key_spans[] = {
        11, 3, 3, 3, 3, 1, 3, 3, 
        1, 3, 3, 1, 16, 1, 1, 1, 
        1, 4, 1, 1, 4, 1, 1, 4, 
        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, 
+       1, 1, 31, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 10, 7, 
+       6, 2, 1, 2, 2, 1, 6, 11, 
+       8, 3, 8, 11, 12, 12, 11, 10, 
+       12, 11, 10, 12, 11, 10, 12, 11, 
+       9, 12, 16, 28, 11, 29, 29, 16, 
+       16, 16, 16, 16, 29, 29, 16, 16, 
+       16, 16, 16, 29, 29, 16, 16, 16, 
+       16, 16, 29, 29, 16, 16, 16, 16, 
+       16, 29, 29, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 10, 7, 
+       6, 2, 1, 2, 2, 1, 6, 11, 
+       8, 3, 8, 11, 12, 12, 11, 10, 
        12, 11, 10, 12, 11, 10, 12, 11, 
        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, 
+       9, 12, 16, 28, 11, 29, 29, 16, 
+       16, 16, 16, 16, 29, 29, 16, 16, 
+       16, 16, 16, 29, 29, 16, 16, 16, 
+       16, 16, 29, 29, 16, 16, 16, 16, 
+       11, 16, 29, 29, 28, 16, 29, 29, 
+       28, 16, 29, 29, 28, 16, 29, 29, 
+       28, 16, 29, 29, 28, 10, 7, 6, 
+       2, 1, 2, 2, 1, 6, 11, 8, 
+       3, 8, 11, 12, 12, 11, 10, 12, 
+       11, 10, 12, 11, 10, 12, 11, 9, 
+       12, 16, 28, 11, 29, 29, 16, 16, 
+       16, 16, 16, 29, 29, 16, 16, 16, 
+       16, 16, 29, 29, 16, 16, 16, 16, 
+       16, 29, 29, 16, 16, 16, 16, 16, 
+       11, 29, 11, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 16, 29, 
+       29, 28, 16, 29, 29, 28, 10, 7, 
+       6, 2, 1, 2, 2, 1, 6, 11, 
+       8, 3, 8, 11, 12, 12, 11, 10, 
        12, 11, 10, 12, 11, 10, 12, 11, 
        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
+       9, 12, 16, 28, 11, 29, 29, 16, 
+       16, 16, 16, 16, 29, 29, 16, 16, 
+       16, 16, 16, 29, 29, 16, 16, 16, 
+       16, 16, 29, 29, 16, 16, 16, 16, 
+       16, 29, 31, 29, 31, 11, 16, 29, 
+       29, 28, 6, 2, 1, 2, 2, 1, 
+       6, 29, 29, 16, 12, 11, 10, 12, 
+       11, 10, 12, 11, 10, 12, 11, 7, 
+       11, 8, 3, 8, 11, 16, 8, 3, 
+       6, 2, 1, 2, 2, 1, 6
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
@@ -187,48 +195,52 @@ static const short _indic_syllable_machine_index_offsets[] = {
        848, 860, 864, 868, 872, 876, 878, 882, 
        886, 888, 892, 896, 898, 915, 917, 919, 
        921, 923, 928, 930, 932, 937, 939, 941, 
        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
+       946, 948, 950, 982, 1012, 1042, 1071, 1088, 
+       1118, 1148, 1177, 1194, 1224, 1254, 1283, 1300, 
+       1330, 1360, 1389, 1406, 1436, 1466, 1495, 1506, 
+       1514, 1521, 1524, 1526, 1529, 1532, 1534, 1541, 
+       1553, 1562, 1566, 1575, 1587, 1600, 1613, 1625, 
+       1636, 1649, 1661, 1672, 1685, 1697, 1708, 1721, 
+       1733, 1743, 1756, 1773, 1802, 1814, 1844, 1874, 
+       1891, 1908, 1925, 1942, 1959, 1989, 2019, 2036, 
+       2053, 2070, 2087, 2104, 2134, 2164, 2181, 2198, 
+       2215, 2232, 2249, 2279, 2309, 2326, 2343, 2360, 
+       2377, 2394, 2424, 2454, 2484, 2514, 2543, 2560, 
+       2590, 2620, 2649, 2666, 2696, 2726, 2755, 2772, 
+       2802, 2832, 2861, 2878, 2908, 2938, 2967, 2978, 
+       2986, 2993, 2996, 2998, 3001, 3004, 3006, 3013, 
+       3025, 3034, 3038, 3047, 3059, 3072, 3085, 3097, 
+       3108, 3121, 3133, 3144, 3157, 3169, 3180, 3193, 
+       3205, 3215, 3228, 3245, 3274, 3286, 3316, 3346, 
+       3363, 3380, 3397, 3414, 3431, 3461, 3491, 3508, 
+       3525, 3542, 3559, 3576, 3606, 3636, 3653, 3670, 
+       3687, 3704, 3721, 3751, 3781, 3798, 3815, 3832, 
+       3849, 3861, 3878, 3908, 3938, 3967, 3984, 4014, 
+       4044, 4073, 4090, 4120, 4150, 4179, 4196, 4226, 
+       4256, 4285, 4302, 4332, 4362, 4391, 4402, 4410, 
+       4417, 4420, 4422, 4425, 4428, 4430, 4437, 4449, 
+       4458, 4462, 4471, 4483, 4496, 4509, 4521, 4532, 
+       4545, 4557, 4568, 4581, 4593, 4604, 4617, 4629, 
+       4639, 4652, 4669, 4698, 4710, 4740, 4770, 4787, 
+       4804, 4821, 4838, 4855, 4885, 4915, 4932, 4949, 
+       4966, 4983, 5000, 5030, 5060, 5077, 5094, 5111, 
+       5128, 5145, 5175, 5205, 5222, 5239, 5256, 5273, 
+       5290, 5302, 5332, 5344, 5374, 5404, 5433, 5450, 
+       5480, 5510, 5539, 5556, 5586, 5616, 5645, 5662, 
+       5692, 5722, 5751, 5768, 5798, 5828, 5857, 5868, 
+       5876, 5883, 5886, 5888, 5891, 5894, 5896, 5903, 
+       5915, 5924, 5928, 5937, 5949, 5962, 5975, 5987, 
+       5998, 6011, 6023, 6034, 6047, 6059, 6070, 6083, 
+       6095, 6105, 6118, 6135, 6164, 6176, 6206, 6236, 
+       6253, 6270, 6287, 6304, 6321, 6351, 6381, 6398, 
+       6415, 6432, 6449, 6466, 6496, 6526, 6543, 6560, 
+       6577, 6594, 6611, 6641, 6671, 6688, 6705, 6722, 
+       6739, 6756, 6786, 6818, 6848, 6880, 6892, 6909, 
+       6939, 6969, 6998, 7005, 7008, 7010, 7013, 7016, 
+       7018, 7025, 7055, 7085, 7102, 7115, 7127, 7138, 
+       7151, 7163, 7174, 7187, 7199, 7210, 7223, 7235, 
+       7243, 7255, 7264, 7268, 7277, 7289, 7306, 7315, 
+       7319, 7326, 7329, 7331, 7334, 7337, 7339
 };
 
 static const short _indic_syllable_machine_indicies[] = {
 };
 
 static const short _indic_syllable_machine_indicies[] = {
@@ -351,625 +363,878 @@ static const short _indic_syllable_machine_indicies[] = {
        172, 0, 173, 0, 174, 159, 159, 160, 
        0, 175, 0, 176, 0, 177, 156, 156, 
        157, 0, 178, 0, 179, 0, 181, 182, 
        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
+       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, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 207, 197, 208, 199, 209, 209, 
+       5, 202, 203, 204, 197, 197, 197, 205, 
+       197, 197, 206, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       207, 197, 199, 209, 209, 5, 202, 203, 
+       204, 197, 197, 197, 205, 197, 197, 206, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 207, 197, 210, 
+       197, 197, 197, 18, 211, 197, 202, 203, 
+       204, 197, 197, 197, 212, 197, 210, 197, 
+       213, 214, 215, 216, 5, 202, 203, 204, 
+       197, 197, 35, 217, 197, 197, 206, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 207, 197, 218, 214, 
+       219, 219, 5, 202, 203, 204, 197, 197, 
+       197, 217, 197, 197, 206, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 207, 197, 214, 219, 219, 5, 
+       202, 203, 204, 197, 197, 197, 217, 197, 
+       197, 206, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 207, 
+       197, 220, 197, 197, 197, 18, 221, 197, 
+       202, 203, 204, 197, 197, 197, 212, 197, 
+       220, 197, 222, 223, 224, 225, 5, 202, 
+       203, 204, 197, 197, 33, 226, 197, 197, 
+       206, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 207, 197, 
+       227, 223, 228, 228, 5, 202, 203, 204, 
+       197, 197, 197, 226, 197, 197, 206, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 207, 197, 223, 228, 
+       228, 5, 202, 203, 204, 197, 197, 197, 
+       226, 197, 197, 206, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 207, 197, 229, 197, 197, 197, 18, 
+       230, 197, 202, 203, 204, 197, 197, 197, 
+       212, 197, 229, 197, 231, 232, 233, 234, 
+       5, 202, 203, 204, 197, 197, 31, 235, 
+       197, 197, 206, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       207, 197, 236, 232, 237, 237, 5, 202, 
+       203, 204, 197, 197, 197, 235, 197, 197, 
+       206, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 207, 197, 
+       232, 237, 237, 5, 202, 203, 204, 197, 
+       197, 197, 235, 197, 197, 206, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 207, 197, 238, 197, 197, 
+       197, 18, 239, 197, 202, 203, 204, 197, 
+       197, 197, 212, 197, 238, 197, 240, 241, 
+       242, 243, 5, 202, 203, 204, 197, 197, 
+       29, 244, 197, 197, 206, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 207, 197, 245, 241, 246, 246, 
+       5, 202, 203, 204, 197, 197, 197, 244, 
+       197, 197, 206, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       207, 197, 241, 246, 246, 5, 202, 203, 
+       204, 197, 197, 197, 244, 197, 197, 206, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 207, 197, 18, 
+       247, 197, 202, 203, 204, 197, 197, 197, 
+       212, 197, 202, 203, 204, 197, 197, 197, 
+       212, 197, 248, 197, 197, 249, 203, 204, 
+       197, 203, 204, 197, 250, 197, 203, 251, 
+       197, 203, 252, 197, 203, 197, 248, 197, 
+       197, 197, 203, 204, 197, 253, 197, 254, 
+       255, 197, 202, 203, 204, 197, 197, 3, 
+       197, 2, 197, 197, 197, 197, 202, 203, 
+       204, 197, 202, 203, 204, 197, 253, 197, 
+       197, 197, 197, 202, 203, 204, 197, 253, 
+       197, 254, 197, 197, 202, 203, 204, 197, 
+       197, 3, 197, 18, 197, 256, 256, 5, 
+       202, 203, 204, 197, 197, 197, 212, 197, 
+       257, 27, 258, 259, 8, 202, 203, 204, 
+       197, 197, 197, 212, 197, 27, 258, 259, 
+       8, 202, 203, 204, 197, 197, 197, 212, 
+       197, 258, 258, 8, 202, 203, 204, 197, 
+       197, 197, 212, 197, 260, 24, 261, 262, 
+       11, 202, 203, 204, 197, 197, 197, 212, 
+       197, 24, 261, 262, 11, 202, 203, 204, 
+       197, 197, 197, 212, 197, 261, 261, 11, 
+       202, 203, 204, 197, 197, 197, 212, 197, 
+       263, 21, 264, 265, 14, 202, 203, 204, 
+       197, 197, 197, 212, 197, 21, 264, 265, 
+       14, 202, 203, 204, 197, 197, 197, 212, 
+       197, 264, 264, 14, 202, 203, 204, 197, 
+       197, 197, 212, 197, 266, 18, 197, 267, 
+       197, 202, 203, 204, 197, 197, 197, 212, 
+       197, 18, 197, 267, 197, 202, 203, 204, 
+       197, 197, 197, 212, 197, 268, 197, 202, 
+       203, 204, 197, 197, 197, 212, 197, 18, 
+       197, 197, 197, 197, 202, 203, 204, 197, 
+       197, 197, 212, 197, 1, 2, 197, 197, 
+       18, 247, 197, 202, 203, 204, 197, 197, 
+       197, 212, 197, 1, 197, 241, 246, 246, 
+       5, 202, 203, 204, 197, 197, 197, 244, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       207, 197, 241, 246, 246, 5, 202, 203, 
+       204, 197, 197, 197, 244, 197, 240, 241, 
+       246, 246, 5, 202, 203, 204, 197, 197, 
+       197, 244, 197, 197, 206, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 207, 197, 240, 241, 242, 246, 
+       5, 202, 203, 204, 197, 197, 29, 244, 
+       197, 197, 206, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       207, 197, 238, 197, 269, 197, 256, 256, 
+       5, 202, 203, 204, 197, 197, 197, 212, 
+       197, 238, 197, 238, 197, 197, 197, 197, 
+       197, 197, 202, 203, 204, 197, 197, 197, 
+       212, 197, 238, 197, 238, 197, 197, 197, 
+       197, 270, 197, 202, 203, 204, 197, 197, 
+       197, 212, 197, 238, 197, 238, 197, 269, 
+       197, 197, 197, 197, 202, 203, 204, 197, 
+       197, 197, 212, 197, 238, 197, 238, 2, 
+       197, 197, 18, 239, 197, 202, 203, 204, 
+       197, 197, 197, 212, 197, 238, 197, 231, 
+       232, 237, 237, 5, 202, 203, 204, 197, 
+       197, 197, 235, 197, 197, 206, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 207, 197, 231, 232, 233, 
+       237, 5, 202, 203, 204, 197, 197, 31, 
+       235, 197, 197, 206, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 207, 197, 229, 197, 271, 197, 256, 
+       256, 5, 202, 203, 204, 197, 197, 197, 
+       212, 197, 229, 197, 229, 197, 197, 197, 
+       197, 197, 197, 202, 203, 204, 197, 197, 
+       197, 212, 197, 229, 197, 229, 197, 197, 
+       197, 197, 272, 197, 202, 203, 204, 197, 
+       197, 197, 212, 197, 229, 197, 229, 197, 
+       271, 197, 197, 197, 197, 202, 203, 204, 
+       197, 197, 197, 212, 197, 229, 197, 229, 
+       2, 197, 197, 18, 230, 197, 202, 203, 
+       204, 197, 197, 197, 212, 197, 229, 197, 
+       222, 223, 228, 228, 5, 202, 203, 204, 
+       197, 197, 197, 226, 197, 197, 206, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 207, 197, 222, 223, 
+       224, 228, 5, 202, 203, 204, 197, 197, 
+       33, 226, 197, 197, 206, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 207, 197, 220, 197, 273, 197, 
+       256, 256, 5, 202, 203, 204, 197, 197, 
+       197, 212, 197, 220, 197, 220, 197, 197, 
+       197, 197, 197, 197, 202, 203, 204, 197, 
+       197, 197, 212, 197, 220, 197, 220, 197, 
+       197, 197, 197, 274, 197, 202, 203, 204, 
+       197, 197, 197, 212, 197, 220, 197, 220, 
+       197, 273, 197, 197, 197, 197, 202, 203, 
+       204, 197, 197, 197, 212, 197, 220, 197, 
+       220, 2, 197, 197, 18, 221, 197, 202, 
+       203, 204, 197, 197, 197, 212, 197, 220, 
+       197, 213, 214, 219, 219, 5, 202, 203, 
+       204, 197, 197, 197, 217, 197, 197, 206, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 207, 197, 213, 
+       214, 215, 219, 5, 202, 203, 204, 197, 
+       197, 35, 217, 197, 197, 206, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 207, 197, 210, 197, 275, 
+       197, 256, 256, 5, 202, 203, 204, 197, 
+       197, 197, 212, 197, 210, 197, 210, 197, 
+       197, 197, 197, 197, 197, 202, 203, 204, 
+       197, 197, 197, 212, 197, 210, 197, 210, 
+       197, 197, 197, 197, 276, 197, 202, 203, 
+       204, 197, 197, 197, 212, 197, 210, 197, 
+       210, 197, 275, 197, 197, 197, 197, 202, 
+       203, 204, 197, 197, 197, 212, 197, 210, 
+       197, 210, 2, 197, 197, 18, 211, 197, 
+       202, 203, 204, 197, 197, 197, 212, 197, 
+       210, 197, 198, 199, 209, 209, 5, 202, 
+       203, 204, 197, 197, 197, 205, 197, 197, 
+       206, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 207, 197, 
+       198, 199, 200, 209, 5, 202, 203, 204, 
+       197, 197, 37, 205, 197, 197, 206, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 207, 197, 278, 279, 
+       280, 281, 43, 282, 283, 284, 277, 277, 
+       75, 285, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 288, 279, 289, 281, 
+       43, 282, 283, 284, 277, 277, 277, 285, 
+       277, 277, 286, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       287, 277, 279, 289, 281, 43, 282, 283, 
+       284, 277, 277, 277, 285, 277, 277, 286, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 287, 277, 290, 
+       277, 277, 277, 56, 291, 277, 282, 283, 
+       284, 277, 277, 277, 292, 277, 290, 277, 
+       293, 294, 295, 296, 43, 282, 283, 284, 
+       277, 277, 73, 297, 277, 277, 286, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 287, 277, 298, 294, 
+       299, 299, 43, 282, 283, 284, 277, 277, 
+       277, 297, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 294, 299, 299, 43, 
+       282, 283, 284, 277, 277, 277, 297, 277, 
+       277, 286, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 287, 
+       277, 300, 277, 277, 277, 56, 301, 277, 
+       282, 283, 284, 277, 277, 277, 292, 277, 
+       300, 277, 302, 303, 304, 305, 43, 282, 
+       283, 284, 277, 277, 71, 306, 277, 277, 
+       286, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 287, 277, 
+       307, 303, 308, 308, 43, 282, 283, 284, 
+       277, 277, 277, 306, 277, 277, 286, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 287, 277, 303, 308, 
+       308, 43, 282, 283, 284, 277, 277, 277, 
+       306, 277, 277, 286, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 287, 277, 309, 277, 277, 277, 56, 
+       310, 277, 282, 283, 284, 277, 277, 277, 
+       292, 277, 309, 277, 311, 312, 313, 314, 
+       43, 282, 283, 284, 277, 277, 69, 315, 
+       277, 277, 286, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       287, 277, 316, 312, 317, 317, 43, 282, 
+       283, 284, 277, 277, 277, 315, 277, 277, 
+       286, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 287, 277, 
+       312, 317, 317, 43, 282, 283, 284, 277, 
+       277, 277, 315, 277, 277, 286, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 287, 277, 318, 277, 277, 
+       277, 56, 319, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 318, 277, 320, 321, 
+       322, 323, 43, 282, 283, 284, 277, 277, 
+       67, 324, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 325, 321, 326, 326, 
+       43, 282, 283, 284, 277, 277, 277, 324, 
+       277, 277, 286, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       287, 277, 321, 326, 326, 43, 282, 283, 
+       284, 277, 277, 277, 324, 277, 277, 286, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 287, 277, 56, 
+       327, 277, 282, 283, 284, 277, 277, 277, 
+       292, 277, 282, 283, 284, 277, 277, 277, 
+       292, 277, 328, 277, 277, 329, 283, 284, 
+       277, 283, 284, 277, 330, 277, 283, 331, 
+       277, 283, 332, 277, 283, 277, 328, 277, 
+       277, 277, 283, 284, 277, 333, 277, 334, 
+       335, 277, 282, 283, 284, 277, 277, 41, 
+       277, 40, 277, 277, 277, 277, 282, 283, 
+       284, 277, 282, 283, 284, 277, 333, 277, 
+       277, 277, 277, 282, 283, 284, 277, 333, 
+       277, 334, 277, 277, 282, 283, 284, 277, 
+       277, 41, 277, 56, 277, 336, 336, 43, 
+       282, 283, 284, 277, 277, 277, 292, 277, 
+       337, 65, 338, 339, 46, 282, 283, 284, 
+       277, 277, 277, 292, 277, 65, 338, 339, 
+       46, 282, 283, 284, 277, 277, 277, 292, 
+       277, 338, 338, 46, 282, 283, 284, 277, 
+       277, 277, 292, 277, 340, 62, 341, 342, 
+       49, 282, 283, 284, 277, 277, 277, 292, 
+       277, 62, 341, 342, 49, 282, 283, 284, 
+       277, 277, 277, 292, 277, 341, 341, 49, 
+       282, 283, 284, 277, 277, 277, 292, 277, 
+       343, 59, 344, 345, 52, 282, 283, 284, 
+       277, 277, 277, 292, 277, 59, 344, 345, 
+       52, 282, 283, 284, 277, 277, 277, 292, 
+       277, 344, 344, 52, 282, 283, 284, 277, 
+       277, 277, 292, 277, 346, 56, 277, 347, 
+       277, 282, 283, 284, 277, 277, 277, 292, 
+       277, 56, 277, 347, 277, 282, 283, 284, 
+       277, 277, 277, 292, 277, 348, 277, 282, 
+       283, 284, 277, 277, 277, 292, 277, 56, 
+       277, 277, 277, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 39, 40, 277, 277, 
+       56, 327, 277, 282, 283, 284, 277, 277, 
+       277, 292, 277, 39, 277, 321, 326, 326, 
+       43, 282, 283, 284, 277, 277, 277, 324, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       287, 277, 321, 326, 326, 43, 282, 283, 
+       284, 277, 277, 277, 324, 277, 320, 321, 
+       326, 326, 43, 282, 283, 284, 277, 277, 
+       277, 324, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 320, 321, 322, 326, 
+       43, 282, 283, 284, 277, 277, 67, 324, 
+       277, 277, 286, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       287, 277, 318, 277, 349, 277, 336, 336, 
+       43, 282, 283, 284, 277, 277, 277, 292, 
+       277, 318, 277, 318, 277, 277, 277, 277, 
+       277, 277, 282, 283, 284, 277, 277, 277, 
+       292, 277, 318, 277, 318, 277, 277, 277, 
+       277, 350, 277, 282, 283, 284, 277, 277, 
+       277, 292, 277, 318, 277, 318, 277, 349, 
+       277, 277, 277, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 318, 277, 318, 40, 
+       277, 277, 56, 319, 277, 282, 283, 284, 
+       277, 277, 277, 292, 277, 318, 277, 311, 
+       312, 317, 317, 43, 282, 283, 284, 277, 
+       277, 277, 315, 277, 277, 286, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 287, 277, 311, 312, 313, 
+       317, 43, 282, 283, 284, 277, 277, 69, 
+       315, 277, 277, 286, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 287, 277, 309, 277, 351, 277, 336, 
+       336, 43, 282, 283, 284, 277, 277, 277, 
+       292, 277, 309, 277, 309, 277, 277, 277, 
+       277, 277, 277, 282, 283, 284, 277, 277, 
+       277, 292, 277, 309, 277, 309, 277, 277, 
+       277, 277, 352, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 309, 277, 309, 277, 
+       351, 277, 277, 277, 277, 282, 283, 284, 
+       277, 277, 277, 292, 277, 309, 277, 309, 
+       40, 277, 277, 56, 310, 277, 282, 283, 
+       284, 277, 277, 277, 292, 277, 309, 277, 
+       302, 303, 308, 308, 43, 282, 283, 284, 
+       277, 277, 277, 306, 277, 277, 286, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 287, 277, 302, 303, 
+       304, 308, 43, 282, 283, 284, 277, 277, 
+       71, 306, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 300, 277, 353, 277, 
+       336, 336, 43, 282, 283, 284, 277, 277, 
+       277, 292, 277, 300, 277, 300, 277, 277, 
+       277, 277, 277, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 300, 277, 300, 277, 
+       277, 277, 277, 354, 277, 282, 283, 284, 
+       277, 277, 277, 292, 277, 300, 277, 300, 
+       277, 353, 277, 277, 277, 277, 282, 283, 
+       284, 277, 277, 277, 292, 277, 300, 277, 
+       300, 40, 277, 277, 56, 301, 277, 282, 
+       283, 284, 277, 277, 277, 292, 277, 300, 
+       277, 293, 294, 299, 299, 43, 282, 283, 
+       284, 277, 277, 277, 297, 277, 277, 286, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 277, 277, 287, 277, 293, 
+       294, 295, 299, 43, 282, 283, 284, 277, 
+       277, 73, 297, 277, 277, 286, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 277, 287, 277, 290, 277, 355, 
+       277, 336, 336, 43, 282, 283, 284, 277, 
+       277, 277, 292, 277, 290, 277, 290, 277, 
+       277, 277, 277, 277, 277, 282, 283, 284, 
+       277, 277, 277, 292, 277, 290, 277, 290, 
+       277, 277, 277, 277, 356, 277, 282, 283, 
+       284, 277, 277, 277, 292, 277, 290, 277, 
+       290, 277, 355, 277, 277, 277, 277, 282, 
+       283, 284, 277, 277, 277, 292, 277, 290, 
+       277, 74, 42, 42, 43, 277, 277, 277, 
+       277, 277, 277, 74, 277, 290, 40, 277, 
+       277, 56, 291, 277, 282, 283, 284, 277, 
+       277, 277, 292, 277, 290, 277, 278, 279, 
+       289, 281, 43, 282, 283, 284, 277, 277, 
+       277, 285, 277, 277, 286, 277, 277, 277, 
+       277, 277, 277, 277, 277, 277, 277, 277, 
+       277, 277, 287, 277, 358, 184, 359, 359, 
+       81, 187, 188, 189, 357, 357, 357, 191, 
+       357, 357, 194, 357, 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, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 196, 357, 360, 
+       357, 357, 357, 95, 361, 357, 187, 188, 
+       189, 357, 357, 357, 362, 357, 360, 357, 
+       363, 364, 365, 366, 81, 187, 188, 189, 
+       357, 357, 112, 367, 357, 357, 194, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 196, 357, 368, 364, 
+       369, 369, 81, 187, 188, 189, 357, 357, 
+       357, 367, 357, 357, 194, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 196, 357, 364, 369, 369, 81, 
+       187, 188, 189, 357, 357, 357, 367, 357, 
+       357, 194, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 196, 
+       357, 370, 357, 357, 357, 95, 371, 357, 
+       187, 188, 189, 357, 357, 357, 362, 357, 
+       370, 357, 372, 373, 374, 375, 81, 187, 
+       188, 189, 357, 357, 110, 376, 357, 357, 
+       194, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 196, 357, 
+       377, 373, 378, 378, 81, 187, 188, 189, 
+       357, 357, 357, 376, 357, 357, 194, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 196, 357, 373, 378, 
+       378, 81, 187, 188, 189, 357, 357, 357, 
+       376, 357, 357, 194, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 196, 357, 379, 357, 357, 357, 95, 
+       380, 357, 187, 188, 189, 357, 357, 357, 
+       362, 357, 379, 357, 381, 382, 383, 384, 
+       81, 187, 188, 189, 357, 357, 108, 385, 
+       357, 357, 194, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       196, 357, 386, 382, 387, 387, 81, 187, 
+       188, 189, 357, 357, 357, 385, 357, 357, 
+       194, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 196, 357, 
+       382, 387, 387, 81, 187, 188, 189, 357, 
+       357, 357, 385, 357, 357, 194, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 196, 357, 388, 357, 357, 
+       357, 95, 389, 357, 187, 188, 189, 357, 
+       357, 357, 362, 357, 388, 357, 390, 391, 
+       392, 393, 81, 187, 188, 189, 357, 357, 
+       106, 394, 357, 357, 194, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 196, 357, 395, 391, 396, 396, 
+       81, 187, 188, 189, 357, 357, 357, 394, 
+       357, 357, 194, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       196, 357, 391, 396, 396, 81, 187, 188, 
+       189, 357, 357, 357, 394, 357, 357, 194, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 196, 357, 95, 
+       397, 357, 187, 188, 189, 357, 357, 357, 
+       362, 357, 187, 188, 189, 357, 357, 357, 
+       362, 357, 398, 357, 357, 399, 188, 189, 
+       357, 188, 189, 357, 400, 357, 188, 401, 
+       357, 188, 402, 357, 188, 357, 398, 357, 
+       357, 357, 188, 189, 357, 403, 357, 404, 
+       405, 357, 187, 188, 189, 357, 357, 79, 
+       357, 78, 357, 357, 357, 357, 187, 188, 
+       189, 357, 187, 188, 189, 357, 403, 357, 
+       357, 357, 357, 187, 188, 189, 357, 403, 
+       357, 404, 357, 357, 187, 188, 189, 357, 
+       357, 79, 357, 95, 357, 406, 406, 81, 
+       187, 188, 189, 357, 357, 357, 362, 357, 
+       407, 104, 408, 409, 85, 187, 188, 189, 
+       357, 357, 357, 362, 357, 104, 408, 409, 
+       85, 187, 188, 189, 357, 357, 357, 362, 
+       357, 408, 408, 85, 187, 188, 189, 357, 
+       357, 357, 362, 357, 410, 101, 411, 412, 
+       88, 187, 188, 189, 357, 357, 357, 362, 
+       357, 101, 411, 412, 88, 187, 188, 189, 
+       357, 357, 357, 362, 357, 411, 411, 88, 
+       187, 188, 189, 357, 357, 357, 362, 357, 
+       413, 98, 414, 415, 91, 187, 188, 189, 
+       357, 357, 357, 362, 357, 98, 414, 415, 
+       91, 187, 188, 189, 357, 357, 357, 362, 
+       357, 414, 414, 91, 187, 188, 189, 357, 
+       357, 357, 362, 357, 416, 95, 357, 417, 
+       357, 187, 188, 189, 357, 357, 357, 362, 
+       357, 95, 357, 417, 357, 187, 188, 189, 
+       357, 357, 357, 362, 357, 418, 357, 187, 
+       188, 189, 357, 357, 357, 362, 357, 95, 
+       357, 357, 357, 357, 187, 188, 189, 357, 
+       357, 357, 362, 357, 77, 78, 357, 357, 
+       95, 397, 357, 187, 188, 189, 357, 357, 
+       357, 362, 357, 77, 357, 391, 396, 396, 
+       81, 187, 188, 189, 357, 357, 357, 394, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       196, 357, 391, 396, 396, 81, 187, 188, 
+       189, 357, 357, 357, 394, 357, 390, 391, 
+       396, 396, 81, 187, 188, 189, 357, 357, 
+       357, 394, 357, 357, 194, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 196, 357, 390, 391, 392, 396, 
+       81, 187, 188, 189, 357, 357, 106, 394, 
+       357, 357, 194, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       196, 357, 388, 357, 419, 357, 406, 406, 
+       81, 187, 188, 189, 357, 357, 357, 362, 
+       357, 388, 357, 388, 357, 357, 357, 357, 
+       357, 357, 187, 188, 189, 357, 357, 357, 
+       362, 357, 388, 357, 388, 357, 357, 357, 
+       357, 420, 357, 187, 188, 189, 357, 357, 
+       357, 362, 357, 388, 357, 388, 357, 419, 
+       357, 357, 357, 357, 187, 188, 189, 357, 
+       357, 357, 362, 357, 388, 357, 388, 78, 
+       357, 357, 95, 389, 357, 187, 188, 189, 
+       357, 357, 357, 362, 357, 388, 357, 381, 
+       382, 387, 387, 81, 187, 188, 189, 357, 
+       357, 357, 385, 357, 357, 194, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 196, 357, 381, 382, 383, 
+       387, 81, 187, 188, 189, 357, 357, 108, 
+       385, 357, 357, 194, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 196, 357, 379, 357, 421, 357, 406, 
+       406, 81, 187, 188, 189, 357, 357, 357, 
+       362, 357, 379, 357, 379, 357, 357, 357, 
+       357, 357, 357, 187, 188, 189, 357, 357, 
+       357, 362, 357, 379, 357, 379, 357, 357, 
+       357, 357, 422, 357, 187, 188, 189, 357, 
+       357, 357, 362, 357, 379, 357, 379, 357, 
+       421, 357, 357, 357, 357, 187, 188, 189, 
+       357, 357, 357, 362, 357, 379, 357, 379, 
+       78, 357, 357, 95, 380, 357, 187, 188, 
+       189, 357, 357, 357, 362, 357, 379, 357, 
+       372, 373, 378, 378, 81, 187, 188, 189, 
+       357, 357, 357, 376, 357, 357, 194, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 196, 357, 372, 373, 
+       374, 378, 81, 187, 188, 189, 357, 357, 
+       110, 376, 357, 357, 194, 357, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 196, 357, 370, 357, 423, 357, 
+       406, 406, 81, 187, 188, 189, 357, 357, 
+       357, 362, 357, 370, 357, 370, 357, 357, 
+       357, 357, 357, 357, 187, 188, 189, 357, 
+       357, 357, 362, 357, 370, 357, 370, 357, 
+       357, 357, 357, 424, 357, 187, 188, 189, 
+       357, 357, 357, 362, 357, 370, 357, 370, 
+       357, 423, 357, 357, 357, 357, 187, 188, 
+       189, 357, 357, 357, 362, 357, 370, 357, 
+       370, 78, 357, 357, 95, 371, 357, 187, 
+       188, 189, 357, 357, 357, 362, 357, 370, 
+       357, 363, 364, 369, 369, 81, 187, 188, 
+       189, 357, 357, 357, 367, 357, 357, 194, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 357, 357, 196, 357, 363, 
+       364, 365, 369, 81, 187, 188, 189, 357, 
+       357, 112, 367, 357, 357, 194, 357, 357, 
+       357, 357, 357, 357, 357, 357, 357, 357, 
+       357, 357, 357, 196, 357, 360, 357, 425, 
+       357, 406, 406, 81, 187, 188, 189, 357, 
+       357, 357, 362, 357, 360, 357, 360, 357, 
+       357, 357, 357, 357, 357, 187, 188, 189, 
+       357, 357, 357, 362, 357, 360, 357, 360, 
+       357, 357, 357, 357, 426, 357, 187, 188, 
+       189, 357, 357, 357, 362, 357, 360, 357, 
+       360, 357, 425, 357, 357, 357, 357, 187, 
+       188, 189, 357, 357, 357, 362, 357, 360, 
+       357, 360, 78, 357, 357, 95, 361, 357, 
+       187, 188, 189, 357, 357, 357, 362, 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, 357, 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, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 438, 428, 439, 430, 
+       432, 432, 119, 433, 434, 435, 428, 428, 
+       428, 436, 428, 428, 437, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 438, 428, 430, 432, 432, 119, 
+       433, 434, 435, 428, 428, 428, 436, 428, 
+       428, 437, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 438, 
+       428, 440, 428, 428, 428, 132, 441, 428, 
+       433, 434, 435, 428, 428, 428, 442, 428, 
+       440, 428, 443, 444, 445, 446, 119, 433, 
+       434, 435, 428, 428, 149, 447, 428, 428, 
+       437, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 438, 428, 
+       448, 444, 449, 449, 119, 433, 434, 435, 
+       428, 428, 428, 447, 428, 428, 437, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 438, 428, 444, 449, 
+       449, 119, 433, 434, 435, 428, 428, 428, 
+       447, 428, 428, 437, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 438, 428, 450, 428, 428, 428, 132, 
+       451, 428, 433, 434, 435, 428, 428, 428, 
+       442, 428, 450, 428, 452, 453, 454, 455, 
+       119, 433, 434, 435, 428, 428, 147, 456, 
+       428, 428, 437, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       438, 428, 457, 453, 458, 458, 119, 433, 
+       434, 435, 428, 428, 428, 456, 428, 428, 
+       437, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 438, 428, 
+       453, 458, 458, 119, 433, 434, 435, 428, 
+       428, 428, 456, 428, 428, 437, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 438, 428, 459, 428, 428, 
+       428, 132, 460, 428, 433, 434, 435, 428, 
+       428, 428, 442, 428, 459, 428, 461, 462, 
+       463, 464, 119, 433, 434, 435, 428, 428, 
+       145, 465, 428, 428, 437, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 438, 428, 466, 462, 467, 467, 
+       119, 433, 434, 435, 428, 428, 428, 465, 
+       428, 428, 437, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       438, 428, 462, 467, 467, 119, 433, 434, 
+       435, 428, 428, 428, 465, 428, 428, 437, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 438, 428, 468, 
+       428, 428, 428, 132, 469, 428, 433, 434, 
+       435, 428, 428, 428, 442, 428, 468, 428, 
+       470, 471, 472, 473, 119, 433, 434, 435, 
+       428, 428, 143, 474, 428, 428, 437, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 438, 428, 475, 471, 
+       476, 476, 119, 433, 434, 435, 428, 428, 
+       428, 474, 428, 428, 437, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 438, 428, 471, 476, 476, 119, 
+       433, 434, 435, 428, 428, 428, 474, 428, 
+       428, 437, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 438, 
+       428, 132, 477, 428, 433, 434, 435, 428, 
+       428, 428, 442, 428, 433, 434, 435, 428, 
+       428, 428, 442, 428, 478, 428, 428, 479, 
+       434, 435, 428, 434, 435, 428, 480, 428, 
+       434, 481, 428, 434, 482, 428, 434, 428, 
+       478, 428, 428, 428, 434, 435, 428, 483, 
+       428, 484, 485, 428, 433, 434, 435, 428, 
+       428, 117, 428, 116, 428, 428, 428, 428, 
+       433, 434, 435, 428, 433, 434, 435, 428, 
+       483, 428, 428, 428, 428, 433, 434, 435, 
+       428, 483, 428, 484, 428, 428, 433, 434, 
+       435, 428, 428, 117, 428, 132, 428, 486, 
+       486, 119, 433, 434, 435, 428, 428, 428, 
+       442, 428, 487, 141, 488, 489, 122, 433, 
+       434, 435, 428, 428, 428, 442, 428, 141, 
+       488, 489, 122, 433, 434, 435, 428, 428, 
+       428, 442, 428, 488, 488, 122, 433, 434, 
+       435, 428, 428, 428, 442, 428, 490, 138, 
+       491, 492, 125, 433, 434, 435, 428, 428, 
+       428, 442, 428, 138, 491, 492, 125, 433, 
+       434, 435, 428, 428, 428, 442, 428, 491, 
+       491, 125, 433, 434, 435, 428, 428, 428, 
+       442, 428, 493, 135, 494, 495, 128, 433, 
+       434, 435, 428, 428, 428, 442, 428, 135, 
+       494, 495, 128, 433, 434, 435, 428, 428, 
+       428, 442, 428, 494, 494, 128, 433, 434, 
+       435, 428, 428, 428, 442, 428, 496, 132, 
+       428, 497, 428, 433, 434, 435, 428, 428, 
+       428, 442, 428, 132, 428, 497, 428, 433, 
+       434, 435, 428, 428, 428, 442, 428, 498, 
+       428, 433, 434, 435, 428, 428, 428, 442, 
+       428, 132, 428, 428, 428, 428, 433, 434, 
+       435, 428, 428, 428, 442, 428, 115, 116, 
+       428, 428, 132, 477, 428, 433, 434, 435, 
+       428, 428, 428, 442, 428, 115, 428, 471, 
+       476, 476, 119, 433, 434, 435, 428, 428, 
+       428, 474, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 438, 428, 471, 476, 476, 119, 
+       433, 434, 435, 428, 428, 428, 474, 428, 
+       470, 471, 476, 476, 119, 433, 434, 435, 
+       428, 428, 428, 474, 428, 428, 437, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 438, 428, 470, 471, 
+       472, 476, 119, 433, 434, 435, 428, 428, 
+       143, 474, 428, 428, 437, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 438, 428, 468, 428, 499, 428, 
+       486, 486, 119, 433, 434, 435, 428, 428, 
+       428, 442, 428, 468, 428, 468, 428, 428, 
+       428, 428, 428, 428, 433, 434, 435, 428, 
+       428, 428, 442, 428, 468, 428, 468, 428, 
+       428, 428, 428, 500, 428, 433, 434, 435, 
+       428, 428, 428, 442, 428, 468, 428, 468, 
+       428, 499, 428, 428, 428, 428, 433, 434, 
+       435, 428, 428, 428, 442, 428, 468, 428, 
+       468, 116, 428, 428, 132, 469, 428, 433, 
+       434, 435, 428, 428, 428, 442, 428, 468, 
+       428, 461, 462, 467, 467, 119, 433, 434, 
+       435, 428, 428, 428, 465, 428, 428, 437, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 438, 428, 461, 
+       462, 463, 467, 119, 433, 434, 435, 428, 
+       428, 145, 465, 428, 428, 437, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 438, 428, 459, 428, 501, 
+       428, 486, 486, 119, 433, 434, 435, 428, 
+       428, 428, 442, 428, 459, 428, 459, 428, 
+       428, 428, 428, 428, 428, 433, 434, 435, 
+       428, 428, 428, 442, 428, 459, 428, 459, 
+       428, 428, 428, 428, 502, 428, 433, 434, 
+       435, 428, 428, 428, 442, 428, 459, 428, 
+       459, 428, 501, 428, 428, 428, 428, 433, 
+       434, 435, 428, 428, 428, 442, 428, 459, 
+       428, 459, 116, 428, 428, 132, 460, 428, 
+       433, 434, 435, 428, 428, 428, 442, 428, 
+       459, 428, 452, 453, 458, 458, 119, 433, 
+       434, 435, 428, 428, 428, 456, 428, 428, 
+       437, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 438, 428, 
+       452, 453, 454, 458, 119, 433, 434, 435, 
+       428, 428, 147, 456, 428, 428, 437, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 438, 428, 450, 428, 
+       503, 428, 486, 486, 119, 433, 434, 435, 
+       428, 428, 428, 442, 428, 450, 428, 450, 
+       428, 428, 428, 428, 428, 428, 433, 434, 
+       435, 428, 428, 428, 442, 428, 450, 428, 
+       450, 428, 428, 428, 428, 504, 428, 433, 
+       434, 435, 428, 428, 428, 442, 428, 450, 
+       428, 450, 428, 503, 428, 428, 428, 428, 
+       433, 434, 435, 428, 428, 428, 442, 428, 
+       450, 428, 450, 116, 428, 428, 132, 451, 
+       428, 433, 434, 435, 428, 428, 428, 442, 
+       428, 450, 428, 443, 444, 449, 449, 119, 
+       433, 434, 435, 428, 428, 428, 447, 428, 
+       428, 437, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 438, 
+       428, 443, 444, 445, 449, 119, 433, 434, 
+       435, 428, 428, 149, 447, 428, 428, 437, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 438, 428, 440, 
+       428, 505, 428, 486, 486, 119, 433, 434, 
+       435, 428, 428, 428, 442, 428, 440, 428, 
+       440, 428, 428, 428, 428, 428, 428, 433, 
+       434, 435, 428, 428, 428, 442, 428, 440, 
+       428, 440, 428, 428, 428, 428, 506, 428, 
+       433, 434, 435, 428, 428, 428, 442, 428, 
+       440, 428, 440, 428, 505, 428, 428, 428, 
+       428, 433, 434, 435, 428, 428, 428, 442, 
+       428, 440, 428, 440, 116, 428, 428, 132, 
+       441, 428, 433, 434, 435, 428, 428, 428, 
+       442, 428, 440, 428, 429, 430, 432, 432, 
+       119, 433, 434, 435, 428, 428, 428, 436, 
+       428, 428, 437, 428, 428, 428, 428, 428, 
+       428, 428, 428, 428, 428, 428, 428, 428, 
+       438, 428, 181, 182, 183, 184, 507, 359, 
+       81, 187, 188, 189, 190, 190, 152, 191, 
+       357, 181, 194, 357, 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, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 207, 197, 
+       210, 182, 183, 184, 509, 510, 81, 511, 
+       512, 513, 197, 190, 152, 514, 197, 210, 
+       194, 197, 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, 516, 2, 357, 357, 
+       357, 426, 357, 187, 188, 189, 357, 357, 
+       357, 362, 357, 516, 357, 517, 364, 518, 
+       519, 81, 511, 512, 513, 197, 197, 153, 
+       367, 197, 197, 194, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 196, 197, 520, 364, 369, 369, 81, 
+       511, 512, 513, 197, 197, 197, 367, 197, 
+       197, 194, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 196, 
+       197, 364, 369, 369, 81, 511, 512, 513, 
+       197, 197, 197, 367, 197, 197, 194, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 196, 197, 521, 197, 
+       197, 522, 512, 513, 197, 512, 513, 197, 
+       250, 197, 512, 523, 197, 512, 524, 197, 
+       512, 197, 521, 197, 197, 197, 512, 513, 
+       197, 517, 364, 369, 369, 81, 511, 512, 
+       513, 197, 197, 197, 367, 197, 197, 194, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 197, 197, 196, 197, 517, 
+       364, 518, 369, 81, 511, 512, 513, 197, 
+       197, 153, 367, 197, 197, 194, 197, 197, 
+       197, 197, 197, 197, 197, 197, 197, 197, 
+       197, 197, 197, 196, 197, 210, 197, 275, 
+       113, 525, 525, 155, 202, 203, 204, 197, 
+       197, 197, 515, 197, 210, 197, 526, 179, 
+       527, 528, 157, 511, 512, 513, 197, 197, 
+       197, 529, 197, 179, 527, 528, 157, 511, 
+       512, 513, 197, 197, 197, 529, 197, 527, 
+       527, 157, 511, 512, 513, 197, 197, 197, 
+       529, 197, 530, 176, 531, 532, 160, 511, 
+       512, 513, 197, 197, 197, 529, 197, 176, 
+       531, 532, 160, 511, 512, 513, 197, 197, 
+       197, 529, 197, 531, 531, 160, 511, 512, 
+       513, 197, 197, 197, 529, 197, 533, 173, 
+       534, 535, 163, 511, 512, 513, 197, 197, 
+       197, 529, 197, 173, 534, 535, 163, 511, 
+       512, 513, 197, 197, 197, 529, 197, 534, 
+       534, 163, 511, 512, 513, 197, 197, 197, 
+       529, 197, 536, 170, 197, 537, 197, 511, 
+       512, 513, 197, 197, 197, 529, 197, 170, 
+       197, 537, 197, 511, 512, 513, 197, 197, 
+       197, 529, 197, 511, 512, 513, 197, 197, 
+       197, 529, 197, 538, 197, 539, 540, 197, 
+       511, 512, 513, 197, 197, 167, 197, 166, 
+       197, 197, 197, 197, 511, 512, 513, 197, 
+       511, 512, 513, 197, 538, 197, 197, 197, 
+       197, 511, 512, 513, 197, 538, 197, 539, 
+       197, 197, 511, 512, 513, 197, 197, 167, 
+       197, 516, 166, 357, 357, 95, 361, 357, 
+       187, 188, 189, 357, 357, 357, 362, 357, 
+       516, 357, 542, 541, 541, 541, 541, 543, 
+       544, 545, 541, 543, 544, 545, 541, 546, 
+       541, 541, 547, 544, 545, 541, 544, 545, 
+       541, 548, 541, 544, 549, 541, 544, 550, 
+       541, 544, 541, 546, 541, 541, 541, 544, 
+       545, 541, 0
 };
 
 static const short _indic_syllable_machine_trans_targs[] = {
 };
 
 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
+       170, 199, 201, 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, 279, 
+       281, 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, 358, 360, 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, 439, 441, 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, 353, 354, 411, 407, 
+       490, 491, 378, 526, 379, 170, 172, 174, 
+       35, 250, 192, 194, 195, 248, 219, 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, 198, 170, 196, 197, 200, 1, 203, 
+       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, 274, 275, 329, 299, 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, 278, 170, 276, 277, 280, 37, 283, 
+       38, 286, 41, 59, 289, 44, 56, 292, 
+       47, 53, 295, 50, 297, 304, 306, 311, 
+       313, 318, 320, 325, 327, 170, 332, 106, 
+       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, 357, 
+       170, 355, 356, 359, 73, 362, 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, 434, 435, 488, 459, 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, 438, 
+       170, 436, 437, 440, 108, 443, 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, 501, 525, 494, 495, 496, 144, 506, 
+       497, 499, 504, 502, 503, 145, 509, 147, 
+       167, 156, 512, 150, 164, 515, 153, 161, 
+       518, 158, 521, 157, 524, 170, 527, 528, 
+       530, 531, 529, 534, 170, 532, 533
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
@@ -996,48 +1261,52 @@ static const char _indic_syllable_machine_trans_actions[] = {
        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, 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, 12, 12, 0, 0, 0, 2, 2, 
+       6, 2, 6, 0, 6, 13, 2, 2, 
+       0, 2, 0, 0, 0, 2, 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, 
        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, 0, 14, 0, 0, 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, 0, 2, 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, 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, 16, 0, 0, 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, 0, 
+       18, 0, 0, 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, 0, 2, 2, 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, 
+       21, 0, 0, 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, 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
+       0, 0, 2, 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, 
+       0, 0, 0, 0, 23, 0, 0
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1103,7 +1372,11 @@ 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
 };
 
 static const char _indic_syllable_machine_from_state_actions[] = {
 };
 
 static const char _indic_syllable_machine_from_state_actions[] = {
@@ -1169,7 +1442,11 @@ 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
 };
 
 static const short _indic_syllable_machine_eof_trans[] = {
 };
 
 static const short _indic_syllable_machine_eof_trans[] = {
@@ -1194,48 +1471,52 @@ 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, 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
+       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, 542, 542
 };
 
 static const int indic_syllable_machine_start = 170;
 };
 
 static const int indic_syllable_machine_start = 170;
@@ -1249,7 +1530,7 @@ static const int indic_syllable_machine_en_main = 170;
 
 
 
 
 
 
-#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 97 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 
 #define found_syllable(syllable_type) \
 
 
 #define found_syllable(syllable_type) \
@@ -1265,11 +1546,11 @@ static const int indic_syllable_machine_en_main = 170;
 static void
 find_syllables (hb_buffer_t *buffer)
 {
 static void
 find_syllables (hb_buffer_t *buffer)
 {
-  unsigned int p, pe, eof, ts HB_UNUSED, te, act;
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 1273 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1554 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        {
        cs = indic_syllable_machine_start;
        ts = 0;
        {
        cs = indic_syllable_machine_start;
        ts = 0;
@@ -1277,7 +1558,7 @@ find_syllables (hb_buffer_t *buffer)
        act = 0;
        }
 
        act = 0;
        }
 
-#line 112 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 118 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 
   p = 0;
 
 
   p = 0;
@@ -1286,7 +1567,7 @@ find_syllables (hb_buffer_t *buffer)
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 1290 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1571 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        {
        int _slen;
        int _trans;
        {
        int _slen;
        int _trans;
@@ -1300,7 +1581,7 @@ _resume:
 #line 1 "NONE"
        {ts = p;}
        break;
 #line 1 "NONE"
        {ts = p;}
        break;
-#line 1304 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1585 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
        _keys = _indic_syllable_machine_trans_keys + (cs<<1);
        }
 
        _keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1323,59 +1604,67 @@ _eof_trans:
        {te = p+1;}
        break;
        case 14:
        {te = p+1;}
        break;
        case 14:
-#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p+1;{ found_syllable (consonant_syllable); }}
        break;
        case 16:
        {te = p+1;{ found_syllable (consonant_syllable); }}
        break;
        case 16:
-#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p+1;{ found_syllable (vowel_syllable); }}
        break;
        case 21:
        {te = p+1;{ found_syllable (vowel_syllable); }}
        break;
        case 21:
-#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p+1;{ found_syllable (standalone_cluster); }}
        break;
        {te = p+1;{ found_syllable (standalone_cluster); }}
        break;
+       case 23:
+#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (symbol_cluster); }}
+       break;
        case 18:
        case 18:
-#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p+1;{ found_syllable (broken_cluster); }}
        break;
        case 11:
        {te = p+1;{ found_syllable (broken_cluster); }}
        break;
        case 11:
-#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p+1;{ found_syllable (non_indic_cluster); }}
        break;
        case 13:
        {te = p+1;{ found_syllable (non_indic_cluster); }}
        break;
        case 13:
-#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p;p--;{ found_syllable (consonant_syllable); }}
        break;
        case 15:
        {te = p;p--;{ found_syllable (consonant_syllable); }}
        break;
        case 15:
-#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p;p--;{ found_syllable (vowel_syllable); }}
        break;
        case 20:
        {te = p;p--;{ found_syllable (vowel_syllable); }}
        break;
        case 20:
-#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p;p--;{ found_syllable (standalone_cluster); }}
        break;
        {te = p;p--;{ found_syllable (standalone_cluster); }}
        break;
+       case 22:
+#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (symbol_cluster); }}
+       break;
        case 17:
        case 17:
-#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p;p--;{ found_syllable (broken_cluster); }}
        break;
        case 19:
        {te = p;p--;{ found_syllable (broken_cluster); }}
        break;
        case 19:
-#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {te = p;p--;{ found_syllable (non_indic_cluster); }}
        break;
        case 1:
        {te = p;p--;{ found_syllable (non_indic_cluster); }}
        break;
        case 1:
-#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
        break;
        case 3:
        {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
        break;
        case 3:
-#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
        break;
        case 7:
        {{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
        break;
        case 7:
-#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
        break;
        case 4:
        {{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
        break;
        case 4:
-#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
        break;
        case 5:
        {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
        break;
        case 5:
@@ -1384,10 +1673,10 @@ _eof_trans:
        case 1:
        {{p = ((te))-1;} found_syllable (consonant_syllable); }
        break;
        case 1:
        {{p = ((te))-1;} found_syllable (consonant_syllable); }
        break;
-       case 4:
+       case 5:
        {{p = ((te))-1;} found_syllable (broken_cluster); }
        break;
        {{p = ((te))-1;} found_syllable (broken_cluster); }
        break;
-       case 5:
+       case 6:
        {{p = ((te))-1;} found_syllable (non_indic_cluster); }
        break;
        }
        {{p = ((te))-1;} found_syllable (non_indic_cluster); }
        break;
        }
@@ -1396,22 +1685,22 @@ _eof_trans:
        case 8:
 #line 1 "NONE"
        {te = p+1;}
        case 8:
 #line 1 "NONE"
        {te = p+1;}
-#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
        {act = 1;}
        break;
        case 6:
 #line 1 "NONE"
        {te = p+1;}
        {act = 1;}
        break;
        case 6:
 #line 1 "NONE"
        {te = p+1;}
-#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {act = 4;}
+#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {act = 5;}
        break;
        case 12:
 #line 1 "NONE"
        {te = p+1;}
        break;
        case 12:
 #line 1 "NONE"
        {te = p+1;}
-#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl"
-       {act = 5;}
+#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
+       {act = 6;}
        break;
        break;
-#line 1415 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1704 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
 _again:
        }
 
 _again:
@@ -1420,7 +1709,7 @@ _again:
 #line 1 "NONE"
        {ts = 0;}
        break;
 #line 1 "NONE"
        {ts = 0;}
        break;
-#line 1424 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1713 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
        }
 
        if ( ++p != pe )
        }
 
        if ( ++p != pe )
@@ -1436,7 +1725,7 @@ _again:
 
        }
 
 
        }
 
-#line 121 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 127 "../../src/hb-ot-shape-complex-indic-machine.rl"
 
 }
 
 
 }
 
index 11115c9..f6768a5 100644 (file)
@@ -49,15 +49,17 @@ M    = 7;
 SM   = 8;
 VD   = 9;
 A    = 10;
 SM   = 8;
 VD   = 9;
 A    = 10;
-NBSP = 11;
+PLACEHOLDER = 11;
 DOTTEDCIRCLE = 12;
 DOTTEDCIRCLE = 12;
-RS   = 13;
+RS    = 13;
 Coeng = 14;
 Repha = 15;
 Ra    = 16;
 CM    = 17;
 Coeng = 14;
 Repha = 15;
 Ra    = 16;
 CM    = 17;
+Symbol= 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
 n = ((ZWNJ?.RS)? (N.N?)?);     # is_consonant_modifier
 z = ZWJ|ZWNJ;                  # is_joiner
 h = H | Coeng;                 # is_halant_or_coeng
@@ -65,24 +67,28 @@ reph = (Ra H | Repha);              # possible reph
 
 cn = c.ZWJ?.n?;
 forced_rakar = ZWJ H ZWJ Ra;
 
 cn = c.ZWJ?.n?;
 forced_rakar = ZWJ H ZWJ Ra;
+symbol = Symbol.N?;
 matra_group = z{0,3}.M.N?.(H | forced_rakar)?;
 matra_group = z{0,3}.M.N?.(H | forced_rakar)?;
-syllable_tail =  (Coeng (cn|V))? (SM.ZWNJ?)? (VD VD?)?;
-place_holder = NBSP | DOTTEDCIRCLE;
+syllable_tail = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2};
+place_holder = PLACEHOLDER | DOTTEDCIRCLE;
 halant_group = (z?.h.(ZWJ.N?)?);
 final_halant_group = halant_group | h.ZWNJ;
 halant_group = (z?.h.(ZWJ.N?)?);
 final_halant_group = halant_group | h.ZWNJ;
-halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4});
+medial_group = CM?.CM2?;
+halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}) (Coeng (cn|V))?;
 
 
 
 
-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 =   (Repha? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
+symbol_cluster =       symbol syllable_tail;
+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); };
 other =                        any;
 
 main := |*
        consonant_syllable      => { found_syllable (consonant_syllable); };
        vowel_syllable          => { found_syllable (vowel_syllable); };
        standalone_cluster      => { found_syllable (standalone_cluster); };
+       symbol_cluster          => { found_syllable (symbol_cluster); };
        broken_cluster          => { found_syllable (broken_cluster); };
        other                   => { found_syllable (non_indic_cluster); };
 *|;
        broken_cluster          => { found_syllable (broken_cluster); };
        other                   => { found_syllable (non_indic_cluster); };
 *|;
@@ -103,7 +109,7 @@ main := |*
 static void
 find_syllables (hb_buffer_t *buffer)
 {
 static void
 find_syllables (hb_buffer_t *buffer)
 {
-  unsigned int p, pe, eof, ts HB_UNUSED, te, act;
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
   int cs;
   hb_glyph_info_t *info = buffer->info;
   %%{
   int cs;
   hb_glyph_info_t *info = buffer->info;
   %%{
index e36090e..d8dfc65 100644 (file)
 #include "hb-ot-shape-private.hh" /* XXX Remove */
 
 
 #include "hb-ot-shape-private.hh" /* XXX Remove */
 
 
-/* buffer var allocations */
-#define indic_category() complex_var_u8_0() /* indic_category_t */
-#define indic_position() complex_var_u8_1() /* indic_matra_category_t */
-
-
 #define INDIC_TABLE_ELEMENT_TYPE uint16_t
 
 /* Cateories used in the OpenType spec:
 #define INDIC_TABLE_ELEMENT_TYPE uint16_t
 
 /* Cateories used in the OpenType spec:
  * Not sure how to avoid duplication. */
 enum indic_category_t {
   OT_X = 0,
  * 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_PLACEHOLDER = 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_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */
+  OT_CM2 = 31 /* Consonant-Medial, second slot. */
 };
 
 };
 
+#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_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
+#define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
+#define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng))
+
+
 /* Visual positions in a syllable from left to right. */
 enum indic_position_t {
   POS_START,
 /* Visual positions in a syllable from left to right. */
 enum indic_position_t {
   POS_START,
@@ -96,293 +105,78 @@ enum indic_position_t {
 
 /* Categories used in IndicSyllabicCategory.txt from UCD. */
 enum indic_syllabic_category_t {
 
 /* Categories used in IndicSyllabicCategory.txt from UCD. */
 enum indic_syllabic_category_t {
-  INDIC_SYLLABIC_CATEGORY_OTHER                        = OT_X,
-
-  INDIC_SYLLABIC_CATEGORY_AVAGRAHA             = OT_X,
-  INDIC_SYLLABIC_CATEGORY_BINDU                        = OT_SM,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT            = OT_C,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD       = OT_C,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL      = OT_C,
-  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_REPHA      = OT_Repha,
-  INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER     = OT_X,
-  INDIC_SYLLABIC_CATEGORY_NUKTA                        = OT_N,
-  INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER     = OT_RS,
-  INDIC_SYLLABIC_CATEGORY_TONE_LETTER          = OT_X,
-  INDIC_SYLLABIC_CATEGORY_TONE_MARK            = OT_N,
-  INDIC_SYLLABIC_CATEGORY_VIRAMA               = OT_H,
-  INDIC_SYLLABIC_CATEGORY_VISARGA              = OT_SM,
-  INDIC_SYLLABIC_CATEGORY_VOWEL                        = OT_V,
-  INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT      = OT_M,
-  INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT    = OT_V
+  INDIC_SYLLABIC_CATEGORY_OTHER                                = OT_X,
+
+  INDIC_SYLLABIC_CATEGORY_AVAGRAHA                     = OT_Symbol,
+  INDIC_SYLLABIC_CATEGORY_BINDU                                = OT_SM,
+  INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER                = OT_PLACEHOLDER, /* TODO */
+  INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK            = OT_A,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT                    = OT_C,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD               = OT_C,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL              = OT_CM,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER                = OT_C,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL             = OT_CM,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER                = OT_PLACEHOLDER,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA    = OT_Repha,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED          = OT_CM,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA   = OT_N,
+  INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK              = OT_SM,
+  INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER            = OT_H, /* TODO */
+  INDIC_SYLLABIC_CATEGORY_JOINER                       = OT_ZWJ,
+  INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER             = OT_X,
+  INDIC_SYLLABIC_CATEGORY_NON_JOINER                   = OT_ZWNJ,
+  INDIC_SYLLABIC_CATEGORY_NUKTA                                = OT_N,
+  INDIC_SYLLABIC_CATEGORY_NUMBER                       = OT_PLACEHOLDER,
+  INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER                        = OT_PLACEHOLDER, /* TODO */
+  INDIC_SYLLABIC_CATEGORY_PURE_KILLER                  = OT_H, /* TODO */
+  INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER             = OT_RS,
+  INDIC_SYLLABIC_CATEGORY_TONE_LETTER                  = OT_X,
+  INDIC_SYLLABIC_CATEGORY_TONE_MARK                    = OT_N,
+  INDIC_SYLLABIC_CATEGORY_VIRAMA                       = OT_H,
+  INDIC_SYLLABIC_CATEGORY_VISARGA                      = OT_SM,
+  INDIC_SYLLABIC_CATEGORY_VOWEL                                = OT_V,
+  INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT              = OT_M,
+  INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT            = OT_V
 };
 
 /* Categories used in IndicSMatraCategory.txt from UCD */
 enum indic_matra_category_t {
 };
 
 /* Categories used in IndicSMatraCategory.txt from UCD */
 enum indic_matra_category_t {
-  INDIC_MATRA_CATEGORY_NOT_APPLICABLE          = POS_END,
+  INDIC_MATRA_CATEGORY_NOT_APPLICABLE                  = POS_END,
 
 
-  INDIC_MATRA_CATEGORY_LEFT                    = POS_PRE_C,
-  INDIC_MATRA_CATEGORY_TOP                     = POS_ABOVE_C,
-  INDIC_MATRA_CATEGORY_BOTTOM                  = POS_BELOW_C,
-  INDIC_MATRA_CATEGORY_RIGHT                   = POS_POST_C,
+  INDIC_MATRA_CATEGORY_LEFT                            = POS_PRE_C,
+  INDIC_MATRA_CATEGORY_TOP                             = POS_ABOVE_C,
+  INDIC_MATRA_CATEGORY_BOTTOM                          = POS_BELOW_C,
+  INDIC_MATRA_CATEGORY_RIGHT                           = POS_POST_C,
 
   /* These should resolve to the position of the last part of the split sequence. */
 
   /* These should resolve to the position of the last part of the split sequence. */
-  INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT                = INDIC_MATRA_CATEGORY_RIGHT,
-  INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT          = INDIC_MATRA_CATEGORY_RIGHT,
-  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM          = INDIC_MATRA_CATEGORY_BOTTOM,
-  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT        = INDIC_MATRA_CATEGORY_RIGHT,
-  INDIC_MATRA_CATEGORY_TOP_AND_LEFT            = INDIC_MATRA_CATEGORY_TOP,
-  INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT  = INDIC_MATRA_CATEGORY_RIGHT,
-  INDIC_MATRA_CATEGORY_TOP_AND_RIGHT           = INDIC_MATRA_CATEGORY_RIGHT,
-
-  INDIC_MATRA_CATEGORY_INVISIBLE               = INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
-  INDIC_MATRA_CATEGORY_OVERSTRUCK              = POS_AFTER_MAIN,
-  INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT       = POS_PRE_M
+  INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT                        = INDIC_MATRA_CATEGORY_RIGHT,
+  INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT                  = INDIC_MATRA_CATEGORY_RIGHT,
+  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM                  = INDIC_MATRA_CATEGORY_BOTTOM,
+  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT                = INDIC_MATRA_CATEGORY_RIGHT,
+  INDIC_MATRA_CATEGORY_TOP_AND_LEFT                    = INDIC_MATRA_CATEGORY_TOP,
+  INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT          = INDIC_MATRA_CATEGORY_RIGHT,
+  INDIC_MATRA_CATEGORY_TOP_AND_RIGHT                   = INDIC_MATRA_CATEGORY_RIGHT,
+
+  INDIC_MATRA_CATEGORY_OVERSTRUCK                      = POS_AFTER_MAIN,
+  INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT               = POS_PRE_M
 };
 
 /* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
  * because gcc fails to optimize the latter and fills the table in at runtime. */
 #define INDIC_COMBINE_CATEGORIES(S,M) \
 };
 
 /* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
  * because gcc fails to optimize the latter and fills the table in at runtime. */
 #define INDIC_COMBINE_CATEGORIES(S,M) \
-  (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \
+  (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || \
+                           ( \
+                            S == INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL || \
+                            S == INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK || \
+                            S == INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER || \
+                            S == INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA || \
+                            S == INDIC_SYLLABIC_CATEGORY_VIRAMA || \
+                            S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT || \
+                            false)) + \
    ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
    ((M << 8) | S))
 
    ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
    ((M << 8) | S))
 
-
-#include "hb-ot-shape-complex-indic-table.hh"
-
-
-#define IN_HALF_BLOCK(u, Base) (((u) & ~0x7F) == (Base))
-
-#define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x0900))
-#define IS_BENG(u) (IN_HALF_BLOCK (u, 0x0980))
-#define IS_GURU(u) (IN_HALF_BLOCK (u, 0x0A00))
-#define IS_GUJR(u) (IN_HALF_BLOCK (u, 0x0A80))
-#define IS_ORYA(u) (IN_HALF_BLOCK (u, 0x0B00))
-#define IS_TAML(u) (IN_HALF_BLOCK (u, 0x0B80))
-#define IS_TELU(u) (IN_HALF_BLOCK (u, 0x0C00))
-#define IS_KNDA(u) (IN_HALF_BLOCK (u, 0x0C80))
-#define IS_MLYM(u) (IN_HALF_BLOCK (u, 0x0D00))
-#define IS_SINH(u) (IN_HALF_BLOCK (u, 0x0D80))
-#define IS_KHMR(u) (IN_HALF_BLOCK (u, 0x1780))
-
-
-#define MATRA_POS_LEFT(u)      POS_PRE_M
-#define MATRA_POS_RIGHT(u)     ( \
-                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
-                                 IS_BENG(u) ? POS_AFTER_POST : \
-                                 IS_GURU(u) ? POS_AFTER_POST : \
-                                 IS_GUJR(u) ? POS_AFTER_POST : \
-                                 IS_ORYA(u) ? POS_AFTER_POST : \
-                                 IS_TAML(u) ? POS_AFTER_POST : \
-                                 IS_TELU(u) ? (u <= 0x0C42 ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
-                                 IS_KNDA(u) ? (u < 0x0CC3 || u > 0xCD6 ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
-                                 IS_MLYM(u) ? POS_AFTER_POST : \
-                                 IS_SINH(u) ? POS_AFTER_SUB  : \
-                                 IS_KHMR(u) ? POS_AFTER_POST : \
-                                 /*default*/  POS_AFTER_SUB    \
-                               )
-#define MATRA_POS_TOP(u)       ( /* BENG and MLYM don't have top matras. */ \
-                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
-                                 IS_GURU(u) ? POS_AFTER_POST : /* Deviate from spec */ \
-                                 IS_GUJR(u) ? POS_AFTER_SUB  : \
-                                 IS_ORYA(u) ? POS_AFTER_MAIN : \
-                                 IS_TAML(u) ? POS_AFTER_SUB  : \
-                                 IS_TELU(u) ? POS_BEFORE_SUB : \
-                                 IS_KNDA(u) ? POS_BEFORE_SUB : \
-                                 IS_SINH(u) ? POS_AFTER_SUB  : \
-                                 IS_KHMR(u) ? POS_AFTER_POST : \
-                                 /*default*/  POS_AFTER_SUB    \
-                               )
-#define MATRA_POS_BOTTOM(u)    ( \
-                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
-                                 IS_BENG(u) ? POS_AFTER_SUB  : \
-                                 IS_GURU(u) ? POS_AFTER_POST : \
-                                 IS_GUJR(u) ? POS_AFTER_POST : \
-                                 IS_ORYA(u) ? POS_AFTER_SUB  : \
-                                 IS_TAML(u) ? POS_AFTER_POST : \
-                                 IS_TELU(u) ? POS_BEFORE_SUB : \
-                                 IS_KNDA(u) ? POS_BEFORE_SUB : \
-                                 IS_MLYM(u) ? POS_AFTER_POST : \
-                                 IS_SINH(u) ? POS_AFTER_SUB  : \
-                                 IS_KHMR(u) ? POS_AFTER_POST : \
-                                 /*default*/  POS_AFTER_SUB    \
-                               )
-
-
-static inline indic_position_t
-matra_position (hb_codepoint_t u, indic_position_t side)
-{
-  switch ((int) side)
-  {
-    case POS_PRE_C:    return MATRA_POS_LEFT (u);
-    case POS_POST_C:   return MATRA_POS_RIGHT (u);
-    case POS_ABOVE_C:  return MATRA_POS_TOP (u);
-    case POS_BELOW_C:  return MATRA_POS_BOTTOM (u);
-  };
-  return side;
-}
-
-
-
-/* XXX
- * This is a hack for now.  We should move this data into the main Indic table.
- * Or completely remove it and just check in the tables.
- */
-static const hb_codepoint_t ra_chars[] = {
-  0x0930, /* Devanagari */
-  0x09B0, /* Bengali */
-  0x09F0, /* Bengali */
-  0x0A30, /* Gurmukhi */       /* No Reph */
-  0x0AB0, /* Gujarati */
-  0x0B30, /* Oriya */
-  0x0BB0, /* Tamil */          /* No Reph */
-  0x0C30, /* Telugu */         /* Reph formed only with ZWJ */
-  0x0CB0, /* Kannada */
-  0x0D30, /* Malayalam */      /* No Reph, Logical Repha */
-
-  0x0DBB, /* Sinhala */                /* Reph formed only with ZWJ */
-
-  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)
-{
-  for (unsigned int i = 0; i < ARRAY_LENGTH (ra_chars); i++)
-    if (u == ra_chars[i])
-      return true;
-  return false;
-}
-
-
-static inline bool
-is_one_of (const hb_glyph_info_t &info, unsigned int flags)
-{
-  /* If it ligated, all bets are off. */
-  if (is_a_ligature (info)) return false;
-  return !!(FLAG (info.indic_category()) & flags);
-}
-
-#define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
-static inline bool
-is_joiner (const hb_glyph_info_t &info)
-{
-  return is_one_of (info, JOINER_FLAGS);
-}
-
-/* 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))
-static inline bool
-is_consonant (const hb_glyph_info_t &info)
-{
-  return is_one_of (info, CONSONANT_FLAGS);
-}
-
-#define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng))
-static inline bool
-is_halant_or_coeng (const hb_glyph_info_t &info)
-{
-  return is_one_of (info, HALANT_OR_COENG_FLAGS);
-}
-
-static inline void
-set_indic_properties (hb_glyph_info_t &info)
-{
-  hb_codepoint_t u = info.codepoint;
-  unsigned int type = get_indic_categories (u);
-  indic_category_t cat = (indic_category_t) (type & 0x7F);
-  indic_position_t pos = (indic_position_t) (type >> 8);
-
-
-  /*
-   * Re-assign category
-   */
-
-
-  /* The spec says U+0952 is OT_A.  However, testing shows that Uniscribe
-   * treats U+0951..U+0952 all as OT_VD.
-   * 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;
-
-  if (unlikely (u == 0x17D1))
-    cat = OT_X;
-  if (cat == OT_X &&
-      unlikely (hb_in_range<hb_codepoint_t> (u, 0x17CB, 0x17D3))) /* Khmer Various signs */
-  {
-    /* These are like Top Matras. */
-    cat = OT_M;
-    pos = POS_ABOVE_C;
-  }
-  if (u == 0x17C6) /* Khmer Bindu doesn't like to be repositioned. */
-    cat = OT_N;
-
-  if (unlikely (u == 0x17D2)) cat = OT_Coeng; /* Khmer coeng */
-  else if (unlikely (u == 0x200C)) cat = OT_ZWNJ;
-  else if (unlikely (u == 0x200D)) cat = OT_ZWJ;
-  else if (unlikely (u == 0x25CC)) cat = OT_DOTTEDCIRCLE;
-  else if (unlikely (u == 0x0A71)) cat = OT_SM; /* GURMUKHI ADDAK.  More like consonant medial. like 0A75. */
-
-  if (cat == OT_Repha) {
-    /* There are two kinds of characters marked as Repha:
-     * - The ones that are GenCat=Mn are already positioned visually, ie. after base. (eg. Khmer)
-     * - The ones that are GenCat=Lo is encoded logically, ie. beginning of syllable. (eg. Malayalam)
-     *
-     * We recategorize the first kind to look like a Nukta and attached to the base directly.
-     */
-    if (_hb_glyph_info_get_general_category (&info) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
-      cat = OT_N;
-  }
-
-
-
-  /*
-   * Re-assign position.
-   */
-
-  if ((FLAG (cat) & CONSONANT_FLAGS))
-  {
-    pos = consonant_position (u);
-    if (is_ra (u))
-      cat = OT_Ra;
-  }
-  else if (cat == OT_M)
-  {
-    pos = matra_position (u, pos);
-  }
-  else if (cat == OT_SM || cat == OT_VD)
-  {
-    pos = POS_SMVD;
-  }
-
-  if (unlikely (u == 0x0B01)) pos = POS_BEFORE_SUB; /* Oriya Bindu is BeforeSub in the spec. */
-
-
-
-  info.indic_category() = cat;
-  info.indic_position() = pos;
-}
-
-
+HB_INTERNAL INDIC_TABLE_ELEMENT_TYPE
+hb_indic_get_categories (hb_codepoint_t u);
 
 #endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */
 
 #endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */
similarity index 63%
rename from src/hb-ot-shape-complex-indic-table.hh
rename to src/hb-ot-shape-complex-indic-table.cc
index 70765b6..f58380e 100644 (file)
@@ -6,55 +6,63 @@
  *
  * on files with these headers:
  *
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-6.2.0.txt
- * # Date: 2012-05-15, 21:12:00 GMT [KW]
- * # IndicMatraCategory-6.2.0.txt
- * # Date: 2012-05-15, 21:10:00 GMT [KW]
- * # Blocks-6.2.0.txt
- * # Date: 2012-05-14, 22:42:00 GMT [KW, LI]
+ * # IndicSyllabicCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # IndicMatraCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # Blocks-7.0.0.txt
+ * # Date: 2014-04-03, 23:23:00 GMT [RP, KW]
  */
 
  */
 
-#ifndef HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH
-#define HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH
-
-
-#define ISC_A  INDIC_SYLLABIC_CATEGORY_AVAGRAHA                /*  11 chars; Avagraha */
-#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU                   /*  34 chars; Bindu */
-#define ISC_C  INDIC_SYLLABIC_CATEGORY_CONSONANT               /* 123 chars; Consonant */
-#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD          /*   2 chars; Consonant_Dead */
-#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL         /*  17 chars; Consonant_Final */
-#define ISC_CHL        INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER   /*   1 chars; Consonant_Head_Letter */
-#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL        /*  12 chars; Consonant_Medial */
-#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER   /*   4 chars; Consonant_Placeholder */
-#define ISC_CR INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA         /*   5 chars; Consonant_Repha */
-#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED     /*  10 chars; Consonant_Subjoined */
+#include "hb-ot-shape-complex-indic-private.hh"
+
+
+#define ISC_A  INDIC_SYLLABIC_CATEGORY_AVAGRAHA                /*  13 chars; Avagraha */
+#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU                   /*  59 chars; Bindu */
+#define ISC_BJN        INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER   /*  20 chars; Brahmi_Joining_Number */
+#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK       /*  30 chars; Cantillation_Mark */
+#define ISC_C  INDIC_SYLLABIC_CATEGORY_CONSONANT               /* 1744 chars; Consonant */
+#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD          /*   7 chars; Consonant_Dead */
+#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL         /*  61 chars; Consonant_Final */
+#define ISC_CHL        INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER   /*   5 chars; Consonant_Head_Letter */
+#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL        /*  19 chars; Consonant_Medial */
+#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER   /*  11 chars; Consonant_Placeholder */
+#define ISC_CPR        INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA       /*   1 chars; Consonant_Preceding_Repha */
+#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED     /*  61 chars; Consonant_Subjoined */
+#define ISC_CSR        INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA      /*   4 chars; Consonant_Succeeding_Repha */
+#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK         /*   2 chars; Gemination_Mark */
+#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER       /*   7 chars; Invisible_Stacker */
+#define ISC_ZWJ        INDIC_SYLLABIC_CATEGORY_JOINER                  /*   1 chars; Joiner */
 #define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER        /*   1 chars; Modifying_Letter */
 #define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER        /*   1 chars; Modifying_Letter */
-#define ISC_N  INDIC_SYLLABIC_CATEGORY_NUKTA                   /*  12 chars; Nukta */
+#define ISC_ZWNJ       INDIC_SYLLABIC_CATEGORY_NON_JOINER              /*   1 chars; Non_Joiner */
+#define ISC_N  INDIC_SYLLABIC_CATEGORY_NUKTA                   /*  18 chars; Nukta */
+#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER                  /* 408 chars; Number */
+#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER           /*   1 chars; Number_Joiner */
 #define ISC_x  INDIC_SYLLABIC_CATEGORY_OTHER                   /*   1 chars; Other */
 #define ISC_x  INDIC_SYLLABIC_CATEGORY_OTHER                   /*   1 chars; Other */
-#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER        /*   1 chars; Register_Shifter */
-#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER             /*   3 chars; Tone_Letter */
-#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK               /*  16 chars; Tone_Mark */
-#define ISC_V  INDIC_SYLLABIC_CATEGORY_VIRAMA                  /*  34 chars; Virama */
-#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA                 /*  25 chars; Visarga */
-#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL                   /*   5 chars; Vowel */
-#define ISC_M  INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT         /* 165 chars; Vowel_Dependent */
-#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT       /*  59 chars; Vowel_Independent */
-
-#define IMC_B  INDIC_MATRA_CATEGORY_BOTTOM                     /*  65 chars; Bottom */
+#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER             /*  15 chars; Pure_Killer */
+#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER        /*   3 chars; Register_Shifter */
+#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER             /*   7 chars; Tone_Letter */
+#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK               /*  62 chars; Tone_Mark */
+#define ISC_V  INDIC_SYLLABIC_CATEGORY_VIRAMA                  /*  22 chars; Virama */
+#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA                 /*  29 chars; Visarga */
+#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL                   /*  30 chars; Vowel */
+#define ISC_M  INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT         /* 553 chars; Vowel_Dependent */
+#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT       /* 395 chars; Vowel_Independent */
+
+#define IMC_B  INDIC_MATRA_CATEGORY_BOTTOM                     /* 142 chars; Bottom */
 #define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT           /*   2 chars; Bottom_And_Right */
 #define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT           /*   2 chars; Bottom_And_Right */
-#define IMC_I  INDIC_MATRA_CATEGORY_INVISIBLE                  /*   6 chars; Invisible */
-#define IMC_L  INDIC_MATRA_CATEGORY_LEFT                       /*  30 chars; Left */
-#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT             /*   8 chars; Left_And_Right */
+#define IMC_L  INDIC_MATRA_CATEGORY_LEFT                       /*  57 chars; Left */
+#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT             /*  21 chars; Left_And_Right */
 #define IMC_x  INDIC_MATRA_CATEGORY_NOT_APPLICABLE             /*   1 chars; Not_Applicable */
 #define IMC_O  INDIC_MATRA_CATEGORY_OVERSTRUCK                 /*   2 chars; Overstruck */
 #define IMC_x  INDIC_MATRA_CATEGORY_NOT_APPLICABLE             /*   1 chars; Not_Applicable */
 #define IMC_O  INDIC_MATRA_CATEGORY_OVERSTRUCK                 /*   2 chars; Overstruck */
-#define IMC_R  INDIC_MATRA_CATEGORY_RIGHT                      /*  75 chars; Right */
-#define IMC_T  INDIC_MATRA_CATEGORY_TOP                        /*  83 chars; Top */
-#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM             /*   6 chars; Top_And_Bottom */
+#define IMC_R  INDIC_MATRA_CATEGORY_RIGHT                      /* 163 chars; Right */
+#define IMC_T  INDIC_MATRA_CATEGORY_TOP                        /* 169 chars; Top */
+#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM             /*  10 chars; Top_And_Bottom */
 #define IMC_TBR        INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT   /*   1 chars; Top_And_Bottom_And_Right */
 #define IMC_TBR        INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT   /*   1 chars; Top_And_Bottom_And_Right */
-#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT               /*   4 chars; Top_And_Left */
-#define IMC_TLR        INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT     /*   2 chars; Top_And_Left_And_Right */
-#define IMC_TR INDIC_MATRA_CATEGORY_TOP_AND_RIGHT              /*   8 chars; Top_And_Right */
-#define IMC_VOL        INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT          /*   5 chars; Visual_Order_Left */
+#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT               /*   6 chars; Top_And_Left */
+#define IMC_TLR        INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT     /*   4 chars; Top_And_Left_And_Right */
+#define IMC_TR INDIC_MATRA_CATEGORY_TOP_AND_RIGHT              /*  13 chars; Top_And_Right */
+#define IMC_VOL        INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT          /*  15 chars; Visual_Order_Left */
 
 #define _(S,M) INDIC_COMBINE_CATEGORIES (ISC_##S, IMC_##M)
 
 
 #define _(S,M) INDIC_COMBINE_CATEGORIES (ISC_##S, IMC_##M)
 
 static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
 
 static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
 
-#define indic_offset_0x0900 0
+#define indic_offset_0x0028u 0
+
+
+  /* Basic Latin */
+
+  /* 0028 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CP,x),  _(x,x),  _(x,x),
+  /* 0030 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 0038 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+#define indic_offset_0x00d0u 24
+
 
 
+  /* Latin-1 Supplement */
 
 
-  /* Devanagari  (0900..097F) */
+  /* 00D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CP,x),
+
+#define indic_offset_0x0900u 32
+
+
+  /* Devanagari */
 
   /* 0900 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0908 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
 
   /* 0900 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0908 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -77,14 +101,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0938 */  _(C,x),  _(C,x),  _(M,T),  _(M,R),  _(N,x),  _(A,x),  _(M,R),  _(M,L),
   /* 0940 */  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),
   /* 0948 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(V,B),  _(M,L),  _(M,R),
   /* 0938 */  _(C,x),  _(C,x),  _(M,T),  _(M,R),  _(N,x),  _(A,x),  _(M,R),  _(M,L),
   /* 0940 */  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),
   /* 0948 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(V,B),  _(M,L),  _(M,R),
-  /* 0950 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T),  _(M,B),  _(M,B),
+  /* 0950 */  _(x,x), _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(M,T),  _(M,B),  _(M,B),
   /* 0958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0960 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0968 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0960 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0968 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0970 */  _(x,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0970 */  _(x,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 0978 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 0978 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
 
-  /* Bengali  (0980..09FF) */
+  /* Bengali */
 
   /* 0980 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0988 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
 
   /* 0980 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0988 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
@@ -98,12 +122,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 09C8 */  _(M,L),  _(x,x),  _(x,x), _(M,LR), _(M,LR),  _(V,B), _(CD,x),  _(x,x),
   /* 09D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 09D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
   /* 09C8 */  _(M,L),  _(x,x),  _(x,x), _(M,LR), _(M,LR),  _(V,B), _(CD,x),  _(x,x),
   /* 09D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 09D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 09E0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 09E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 09E0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 09E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 09F0 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 09F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 09F0 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 09F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Gurmukhi  (0A00..0A7F) */
+  /* Gurmukhi */
 
   /* 0A00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0A08 */ _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(VI,x),
 
   /* 0A00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0A08 */ _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(VI,x),
@@ -117,12 +141,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0A48 */  _(M,T),  _(x,x),  _(x,x),  _(M,T),  _(M,T),  _(V,B),  _(x,x),  _(x,x),
   /* 0A50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0A58 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(x,x),
   /* 0A48 */  _(M,T),  _(x,x),  _(x,x),  _(M,T),  _(M,T),  _(V,B),  _(x,x),  _(x,x),
   /* 0A50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0A58 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(x,x),
-  /* 0A60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0A68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0A70 */ _(Bi,x),  _(x,x), _(CP,x), _(CP,x),  _(x,x), _(CM,x),  _(x,x),  _(x,x),
+  /* 0A60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0A68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 0A70 */ _(Bi,x), _(GM,T), _(CP,x), _(CP,x),  _(x,x), _(CM,x),  _(x,x),  _(x,x),
   /* 0A78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0A78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Gujarati  (0A80..0AFF) */
+  /* Gujarati */
 
   /* 0A80 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0A88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x),
 
   /* 0A80 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0A88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x),
@@ -136,12 +160,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0AC8 */  _(M,T), _(M,TR),  _(x,x),  _(M,R),  _(M,R),  _(V,B),  _(x,x),  _(x,x),
   /* 0AD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0AD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0AC8 */  _(M,T), _(M,TR),  _(x,x),  _(M,R),  _(M,R),  _(V,B),  _(x,x),  _(x,x),
   /* 0AD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0AD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0AE0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0AE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0AE0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0AE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0AF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0AF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0AF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0AF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Oriya  (0B00..0B7F) */
+  /* Oriya */
 
   /* 0B00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
 
   /* 0B00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
@@ -155,12 +179,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0B48 */ _(M,TL),  _(x,x),  _(x,x), _(M,LR),_(M,TLR),  _(V,B),  _(x,x),  _(x,x),
   /* 0B50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T), _(M,TR),
   /* 0B58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
   /* 0B48 */ _(M,TL),  _(x,x),  _(x,x), _(M,LR),_(M,TLR),  _(V,B),  _(x,x),  _(x,x),
   /* 0B50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T), _(M,TR),
   /* 0B58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 0B60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0B68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0B60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0B68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0B70 */  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0B78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0B70 */  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0B78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Tamil  (0B80..0BFF) */
+  /* Tamil */
 
   /* 0B80 */  _(x,x),  _(x,x), _(Bi,x), _(ML,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0B88 */ _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),
 
   /* 0B80 */  _(x,x),  _(x,x), _(Bi,x), _(ML,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0B88 */ _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),
@@ -174,33 +198,33 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0BC8 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T),  _(x,x),  _(x,x),
   /* 0BD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0BD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0BC8 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T),  _(x,x),  _(x,x),
   /* 0BD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0BD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0BE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0BE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0BE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0BE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0BF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0BF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Telugu  (0C00..0C7F) */
+  /* Telugu */
 
 
-  /* 0C00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 0C00 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0C08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0C10 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C28 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0C10 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C28 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0C30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 0C30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(M,T),  _(M,T),
   /* 0C40 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(x,x),  _(M,T),  _(M,T),
   /* 0C48 */ _(M,TB),  _(x,x),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(x,x),  _(x,x),
   /* 0C50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T),  _(M,B),  _(x,x),
   /* 0C58 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0C38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(M,T),  _(M,T),
   /* 0C40 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(x,x),  _(M,T),  _(M,T),
   /* 0C48 */ _(M,TB),  _(x,x),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(x,x),  _(x,x),
   /* 0C50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T),  _(M,B),  _(x,x),
   /* 0C58 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0C60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0C68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0C60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0C68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0C70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0C78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0C70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0C78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Kannada  (0C80..0CFF) */
+  /* Kannada */
 
 
-  /* 0C80 */  _(x,x),  _(x,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 0C80 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0C88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0C90 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0C90 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0C98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -212,14 +236,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0CC8 */ _(M,TR),  _(x,x), _(M,TR), _(M,TR),  _(M,T),  _(V,T),  _(x,x),  _(x,x),
   /* 0CD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),  _(M,R),  _(x,x),
   /* 0CD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(x,x),
   /* 0CC8 */ _(M,TR),  _(x,x), _(M,TR), _(M,TR),  _(M,T),  _(V,T),  _(x,x),  _(x,x),
   /* 0CD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),  _(M,R),  _(x,x),
   /* 0CD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(x,x),
-  /* 0CE0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0CE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0CE0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0CF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0CF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 0CF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0CF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Malayalam  (0D00..0D7F) */
+  /* Malayalam */
 
 
-  /* 0D00 */  _(x,x),  _(x,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 0D00 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0D10 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0D10 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -228,15 +252,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0D30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D38 */  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(A,x),  _(M,R),  _(M,R),
   /* 0D40 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(x,x),  _(M,L),  _(M,L),
   /* 0D30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D38 */  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(A,x),  _(M,R),  _(M,R),
   /* 0D40 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(x,x),  _(M,L),  _(M,L),
-  /* 0D48 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T), _(CR,x),  _(x,x),
+  /* 0D48 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T),_(CPR,x),  _(x,x),
   /* 0D50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0D58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0D50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0D58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0D60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0D68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0D60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0D68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0D70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0D78 */  _(x,x),  _(x,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x),
 
   /* 0D70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0D78 */  _(x,x),  _(x,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x),
 
-  /* Sinhala  (0D80..0DFF) */
+  /* Sinhala */
 
   /* 0D80 */  _(x,x),  _(x,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0D88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
 
   /* 0D80 */  _(x,x),  _(x,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0D88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -249,86 +273,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0DC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
   /* 0DC8 */  _(x,x),  _(x,x),  _(V,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0DD0 */  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),  _(x,x),  _(M,B),  _(x,x),
   /* 0DC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
   /* 0DC8 */  _(x,x),  _(x,x),  _(V,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
   /* 0DD0 */  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),  _(x,x),  _(M,B),  _(x,x),
-  /* 0DD8 */  _(M,R),  _(M,L), _(M,TL),  _(M,L), _(M,LR), _(M,LR), _(M,LR),  _(M,R),
-  /* 0DE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0DE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0DD8 */  _(M,R),  _(M,L), _(M,TL),  _(M,L), _(M,LR),_(M,TLR), _(M,LR),  _(M,R),
+  /* 0DE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 0DE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0DF0 */  _(x,x),  _(x,x),  _(M,R),  _(M,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 0DF0 */  _(x,x),  _(x,x),  _(M,R),  _(M,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0DF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Thai  (0E00..0E7F) */
-
-  /* 0E00 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 0E30 */  _(M,R),  _(M,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,T),  _(M,T),
-  /* 0E38 */  _(M,B),  _(M,B),  _(V,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E40 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),  _(M,R),  _(x,x),  _(M,T),
-  /* 0E48 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x),  _(x,x), _(Bi,x),  _(V,T),  _(x,x),
-  /* 0E50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0E78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Lao  (0E80..0EFF) */
-
-  /* 0E80 */  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(C,x),
-  /* 0E88 */  _(C,x),  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(C,x),  _(x,x),  _(x,x),
-  /* 0E90 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0E98 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0EA0 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 0EA8 */  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 0EB0 */  _(M,R),  _(M,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,T),  _(M,T),
-  /* 0EB8 */  _(M,B),  _(M,B),  _(x,x),  _(M,T), _(CM,x), _(CM,x),  _(x,x),  _(x,x),
-  /* 0EC0 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),  _(x,x),  _(x,x),  _(x,x),
-  /* 0EC8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x),  _(x,x), _(Bi,x),  _(x,x),  _(x,x),
-  /* 0ED0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0ED8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),
-  /* 0EE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0EE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0EF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0EF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Tibetan  (0F00..0FFF) */
-
-  /* 0F00 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F08 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F10 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F18 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F20 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F28 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F30 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F40 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0F48 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0F50 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0F58 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0F60 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0F68 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0F70 */  _(x,x),  _(M,B),  _(M,T), _(M,TB),  _(M,B),  _(M,B), _(M,TB), _(M,TB),
-  /* 0F78 */ _(M,TB), _(M,TB),  _(M,T),  _(M,T),  _(M,T),  _(M,T), _(Bi,x), _(Vs,x),
-  /* 0F80 */  _(M,T), _(M,TB), _(Bi,x), _(Bi,x),  _(V,B),  _(A,x),  _(x,x),  _(x,x),
-  /* 0F88 */_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0F90 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0F98 */  _(x,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0FA0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0FA8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0FB0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
-  /* 0FB8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FC0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FC8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0FF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Myanmar  (1000..109F) */
+
+#define indic_offset_0x1000u 1304
+
+
+  /* Myanmar */
 
   /* 1000 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1008 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1000 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1008 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -337,9 +290,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1020 */  _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1028 */ _(VI,x), _(VI,x), _(VI,x),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),
   /* 1030 */  _(M,B),  _(M,L),  _(M,T),  _(M,T),  _(M,T),  _(M,T), _(Bi,x), _(TM,x),
   /* 1020 */  _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1028 */ _(VI,x), _(VI,x), _(VI,x),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),
   /* 1030 */  _(M,B),  _(M,L),  _(M,T),  _(M,T),  _(M,T),  _(M,T), _(Bi,x), _(TM,x),
-  /* 1038 */ _(Vs,x),  _(V,I),  _(V,T), _(CM,x), _(CM,x), _(CM,x), _(CM,x),  _(C,x),
-  /* 1040 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1048 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1038 */ _(Vs,x), _(IS,x), _(PK,T), _(CM,x), _(CM,x), _(CM,x), _(CM,x),  _(C,x),
+  /* 1040 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1048 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CP,x),  _(x,x),
   /* 1050 */  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(M,R),  _(M,R),
   /* 1058 */  _(M,B),  _(M,B),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CM,x), _(CM,x),
   /* 1060 */ _(CM,x),  _(C,x),  _(M,R), _(TM,x), _(TM,x),  _(C,x),  _(C,x),  _(M,R),
   /* 1050 */  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(M,R),  _(M,R),
   /* 1058 */  _(M,B),  _(M,B),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CM,x), _(CM,x),
   /* 1060 */ _(CM,x),  _(C,x),  _(M,R), _(TM,x), _(TM,x),  _(C,x),  _(C,x),  _(M,R),
@@ -348,41 +301,41 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1078 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1080 */  _(C,x),  _(C,x), _(CM,x),  _(M,R),  _(M,L),  _(M,T),  _(M,T), _(TM,x),
   /* 1088 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),  _(C,x), _(TM,x),
   /* 1078 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1080 */  _(C,x),  _(C,x), _(CM,x),  _(M,R),  _(M,L),  _(M,T),  _(M,T), _(TM,x),
   /* 1088 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),  _(C,x), _(TM,x),
-  /* 1090 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1098 */  _(x,x),  _(x,x), _(TM,x), _(TM,x),  _(M,R),  _(M,T),  _(x,x),  _(x,x),
+  /* 1090 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1098 */ _(Nd,x), _(Nd,x), _(TM,x), _(TM,x),  _(M,R),  _(M,T),  _(x,x),  _(x,x),
 
 
-#define indic_offset_0x1700 1952
+#define indic_offset_0x1700u 1464
 
 
 
 
-  /* Tagalog  (1700..171F) */
+  /* Tagalog */
 
   /* 1700 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1708 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
 
   /* 1700 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1708 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
-  /* 1710 */  _(C,x),  _(C,x),  _(M,T),  _(M,B),  _(V,B),  _(x,x),  _(x,x),  _(x,x),
+  /* 1710 */  _(C,x),  _(C,x),  _(M,T),  _(M,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),
   /* 1718 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 1718 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Hanunoo  (1720..173F) */
+  /* Hanunoo */
 
   /* 1720 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1728 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1720 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1728 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1730 */  _(C,x),  _(C,x),  _(M,T),  _(M,B),  _(V,B),  _(x,x),  _(x,x),  _(x,x),
+  /* 1730 */  _(C,x),  _(C,x),  _(M,T),  _(M,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),
   /* 1738 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 1738 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Buhid  (1740..175F) */
+  /* Buhid */
 
   /* 1740 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1748 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1750 */  _(C,x),  _(C,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1758 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
   /* 1740 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1748 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1750 */  _(C,x),  _(C,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1758 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Tagbanwa  (1760..177F) */
+  /* Tagbanwa */
 
   /* 1760 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1768 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
   /* 1770 */  _(C,x),  _(x,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1778 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
   /* 1760 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1768 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
   /* 1770 */  _(C,x),  _(x,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1778 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Khmer  (1780..17FF) */
+  /* Khmer */
 
   /* 1780 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1788 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1780 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1788 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -393,31 +346,29 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 17B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(M,R),  _(M,T),
   /* 17B8 */  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,B), _(M,TL),_(M,TLR),
   /* 17C0 */ _(M,LR),  _(M,L),  _(M,L),  _(M,L), _(M,LR), _(M,LR), _(Bi,x), _(Vs,x),
   /* 17B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x),  _(M,R),  _(M,T),
   /* 17B8 */  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,B), _(M,TL),_(M,TLR),
   /* 17C0 */ _(M,LR),  _(M,L),  _(M,L),  _(M,L), _(M,LR), _(M,LR), _(Bi,x), _(Vs,x),
-  /* 17C8 */  _(M,R), _(RS,x), _(RS,x),  _(x,x), _(CR,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17D0 */  _(x,x),  _(V,T),  _(V,I),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 17C8 */  _(M,R), _(RS,T), _(RS,T), _(RS,T),_(CSR,T),  _(M,T),  _(M,T),  _(M,T),
+  /* 17D0 */  _(M,T), _(PK,T), _(IS,x),  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
   /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 17E0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 17E8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-#define indic_offset_0x1900 2208
+#define indic_offset_0x1900u 1704
 
 
 
 
-  /* Limbu  (1900..194F) */
+  /* Limbu */
 
   /* 1900 */ _(CP,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1908 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1900 */ _(CP,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1908 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
   /* 1920 */  _(M,T),  _(M,T),  _(M,B),  _(M,R),  _(M,R), _(M,TR), _(M,TR),  _(M,T),
   /* 1928 */  _(M,T), _(CS,x), _(CS,x), _(CS,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1930 */ _(CF,x), _(CF,x), _(Bi,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* 1938 */ _(CF,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1920 */  _(M,T),  _(M,T),  _(M,B),  _(M,R),  _(M,R), _(M,TR), _(M,TR),  _(M,T),
   /* 1928 */  _(M,T), _(CS,x), _(CS,x), _(CS,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1930 */ _(CF,x), _(CF,x), _(Bi,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* 1938 */ _(CF,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1940 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1948 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1940 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 1948 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
 
 
-  /* Tai Le  (1950..197F) */
+  /* Tai Le */
 
   /* 1950 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1950 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -426,7 +377,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1970 */ _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(TL,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 1970 */ _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(TL,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* New Tai Lue  (1980..19DF) */
+  /* New Tai Lue */
 
   /* 1980 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1988 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1980 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1988 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -438,24 +389,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 19B8 */  _(M,R),  _(M,R),  _(M,L),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
   /* 19C0 */  _(M,R), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* 19C8 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19B8 */  _(M,R),  _(M,R),  _(M,L),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
   /* 19C0 */  _(M,R), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* 19C8 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* FILLER  (19E0..19FF) */
-
+  /* 19D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 19D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 19E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 19F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Buginese  (1A00..1A1F) */
+  /* Buginese */
 
   /* 1A00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
 
   /* 1A00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
-  /* 1A18 */  _(M,B),  _(M,L),  _(M,R),  _(M,L),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1A18 */  _(M,B),  _(M,L),  _(M,R),  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-  /* Tai Tham  (1A20..1AAF) */
+  /* Tai Tham */
 
   /* 1A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -463,25 +411,23 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1A38 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A40 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1A38 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A40 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 1A50 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x), _(CM,x), _(CM,x), _(CF,x),
+  /* 1A50 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x), _(CM,L), _(CM,x), _(CF,x),
   /* 1A58 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),  _(x,x),
   /* 1A58 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),  _(x,x),
-  /* 1A60 */  _(V,I),  _(M,R),  _(M,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,T),
+  /* 1A60 */ _(IS,x),  _(M,R),  _(M,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,T),
   /* 1A68 */  _(M,T),  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,R),  _(M,L),  _(M,L),
   /* 1A70 */  _(M,L),  _(M,L),  _(M,L),  _(M,T),  _(M,T), _(TM,x), _(TM,x), _(TM,x),
   /* 1A78 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1A68 */  _(M,T),  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,R),  _(M,L),  _(M,L),
   /* 1A70 */  _(M,L),  _(M,L),  _(M,L),  _(M,T),  _(M,T), _(TM,x), _(TM,x), _(TM,x),
   /* 1A78 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1A80 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1A88 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1A90 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1A98 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1AA0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1AA8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1A80 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1A88 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1A90 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1A98 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-#define indic_offset_0x1b00 2640
+#define indic_offset_0x1b00u 2120
 
 
 
 
-  /* Balinese  (1B00..1B7F) */
+  /* Balinese */
 
 
-  /* 1B00 */ _(Bi,x), _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 1B00 */ _(Bi,x), _(Bi,x), _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1B10 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1B10 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -491,36 +437,36 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1B38 */  _(M,B),  _(M,B),  _(M,B), _(M,BR), _(M,TB),_(M,TBR),  _(M,L),  _(M,L),
   /* 1B40 */ _(M,LR), _(M,LR),  _(M,T), _(M,TR),  _(V,R),  _(C,x),  _(C,x),  _(C,x),
   /* 1B48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B38 */  _(M,B),  _(M,B),  _(M,B), _(M,BR), _(M,TB),_(M,TBR),  _(M,L),  _(M,L),
   /* 1B40 */ _(M,LR), _(M,LR),  _(M,T), _(M,TR),  _(V,R),  _(C,x),  _(C,x),  _(C,x),
   /* 1B48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1B50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1B58 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 1B60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B68 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B70 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1B78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Sundanese  (1B80..1BBF) */
+  /* Sundanese */
 
 
-  /* 1B80 */ _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 1B80 */ _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 1B88 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B90 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BA0 */  _(C,x), _(CS,x), _(CS,x), _(CS,x),  _(M,T),  _(M,B),  _(M,L),  _(M,R),
   /* 1B88 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B90 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BA0 */  _(C,x), _(CS,x), _(CS,x), _(CS,x),  _(M,T),  _(M,B),  _(M,L),  _(M,R),
-  /* 1BA8 */  _(M,T),  _(M,T),  _(V,R),  _(V,x), _(CS,x), _(CS,x),  _(C,x),  _(C,x),
-  /* 1BB0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1BB8 */  _(x,x),  _(x,x),  _(A,x),  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x),
+  /* 1BA8 */  _(M,T),  _(M,T), _(PK,R), _(IS,x), _(CS,x), _(CS,x),  _(C,x),  _(C,x),
+  /* 1BB0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1BB8 */ _(Nd,x), _(Nd,x),  _(A,x),  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x),
 
 
-  /* Batak  (1BC0..1BFF) */
+  /* Batak */
 
   /* 1BC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BD0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BD8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1BC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BD0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1BD8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BE0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),  _(N,x),  _(M,x),
-  /* 1BE8 */  _(M,x),  _(M,x),  _(M,x),  _(M,x),  _(M,x),  _(M,x),  _(M,x),  _(M,x),
-  /* 1BF0 */ _(CF,x), _(CF,x),  _(V,R),  _(V,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1BE0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),  _(N,x),  _(M,R),
+  /* 1BE8 */  _(M,T),  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,T),  _(M,R),  _(M,T),
+  /* 1BF0 */ _(CF,x), _(CF,x), _(PK,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 1BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Lepcha  (1C00..1C4F) */
+  /* Lepcha */
 
   /* 1C00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1C08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 1C00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1C08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -528,41 +474,45 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1C18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1C20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CS,x), _(CS,x),  _(M,R),  _(M,L),
   /* 1C28 */  _(M,L), _(M,TL),  _(M,R),  _(M,R),  _(M,B), _(CF,x), _(CF,x), _(CF,x),
   /* 1C18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1C20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CS,x), _(CS,x),  _(M,R),  _(M,L),
   /* 1C28 */  _(M,L), _(M,TL),  _(M,R),  _(M,R),  _(M,B), _(CF,x), _(CF,x), _(CF,x),
-  /* 1C30 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(Bi,x), _(Bi,x),  _(x,x),  _(N,x),
+  /* 1C30 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(Bi,L), _(Bi,L),  _(x,x),  _(N,x),
   /* 1C38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1C38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1C40 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1C48 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 1C40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 1C48 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
 
 
-#define indic_offset_0x1cd0 2976
+#define indic_offset_0x1cd0u 2456
 
 
 
 
-  /* Vedic Extensions  (1CD0..1CFF) */
+  /* Vedic Extensions */
 
 
-  /* 1CD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1CD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1CE0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CD0 */ _(TM,x), _(TM,x), _(TM,x),  _(x,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+  /* 1CD8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+  /* 1CE0 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1CE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1CE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1CF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),
+
+#define indic_offset_0x2008u 2496
+
+
+  /* General Punctuation */
 
 
-#define indic_offset_0xa800 3024
+  /* 2008 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),_(ZWNJ,x),_(ZWJ,x),  _(x,x),  _(x,x),
+  /* 2010 */  _(x,x),  _(x,x), _(CP,x), _(CP,x), _(CP,x),  _(x,x),  _(x,x),  _(x,x),
 
 
+#define indic_offset_0xa800u 2512
 
 
-  /* Syloti Nagri  (A800..A82F) */
 
 
-  /* A800 */ _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(V,T),  _(C,x),
+  /* Syloti Nagri */
+
+  /* A800 */ _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(PK,T),  _(C,x),
   /* A808 */  _(C,x),  _(C,x),  _(C,x), _(Bi,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A810 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A818 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A820 */  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,R),  _(M,B),  _(M,T),  _(M,R),
   /* A828 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A808 */  _(C,x),  _(C,x),  _(C,x), _(Bi,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A810 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A818 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A820 */  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,R),  _(M,B),  _(M,T),  _(M,R),
   /* A828 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* FILLER  (A830..A83F) */
-
   /* A830 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A838 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* A830 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A838 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Phags-pa  (A840..A87F) */
+  /* Phags-pa */
 
   /* A840 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A848 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* A840 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A848 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -573,7 +523,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* A870 */  _(C,x), _(CS,x),  _(C,x), _(Bi,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A878 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* A870 */  _(C,x), _(CS,x),  _(C,x), _(Bi,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A878 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Saurashtra  (A880..A8DF) */
+  /* Saurashtra */
 
   /* A880 */ _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* A888 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
 
   /* A880 */ _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* A888 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -585,44 +535,41 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* A8B8 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
   /* A8C0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(V,B),  _(x,x),  _(x,x),  _(x,x),
   /* A8C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A8B8 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
   /* A8C0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(V,B),  _(x,x),  _(x,x),  _(x,x),
   /* A8C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A8D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* A8D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-  /* FILLER  (A8E0..A8FF) */
+  /* Devanagari Extended */
 
 
-  /* A8E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A8E0 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+  /* A8E8 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+  /* A8F0 */ _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A8F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* A8F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Kayah Li  (A900..A92F) */
+  /* Kayah Li */
 
 
-  /* A900 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A908 */  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* A900 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* A908 */ _(Nd,x), _(Nd,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A920 */  _(C,x),  _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
   /* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,x), _(TM,x), _(TM,x),  _(x,x),  _(x,x),
 
   /* A910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A920 */  _(C,x),  _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
   /* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,x), _(TM,x), _(TM,x),  _(x,x),  _(x,x),
 
-  /* Rejang  (A930..A95F) */
+  /* Rejang */
 
   /* A930 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A938 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A940 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,B),
   /* A948 */  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B), _(CF,x),
 
   /* A930 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A938 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A940 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,B),
   /* A948 */  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B), _(CF,x),
-  /* A950 */ _(CF,x), _(CF,x), _(CF,x),  _(V,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A950 */ _(CF,x), _(CF,x), _(CF,x), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A958 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A958 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* FILLER  (A960..A97F) */
-
   /* A960 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A968 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A970 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* A960 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A968 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A970 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Javanese  (A980..A9DF) */
+  /* Javanese */
 
 
-  /* A980 */ _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* A980 */ _(Bi,x), _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* A988 */ _(VI,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
   /* A990 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A988 */ _(VI,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
   /* A990 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -632,17 +579,17 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* A9B8 */  _(M,B),  _(M,B),  _(M,L),  _(M,L),  _(M,T), _(CS,x), _(CM,x), _(CM,x),
   /* A9C0 */ _(V,BR),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A9C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A9B8 */  _(M,B),  _(M,B),  _(M,L),  _(M,L),  _(M,T), _(CS,x), _(CM,x), _(CM,x),
   /* A9C0 */ _(V,BR),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A9C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A9D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* A9D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-  /* FILLER  (A9E0..A9FF) */
+  /* Myanmar Extended-B */
 
 
-  /* A9E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A9E0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(C,x),
+  /* A9E8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* A9F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* A9F8 */ _(Nd,x), _(Nd,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
 
 
-  /* Cham  (AA00..AA5F) */
+  /* Cham */
 
   /* AA00 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
   /* AA08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* AA00 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
   /* AA08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -650,21 +597,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* AA18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA28 */  _(C,x),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,T),  _(M,L),
   /* AA18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA28 */  _(C,x),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,T),  _(M,L),
-  /* AA30 */  _(M,L),  _(M,T),  _(M,B), _(CM,x), _(CM,x), _(CM,x), _(CM,x),  _(x,x),
+  /* AA30 */  _(M,L),  _(M,T),  _(M,B), _(CM,x), _(CM,L), _(CM,x), _(CM,x),  _(x,x),
   /* AA38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* AA40 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* AA48 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),  _(x,x),  _(x,x),
   /* AA38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* AA40 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* AA48 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),  _(x,x),  _(x,x),
-  /* AA50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AA58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* AA50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* AA58 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-  /* Myanmar Extended-A  (AA60..AA7F) */
+  /* Myanmar Extended-A */
 
   /* AA60 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA68 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA70 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* AA60 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA68 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA70 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AA78 */  _(x,x),  _(x,x),  _(C,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* AA78 */  _(x,x),  _(x,x),  _(C,x), _(TM,x), _(TM,x), _(TM,x),  _(C,x),  _(C,x),
 
 
-  /* Tai Viet  (AA80..AADF) */
+  /* Tai Viet */
 
   /* AA80 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA88 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* AA80 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA88 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -679,31 +626,30 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* AAD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* AAD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* AAD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* AAD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Meetei Mayek Extensions  (AAE0..AAFF) */
+  /* Meetei Mayek Extensions */
 
   /* AAE0 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AAE8 */  _(C,x),  _(C,x),  _(C,x),  _(M,L),  _(M,B),  _(M,T),  _(M,L),  _(M,R),
 
   /* AAE0 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AAE8 */  _(C,x),  _(C,x),  _(C,x),  _(M,L),  _(M,B),  _(M,T),  _(M,L),  _(M,R),
-  /* AAF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Vs,x),  _(V,I),  _(x,x),
-  /* AAF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* AAF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Vs,x), _(IS,x),  _(x,x),
 
 
-#define indic_offset_0xabc0 3792
+#define indic_offset_0xabc0u 3272
 
 
 
 
-  /* Meetei Mayek  (ABC0..ABFF) */
+  /* Meetei Mayek */
 
   /* ABC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* ABC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),
   /* ABD0 */  _(C,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* ABD8 */  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* ABE0 */ _(CF,x), _(CF,x), _(CF,x),  _(M,R),  _(M,R),  _(M,T),  _(M,R),  _(M,R),
 
   /* ABC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* ABC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),
   /* ABD0 */  _(C,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* ABD8 */  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
   /* ABE0 */ _(CF,x), _(CF,x), _(CF,x),  _(M,R),  _(M,R),  _(M,T),  _(M,R),  _(M,R),
-  /* ABE8 */  _(M,B),  _(M,R),  _(M,R),  _(x,x), _(TM,x),  _(V,B),  _(x,x),  _(x,x),
-  /* ABF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* ABF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* ABE8 */  _(M,B),  _(M,R),  _(M,R),  _(x,x), _(TM,x), _(PK,B),  _(x,x),  _(x,x),
+  /* ABF0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* ABF8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-#define indic_offset_0x10a00 3856
+#define indic_offset_0x10a00u 3336
 
 
 
 
-  /* Kharoshthi  (10A00..10A5F) */
+  /* Kharoshthi */
 
   /* 10A00 */  _(C,x),  _(M,O),  _(M,B),  _(M,B),  _(x,x),  _(M,T),  _(M,O),  _(x,x),
   /* 10A08 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,B),  _(x,x), _(Bi,x), _(Vs,x),
 
   /* 10A00 */  _(C,x),  _(M,O),  _(M,B),  _(M,B),  _(x,x),  _(M,T),  _(M,O),  _(x,x),
   /* 10A08 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,B),  _(x,x), _(Bi,x), _(Vs,x),
@@ -712,16 +658,13 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 10A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 10A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 10A30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 10A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 10A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 10A30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 10A38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(V,I),
-  /* 10A40 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 10A48 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 10A50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 10A58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 10A38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(IS,x),
+  /* 10A40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
 
 
-#define indic_offset_0x11000 3952
+#define indic_offset_0x11000u 3408
 
 
 
 
-  /* Brahmi  (11000..1107F) */
+  /* Brahmi */
 
   /* 11000 */ _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11008 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
 
   /* 11000 */ _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11008 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -733,14 +676,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 11038 */  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
   /* 11040 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(x,x),
   /* 11048 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 11038 */  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
   /* 11040 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(x,x),
   /* 11048 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11050 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11058 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11060 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11068 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11050 */  _(x,x),  _(x,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
+  /* 11058 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
+  /* 11060 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x), _(Nd,x), _(Nd,x),
+  /* 11068 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 11070 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 11070 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11078 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11078 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(NJ,x),
 
 
-  /* Kaithi  (11080..110CF) */
+  /* Kaithi */
 
   /* 11080 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11088 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 11080 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11088 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
@@ -750,13 +693,11 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 110A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 110B0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,R),
   /* 110B8 */  _(M,R),  _(V,B),  _(N,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 110A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 110B0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,R),
   /* 110B8 */  _(M,R),  _(V,B),  _(N,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 110C0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 110C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-#define indic_offset_0x11100 4160
+#define indic_offset_0x11100u 3600
 
 
 
 
-  /* Chakma  (11100..1114F) */
+  /* Chakma */
 
   /* 11100 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
   /* 11108 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 11100 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
   /* 11108 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -764,15 +705,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 11118 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11120 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
   /* 11128 */  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,L),  _(M,T), _(M,TB), _(M,TB),
   /* 11118 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11120 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
   /* 11128 */  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,L),  _(M,T), _(M,TB), _(M,TB),
-  /* 11130 */  _(M,T),  _(M,B),  _(M,B),  _(V,I),  _(V,T),  _(x,x),  _(x,x),  _(x,x),
-  /* 11138 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11130 */  _(M,T),  _(M,B),  _(M,B), _(IS,x), _(PK,T),  _(x,x), _(Nd,x), _(Nd,x),
+  /* 11138 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 11140 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 11148 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* 11140 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 11148 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x11180 4240
+  /* Mahajani */
 
 
+  /* 11150 */ _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11158 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11160 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11168 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11170 */  _(C,x),  _(C,x),  _(C,x),  _(N,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11178 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-  /* Sharada  (11180..111DF) */
+  /* Sharada */
 
   /* 11180 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11188 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
 
   /* 11180 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11188 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -784,13 +731,116 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 111B8 */  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T), _(M,TR),
   /* 111C0 */  _(V,R),  _(A,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 111C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 111B8 */  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T), _(M,TR),
   /* 111C0 */  _(V,R),  _(A,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 111C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 111D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 111D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x11680 4336
-
-
-  /* Takri  (11680..116CF) */
+  /* 111D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 111D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+  /* Sinhala Archaic Numbers */
+
+  /* 111E0 */  _(x,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 111E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 111F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 111F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+  /* Khojki */
+
+  /* 11200 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 11208 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11210 */  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11218 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11220 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11228 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,R),  _(M,R),  _(M,B),
+  /* 11230 */  _(M,T),  _(M,T), _(M,TR), _(M,TR), _(Bi,x),  _(V,R),  _(N,x), _(GM,T),
+
+#define indic_offset_0x112b0u 3912
+
+
+  /* Khudawadi */
+
+  /* 112B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 112B8 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 112C0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 112C8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 112D0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 112D8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(Bi,x),
+  /* 112E0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),
+  /* 112E8 */  _(M,T),  _(N,x), _(PK,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 112F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 112F8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+  /* Grantha */
+
+  /* 11300 */  _(x,x), _(Bi,x), _(Bi,x), _(Vs,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 11308 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
+  /* 11310 */ _(VI,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11318 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11320 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11328 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11330 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11338 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,R),
+  /* 11340 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(x,x),  _(x,x),  _(M,L),
+  /* 11348 */  _(M,L),  _(x,x),  _(x,x), _(M,LR), _(M,LR),  _(V,R),  _(x,x),  _(x,x),
+  /* 11350 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
+  /* 11358 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11360 */ _(VI,x), _(VI,x),  _(M,R),  _(M,R),  _(x,x),  _(x,x), _(Ca,x), _(Ca,x),
+  /* 11368 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11370 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),
+
+#define indic_offset_0x11480u 4112
+
+
+  /* Tirhuta */
+
+  /* 11480 */  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 11488 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
+  /* 11490 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11498 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 114A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 114A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 114B0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
+  /* 114B8 */  _(M,B),  _(M,L),  _(M,T), _(M,TL), _(M,LR),  _(M,R), _(M,LR), _(Bi,x),
+  /* 114C0 */ _(Bi,x), _(Vs,x),  _(V,B),  _(N,x),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 114C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 114D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 114D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+#define indic_offset_0x11580u 4208
+
+
+  /* Siddham */
+
+  /* 11580 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 11588 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
+  /* 11590 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11598 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 115A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 115A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,R),
+  /* 115B0 */  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(x,x),  _(x,x),
+  /* 115B8 */  _(M,L), _(M,TL), _(M,LR),_(M,TLR), _(Bi,x), _(Bi,x), _(Vs,x),  _(V,B),
+  /* 115C0 */  _(N,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+#define indic_offset_0x11600u 4280
+
+
+  /* Modi */
+
+  /* 11600 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 11608 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
+  /* 11610 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11618 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11620 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11628 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
+  /* 11630 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
+  /* 11638 */  _(M,B),  _(M,T),  _(M,T),  _(M,R),  _(M,R), _(Bi,x), _(Vs,x),  _(V,B),
+  /* 11640 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11648 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11650 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 11658 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11660 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11668 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11670 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 11678 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+
+  /* Takri */
 
   /* 11680 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11688 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
 
   /* 11680 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
   /* 11688 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -800,30 +850,57 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 116A8 */  _(C,x),  _(C,x),  _(C,x), _(Bi,x), _(Vs,x),  _(M,T),  _(M,L),  _(M,R),
   /* 116B0 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(N,x),
   /* 116B8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 116A8 */  _(C,x),  _(C,x),  _(C,x), _(Bi,x), _(Vs,x),  _(M,T),  _(M,L),  _(M,R),
   /* 116B0 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(N,x),
   /* 116B8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116C0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_total 4416
+  /* 116C0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+  /* 116C8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 
-}; /* Table occupancy: 60% */
+}; /* Table items: 4488; occupancy: 73% */
 
 
-static INDIC_TABLE_ELEMENT_TYPE
-get_indic_categories (hb_codepoint_t u)
+INDIC_TABLE_ELEMENT_TYPE
+hb_indic_get_categories (hb_codepoint_t u)
 {
 {
-  if (0x0900 <= u && u <= 0x10A0) return indic_table[u - 0x0900 + indic_offset_0x0900];
-  if (0x1700 <= u && u <= 0x1800) return indic_table[u - 0x1700 + indic_offset_0x1700];
-  if (0x1900 <= u && u <= 0x1AB0) return indic_table[u - 0x1900 + indic_offset_0x1900];
-  if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
-  if (0x1CD0 <= u && u <= 0x1D00) return indic_table[u - 0x1CD0 + indic_offset_0x1cd0];
-  if (0xA800 <= u && u <= 0xAB00) return indic_table[u - 0xA800 + indic_offset_0xa800];
-  if (0xABC0 <= u && u <= 0xAC00) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
-  if (0x10A00 <= u && u <= 0x10A60) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
-  if (0x11000 <= u && u <= 0x110D0) return indic_table[u - 0x11000 + indic_offset_0x11000];
-  if (0x11100 <= u && u <= 0x11150) return indic_table[u - 0x11100 + indic_offset_0x11100];
-  if (0x11180 <= u && u <= 0x111E0) return indic_table[u - 0x11180 + indic_offset_0x11180];
-  if (0x11680 <= u && u <= 0x116D0) return indic_table[u - 0x11680 + indic_offset_0x11680];
-  if (unlikely (u == 0x00A0)) return _(CP,x);
-  if (unlikely (u == 0x25CC)) return _(CP,x);
+  switch (u >> 12)
+  {
+    case 0x0u:
+      if (hb_in_range (u, 0x0028u, 0x0040u)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
+      if (hb_in_range (u, 0x00D0u, 0x00D8u)) return indic_table[u - 0x00D0u + indic_offset_0x00d0u];
+      if (hb_in_range (u, 0x0900u, 0x0DF8u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
+      if (unlikely (u == 0x00A0u)) return _(CP,x);
+      break;
+
+    case 0x1u:
+      if (hb_in_range (u, 0x1000u, 0x10A0u)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
+      if (hb_in_range (u, 0x1700u, 0x17F0u)) return indic_table[u - 0x1700u + indic_offset_0x1700u];
+      if (hb_in_range (u, 0x1900u, 0x1AA0u)) return indic_table[u - 0x1900u + indic_offset_0x1900u];
+      if (hb_in_range (u, 0x1B00u, 0x1C50u)) return indic_table[u - 0x1B00u + indic_offset_0x1b00u];
+      if (hb_in_range (u, 0x1CD0u, 0x1CF8u)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
+      break;
+
+    case 0x2u:
+      if (hb_in_range (u, 0x2008u, 0x2018u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
+      if (unlikely (u == 0x25CCu)) return _(CP,x);
+      break;
+
+    case 0xAu:
+      if (hb_in_range (u, 0xA800u, 0xAAF8u)) return indic_table[u - 0xA800u + indic_offset_0xa800u];
+      if (hb_in_range (u, 0xABC0u, 0xAC00u)) return indic_table[u - 0xABC0u + indic_offset_0xabc0u];
+      break;
+
+    case 0x10u:
+      if (hb_in_range (u, 0x10A00u, 0x10A48u)) return indic_table[u - 0x10A00u + indic_offset_0x10a00u];
+      break;
+
+    case 0x11u:
+      if (hb_in_range (u, 0x11000u, 0x110C0u)) return indic_table[u - 0x11000u + indic_offset_0x11000u];
+      if (hb_in_range (u, 0x11100u, 0x11238u)) return indic_table[u - 0x11100u + indic_offset_0x11100u];
+      if (hb_in_range (u, 0x112B0u, 0x11378u)) return indic_table[u - 0x112B0u + indic_offset_0x112b0u];
+      if (hb_in_range (u, 0x11480u, 0x114E0u)) return indic_table[u - 0x11480u + indic_offset_0x11480u];
+      if (hb_in_range (u, 0x11580u, 0x115C8u)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
+      if (hb_in_range (u, 0x11600u, 0x116D0u)) return indic_table[u - 0x11600u + indic_offset_0x11600u];
+      break;
+
+    default:
+      break;
+  }
   return _(x,x);
 }
 
   return _(x,x);
 }
 
@@ -831,17 +908,27 @@ get_indic_categories (hb_codepoint_t u)
 
 #undef ISC_A
 #undef ISC_Bi
 
 #undef ISC_A
 #undef ISC_Bi
+#undef ISC_BJN
+#undef ISC_Ca
 #undef ISC_C
 #undef ISC_CD
 #undef ISC_CF
 #undef ISC_CHL
 #undef ISC_CM
 #undef ISC_CP
 #undef ISC_C
 #undef ISC_CD
 #undef ISC_CF
 #undef ISC_CHL
 #undef ISC_CM
 #undef ISC_CP
-#undef ISC_CR
+#undef ISC_CPR
 #undef ISC_CS
 #undef ISC_CS
+#undef ISC_CSR
+#undef ISC_GM
+#undef ISC_IS
+#undef ISC_ZWJ
 #undef ISC_ML
 #undef ISC_ML
+#undef ISC_ZWNJ
 #undef ISC_N
 #undef ISC_N
+#undef ISC_Nd
+#undef ISC_NJ
 #undef ISC_x
 #undef ISC_x
+#undef ISC_PK
 #undef ISC_RS
 #undef ISC_TL
 #undef ISC_TM
 #undef ISC_RS
 #undef ISC_TL
 #undef ISC_TM
@@ -853,7 +940,6 @@ get_indic_categories (hb_codepoint_t u)
 
 #undef IMC_B
 #undef IMC_BR
 
 #undef IMC_B
 #undef IMC_BR
-#undef IMC_I
 #undef IMC_L
 #undef IMC_LR
 #undef IMC_x
 #undef IMC_L
 #undef IMC_LR
 #undef IMC_x
@@ -867,6 +953,4 @@ get_indic_categories (hb_codepoint_t u)
 #undef IMC_TR
 #undef IMC_VOL
 
 #undef IMC_TR
 #undef IMC_VOL
 
-#endif /* HB_OT_SHAPE_COMPLEX_INDIC_TABLE_HH */
-
 /* == End of generated table == */
 /* == End of generated table == */
index 5afede0..7723600 100644 (file)
 #include "hb-ot-shape-complex-indic-private.hh"
 #include "hb-ot-layout-private.hh"
 
 #include "hb-ot-shape-complex-indic-private.hh"
 #include "hb-ot-layout-private.hh"
 
+/* buffer var allocations */
+#define indic_category() complex_var_u8_0() /* indic_category_t */
+#define indic_position() complex_var_u8_1() /* indic_position_t */
+
 
 /*
 
 /*
- * Global Indic shaper options.
+ * Indic shaper.
  */
 
  */
 
-struct indic_options_t
+
+#define IN_HALF_BLOCK(u, Base) (((u) & ~0x7Fu) == (Base))
+
+#define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x0900u))
+#define IS_BENG(u) (IN_HALF_BLOCK (u, 0x0980u))
+#define IS_GURU(u) (IN_HALF_BLOCK (u, 0x0A00u))
+#define IS_GUJR(u) (IN_HALF_BLOCK (u, 0x0A80u))
+#define IS_ORYA(u) (IN_HALF_BLOCK (u, 0x0B00u))
+#define IS_TAML(u) (IN_HALF_BLOCK (u, 0x0B80u))
+#define IS_TELU(u) (IN_HALF_BLOCK (u, 0x0C00u))
+#define IS_KNDA(u) (IN_HALF_BLOCK (u, 0x0C80u))
+#define IS_MLYM(u) (IN_HALF_BLOCK (u, 0x0D00u))
+#define IS_SINH(u) (IN_HALF_BLOCK (u, 0x0D80u))
+#define IS_KHMR(u) (IN_HALF_BLOCK (u, 0x1780u))
+
+
+#define MATRA_POS_LEFT(u)      POS_PRE_M
+#define MATRA_POS_RIGHT(u)     ( \
+                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
+                                 IS_BENG(u) ? POS_AFTER_POST : \
+                                 IS_GURU(u) ? POS_AFTER_POST : \
+                                 IS_GUJR(u) ? POS_AFTER_POST : \
+                                 IS_ORYA(u) ? POS_AFTER_POST : \
+                                 IS_TAML(u) ? POS_AFTER_POST : \
+                                 IS_TELU(u) ? (u <= 0x0C42u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
+                                 IS_KNDA(u) ? (u < 0x0CC3u || u > 0xCD6u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
+                                 IS_MLYM(u) ? POS_AFTER_POST : \
+                                 IS_SINH(u) ? POS_AFTER_SUB  : \
+                                 IS_KHMR(u) ? POS_AFTER_POST : \
+                                 /*default*/  POS_AFTER_SUB    \
+                               )
+#define MATRA_POS_TOP(u)       ( /* BENG and MLYM don't have top matras. */ \
+                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
+                                 IS_GURU(u) ? POS_AFTER_POST : /* Deviate from spec */ \
+                                 IS_GUJR(u) ? POS_AFTER_SUB  : \
+                                 IS_ORYA(u) ? POS_AFTER_MAIN : \
+                                 IS_TAML(u) ? POS_AFTER_SUB  : \
+                                 IS_TELU(u) ? POS_BEFORE_SUB : \
+                                 IS_KNDA(u) ? POS_BEFORE_SUB : \
+                                 IS_SINH(u) ? POS_AFTER_SUB  : \
+                                 IS_KHMR(u) ? POS_AFTER_POST : \
+                                 /*default*/  POS_AFTER_SUB    \
+                               )
+#define MATRA_POS_BOTTOM(u)    ( \
+                                 IS_DEVA(u) ? POS_AFTER_SUB  : \
+                                 IS_BENG(u) ? POS_AFTER_SUB  : \
+                                 IS_GURU(u) ? POS_AFTER_POST : \
+                                 IS_GUJR(u) ? POS_AFTER_POST : \
+                                 IS_ORYA(u) ? POS_AFTER_SUB  : \
+                                 IS_TAML(u) ? POS_AFTER_POST : \
+                                 IS_TELU(u) ? POS_BEFORE_SUB : \
+                                 IS_KNDA(u) ? POS_BEFORE_SUB : \
+                                 IS_MLYM(u) ? POS_AFTER_POST : \
+                                 IS_SINH(u) ? POS_AFTER_SUB  : \
+                                 IS_KHMR(u) ? POS_AFTER_POST : \
+                                 /*default*/  POS_AFTER_SUB    \
+                               )
+
+static inline indic_position_t
+matra_position (hb_codepoint_t u, indic_position_t side)
 {
 {
-  int initialized : 1;
-  int uniscribe_bug_compatible : 1;
-};
+  switch ((int) side)
+  {
+    case POS_PRE_C:    return MATRA_POS_LEFT (u);
+    case POS_POST_C:   return MATRA_POS_RIGHT (u);
+    case POS_ABOVE_C:  return MATRA_POS_TOP (u);
+    case POS_BELOW_C:  return MATRA_POS_BOTTOM (u);
+  };
+  return side;
+}
 
 
-union indic_options_union_t {
-  int i;
-  indic_options_t opts;
+/* XXX
+ * This is a hack for now.  We should move this data into the main Indic table.
+ * Or completely remove it and just check in the tables.
+ */
+static const hb_codepoint_t ra_chars[] = {
+  0x0930u, /* Devanagari */
+  0x09B0u, /* Bengali */
+  0x09F0u, /* Bengali */
+  0x0A30u, /* Gurmukhi */      /* No Reph */
+  0x0AB0u, /* Gujarati */
+  0x0B30u, /* Oriya */
+  0x0BB0u, /* Tamil */         /* No Reph */
+  0x0C30u, /* Telugu */                /* Reph formed only with ZWJ */
+  0x0CB0u, /* Kannada */
+  0x0D30u, /* Malayalam */     /* No Reph, Logical Repha */
+
+  0x0DBBu, /* Sinhala */               /* Reph formed only with ZWJ */
+
+  0x179Au, /* Khmer */         /* No Reph, Visual Repha */
 };
 };
-ASSERT_STATIC (sizeof (int) == sizeof (indic_options_union_t));
 
 
-static indic_options_union_t
-indic_options_init (void)
+static inline bool
+is_ra (hb_codepoint_t u)
+{
+  for (unsigned int i = 0; i < ARRAY_LENGTH (ra_chars); i++)
+    if (u == ra_chars[i])
+      return true;
+  return false;
+}
+
+static inline bool
+is_one_of (const hb_glyph_info_t &info, unsigned int flags)
 {
 {
-  indic_options_union_t u;
-  u.i = 0;
-  u.opts.initialized = 1;
+  /* If it ligated, all bets are off. */
+  if (_hb_glyph_info_ligated (&info)) return false;
+  return !!(FLAG (info.indic_category()) & flags);
+}
 
 
-  char *c = getenv ("HB_OT_INDIC_OPTIONS");
-  u.opts.uniscribe_bug_compatible = c && strstr (c, "uniscribe-bug-compatible");
+static inline bool
+is_joiner (const hb_glyph_info_t &info)
+{
+  return is_one_of (info, JOINER_FLAGS);
+}
 
 
-  return u;
+static inline bool
+is_consonant (const hb_glyph_info_t &info)
+{
+  return is_one_of (info, CONSONANT_FLAGS);
 }
 
 }
 
-static inline indic_options_t
-indic_options (void)
+static inline bool
+is_halant_or_coeng (const hb_glyph_info_t &info)
 {
 {
-  static indic_options_union_t options;
+  return is_one_of (info, HALANT_OR_COENG_FLAGS);
+}
+
+static inline void
+set_indic_properties (hb_glyph_info_t &info)
+{
+  hb_codepoint_t u = info.codepoint;
+  unsigned int type = hb_indic_get_categories (u);
+  indic_category_t cat = (indic_category_t) (type & 0x7Fu);
+  indic_position_t pos = (indic_position_t) (type >> 8);
+
+
+  /*
+   * Re-assign category
+   */
+
+
+  /* The spec says U+0952 is OT_A.  However, testing shows that Uniscribe
+   * treats a whole bunch of characters similarly.
+   * TESTS: For example, for U+0951:
+   * U+092E,U+0947,U+0952
+   * U+092E,U+0952,U+0947
+   * U+092E,U+0947,U+0951
+   * U+092E,U+0951,U+0947
+   * U+092E,U+0951,U+0952
+   * U+092E,U+0952,U+0951
+   */
+  if (unlikely (hb_in_ranges (u, 0x0951u, 0x0952u,
+                                0x1CD0u, 0x1CD2u,
+                                0x1CD4u, 0x1CE1u) ||
+                           u == 0x1CF4u))
+    cat = OT_A;
+  /* The following act more like the Bindus. */
+  else if (unlikely (hb_in_range (u, 0x0953u, 0x0954u)))
+    cat = OT_SM;
+  /* The following act like consonants. */
+  else if (unlikely (hb_in_ranges (u, 0x0A72u, 0x0A73u,
+                                     0x1CF5u, 0x1CF6u)))
+    cat = OT_C;
+  /* TODO: The following should only be allowed after a Visarga.
+   * For now, just treat them like regular tone marks. */
+  else if (unlikely (hb_in_range (u, 0x1CE2u, 0x1CE8u)))
+    cat = OT_A;
+  /* TODO: The following should only be allowed after some of
+   * the nasalization marks, maybe only for U+1CE9..U+1CF1.
+   * For now, just treat them like tone marks. */
+  else if (unlikely (u == 0x1CEDu))
+    cat = OT_A;
+  /* The following take marks in standalone clusters, similar to Avagraha. */
+  else if (unlikely (hb_in_ranges (u, 0xA8F2u, 0xA8F7u,
+                                     0x1CE9u, 0x1CECu,
+                                     0x1CEEu, 0x1CF1u)))
+  {
+    cat = OT_Symbol;
+    ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol);
+  }
+  else if (unlikely (hb_in_range (u, 0x17CDu, 0x17D1u) ||
+                    u == 0x17CBu || u == 0x17D3u || u == 0x17DDu)) /* Khmer Various signs */
+  {
+    /* These are like Top Matras. */
+    cat = OT_M;
+    pos = POS_ABOVE_C;
+  }
+  else if (unlikely (u == 0x17C6u)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */
+  else if (unlikely (u == 0x17D2u)) cat = OT_Coeng; /* Khmer coeng */
+  else if (unlikely (hb_in_range (u, 0x2010u, 0x2011u)))
+                                   cat = OT_PLACEHOLDER;
+  else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
+  else if (unlikely (u == 0xA982u)) cat = OT_SM; /* Javanese repha. */
+  else if (unlikely (u == 0xA9BEu)) cat = OT_CM2; /* Javanese medial ya. */
+  else if (unlikely (u == 0xA9BDu)) { cat = OT_M; pos = POS_POST_C; } /* Javanese vocalic r. */
+
+
+  /*
+   * Re-assign position.
+   */
 
 
-  if (unlikely (!options.i)) {
-    /* This is idempotent and threadsafe. */
-    options = indic_options_init ();
+  if ((FLAG (cat) & CONSONANT_FLAGS))
+  {
+    pos = POS_BASE_C;
+    if (is_ra (u))
+      cat = OT_Ra;
+  }
+  else if (cat == OT_M)
+  {
+    pos = matra_position (u, pos);
+  }
+  else if ((FLAG (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol))))
+  {
+    pos = POS_SMVD;
   }
 
   }
 
-  return options.opts;
+  if (unlikely (u == 0x0B01u)) pos = POS_BEFORE_SUB; /* Oriya Bindu is BeforeSub in the spec. */
+
+
+
+  info.indic_category() = cat;
+  info.indic_position() = pos;
 }
 
 }
 
+/*
+ * Things above this line should ideally be moved to the Indic table itself.
+ */
+
 
 /*
  * Indic configurations.  Note that we do not want to keep every single script-specific
 
 /*
  * Indic configurations.  Note that we do not want to keep every single script-specific
@@ -81,16 +275,16 @@ indic_options (void)
 
 enum base_position_t {
   BASE_POS_FIRST,
 
 enum base_position_t {
   BASE_POS_FIRST,
+  BASE_POS_LAST_SINHALA,
   BASE_POS_LAST
 };
 enum reph_position_t {
   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_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. */
 };
 enum reph_mode_t {
   REPH_MODE_IMPLICIT,  /* Reph formed out of initial Ra,H sequence. */
@@ -98,6 +292,15 @@ enum reph_mode_t {
   REPH_MODE_VIS_REPHA, /* Encoded Repha character, no reordering needed. */
   REPH_MODE_LOG_REPHA  /* Encoded Repha character, needs reordering. */
 };
   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;
 struct indic_config_t
 {
   hb_script_t     script;
@@ -106,25 +309,27 @@ struct indic_config_t
   base_position_t base_pos;
   reph_position_t reph_pos;
   reph_mode_t     reph_mode;
   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. */
 };
 
 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},
-  /* Myanmar does not have the "old_indic" behavior, even though it has a "new" tag. */
-  {HB_SCRIPT_MYANMAR,  false,0x1039,BASE_POS_LAST, REPH_POS_DEFAULT,    REPH_MODE_EXPLICIT},
+  {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, 0x094Du,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_BENGALI,  true, 0x09CDu,BASE_POS_LAST, REPH_POS_AFTER_SUB,  REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_GURMUKHI, true, 0x0A4Du,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_GUJARATI, true, 0x0ACDu,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_ORIYA,    true, 0x0B4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_TAMIL,    true, 0x0BCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
+  {HB_SCRIPT_TELUGU,   true, 0x0C4Du,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT, BLWF_MODE_POST_ONLY,    PREF_LEN_2},
+  {HB_SCRIPT_KANNADA,  true, 0x0CCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_POST_ONLY,    PREF_LEN_2},
+  {HB_SCRIPT_MALAYALAM,        true, 0x0D4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
+  {HB_SCRIPT_SINHALA,  false,0x0DCAu,BASE_POS_LAST_SINHALA,
+                                                    REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
+  {HB_SCRIPT_KHMER,    false,0x17D2u,BASE_POS_FIRST,REPH_POS_DONT_CARE,  REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
+  {HB_SCRIPT_JAVANESE, false,0xA9C0u,BASE_POS_FIRST,REPH_POS_DONT_CARE,  REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_1},
 };
 
 
 };
 
 
@@ -135,7 +340,7 @@ static const indic_config_t indic_configs[] =
 
 struct feature_list_t {
   hb_tag_t tag;
 
 struct feature_list_t {
   hb_tag_t tag;
-  hb_bool_t is_global;
+  hb_ot_map_feature_flags_t flags;
 };
 
 static const feature_list_t
 };
 
 static const feature_list_t
@@ -145,32 +350,34 @@ indic_features[] =
    * Basic features.
    * These features are applied in order, one at a time, after initial_reordering.
    */
    * Basic features.
    * These features are applied in order, one at a time, after initial_reordering.
    */
-  {HB_TAG('n','u','k','t'), true},
-  {HB_TAG('a','k','h','n'), true},
-  {HB_TAG('r','p','h','f'), false},
-  {HB_TAG('r','k','r','f'), true},
-  {HB_TAG('p','r','e','f'), false},
-  {HB_TAG('h','a','l','f'), false},
-  {HB_TAG('b','l','w','f'), false},
-  {HB_TAG('a','b','v','f'), false},
-  {HB_TAG('p','s','t','f'), false},
-  {HB_TAG('c','f','a','r'), false},
-  {HB_TAG('c','j','c','t'), true},
-  {HB_TAG('v','a','t','u'), true},
+  {HB_TAG('n','u','k','t'), F_GLOBAL},
+  {HB_TAG('a','k','h','n'), F_GLOBAL},
+  {HB_TAG('r','p','h','f'), F_NONE},
+  {HB_TAG('r','k','r','f'), F_GLOBAL},
+  {HB_TAG('p','r','e','f'), F_NONE},
+  {HB_TAG('b','l','w','f'), F_NONE},
+  {HB_TAG('a','b','v','f'), F_NONE},
+  {HB_TAG('h','a','l','f'), F_NONE},
+  {HB_TAG('p','s','t','f'), 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.
   /*
    * 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'), false},
-  {HB_TAG('p','r','e','s'), true},
-  {HB_TAG('a','b','v','s'), true},
-  {HB_TAG('b','l','w','s'), true},
-  {HB_TAG('p','s','t','s'), true},
-  {HB_TAG('h','a','l','n'), true},
+  {HB_TAG('i','n','i','t'), F_NONE},
+  {HB_TAG('p','r','e','s'), F_GLOBAL},
+  {HB_TAG('a','b','v','s'), F_GLOBAL},
+  {HB_TAG('b','l','w','s'), F_GLOBAL},
+  {HB_TAG('p','s','t','s'), F_GLOBAL},
+  {HB_TAG('h','a','l','n'), F_GLOBAL},
   /* Positioning features, though we don't care about the types. */
   /* Positioning features, though we don't care about the types. */
-  {HB_TAG('d','i','s','t'), true},
-  {HB_TAG('a','b','v','m'), true},
-  {HB_TAG('b','l','w','m'), true},
+  {HB_TAG('d','i','s','t'), F_GLOBAL},
+  {HB_TAG('a','b','v','m'), F_GLOBAL},
+  {HB_TAG('b','l','w','m'), F_GLOBAL},
 };
 
 /*
 };
 
 /*
@@ -182,13 +389,13 @@ enum {
   RPHF,
   _RKRF,
   PREF,
   RPHF,
   _RKRF,
   PREF,
-  HALF,
   BLWF,
   ABVF,
   BLWF,
   ABVF,
+  HALF,
   PSTF,
   PSTF,
-  CFAR,
-  _CJCT,
   _VATU,
   _VATU,
+  _CJCT,
+  CFAR,
 
   INIT,
   _PRES,
 
   INIT,
   _PRES,
@@ -216,6 +423,10 @@ static void
 final_reordering (const hb_ot_shape_plan_t *plan,
                  hb_font_t *font,
                  hb_buffer_t *buffer);
 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)
 
 static void
 collect_features_indic (hb_ot_shape_planner_t *plan)
@@ -225,48 +436,60 @@ collect_features_indic (hb_ot_shape_planner_t *plan)
   /* Do this before any lookups have been applied. */
   map->add_gsub_pause (setup_syllables);
 
   /* Do this before any lookups have been applied. */
   map->add_gsub_pause (setup_syllables);
 
-  map->add_bool_feature (HB_TAG('l','o','c','l'));
+  map->add_global_bool_feature (HB_TAG('l','o','c','l'));
   /* The Indic specs do not require ccmp, but we apply it here since if
    * there is a use of it, it's typically at the beginning. */
   /* The Indic specs do not require ccmp, but we apply it here since if
    * there is a use of it, it's typically at the beginning. */
-  map->add_bool_feature (HB_TAG('c','c','m','p'));
+  map->add_global_bool_feature (HB_TAG('c','c','m','p'));
 
 
   unsigned int i = 0;
   map->add_gsub_pause (initial_reordering);
   for (; i < INDIC_BASIC_FEATURES; i++) {
 
 
   unsigned int i = 0;
   map->add_gsub_pause (initial_reordering);
   for (; i < INDIC_BASIC_FEATURES; i++) {
-    map->add_bool_feature (indic_features[i].tag, indic_features[i].is_global);
+    map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ);
     map->add_gsub_pause (NULL);
   }
   map->add_gsub_pause (final_reordering);
   for (; i < INDIC_NUM_FEATURES; i++) {
     map->add_gsub_pause (NULL);
   }
   map->add_gsub_pause (final_reordering);
   for (; i < INDIC_NUM_FEATURES; i++) {
-    map->add_bool_feature (indic_features[i].tag, indic_features[i].is_global);
+    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)
 {
 }
 
 static void
 override_features_indic (hb_ot_shape_planner_t *plan)
 {
-  /* Uniscribe does not apply 'kern'. */
-  if (indic_options ().uniscribe_bug_compatible)
-    plan->map.add_feature (HB_TAG('k','e','r','n'), 0, true);
+  /* Uniscribe does not apply 'kern' in Khmer. */
+  if (hb_options ().uniscribe_bug_compatible)
+  {
+    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, true);
+  plan->map.add_feature (HB_TAG('l','i','g','a'), 0, F_GLOBAL);
 }
 
 
 struct would_substitute_feature_t
 {
 }
 
 
 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);
   }
 
     map->get_stage_lookups (0/*GSUB*/,
                            map->get_feature_stage (0/*GSUB*/, feature_tag),
                            &lookups, &count);
   }
 
-  inline bool would_substitute (hb_codepoint_t    *glyphs,
-                               unsigned int       glyphs_count,
-                               bool               zero_context,
-                               hb_face_t         *face) const
+  inline bool would_substitute (const hb_codepoint_t *glyphs,
+                               unsigned int          glyphs_count,
+                               hb_face_t            *face) const
   {
     for (unsigned int i = 0; i < count; i++)
       if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
   {
     for (unsigned int i = 0; i < count; i++)
       if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
@@ -277,6 +500,7 @@ struct would_substitute_feature_t
   private:
   const hb_ot_map_t::lookup_map_t *lookups;
   unsigned int count;
   private:
   const hb_ot_map_t::lookup_map_t *lookups;
   unsigned int count;
+  bool zero_context;
 };
 
 struct indic_shape_plan_t
 };
 
 struct indic_shape_plan_t
@@ -329,16 +553,20 @@ data_create_indic (const hb_ot_shape_plan_t *plan)
       break;
     }
 
       break;
     }
 
-  indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FF) != '2');
+  indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FFu) != '2');
   indic_plan->virama_glyph = (hb_codepoint_t) -1;
 
   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, and scripts with one spec only, but not for old-specs. */
+  bool zero_context = !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++)
 
   for (unsigned int i = 0; i < ARRAY_LENGTH (indic_plan->mask_array); i++)
-    indic_plan->mask_array[i] = indic_features[i].is_global ? 0 : plan->map.get_1_mask (indic_features[i].tag);
+    indic_plan->mask_array[i] = (indic_features[i].flags & F_GLOBAL) ?
+                                0 : plan->map.get_1_mask (indic_features[i].tag);
 
   return indic_plan;
 }
 
   return indic_plan;
 }
@@ -351,13 +579,34 @@ data_destroy_indic (void *data)
 
 static indic_position_t
 consonant_position_from_face (const indic_shape_plan_t *indic_plan,
 
 static indic_position_t
 consonant_position_from_face (const indic_shape_plan_t *indic_plan,
-                             hb_codepoint_t *glyphs, unsigned int glyphs_len,
-                             hb_face_t      *face)
+                             const hb_codepoint_t consonant,
+                             const hb_codepoint_t virama,
+                             hb_face_t *face)
 {
 {
-  bool zero_context = indic_plan->is_old_spec ? false : true;
-  if (indic_plan->pref.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
-  if (indic_plan->blwf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
-  if (indic_plan->pstf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_POST_C;
+  /* For old-spec, the order of glyphs is Consonant,Virama,
+   * whereas for new-spec, it's Virama,Consonant.  However,
+   * some broken fonts (like Free Sans) simply copied lookups
+   * from old-spec to new-spec without modification.
+   * And oddly enough, Uniscribe seems to respect those lookups.
+   * Eg. in the sequence U+0924,U+094D,U+0930, Uniscribe finds
+   * base at 0.  The font however, only has lookups matching
+   * 930,94D in 'blwf', not the expected 94D,930 (with new-spec
+   * table).  As such, we simply match both sequences.  Seems
+   * to work. */
+  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, 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;
 }
 
   return POS_BASE_C;
 }
 
@@ -366,6 +615,7 @@ enum syllable_type_t {
   consonant_syllable,
   vowel_syllable,
   standalone_cluster,
   consonant_syllable,
   vowel_syllable,
   standalone_cluster,
+  symbol_cluster,
   broken_cluster,
   non_indic_cluster,
 };
   broken_cluster,
   non_indic_cluster,
 };
@@ -385,8 +635,9 @@ setup_masks_indic (const hb_ot_shape_plan_t *plan HB_UNUSED,
    * and setup masks later on in a pause-callback. */
 
   unsigned int count = buffer->len;
    * and setup masks later on in a pause-callback. */
 
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    set_indic_properties (buffer->info[i]);
+    set_indic_properties (info[i]);
 }
 
 static void
 }
 
 static void
@@ -415,16 +666,20 @@ update_consonant_positions (const hb_ot_shape_plan_t *plan,
 {
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
 
 {
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
 
-  unsigned int consonant_pos = indic_plan->is_old_spec ? 0 : 1;
-  hb_codepoint_t glyphs[2];
-  if (indic_plan->get_virama_glyph (font, &glyphs[1 - consonant_pos]))
+  if (indic_plan->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;
   {
     hb_face_t *face = font->face;
     unsigned int count = buffer->len;
+    hb_glyph_info_t *info = buffer->info;
     for (unsigned int i = 0; i < count; i++)
     for (unsigned int i = 0; i < count; i++)
-      if (buffer->info[i].indic_position() == POS_BASE_C) {
-       glyphs[consonant_pos] = buffer->info[i].codepoint;
-       buffer->info[i].indic_position() = consonant_position_from_face (indic_plan, glyphs, 2, face);
+      if (info[i].indic_position() == POS_BASE_C)
+      {
+       hb_codepoint_t consonant = info[i].codepoint;
+       info[i].indic_position() = consonant_position_from_face (indic_plan, consonant, virama, face);
       }
   }
 }
       }
   }
 }
@@ -465,7 +720,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;
      *    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])) ||
        start + 3 <= end &&
        (
         (indic_plan->config->reph_mode == REPH_MODE_IMPLICIT && !is_joiner (info[start + 2])) ||
@@ -473,8 +729,13 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
        ))
     {
       /* See if it matches the 'rphf' feature. */
        ))
     {
       /* 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))
+      hb_codepoint_t glyphs[3] = {info[start].codepoint,
+                                 info[start + 1].codepoint,
+                                 indic_plan->config->reph_mode == REPH_MODE_EXPLICIT ?
+                                   info[start + 2].codepoint : 0};
+      if (indic_plan->rphf.would_substitute (glyphs, 2, face) ||
+         (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT &&
+          indic_plan->rphf.would_substitute (glyphs, 3, face)))
       {
        limit += 2;
        while (limit < end && is_joiner (info[limit]))
       {
        limit += 2;
        while (limit < end && is_joiner (info[limit]))
@@ -522,7 +783,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
             *
             * IMPLEMENTATION NOTES:
             *
             *
             * IMPLEMENTATION NOTES:
             *
-            * Our pre-base reordering Ra's are marked POS_BELOW, so will be skipped
+            * Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped
             * by the logic above already.
             */
 
             * by the logic above already.
             */
 
@@ -546,9 +807,12 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
       }
       break;
 
       }
       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. Its ZWJ behavior is different,
+        * 2. We don't need to look into the font for consonant positions.
+        */
 
        if (!has_reph)
          base = limit;
 
        if (!has_reph)
          base = limit;
@@ -556,7 +820,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++)
        /* 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;
          {
            if (limit < i && info[i - 1].indic_category() == OT_ZWJ)
              break;
@@ -566,7 +830,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++)
 
        /* 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;
            info[i].indic_position() = POS_BELOW_C;
       }
       break;
@@ -577,15 +857,12 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
      *    base consonants.
      *
      *  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ. */
      *    base consonants.
      *
      *  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ. */
-    if (has_reph && base == start && start - limit <= 2) {
+    if (has_reph && base == start && limit - base <= 2) {
       /* Have no other consonant, so Reph is not formed and Ra becomes base. */
       has_reph = false;
     }
   }
 
       /* Have no other consonant, so Reph is not formed and Ra becomes base. */
       has_reph = false;
     }
   }
 
-  if (base < end)
-    info[base].indic_position() = POS_BASE_C;
-
 
   /* 2. Decompose and reorder Matras:
    *
 
   /* 2. Decompose and reorder Matras:
    *
@@ -644,14 +921,32 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
     info[start].indic_position() = POS_RA_TO_BECOME_REPH;
 
   /* For old-style Indic script tags, move the first post-base Halant after
     info[start].indic_position() = POS_RA_TO_BECOME_REPH;
 
   /* For old-style Indic script tags, move the first post-base Halant after
-   * last consonant.  Only do this if there is *not* a Halant after last
-   * consonant.  Otherwise it becomes messy. */
-  if (indic_plan->is_old_spec) {
+   * last consonant.
+   *
+   * Reports suggest that in some scripts Uniscribe does this only if there
+   * is *not* a Halant after last consonant already (eg. Kannada), while it
+   * does it unconditionally in other scripts (eg. Malayalam).  We don't
+   * currently know about other scripts, so we single out Malayalam for now.
+   *
+   * Kannada test case:
+   * U+0C9A,U+0CCD,U+0C9A,U+0CCD
+   * With some versions of Lohit Kannada.
+   * https://bugs.freedesktop.org/show_bug.cgi?id=59118
+   *
+   * Malayalam test case:
+   * U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
+   * With lohit-ttf-20121122/Lohit-Malayalam.ttf
+   */
+  if (indic_plan->is_old_spec)
+  {
+    bool disallow_double_halants = buffer->props.script != HB_SCRIPT_MALAYALAM;
     for (unsigned int i = base + 1; i < end; i++)
     for (unsigned int i = base + 1; i < end; i++)
-      if (info[i].indic_category() == OT_H) {
+      if (info[i].indic_category() == OT_H)
+      {
         unsigned int j;
         for (j = end - 1; j > i; j--)
         unsigned int j;
         for (j = end - 1; j > i; j--)
-         if (is_consonant (info[j]) || info[j].indic_category() == OT_H)
+         if (is_consonant (info[j]) ||
+             (disallow_double_halants && info[j].indic_category() == OT_H))
            break;
        if (info[j].indic_category() != OT_H && j > i) {
          /* Move Halant to after last consonant. */
            break;
        if (info[j].indic_category() != OT_H && j > i) {
          /* Move Halant to after last consonant. */
@@ -668,7 +963,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++)
     {
     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 &&
       {
        info[i].indic_position() = last_pos;
        if (unlikely (info[i].indic_category() == OT_H &&
@@ -694,33 +989,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++)
     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();
            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++)
     /* 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;
       }
        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 */
   }
 
   /* Setup masks now */
@@ -734,6 +1064,9 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
 
     /* Pre-base */
     mask = indic_plan->mask_array[HALF];
 
     /* 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 */
     for (unsigned int i = start; i < base; i++)
       info[i].mask  |= mask;
     /* Base */
@@ -746,15 +1079,51 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
       info[i].mask  |= mask;
   }
 
       info[i].mask  |= mask;
   }
 
-  if (indic_plan->mask_array[PREF] && base + 2 < end)
+  if (indic_plan->is_old_spec &&
+      buffer->props.script == HB_SCRIPT_DEVANAGARI)
+  {
+    /* Old-spec eye-lash Ra needs special handling.  From the
+     * spec:
+     *
+     * "The feature 'below-base form' is applied to consonants
+     * having below-base forms and following the base consonant.
+     * The exception is vattu, which may appear below half forms
+     * as well as below the base glyph. The feature 'below-base
+     * form' will be applied to all such occurrences of Ra as well."
+     *
+     * Test case: U+0924,U+094D,U+0930,U+094d,U+0915
+     * with Sanskrit 2003 font.
+     *
+     * However, note that Ra,Halant,ZWJ is the correct way to
+     * request eyelash form of Ra, so we wouldbn't inhibit it
+     * in that sequence.
+     *
+     * Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
+     */
+    for (unsigned int i = start; i + 1 < base; i++)
+      if (info[i  ].indic_category() == OT_Ra &&
+         info[i+1].indic_category() == OT_H  &&
+         (i + 2 == base ||
+          info[i+2].indic_category() != OT_ZWJ))
+      {
+       info[i  ].mask |= indic_plan->mask_array[BLWF];
+       info[i+1].mask |= indic_plan->mask_array[BLWF];
+      }
+  }
+
+  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. */
     /* 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.
 
        /* Mark the subsequent stuff with 'cfar'.  Used in Khmer.
         * Read the feature spec.
@@ -762,8 +1131,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
         */
         * 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;
       }
 
        break;
       }
@@ -779,8 +1149,9 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
       do {
        j--;
 
       do {
        j--;
 
-       /* A ZWJ disables CJCT, however, it's mere presence is enough
-        * to disable ligation.  No explicit action needed. */
+       /* ZWJ/ZWNJ should disable CJCT.  They do that by simply
+        * being there, since we don't skip them for the CJCT
+        * feature (ie. F_MANUAL_ZWJ) */
 
        /* A ZWNJ disables HALF. */
        if (non_joiner)
 
        /* A ZWNJ disables HALF. */
        if (non_joiner)
@@ -807,10 +1178,10 @@ initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
                                       hb_buffer_t *buffer,
                                       unsigned int start, unsigned int end)
 {
                                       hb_buffer_t *buffer,
                                       unsigned int start, unsigned int end)
 {
-  /* We treat NBSP/dotted-circle as if they are consonants, so we should just chain.
-   * Only if not in compatibility mode that is... */
+  /* We treat placeholder/dotted-circle as if they are consonants, so we
+   * should just chain.  Only if not in compatibility mode that is... */
 
 
-  if (indic_options ().uniscribe_bug_compatible)
+  if (hb_options ().uniscribe_bug_compatible)
   {
     /* For dotted-circle, this is what Uniscribe does:
      * If dotted-circle is the last glyph, it just does nothing.
   {
     /* For dotted-circle, this is what Uniscribe does:
      * If dotted-circle is the last glyph, it just does nothing.
@@ -833,6 +1204,16 @@ initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan,
 }
 
 static void
 }
 
 static void
+initial_reordering_symbol_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,
 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,
@@ -854,6 +1235,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 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 symbol_cluster:         initial_reordering_symbol_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;
   }
   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;
   }
@@ -867,8 +1249,10 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
   /* Note: This loop is extra overhead, but should not be measurable. */
   bool has_broken_syllables = false;
   unsigned int count = buffer->len;
   /* Note: This loop is extra overhead, but should not be measurable. */
   bool has_broken_syllables = false;
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    if ((buffer->info[i].syllable() & 0x0F) == broken_cluster) {
+    if ((info[i].syllable() & 0x0F) == broken_cluster)
+    {
       has_broken_syllables = true;
       break;
     }
       has_broken_syllables = true;
       break;
     }
@@ -877,11 +1261,11 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
 
 
   hb_codepoint_t dottedcircle_glyph;
 
 
   hb_codepoint_t dottedcircle_glyph;
-  if (!font->get_glyph (0x25CC, 0, &dottedcircle_glyph))
+  if (!font->get_glyph (0x25CCu, 0, &dottedcircle_glyph))
     return;
 
   hb_glyph_info_t dottedcircle = {0};
     return;
 
   hb_glyph_info_t dottedcircle = {0};
-  dottedcircle.codepoint = 0x25CC;
+  dottedcircle.codepoint = 0x25CCu;
   set_indic_properties (dottedcircle);
   dottedcircle.codepoint = dottedcircle_glyph;
 
   set_indic_properties (dottedcircle);
   dottedcircle.codepoint = dottedcircle_glyph;
 
@@ -901,6 +1285,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
       info.cluster = buffer->cur().cluster;
       info.mask = buffer->cur().mask;
       info.syllable() = buffer->cur().syllable();
       info.cluster = buffer->cur().cluster;
       info.mask = buffer->cur().mask;
       info.syllable() = buffer->cur().syllable();
+      /* TODO Set glyph_props? */
 
       /* Insert dottedcircle after possible Repha. */
       while (buffer->idx < buffer->len &&
 
       /* Insert dottedcircle after possible Repha. */
       while (buffer->idx < buffer->len &&
@@ -947,6 +1332,27 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
   hb_glyph_info_t *info = buffer->info;
 
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
   hb_glyph_info_t *info = buffer->info;
 
+
+  /* This function relies heavily on halant glyphs.  Lots of ligation
+   * and possibly multiplication substitutions happened prior to this
+   * phase, and that might have messed up our properties.  Recover
+   * from a particular case of that where we're fairly sure that a
+   * class of OT_H is desired but has been lost. */
+  if (indic_plan->virama_glyph)
+  {
+    unsigned int virama_glyph = indic_plan->virama_glyph;
+    for (unsigned int i = start; i < end; i++)
+      if (info[i].codepoint == virama_glyph &&
+         _hb_glyph_info_ligated (&info[i]) &&
+         _hb_glyph_info_multiplied (&info[i]))
+      {
+        /* This will make sure that this glyph passes is_halant_or_coeng() test. */
+       info[i].indic_category() = OT_H;
+       _hb_glyph_info_clear_ligated_and_multiplied (&info[i]);
+      }
+  }
+
+
   /* 4. Final reordering:
    *
    * After the localized forms and basic shaping forms GSUB features have been
   /* 4. Final reordering:
    *
    * After the localized forms and basic shaping forms GSUB features have been
@@ -955,14 +1361,45 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
    * cluster.
    */
 
    * cluster.
    */
 
+  bool try_pref = !!indic_plan->mask_array[PREF];
+
   /* Find base again */
   unsigned int base;
   for (base = start; base < end; base++)
   /* Find base again */
   unsigned int base;
   for (base = start; base < end; base++)
-    if (info[base].indic_position() >= POS_BASE_C) {
+    if (info[base].indic_position() >= POS_BASE_C)
+    {
+      if (try_pref && base + 1 < end && indic_plan->config->pref_len == 2)
+      {
+       for (unsigned int i = base + 1; i < end; i++)
+         if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
+         {
+           if (!(_hb_glyph_info_substituted (&info[i]) &&
+                 _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
+           {
+             /* Ok, this was a 'pref' candidate but didn't form any.
+              * Base is around here... */
+             base = i;
+             while (base < end && is_halant_or_coeng (info[base]))
+               base++;
+             info[base].indic_position() = POS_BASE_C;
+
+             try_pref = false;
+           }
+           break;
+         }
+      }
+
       if (start < base && info[base].indic_position() > POS_BASE_C)
         base--;
       break;
     }
       if (start < base && info[base].indic_position() > POS_BASE_C)
         base--;
       break;
     }
+  if (base == end && start < base &&
+      is_one_of (info[base - 1], FLAG (OT_ZWJ)))
+    base--;
+  if (base < end)
+    while (start < base &&
+          is_one_of (info[base], (FLAG (OT_N) | HALANT_OR_COENG_FLAGS)))
+      base--;
 
 
   /*   o Reorder matras:
 
 
   /*   o Reorder matras:
@@ -987,7 +1424,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
     if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
     {
       while (new_pos > start &&
     if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
     {
       while (new_pos > start &&
-            !(is_one_of (info[new_pos], (FLAG (OT_M) | FLAG (OT_H) | FLAG (OT_Coeng)))))
+            !(is_one_of (info[new_pos], (FLAG (OT_M) | HALANT_OR_COENG_FLAGS))))
        new_pos--;
 
       /* If we found no Halant we are done.
        new_pos--;
 
       /* If we found no Halant we are done.
@@ -1014,9 +1451,11 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
          hb_glyph_info_t tmp = info[old_pos];
          memmove (&info[old_pos], &info[old_pos + 1], (new_pos - old_pos) * sizeof (info[0]));
          info[new_pos] = tmp;
          hb_glyph_info_t tmp = info[old_pos];
          memmove (&info[old_pos], &info[old_pos + 1], (new_pos - old_pos) * sizeof (info[0]));
          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--;
        }
          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) {
     } else {
       for (unsigned int i = start; i < base; i++)
        if (info[i].indic_position () == POS_PRE_M) {
@@ -1036,17 +1475,24 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
    *     before post-base consonant forms, and after post-base consonant forms.
    */
 
    *     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 &&
   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_and_didnt_multiply (&info[start])))
   {
     unsigned int new_reph_pos;
     reph_position_t reph_pos = indic_plan->config->reph_pos;
 
   {
     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.
 
     /*       1. If reph should be positioned after post-base consonant forms,
      *          proceed to step 5.
@@ -1072,7 +1518,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
       while (new_reph_pos < base && !is_halant_or_coeng (info[new_reph_pos]))
        new_reph_pos++;
 
       while (new_reph_pos < base && !is_halant_or_coeng (info[new_reph_pos]))
        new_reph_pos++;
 
-      if (new_reph_pos < base && is_halant_or_coeng (info[new_reph_pos])) {
+      if (new_reph_pos < base && is_halant_or_coeng (info[new_reph_pos]))
+      {
        /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
        if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
          new_reph_pos++;
        /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
        if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
          new_reph_pos++;
@@ -1087,7 +1534,6 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
     if (reph_pos == REPH_POS_AFTER_MAIN)
     {
       new_reph_pos = base;
     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)
       while (new_reph_pos + 1 < end && info[new_reph_pos + 1].indic_position() <= POS_AFTER_MAIN)
        new_reph_pos++;
       if (new_reph_pos < end)
@@ -1124,7 +1570,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
       while (new_reph_pos < base && !is_halant_or_coeng (info[new_reph_pos]))
        new_reph_pos++;
 
       while (new_reph_pos < base && !is_halant_or_coeng (info[new_reph_pos]))
        new_reph_pos++;
 
-      if (new_reph_pos < base && is_halant_or_coeng (info[new_reph_pos])) {
+      if (new_reph_pos < base && is_halant_or_coeng (info[new_reph_pos]))
+      {
        /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
        if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
          new_reph_pos++;
        /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
        if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
          new_reph_pos++;
@@ -1146,7 +1593,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
        * Uniscribe doesn't do this.
        * TEST: U+0930,U+094D,U+0915,U+094B,U+094D
        */
        * Uniscribe doesn't do this.
        * TEST: U+0930,U+094D,U+0915,U+094B,U+094D
        */
-      if (!indic_options ().uniscribe_bug_compatible &&
+      if (!hb_options ().uniscribe_bug_compatible &&
          unlikely (is_halant_or_coeng (info[new_reph_pos]))) {
        for (unsigned int i = base + 1; i < new_reph_pos; i++)
          if (info[i].indic_category() == OT_M) {
          unlikely (is_halant_or_coeng (info[new_reph_pos]))) {
        for (unsigned int i = base + 1; i < new_reph_pos; i++)
          if (info[i].indic_category() == OT_M) {
@@ -1159,13 +1606,14 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
 
     reph_move:
     {
 
     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];
       memmove (&info[start], &info[start + 1], (new_reph_pos - start) * sizeof (info[0]));
       info[new_reph_pos] = reph;
 
       /* Move */
       hb_glyph_info_t reph = info[start];
       memmove (&info[start], &info[start + 1], (new_reph_pos - start) * sizeof (info[0]));
       info[new_reph_pos] = reph;
+      if (start < base && base <= new_reph_pos)
+       base--;
     }
   }
 
     }
   }
 
@@ -1176,8 +1624,9 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
    *     the following rules:
    */
 
    *     the following rules:
    */
 
-  if (indic_plan->mask_array[PREF] && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
+  if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
   {
   {
+    unsigned int pref_len = indic_plan->config->pref_len;
     for (unsigned int i = base + 1; i < end; i++)
       if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
       {
     for (unsigned int i = base + 1; i < end; i++)
       if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
       {
@@ -1185,7 +1634,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.)
         */
         *          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_and_didnt_multiply (&info[i])))
        {
          /*
           *       2. Try to find a target position the same way as for pre-base matra.
        {
          /*
           *       2. Try to find a target position the same way as for pre-base matra.
@@ -1206,7 +1661,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--;
 
                   !(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)
            {
             * 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)
            {
@@ -1221,9 +1676,11 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
          }
 
          if (new_pos > start && is_halant_or_coeng (info[new_pos - 1]))
          }
 
          if (new_pos > start && is_halant_or_coeng (info[new_pos - 1]))
+         {
            /* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
            if (new_pos < end && is_joiner (info[new_pos]))
              new_pos++;
            /* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
            if (new_pos < end && is_joiner (info[new_pos]))
              new_pos++;
+         }
 
          {
            unsigned int old_pos = i;
 
          {
            unsigned int old_pos = i;
@@ -1231,6 +1688,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
            hb_glyph_info_t tmp = info[old_pos];
            memmove (&info[new_pos + 1], &info[new_pos], (old_pos - new_pos) * sizeof (info[0]));
            info[new_pos] = tmp;
            hb_glyph_info_t tmp = info[old_pos];
            memmove (&info[new_pos + 1], &info[new_pos], (old_pos - new_pos) * sizeof (info[0]));
            info[new_pos] = tmp;
+           if (new_pos <= base && base < old_pos)
+             base++;
          }
        }
 
          }
        }
 
@@ -1250,13 +1709,22 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
   /*
    * Finish off the clusters and go home!
    */
   /*
    * Finish off the clusters and go home!
    */
-  if (indic_options ().uniscribe_bug_compatible)
+  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;
+    }
   }
 }
 
   }
 }
 
@@ -1280,21 +1748,23 @@ final_reordering (const hb_ot_shape_plan_t *plan,
     }
   final_reordering_syllable (plan, buffer, last, count);
 
     }
   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);
 }
 
 
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
 }
 
 
-static hb_ot_shape_normalization_mode_t
-normalization_preference_indic (const hb_segment_properties_t *props HB_UNUSED)
+static void
+clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                hb_font_t *font HB_UNUSED,
+                hb_buffer_t *buffer)
 {
 {
-  return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
+  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 bool
 decompose_indic (const hb_ot_shape_normalize_context_t *c,
                 hb_codepoint_t  ab,
 static bool
 decompose_indic (const hb_ot_shape_normalize_context_t *c,
                 hb_codepoint_t  ab,
@@ -1304,37 +1774,37 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c,
   switch (ab)
   {
     /* Don't decompose these. */
   switch (ab)
   {
     /* Don't decompose these. */
-    case 0x0931  : return false;
-    case 0x0B94  : return false;
+    case 0x0931u  : return false;
+    case 0x0B94u  : return false;
 
 
     /*
      * Decompose split matras that don't have Unicode decompositions.
      */
 
 
 
     /*
      * Decompose split matras that don't have Unicode decompositions.
      */
 
-    case 0x0F77  : *a = 0x0FB2; *b= 0x0F81; return true;
-    case 0x0F79  : *a = 0x0FB3; *b= 0x0F81; return true;
-    case 0x17BE  : *a = 0x17C1; *b= 0x17BE; return true;
-    case 0x17BF  : *a = 0x17C1; *b= 0x17BF; return true;
-    case 0x17C0  : *a = 0x17C1; *b= 0x17C0; return true;
-    case 0x17C4  : *a = 0x17C1; *b= 0x17C4; return true;
-    case 0x17C5  : *a = 0x17C1; *b= 0x17C5; return true;
-    case 0x1925  : *a = 0x1920; *b= 0x1923; return true;
-    case 0x1926  : *a = 0x1920; *b= 0x1924; return true;
-    case 0x1B3C  : *a = 0x1B42; *b= 0x1B3C; return true;
-    case 0x1112E  : *a = 0x11127; *b= 0x11131; return true;
-    case 0x1112F  : *a = 0x11127; *b= 0x11132; return true;
+    case 0x0F77u  : *a = 0x0FB2u; *b= 0x0F81u; return true;
+    case 0x0F79u  : *a = 0x0FB3u; *b= 0x0F81u; return true;
+    case 0x17BEu  : *a = 0x17C1u; *b= 0x17BEu; return true;
+    case 0x17BFu  : *a = 0x17C1u; *b= 0x17BFu; return true;
+    case 0x17C0u  : *a = 0x17C1u; *b= 0x17C0u; return true;
+    case 0x17C4u  : *a = 0x17C1u; *b= 0x17C4u; return true;
+    case 0x17C5u  : *a = 0x17C1u; *b= 0x17C5u; return true;
+    case 0x1925u  : *a = 0x1920u; *b= 0x1923u; return true;
+    case 0x1926u  : *a = 0x1920u; *b= 0x1924u; return true;
+    case 0x1B3Cu  : *a = 0x1B42u; *b= 0x1B3Cu; return true;
+    case 0x1112Eu  : *a = 0x11127u; *b= 0x11131u; return true;
+    case 0x1112Fu  : *a = 0x11127u; *b= 0x11132u; return true;
 #if 0
     /* This one has no decomposition in Unicode, but needs no decomposition either. */
 #if 0
     /* This one has no decomposition in Unicode, but needs no decomposition either. */
-    /* case 0x0AC9  : return false; */
-    case 0x0B57  : *a = no decomp, -> RIGHT; return true;
-    case 0x1C29  : *a = no decomp, -> LEFT; return true;
-    case 0xA9C0  : *a = no decomp, -> RIGHT; return true;
-    case 0x111BF  : *a = no decomp, -> ABOVE; return true;
+    /* case 0x0AC9u  : return false; */
+    case 0x0B57u  : *a = no decomp, -> RIGHT; return true;
+    case 0x1C29u  : *a = no decomp, -> LEFT; return true;
+    case 0xA9C0u  : *a = no decomp, -> RIGHT; return true;
+    case 0x111BuF  : *a = no decomp, -> ABOVE; return true;
 #endif
   }
 
 #endif
   }
 
-  if ((ab == 0x0DDA || hb_in_range<hb_codepoint_t> (ab, 0x0DDC, 0x0DDE)))
+  if ((ab == 0x0DDAu || hb_in_range (ab, 0x0DDCu, 0x0DDEu)))
   {
     /*
      * Sinhala split matras...  Let the fun begin.
   {
     /*
      * Sinhala split matras...  Let the fun begin.
@@ -1366,12 +1836,12 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c,
 
     hb_codepoint_t glyph;
 
 
     hb_codepoint_t glyph;
 
-    if (indic_options ().uniscribe_bug_compatible ||
+    if (hb_options ().uniscribe_bug_compatible ||
        (c->font->get_glyph (ab, 0, &glyph) &&
        (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. */
     {
       /* Ok, safe to use Uniscribe-style decomposition. */
-      *a = 0x0DD9;
+      *a = 0x0DD9u;
       *b = ab;
       return true;
     }
       *b = ab;
       return true;
     }
@@ -1391,7 +1861,7 @@ compose_indic (const hb_ot_shape_normalize_context_t *c,
     return false;
 
   /* Composition-exclusion exceptions that we want to recompose. */
     return false;
 
   /* Composition-exclusion exceptions that we want to recompose. */
-  if (a == 0x09AF && b == 0x09BC) { *ab = 0x09DF; return true; }
+  if (a == 0x09AFu && b == 0x09BCu) { *ab = 0x09DFu; return true; }
 
   return c->unicode->compose (a, b, ab);
 }
 
   return c->unicode->compose (a, b, ab);
 }
@@ -1405,10 +1875,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
   data_create_indic,
   data_destroy_indic,
   NULL, /* preprocess_text */
   data_create_indic,
   data_destroy_indic,
   NULL, /* preprocess_text */
-  normalization_preference_indic,
+  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
   decompose_indic,
   compose_indic,
   setup_masks_indic,
   decompose_indic,
   compose_indic,
   setup_masks_indic,
-  false, /* zero_width_attached_marks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
   false, /* fallback_position */
 };
   false, /* fallback_position */
 };
diff --git a/src/hb-ot-shape-complex-myanmar-machine.hh b/src/hb-ot-shape-complex-myanmar-machine.hh
new file mode 100644 (file)
index 0000000..bb80d7a
--- /dev/null
@@ -0,0 +1,400 @@
+
+#line 1 "../../src/hb-ot-shape-complex-myanmar-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_MYANMAR_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
+       1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 
+       3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u, 
+       5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0
+};
+
+static const char _myanmar_syllable_machine_key_spans[] = {
+       31, 28, 25, 4, 25, 23, 21, 21, 
+       27, 27, 27, 27, 16, 27, 27, 27, 
+       27, 27, 27, 27, 27, 27, 25, 4, 
+       25, 23, 21, 21, 27, 27, 27, 27, 
+       28, 27, 30, 27, 27, 27, 27, 27, 
+       27, 27, 27, 27, 1
+};
+
+static const short _myanmar_syllable_machine_index_offsets[] = {
+       0, 32, 61, 87, 92, 118, 142, 164, 
+       186, 214, 242, 270, 298, 315, 343, 371, 
+       399, 427, 455, 483, 511, 539, 567, 593, 
+       598, 624, 648, 670, 692, 720, 748, 776, 
+       804, 833, 861, 892, 920, 948, 976, 1004, 
+       1032, 1060, 1088, 1116, 1144
+};
+
+static const char _myanmar_syllable_machine_indicies[] = {
+       1, 1, 2, 3, 4, 4, 0, 5, 
+       0, 6, 1, 0, 0, 0, 0, 7, 
+       0, 8, 1, 0, 9, 10, 11, 12, 
+       13, 14, 15, 16, 17, 18, 19, 0, 
+       21, 22, 23, 23, 20, 24, 20, 25, 
+       20, 20, 20, 20, 20, 20, 20, 26, 
+       20, 20, 27, 28, 29, 30, 31, 32, 
+       33, 34, 35, 36, 20, 23, 23, 20, 
+       24, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 37, 20, 20, 20, 20, 20, 
+       20, 31, 20, 20, 20, 35, 20, 23, 
+       23, 20, 24, 20, 23, 23, 20, 24, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       31, 20, 20, 20, 35, 20, 38, 20, 
+       23, 23, 20, 24, 20, 31, 20, 20, 
+       20, 20, 20, 20, 20, 39, 20, 20, 
+       20, 20, 20, 20, 31, 20, 23, 23, 
+       20, 24, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 39, 20, 20, 20, 20, 
+       20, 20, 31, 20, 23, 23, 20, 24, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       31, 20, 21, 20, 23, 23, 20, 24, 
+       20, 25, 20, 20, 20, 20, 20, 20, 
+       20, 40, 20, 20, 40, 20, 20, 20, 
+       31, 41, 20, 20, 35, 20, 21, 20, 
+       23, 23, 20, 24, 20, 25, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 31, 20, 20, 20, 
+       35, 20, 21, 20, 23, 23, 20, 24, 
+       20, 25, 20, 20, 20, 20, 20, 20, 
+       20, 40, 20, 20, 20, 20, 20, 20, 
+       31, 41, 20, 20, 35, 20, 21, 20, 
+       23, 23, 20, 24, 20, 25, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 31, 41, 20, 20, 
+       35, 20, 1, 1, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 1, 20, 21, 20, 23, 23, 20, 
+       24, 20, 25, 20, 20, 20, 20, 20, 
+       20, 20, 26, 20, 20, 27, 28, 29, 
+       30, 31, 32, 33, 34, 35, 20, 21, 
+       20, 23, 23, 20, 24, 20, 25, 20, 
+       20, 20, 20, 20, 20, 20, 34, 20, 
+       20, 20, 20, 20, 20, 31, 32, 33, 
+       34, 35, 20, 21, 20, 23, 23, 20, 
+       24, 20, 25, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 31, 32, 33, 34, 35, 20, 21, 
+       20, 23, 23, 20, 24, 20, 25, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 31, 32, 33, 
+       20, 35, 20, 21, 20, 23, 23, 20, 
+       24, 20, 25, 20, 20, 20, 20, 20, 
+       20, 20, 20, 20, 20, 20, 20, 20, 
+       20, 31, 20, 33, 20, 35, 20, 21, 
+       20, 23, 23, 20, 24, 20, 25, 20, 
+       20, 20, 20, 20, 20, 20, 34, 20, 
+       20, 27, 20, 29, 20, 31, 32, 33, 
+       34, 35, 20, 21, 20, 23, 23, 20, 
+       24, 20, 25, 20, 20, 20, 20, 20, 
+       20, 20, 34, 20, 20, 27, 20, 20, 
+       20, 31, 32, 33, 34, 35, 20, 21, 
+       20, 23, 23, 20, 24, 20, 25, 20, 
+       20, 20, 20, 20, 20, 20, 34, 20, 
+       20, 27, 28, 29, 20, 31, 32, 33, 
+       34, 35, 20, 21, 22, 23, 23, 20, 
+       24, 20, 25, 20, 20, 20, 20, 20, 
+       20, 20, 26, 20, 20, 27, 28, 29, 
+       30, 31, 32, 33, 34, 35, 20, 3, 
+       3, 42, 5, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 43, 42, 42, 42, 
+       42, 42, 42, 13, 42, 42, 42, 17, 
+       42, 3, 3, 42, 5, 42, 3, 3, 
+       42, 5, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 13, 42, 42, 42, 17, 42, 
+       44, 42, 3, 3, 42, 5, 42, 13, 
+       42, 42, 42, 42, 42, 42, 42, 45, 
+       42, 42, 42, 42, 42, 42, 13, 42, 
+       3, 3, 42, 5, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 45, 42, 42, 
+       42, 42, 42, 42, 13, 42, 3, 3, 
+       42, 5, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 13, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 46, 42, 42, 46, 42, 
+       42, 42, 13, 47, 42, 42, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 13, 42, 
+       42, 42, 17, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 46, 42, 42, 42, 42, 
+       42, 42, 13, 47, 42, 42, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 13, 47, 
+       42, 42, 17, 42, 21, 22, 23, 23, 
+       20, 24, 20, 25, 20, 20, 20, 20, 
+       20, 20, 20, 48, 20, 20, 27, 28, 
+       29, 30, 31, 32, 33, 34, 35, 36, 
+       20, 21, 49, 23, 23, 20, 24, 20, 
+       25, 20, 20, 20, 20, 20, 20, 20, 
+       26, 20, 20, 27, 28, 29, 30, 31, 
+       32, 33, 34, 35, 20, 1, 1, 2, 
+       3, 3, 3, 42, 5, 42, 6, 1, 
+       42, 42, 42, 42, 1, 42, 8, 1, 
+       42, 9, 10, 11, 12, 13, 14, 15, 
+       16, 17, 18, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 8, 42, 42, 9, 10, 
+       11, 12, 13, 14, 15, 16, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 16, 
+       42, 42, 42, 42, 42, 42, 13, 14, 
+       15, 16, 17, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 13, 14, 15, 16, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 13, 14, 
+       15, 42, 17, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 13, 42, 15, 42, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 16, 
+       42, 42, 9, 42, 11, 42, 13, 14, 
+       15, 16, 17, 42, 2, 42, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 16, 42, 42, 9, 42, 
+       42, 42, 13, 14, 15, 16, 17, 42, 
+       2, 42, 3, 3, 42, 5, 42, 6, 
+       42, 42, 42, 42, 42, 42, 42, 16, 
+       42, 42, 9, 10, 11, 42, 13, 14, 
+       15, 16, 17, 42, 2, 3, 3, 3, 
+       42, 5, 42, 6, 42, 42, 42, 42, 
+       42, 42, 42, 8, 42, 42, 9, 10, 
+       11, 12, 13, 14, 15, 16, 17, 42, 
+       51, 50, 0
+};
+
+static const char _myanmar_syllable_machine_trans_targs[] = {
+       0, 1, 22, 0, 0, 23, 29, 32, 
+       35, 36, 40, 41, 42, 25, 38, 39, 
+       37, 28, 43, 44, 0, 2, 12, 0, 
+       3, 9, 13, 14, 18, 19, 20, 5, 
+       16, 17, 15, 8, 21, 4, 6, 7, 
+       10, 11, 0, 24, 26, 27, 30, 31, 
+       33, 34, 0, 0
+};
+
+static const char _myanmar_syllable_machine_trans_actions[] = {
+       3, 0, 0, 4, 5, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 6, 0, 0, 7, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 8, 0, 0, 0, 0, 0, 
+       0, 0, 9, 10
+};
+
+static const char _myanmar_syllable_machine_to_state_actions[] = {
+       1, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0
+};
+
+static const char _myanmar_syllable_machine_from_state_actions[] = {
+       2, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0
+};
+
+static const short _myanmar_syllable_machine_eof_trans[] = {
+       0, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 43, 43, 
+       43, 43, 43, 43, 43, 43, 43, 43, 
+       21, 21, 43, 43, 43, 43, 43, 43, 
+       43, 43, 43, 43, 51
+};
+
+static const int myanmar_syllable_machine_start = 0;
+static const int myanmar_syllable_machine_first_final = 0;
+static const int myanmar_syllable_machine_error = -1;
+
+static const int myanmar_syllable_machine_en_main = 0;
+
+
+#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+
+
+
+#line 93 "../../src/hb-ot-shape-complex-myanmar-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 289 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+       {
+       cs = myanmar_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 306 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
+       case 2:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 320 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+       }
+
+       _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
+       _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
+
+       _slen = _myanmar_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
+               ( info[p].myanmar_category()) <= _keys[1] ?
+               ( info[p].myanmar_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _myanmar_syllable_machine_trans_targs[_trans];
+
+       if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
+       case 7:
+#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (consonant_syllable); }}
+       break;
+       case 5:
+#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (non_myanmar_cluster); }}
+       break;
+       case 10:
+#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (punctuation_cluster); }}
+       break;
+       case 4:
+#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
+       break;
+       case 3:
+#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (non_myanmar_cluster); }}
+       break;
+       case 6:
+#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 8:
+#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 9:
+#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
+       break;
+#line 370 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+       }
+
+_again:
+       switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
+       case 1:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 379 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-myanmar-machine.rl b/src/hb-ot-shape-complex-myanmar-machine.rl
new file mode 100644 (file)
index 0000000..9649a91
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * 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_MYANMAR_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
+
+#include "hb-private.hh"
+
+%%{
+  machine myanmar_syllable_machine;
+  alphtype unsigned char;
+  write data;
+}%%
+
+%%{
+
+# Same order as enum myanmar_category_t.  Not sure how to avoid duplication.
+A    = 10;
+As   = 18;
+C    = 1;
+D    = 19;
+D0   = 20;
+DB   = 3;
+GB   = 11;
+H    = 4;
+IV   = 2;
+MH   = 21;
+MR   = 22;
+MW   = 23;
+MY   = 24;
+PT   = 25;
+V    = 8;
+VAbv = 26;
+VBlw = 27;
+VPre = 28;
+VPst = 29;
+VS   = 30;
+ZWJ  = 6;
+ZWNJ = 5;
+Ra   = 16;
+P    = 31;
+
+j = ZWJ|ZWNJ;                  # Joiners
+k = (Ra As H);                 # Kinzi
+
+c = C|Ra;                      # is_consonant
+
+medial_group = MY? MR? MW? MH? As?;
+main_vowel_group = VPre* VAbv* VBlw* A* (DB As?)?;
+post_vowel_group = VPst MH? As* VAbv* A* (DB As?)?;
+pwo_tone_group = PT A* DB? As?;
+
+complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* V* j?;
+syllable_tail = (H | complex_syllable_tail);
+
+consonant_syllable =   k? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
+punctuation_cluster =  P V;
+broken_cluster =       k? VS? syllable_tail;
+other =                        any;
+
+main := |*
+       consonant_syllable      => { found_syllable (consonant_syllable); };
+       j                       => { found_syllable (non_myanmar_cluster); };
+       punctuation_cluster     => { found_syllable (punctuation_cluster); };
+       broken_cluster          => { found_syllable (broken_cluster); };
+       other                   => { found_syllable (non_myanmar_cluster); };
+*|;
+
+
+}%%
+
+#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;
+  %%{
+    write init;
+    getkey info[p].myanmar_category();
+  }%%
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  %%{
+    write exec;
+  }%%
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-myanmar.cc b/src/hb-ot-shape-complex-myanmar.cc
new file mode 100644 (file)
index 0000000..d016380
--- /dev/null
@@ -0,0 +1,571 @@
+/*
+ * Copyright © 2011,2012,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-indic-private.hh"
+
+/* buffer var allocations */
+#define myanmar_category() complex_var_u8_0() /* myanmar_category_t */
+#define myanmar_position() complex_var_u8_1() /* myanmar_position_t */
+
+
+/*
+ * Myanmar shaper.
+ */
+
+static const hb_tag_t
+basic_features[] =
+{
+  /*
+   * Basic features.
+   * These features are applied in order, one at a time, after initial_reordering.
+   */
+  HB_TAG('r','p','h','f'),
+  HB_TAG('p','r','e','f'),
+  HB_TAG('b','l','w','f'),
+  HB_TAG('p','s','t','f'),
+};
+static const hb_tag_t
+other_features[] =
+{
+  /*
+   * Other features.
+   * These features are applied all at once, after final_reordering.
+   */
+  HB_TAG('p','r','e','s'),
+  HB_TAG('a','b','v','s'),
+  HB_TAG('b','l','w','s'),
+  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
+setup_syllables (const hb_ot_shape_plan_t *plan,
+                hb_font_t *font,
+                hb_buffer_t *buffer);
+static void
+initial_reordering (const hb_ot_shape_plan_t *plan,
+                   hb_font_t *font,
+                   hb_buffer_t *buffer);
+static void
+final_reordering (const hb_ot_shape_plan_t *plan,
+                 hb_font_t *font,
+                 hb_buffer_t *buffer);
+
+static void
+collect_features_myanmar (hb_ot_shape_planner_t *plan)
+{
+  hb_ot_map_builder_t *map = &plan->map;
+
+  /* Do this before any lookups have been applied. */
+  map->add_gsub_pause (setup_syllables);
+
+  map->add_global_bool_feature (HB_TAG('l','o','c','l'));
+  /* The Indic specs do not require ccmp, but we apply it here since if
+   * there is a use of it, it's typically at the beginning. */
+  map->add_global_bool_feature (HB_TAG('c','c','m','p'));
+
+
+  map->add_gsub_pause (initial_reordering);
+  for (unsigned int i = 0; i < ARRAY_LENGTH (basic_features); i++)
+  {
+    map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
+    map->add_gsub_pause (NULL);
+  }
+  map->add_gsub_pause (final_reordering);
+  for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
+    map->add_feature (other_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
+}
+
+static void
+override_features_myanmar (hb_ot_shape_planner_t *plan)
+{
+  plan->map.add_feature (HB_TAG('l','i','g','a'), 0, F_GLOBAL);
+}
+
+
+enum syllable_type_t {
+  consonant_syllable,
+  punctuation_cluster,
+  broken_cluster,
+  non_myanmar_cluster,
+};
+
+#include "hb-ot-shape-complex-myanmar-machine.hh"
+
+
+/* Note: This enum is duplicated in the -machine.rl source file.
+ * Not sure how to avoid duplication. */
+enum myanmar_category_t {
+  OT_As  = 18, /* Asat */
+  OT_D   = 19, /* Digits except zero */
+  OT_D0  = 20, /* Digit zero */
+  OT_DB  = OT_N, /* Dot below */
+  OT_GB  = OT_PLACEHOLDER,
+  OT_MH  = 21, /* Various consonant medial types */
+  OT_MR  = 22, /* Various consonant medial types */
+  OT_MW  = 23, /* Various consonant medial types */
+  OT_MY  = 24, /* Various consonant medial types */
+  OT_PT  = 25, /* Pwo and other tones */
+  OT_VAbv = 26,
+  OT_VBlw = 27,
+  OT_VPre = 28,
+  OT_VPst = 29,
+  OT_VS   = 30, /* Variation selectors */
+  OT_P    = 31  /* Punctuation */
+};
+
+
+static inline bool
+is_one_of (const hb_glyph_info_t &info, unsigned int flags)
+{
+  /* If it ligated, all bets are off. */
+  if (_hb_glyph_info_ligated (&info)) return false;
+  return !!(FLAG (info.myanmar_category()) & flags);
+}
+
+static inline bool
+is_consonant (const hb_glyph_info_t &info)
+{
+  return is_one_of (info, CONSONANT_FLAGS);
+}
+
+
+static inline void
+set_myanmar_properties (hb_glyph_info_t &info)
+{
+  hb_codepoint_t u = info.codepoint;
+  unsigned int type = hb_indic_get_categories (u);
+  indic_category_t cat = (indic_category_t) (type & 0x7Fu);
+  indic_position_t pos = (indic_position_t) (type >> 8);
+
+  /* Myanmar
+   * http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm#analyze
+   */
+  if (unlikely (hb_in_range (u, 0xFE00u, 0xFE0Fu)))
+    cat = (indic_category_t) OT_VS;
+
+  switch (u)
+  {
+    case 0x104Eu:
+      cat = (indic_category_t) OT_C; /* The spec says C, IndicSyllableCategory doesn't have. */
+      break;
+
+    case 0x002Du: case 0x00A0u: case 0x00D7u: case 0x2012u:
+    case 0x2013u: case 0x2014u: case 0x2015u: case 0x2022u:
+    case 0x25CCu: case 0x25FBu: case 0x25FCu: case 0x25FDu:
+    case 0x25FEu:
+      cat = (indic_category_t) OT_GB;
+      break;
+
+    case 0x1004u: case 0x101Bu: case 0x105Au:
+      cat = (indic_category_t) OT_Ra;
+      break;
+
+    case 0x1032u: case 0x1036u:
+      cat = (indic_category_t) OT_A;
+      break;
+
+    case 0x103Au:
+      cat = (indic_category_t) OT_As;
+      break;
+
+    case 0x1041u: case 0x1042u: case 0x1043u: case 0x1044u:
+    case 0x1045u: case 0x1046u: case 0x1047u: case 0x1048u:
+    case 0x1049u: case 0x1090u: case 0x1091u: case 0x1092u:
+    case 0x1093u: case 0x1094u: case 0x1095u: case 0x1096u:
+    case 0x1097u: case 0x1098u: case 0x1099u:
+      cat = (indic_category_t) OT_D;
+      break;
+
+    case 0x1040u:
+      cat = (indic_category_t) OT_D; /* XXX The spec says D0, but Uniscribe doesn't seem to do. */
+      break;
+
+    case 0x103Eu: case 0x1060u:
+      cat = (indic_category_t) OT_MH;
+      break;
+
+    case 0x103Cu:
+      cat = (indic_category_t) OT_MR;
+      break;
+
+    case 0x103Du: case 0x1082u:
+      cat = (indic_category_t) OT_MW;
+      break;
+
+    case 0x103Bu: case 0x105Eu: case 0x105Fu:
+      cat = (indic_category_t) OT_MY;
+      break;
+
+    case 0x1063u: case 0x1064u: case 0x1069u: case 0x106Au:
+    case 0x106Bu: case 0x106Cu: case 0x106Du: case 0xAA7Bu:
+      cat = (indic_category_t) OT_PT;
+      break;
+
+    case 0x1038u: case 0x1087u: case 0x1088u: case 0x1089u:
+    case 0x108Au: case 0x108Bu: case 0x108Cu: case 0x108Du:
+    case 0x108Fu: case 0x109Au: case 0x109Bu: case 0x109Cu:
+      cat = (indic_category_t) OT_SM;
+      break;
+
+    case 0x104Au: case 0x104Bu:
+      cat = (indic_category_t) OT_P;
+      break;
+  }
+
+  if (cat == OT_M)
+  {
+    switch ((int) pos)
+    {
+      case POS_PRE_C:  cat = (indic_category_t) OT_VPre;
+                       pos = POS_PRE_M;                  break;
+      case POS_ABOVE_C:        cat = (indic_category_t) OT_VAbv; break;
+      case POS_BELOW_C:        cat = (indic_category_t) OT_VBlw; break;
+      case POS_POST_C: cat = (indic_category_t) OT_VPst; break;
+    }
+  }
+
+  info.myanmar_category() = (myanmar_category_t) cat;
+  info.myanmar_position() = pos;
+}
+
+
+
+static void
+setup_masks_myanmar (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                  hb_buffer_t              *buffer,
+                  hb_font_t                *font HB_UNUSED)
+{
+  HB_BUFFER_ALLOCATE_VAR (buffer, myanmar_category);
+  HB_BUFFER_ALLOCATE_VAR (buffer, myanmar_position);
+
+  /* We cannot setup masks here.  We save information about characters
+   * and setup masks later on in a pause-callback. */
+
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    set_myanmar_properties (info[i]);
+}
+
+static void
+setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                hb_font_t *font HB_UNUSED,
+                hb_buffer_t *buffer)
+{
+  find_syllables (buffer);
+}
+
+static int
+compare_myanmar_order (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
+{
+  int a = pa->myanmar_position();
+  int b = pb->myanmar_position();
+
+  return a < b ? -1 : a == b ? 0 : +1;
+}
+
+
+/* Rules from:
+ * http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm */
+
+static void
+initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
+                                      hb_face_t *face,
+                                      hb_buffer_t *buffer,
+                                      unsigned int start, unsigned int end)
+{
+  hb_glyph_info_t *info = buffer->info;
+
+  unsigned int base = end;
+  bool has_reph = false;
+
+  {
+    unsigned int limit = start;
+    if (start + 3 <= end &&
+       info[start  ].myanmar_category() == OT_Ra &&
+       info[start+1].myanmar_category() == OT_As &&
+       info[start+2].myanmar_category() == OT_H)
+    {
+      limit += 3;
+      base = start;
+      has_reph = true;
+    }
+
+    {
+      if (!has_reph)
+       base = limit;
+
+      for (unsigned int i = limit; i < end; i++)
+       if (is_consonant (info[i]))
+       {
+         base = i;
+         break;
+       }
+    }
+  }
+
+  /* Reorder! */
+  {
+    unsigned int i = start;
+    for (; i < start + (has_reph ? 3 : 0); i++)
+      info[i].myanmar_position() = POS_AFTER_MAIN;
+    for (; i < base; i++)
+      info[i].myanmar_position() = POS_PRE_C;
+    if (i < end)
+    {
+      info[i].myanmar_position() = POS_BASE_C;
+      i++;
+    }
+    indic_position_t pos = POS_AFTER_MAIN;
+    /* The following loop may be ugly, but it implements all of
+     * Myanmar reordering! */
+    for (; i < end; i++)
+    {
+      if (info[i].myanmar_category() == OT_MR) /* Pre-base reordering */
+      {
+       info[i].myanmar_position() = POS_PRE_C;
+       continue;
+      }
+      if (info[i].myanmar_position() < POS_BASE_C) /* Left matra */
+      {
+       continue;
+      }
+
+      if (pos == POS_AFTER_MAIN && info[i].myanmar_category() == OT_VBlw)
+      {
+       pos = POS_BELOW_C;
+       info[i].myanmar_position() = pos;
+       continue;
+      }
+
+      if (pos == POS_BELOW_C && info[i].myanmar_category() == OT_A)
+      {
+       info[i].myanmar_position() = POS_BEFORE_SUB;
+       continue;
+      }
+      if (pos == POS_BELOW_C && info[i].myanmar_category() == OT_VBlw)
+      {
+       info[i].myanmar_position() = pos;
+       continue;
+      }
+      if (pos == POS_BELOW_C && info[i].myanmar_category() != OT_A)
+      {
+        pos = POS_AFTER_SUB;
+       info[i].myanmar_position() = pos;
+       continue;
+      }
+      info[i].myanmar_position() = pos;
+    }
+  }
+
+  buffer->merge_clusters (start, end);
+  /* Sit tight, rock 'n roll! */
+  hb_bubble_sort (info + start, end - start, compare_myanmar_order);
+}
+
+static void
+initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan,
+                                  hb_face_t *face,
+                                  hb_buffer_t *buffer,
+                                  unsigned int start, unsigned int end)
+{
+  /* We already inserted dotted-circles, so just call the consonant_syllable. */
+  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
+}
+
+static void
+initial_reordering_punctuation_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_myanmar_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_syllable (const hb_ot_shape_plan_t *plan,
+                            hb_face_t *face,
+                            hb_buffer_t *buffer,
+                            unsigned int start, unsigned int end)
+{
+  syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
+  switch (syllable_type) {
+  case consonant_syllable:     initial_reordering_consonant_syllable  (plan, face, buffer, start, end); return;
+  case punctuation_cluster:    initial_reordering_punctuation_cluster (plan, face, buffer, start, end); return;
+  case broken_cluster:         initial_reordering_broken_cluster      (plan, face, buffer, start, end); return;
+  case non_myanmar_cluster:    initial_reordering_non_myanmar_cluster (plan, face, buffer, start, end); return;
+  }
+}
+
+static inline void
+insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                      hb_font_t *font,
+                      hb_buffer_t *buffer)
+{
+  /* Note: This loop is extra overhead, but should not be measurable. */
+  bool has_broken_syllables = false;
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    if ((info[i].syllable() & 0x0F) == broken_cluster)
+    {
+      has_broken_syllables = true;
+      break;
+    }
+  if (likely (!has_broken_syllables))
+    return;
+
+
+  hb_codepoint_t dottedcircle_glyph;
+  if (!font->get_glyph (0x25CCu, 0, &dottedcircle_glyph))
+    return;
+
+  hb_glyph_info_t dottedcircle = {0};
+  dottedcircle.codepoint = 0x25CCu;
+  set_myanmar_properties (dottedcircle);
+  dottedcircle.codepoint = dottedcircle_glyph;
+
+  buffer->clear_output ();
+
+  buffer->idx = 0;
+  unsigned int last_syllable = 0;
+  while (buffer->idx < buffer->len)
+  {
+    unsigned int syllable = buffer->cur().syllable();
+    syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
+    if (unlikely (last_syllable != syllable && syllable_type == broken_cluster))
+    {
+      last_syllable = syllable;
+
+      hb_glyph_info_t info = dottedcircle;
+      info.cluster = buffer->cur().cluster;
+      info.mask = buffer->cur().mask;
+      info.syllable() = buffer->cur().syllable();
+
+      buffer->output_info (info);
+    }
+    else
+      buffer->next_glyph ();
+  }
+
+  buffer->swap_buffers ();
+}
+
+static void
+initial_reordering (const hb_ot_shape_plan_t *plan,
+                   hb_font_t *font,
+                   hb_buffer_t *buffer)
+{
+  insert_dotted_circles (plan, font, buffer);
+
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+  if (unlikely (!count)) return;
+  unsigned int last = 0;
+  unsigned int last_syllable = info[0].syllable();
+  for (unsigned int i = 1; i < count; i++)
+    if (last_syllable != info[i].syllable()) {
+      initial_reordering_syllable (plan, font->face, buffer, last, i);
+      last = i;
+      last_syllable = info[last].syllable();
+    }
+  initial_reordering_syllable (plan, font->face, buffer, last, count);
+}
+
+static void
+final_reordering (const hb_ot_shape_plan_t *plan,
+                 hb_font_t *font HB_UNUSED,
+                 hb_buffer_t *buffer)
+{
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+
+  /* Zero syllables now... */
+  for (unsigned int i = 0; i < count; i++)
+    info[i].syllable() = 0;
+
+  HB_BUFFER_DEALLOCATE_VAR (buffer, myanmar_category);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, myanmar_position);
+}
+
+
+/* Uniscribe seems to have a shaper for 'mymr' that is like the
+ * generic shaper, except that it zeros mark advances GDEF_LATE. */
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar_old =
+{
+  "default",
+  NULL, /* collect_features */
+  NULL, /* override_features */
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
+  NULL, /* decompose */
+  NULL, /* compose */
+  NULL, /* setup_masks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+  true, /* fallback_position */
+};
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar =
+{
+  "myanmar",
+  collect_features_myanmar,
+  override_features_myanmar,
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
+  NULL, /* decompose */
+  NULL, /* compose */
+  setup_masks_myanmar,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
+  false, /* fallback_position */
+};
index 26871c2..9a7afcb 100644 (file)
 #define complex_var_u8_1()     var2.u8[3]
 
 
 #define complex_var_u8_1()     var2.u8[3]
 
 
+enum hb_ot_shape_zero_width_marks_type_t {
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
+//  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT = HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE
+};
+
 
 /* Master OT shaper list */
 #define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \
   HB_COMPLEX_SHAPER_IMPLEMENT (default) /* should be first */ \
   HB_COMPLEX_SHAPER_IMPLEMENT (arabic) \
 
 /* Master OT shaper list */
 #define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \
   HB_COMPLEX_SHAPER_IMPLEMENT (default) /* should be first */ \
   HB_COMPLEX_SHAPER_IMPLEMENT (arabic) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (hangul) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (hebrew) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (myanmar_old) \
   HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
   HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (myanmar) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (sea) \
   HB_COMPLEX_SHAPER_IMPLEMENT (thai) \
   HB_COMPLEX_SHAPER_IMPLEMENT (thai) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (tibetan) \
   /* ^--- Add new shapers here */
 
 
   /* ^--- Add new shapers here */
 
 
@@ -95,12 +111,7 @@ struct hb_ot_complex_shaper_t
                           hb_font_t                *font);
 
 
                           hb_font_t                *font);
 
 
-  /* normalization_preference()
-   * Called during shape().
-   * May be NULL.
-   */
-  hb_ot_shape_normalization_mode_t
-  (*normalization_preference) (const hb_segment_properties_t *props);
+  hb_ot_shape_normalization_mode_t normalization_preference;
 
   /* decompose()
    * Called during shape()'s normalization.
 
   /* decompose()
    * Called during shape()'s normalization.
@@ -130,7 +141,8 @@ struct hb_ot_complex_shaper_t
                       hb_buffer_t              *buffer,
                       hb_font_t                *font);
 
                       hb_buffer_t              *buffer,
                       hb_font_t                *font);
 
-  bool zero_width_attached_marks;
+  hb_ot_shape_zero_width_marks_type_t zero_width_marks;
+
   bool fallback_position;
 };
 
   bool fallback_position;
 };
 
@@ -150,6 +162,8 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
 
     /* Unicode-1.1 additions */
     case HB_SCRIPT_ARABIC:
 
     /* Unicode-1.1 additions */
     case HB_SCRIPT_ARABIC:
+
+    /* Unicode-3.0 additions */
     case HB_SCRIPT_MONGOLIAN:
     case HB_SCRIPT_SYRIAC:
 
     case HB_SCRIPT_MONGOLIAN:
     case HB_SCRIPT_SYRIAC:
 
@@ -160,6 +174,10 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     /* Unicode-6.0 additions */
     case HB_SCRIPT_MANDAIC:
 
     /* Unicode-6.0 additions */
     case HB_SCRIPT_MANDAIC:
 
+    /* Unicode-7.0 additions */
+    case HB_SCRIPT_MANICHAEAN:
+    case HB_SCRIPT_PSALTER_PAHLAVI:
+
       /* For Arabic script, use the Arabic shaper even if no OT script tag was found.
        * This is because we do fallback shaping for Arabic script (and not others). */
       if (planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
       /* For Arabic script, use the Arabic shaper even if no OT script tag was found.
        * This is because we do fallback shaping for Arabic script (and not others). */
       if (planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
@@ -176,6 +194,23 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
       return &_hb_ot_complex_shaper_thai;
 
 
       return &_hb_ot_complex_shaper_thai;
 
 
+    /* Unicode-1.1 additions */
+    case HB_SCRIPT_HANGUL:
+
+      return &_hb_ot_complex_shaper_hangul;
+
+
+    /* Unicode-2.0 additions */
+    case HB_SCRIPT_TIBETAN:
+
+      return &_hb_ot_complex_shaper_tibetan;
+
+
+    /* Unicode-1.1 additions */
+    case HB_SCRIPT_HEBREW:
+
+      return &_hb_ot_complex_shaper_hebrew;
+
 
     /* ^--- Add new shapers here */
 
 
     /* ^--- Add new shapers here */
 
@@ -214,9 +249,6 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     case HB_SCRIPT_LAO:
     case HB_SCRIPT_THAI:
 
     case HB_SCRIPT_LAO:
     case HB_SCRIPT_THAI:
 
-    /* Unicode-2.0 additions */
-    case HB_SCRIPT_TIBETAN:
-
     /* Unicode-3.2 additions */
     case HB_SCRIPT_TAGALOG:
     case HB_SCRIPT_TAGBANWA:
     /* Unicode-3.2 additions */
     case HB_SCRIPT_TAGALOG:
     case HB_SCRIPT_TAGBANWA:
@@ -252,15 +284,10 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     /* Unicode-3.0 additions */
     case HB_SCRIPT_SINHALA:
 
     /* Unicode-3.0 additions */
     case HB_SCRIPT_SINHALA:
 
-    /* Unicode-4.1 additions */
-    case HB_SCRIPT_BUGINESE:
-    case HB_SCRIPT_NEW_TAI_LUE:
-
     /* Unicode-5.0 additions */
     case HB_SCRIPT_BALINESE:
 
     /* Unicode-5.1 additions */
     /* Unicode-5.0 additions */
     case HB_SCRIPT_BALINESE:
 
     /* Unicode-5.1 additions */
-    case HB_SCRIPT_CHAM:
     case HB_SCRIPT_LEPCHA:
     case HB_SCRIPT_REJANG:
     case HB_SCRIPT_SUNDANESE:
     case HB_SCRIPT_LEPCHA:
     case HB_SCRIPT_REJANG:
     case HB_SCRIPT_SUNDANESE:
@@ -269,19 +296,22 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     case HB_SCRIPT_JAVANESE:
     case HB_SCRIPT_KAITHI:
     case HB_SCRIPT_MEETEI_MAYEK:
     case HB_SCRIPT_JAVANESE:
     case HB_SCRIPT_KAITHI:
     case HB_SCRIPT_MEETEI_MAYEK:
-    case HB_SCRIPT_TAI_THAM:
 
 
+    /* Unicode-6.0 additions */
 
     /* Unicode-6.1 additions */
     case HB_SCRIPT_CHAKMA:
     case HB_SCRIPT_SHARADA:
     case HB_SCRIPT_TAKRI:
 
 
     /* Unicode-6.1 additions */
     case HB_SCRIPT_CHAKMA:
     case HB_SCRIPT_SHARADA:
     case HB_SCRIPT_TAKRI:
 
-      /* Only use Indic shaper if the font has Indic tables. */
-      if (planner->map.found_script[0])
-       return &_hb_ot_complex_shaper_indic;
-      else
+      /* If the designer designed the font for the 'DFLT' script,
+       * use the default shaper.  Otherwise, use the Indic shaper.
+       * Note that for some simple scripts, there may not be *any*
+       * GSUB/GPOS needed, so there may be no scripts found! */
+      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
        return &_hb_ot_complex_shaper_default;
        return &_hb_ot_complex_shaper_default;
+      else
+       return &_hb_ot_complex_shaper_indic;
 
     case HB_SCRIPT_KHMER:
       /* A number of Khmer fonts in the wild don't have a 'pref' feature,
 
     case HB_SCRIPT_KHMER:
       /* A number of Khmer fonts in the wild don't have a 'pref' feature,
@@ -300,12 +330,31 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
        return &_hb_ot_complex_shaper_default;
 
     case HB_SCRIPT_MYANMAR:
        return &_hb_ot_complex_shaper_default;
 
     case HB_SCRIPT_MYANMAR:
-      /* For Myanmar, we only want to use the Indic shaper if the "new" script
-       * tag is found.  For "old" script tag we want to use the default shaper. */
       if (planner->map.chosen_script[0] == HB_TAG ('m','y','m','2'))
       if (planner->map.chosen_script[0] == HB_TAG ('m','y','m','2'))
-       return &_hb_ot_complex_shaper_indic;
+       return &_hb_ot_complex_shaper_myanmar;
+      else if (planner->map.chosen_script[0] == HB_TAG ('m','y','m','r'))
+       return &_hb_ot_complex_shaper_myanmar_old;
       else
        return &_hb_ot_complex_shaper_default;
       else
        return &_hb_ot_complex_shaper_default;
+
+    /* Unicode-4.1 additions */
+    case HB_SCRIPT_BUGINESE:
+    case HB_SCRIPT_NEW_TAI_LUE:
+
+    /* Unicode-5.1 additions */
+    case HB_SCRIPT_CHAM:
+
+    /* Unicode-5.2 additions */
+    case HB_SCRIPT_TAI_THAM:
+
+      /* If the designer designed the font for the 'DFLT' script,
+       * use the default shaper.  Otherwise, use the Indic shaper.
+       * Note that for some simple scripts, there may not be *any*
+       * GSUB/GPOS needed, so there may be no scripts found! */
+      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
+       return &_hb_ot_complex_shaper_default;
+      else
+       return &_hb_ot_complex_shaper_sea;
   }
 }
 
   }
 }
 
diff --git a/src/hb-ot-shape-complex-sea-machine.hh b/src/hb-ot-shape-complex-sea-machine.hh
new file mode 100644 (file)
index 0000000..86b7ae7
--- /dev/null
@@ -0,0 +1,224 @@
+
+#line 1 "../../src/hb-ot-shape-complex-sea-machine.rl"
+/*
+ * Copyright © 2011,2012,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-ot-shape-complex-sea-machine.hh.tmp"
+static const unsigned char _sea_syllable_machine_trans_keys[] = {
+       1u, 1u, 1u, 1u, 1u, 29u, 3u, 29u, 3u, 29u, 1u, 1u, 0
+};
+
+static const char _sea_syllable_machine_key_spans[] = {
+       1, 1, 29, 27, 27, 1
+};
+
+static const char _sea_syllable_machine_index_offsets[] = {
+       0, 2, 4, 34, 62, 90
+};
+
+static const char _sea_syllable_machine_indicies[] = {
+       1, 0, 3, 2, 1, 1, 3, 5, 
+       4, 4, 4, 4, 4, 3, 4, 1, 
+       4, 4, 4, 4, 3, 4, 4, 4, 
+       4, 3, 4, 4, 4, 3, 3, 3, 
+       3, 4, 1, 7, 6, 6, 6, 6, 
+       6, 1, 6, 6, 6, 6, 6, 6, 
+       1, 6, 6, 6, 6, 1, 6, 6, 
+       6, 1, 1, 1, 1, 6, 3, 9, 
+       8, 8, 8, 8, 8, 3, 8, 8, 
+       8, 8, 8, 8, 3, 8, 8, 8, 
+       8, 3, 8, 8, 8, 3, 3, 3, 
+       3, 8, 3, 10, 0
+};
+
+static const char _sea_syllable_machine_trans_targs[] = {
+       2, 3, 2, 4, 2, 5, 2, 0, 
+       2, 1, 2
+};
+
+static const char _sea_syllable_machine_trans_actions[] = {
+       1, 2, 3, 2, 6, 0, 7, 0, 
+       8, 0, 9
+};
+
+static const char _sea_syllable_machine_to_state_actions[] = {
+       0, 0, 4, 0, 0, 0
+};
+
+static const char _sea_syllable_machine_from_state_actions[] = {
+       0, 0, 5, 0, 0, 0
+};
+
+static const char _sea_syllable_machine_eof_trans[] = {
+       1, 3, 0, 7, 9, 11
+};
+
+static const int sea_syllable_machine_start = 2;
+static const int sea_syllable_machine_first_final = 2;
+static const int sea_syllable_machine_error = -1;
+
+static const int sea_syllable_machine_en_main = 2;
+
+
+#line 36 "../../src/hb-ot-shape-complex-sea-machine.rl"
+
+
+
+#line 67 "../../src/hb-ot-shape-complex-sea-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 117 "hb-ot-shape-complex-sea-machine.hh.tmp"
+       {
+       cs = sea_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 88 "../../src/hb-ot-shape-complex-sea-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 134 "hb-ot-shape-complex-sea-machine.hh.tmp"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _sea_syllable_machine_from_state_actions[cs] ) {
+       case 5:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 148 "hb-ot-shape-complex-sea-machine.hh.tmp"
+       }
+
+       _keys = _sea_syllable_machine_trans_keys + (cs<<1);
+       _inds = _sea_syllable_machine_indicies + _sea_syllable_machine_index_offsets[cs];
+
+       _slen = _sea_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].sea_category()) &&
+               ( info[p].sea_category()) <= _keys[1] ?
+               ( info[p].sea_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _sea_syllable_machine_trans_targs[_trans];
+
+       if ( _sea_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _sea_syllable_machine_trans_actions[_trans] ) {
+       case 2:
+#line 1 "NONE"
+       {te = p+1;}
+       break;
+       case 6:
+#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {te = p+1;{ found_syllable (non_sea_cluster); }}
+       break;
+       case 7:
+#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 8:
+#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 9:
+#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (non_sea_cluster); }}
+       break;
+       case 1:
+#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
+       break;
+       case 3:
+#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+#line 194 "hb-ot-shape-complex-sea-machine.hh.tmp"
+       }
+
+_again:
+       switch ( _sea_syllable_machine_to_state_actions[cs] ) {
+       case 4:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 203 "hb-ot-shape-complex-sea-machine.hh.tmp"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _sea_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _sea_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 97 "../../src/hb-ot-shape-complex-sea-machine.rl"
+
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-sea-machine.rl b/src/hb-ot-shape-complex-sea-machine.rl
new file mode 100644 (file)
index 0000000..46140fc
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright © 2011,2012,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH
+
+#include "hb-private.hh"
+
+%%{
+  machine sea_syllable_machine;
+  alphtype unsigned char;
+  write data;
+}%%
+
+%%{
+
+# Same order as enum sea_category_t.  Not sure how to avoid duplication.
+C    = 1;
+GB   = 12; # Generic Base
+H    = 4;  # Halant
+IV   = 2;  # Independent Vowel
+MR   = 22; # Medial Ra
+CM   = 17; # Consonant Medial
+VAbv = 26;
+VBlw = 27;
+VPre = 28;
+VPst = 29;
+T    = 3;  # Tone Marks
+A    = 10; # Anusvara
+
+syllable_tail = (VPre|VAbv|VBlw|VPst|H.C|CM|MR|T|A)*;
+
+consonant_syllable =   (C|IV|GB) syllable_tail;
+broken_cluster =       syllable_tail;
+other =                        any;
+
+main := |*
+       consonant_syllable      => { found_syllable (consonant_syllable); };
+       broken_cluster          => { found_syllable (broken_cluster); };
+       other                   => { found_syllable (non_sea_cluster); };
+*|;
+
+
+}%%
+
+#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;
+  %%{
+    write init;
+    getkey info[p].sea_category();
+  }%%
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  %%{
+    write exec;
+  }%%
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-sea.cc b/src/hb-ot-shape-complex-sea.cc
new file mode 100644 (file)
index 0000000..f08b7cc
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * Copyright © 2011,2012,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-indic-private.hh"
+
+/* buffer var allocations */
+#define sea_category() complex_var_u8_0() /* indic_category_t */
+#define sea_position() complex_var_u8_1() /* indic_position_t */
+
+
+/*
+ * South-East Asian shaper.
+ * Loosely based on the Myanmar spec / shaper.
+ * There is no OpenType spec for this.
+ */
+
+static const hb_tag_t
+basic_features[] =
+{
+  /*
+   * Basic features.
+   * These features are applied in order, one at a time, after initial_reordering.
+   */
+  HB_TAG('p','r','e','f'),
+  HB_TAG('a','b','v','f'),
+  HB_TAG('b','l','w','f'),
+  HB_TAG('p','s','t','f'),
+};
+static const hb_tag_t
+other_features[] =
+{
+  /*
+   * Other features.
+   * These features are applied all at once, after final_reordering.
+   */
+  HB_TAG('p','r','e','s'),
+  HB_TAG('a','b','v','s'),
+  HB_TAG('b','l','w','s'),
+  HB_TAG('p','s','t','s'),
+  /* Positioning features, though we don't care about the types. */
+  HB_TAG('d','i','s','t'),
+};
+
+static void
+setup_syllables (const hb_ot_shape_plan_t *plan,
+                hb_font_t *font,
+                hb_buffer_t *buffer);
+static void
+initial_reordering (const hb_ot_shape_plan_t *plan,
+                   hb_font_t *font,
+                   hb_buffer_t *buffer);
+static void
+final_reordering (const hb_ot_shape_plan_t *plan,
+                 hb_font_t *font,
+                 hb_buffer_t *buffer);
+
+static void
+collect_features_sea (hb_ot_shape_planner_t *plan)
+{
+  hb_ot_map_builder_t *map = &plan->map;
+
+  /* Do this before any lookups have been applied. */
+  map->add_gsub_pause (setup_syllables);
+
+  map->add_global_bool_feature (HB_TAG('l','o','c','l'));
+  /* The Indic specs do not require ccmp, but we apply it here since if
+   * there is a use of it, it's typically at the beginning. */
+  map->add_global_bool_feature (HB_TAG('c','c','m','p'));
+
+  map->add_gsub_pause (initial_reordering);
+  for (unsigned int i = 0; i < ARRAY_LENGTH (basic_features); i++)
+  {
+    map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
+    map->add_gsub_pause (NULL);
+  }
+  map->add_gsub_pause (final_reordering);
+  for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
+    map->add_feature (other_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
+}
+
+static void
+override_features_sea (hb_ot_shape_planner_t *plan)
+{
+  plan->map.add_feature (HB_TAG('l','i','g','a'), 0, F_GLOBAL);
+}
+
+
+enum syllable_type_t {
+  consonant_syllable,
+  broken_cluster,
+  non_sea_cluster,
+};
+
+#include "hb-ot-shape-complex-sea-machine.hh"
+
+
+/* Note: This enum is duplicated in the -machine.rl source file.
+ * Not sure how to avoid duplication. */
+enum sea_category_t {
+//  OT_C    = 1,
+  OT_GB   = 12, /* Generic Base XXX DOTTED CIRCLE only for now */
+//  OT_H    = 4,  /* Halant */
+  OT_IV   = 2,  /* Independent Vowel */
+  OT_MR   = 22, /* Medial Ra */
+//  OT_CM   = 17, /* Consonant Medial */
+  OT_VAbv = 26,
+  OT_VBlw = 27,
+  OT_VPre = 28,
+  OT_VPst = 29,
+  OT_T    = 3,  /* Tone Marks */
+//  OT_A    = 10, /* Anusvara */
+};
+
+static inline void
+set_sea_properties (hb_glyph_info_t &info)
+{
+  hb_codepoint_t u = info.codepoint;
+  unsigned int type = hb_indic_get_categories (u);
+  indic_category_t cat = (indic_category_t) (type & 0x7Fu);
+  indic_position_t pos = (indic_position_t) (type >> 8);
+
+  /* Medial Ra */
+  if (u == 0x1A55u || u == 0xAA34u)
+    cat = (indic_category_t) OT_MR;
+
+  if (cat == OT_M)
+  {
+    switch ((int) pos)
+    {
+      case POS_PRE_C:  cat = (indic_category_t) OT_VPre; break;
+      case POS_ABOVE_C:        cat = (indic_category_t) OT_VAbv; break;
+      case POS_BELOW_C:        cat = (indic_category_t) OT_VBlw; break;
+      case POS_POST_C: cat = (indic_category_t) OT_VPst; break;
+    }
+  }
+
+  info.sea_category() = (sea_category_t) cat;
+  info.sea_position() = pos;
+}
+
+
+static void
+setup_masks_sea (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                hb_buffer_t              *buffer,
+                hb_font_t                *font HB_UNUSED)
+{
+  HB_BUFFER_ALLOCATE_VAR (buffer, sea_category);
+  HB_BUFFER_ALLOCATE_VAR (buffer, sea_position);
+
+  /* We cannot setup masks here.  We save information about characters
+   * and setup masks later on in a pause-callback. */
+
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    set_sea_properties (info[i]);
+}
+
+static void
+setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                hb_font_t *font HB_UNUSED,
+                hb_buffer_t *buffer)
+{
+  find_syllables (buffer);
+}
+
+static int
+compare_sea_order (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
+{
+  int a = pa->sea_position();
+  int b = pb->sea_position();
+
+  return a < b ? -1 : a == b ? 0 : +1;
+}
+
+
+static void
+initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
+                                      hb_face_t *face,
+                                      hb_buffer_t *buffer,
+                                      unsigned int start, unsigned int end)
+{
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int base = start;
+
+  /* Reorder! */
+  unsigned int i = start;
+  for (; i < base; i++)
+    info[i].sea_position() = POS_PRE_C;
+  if (i < end)
+  {
+    info[i].sea_position() = POS_BASE_C;
+    i++;
+  }
+  for (; i < end; i++)
+  {
+    if (info[i].sea_category() == OT_MR) /* Pre-base reordering */
+    {
+      info[i].sea_position() = POS_PRE_C;
+      continue;
+    }
+    if (info[i].sea_category() == OT_VPre) /* Left matra */
+    {
+      info[i].sea_position() = POS_PRE_M;
+      continue;
+    }
+
+    info[i].sea_position() = POS_AFTER_MAIN;
+  }
+
+  buffer->merge_clusters (start, end);
+  /* Sit tight, rock 'n roll! */
+  hb_bubble_sort (info + start, end - start, compare_sea_order);
+}
+
+static void
+initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan,
+                                  hb_face_t *face,
+                                  hb_buffer_t *buffer,
+                                  unsigned int start, unsigned int end)
+{
+  /* We already inserted dotted-circles, so just call the consonant_syllable. */
+  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
+}
+
+static void
+initial_reordering_non_sea_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_syllable (const hb_ot_shape_plan_t *plan,
+                            hb_face_t *face,
+                            hb_buffer_t *buffer,
+                            unsigned int start, unsigned int end)
+{
+  syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
+  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;
+  }
+}
+
+static inline void
+insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
+                      hb_font_t *font,
+                      hb_buffer_t *buffer)
+{
+  /* Note: This loop is extra overhead, but should not be measurable. */
+  bool has_broken_syllables = false;
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    if ((info[i].syllable() & 0x0F) == broken_cluster)
+    {
+      has_broken_syllables = true;
+      break;
+    }
+  if (likely (!has_broken_syllables))
+    return;
+
+
+  hb_codepoint_t dottedcircle_glyph;
+  if (!font->get_glyph (0x25CCu, 0, &dottedcircle_glyph))
+    return;
+
+  hb_glyph_info_t dottedcircle = {0};
+  dottedcircle.codepoint = 0x25CCu;
+  set_sea_properties (dottedcircle);
+  dottedcircle.codepoint = dottedcircle_glyph;
+
+  buffer->clear_output ();
+
+  buffer->idx = 0;
+  unsigned int last_syllable = 0;
+  while (buffer->idx < buffer->len)
+  {
+    unsigned int syllable = buffer->cur().syllable();
+    syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
+    if (unlikely (last_syllable != syllable && syllable_type == broken_cluster))
+    {
+      last_syllable = syllable;
+
+      hb_glyph_info_t info = dottedcircle;
+      info.cluster = buffer->cur().cluster;
+      info.mask = buffer->cur().mask;
+      info.syllable() = buffer->cur().syllable();
+
+      buffer->output_info (info);
+    }
+    else
+      buffer->next_glyph ();
+  }
+
+  buffer->swap_buffers ();
+}
+
+static void
+initial_reordering (const hb_ot_shape_plan_t *plan,
+                   hb_font_t *font,
+                   hb_buffer_t *buffer)
+{
+  insert_dotted_circles (plan, font, buffer);
+
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+  if (unlikely (!count)) return;
+  unsigned int last = 0;
+  unsigned int last_syllable = info[0].syllable();
+  for (unsigned int i = 1; i < count; i++)
+    if (last_syllable != info[i].syllable()) {
+      initial_reordering_syllable (plan, font->face, buffer, last, i);
+      last = i;
+      last_syllable = info[last].syllable();
+    }
+  initial_reordering_syllable (plan, font->face, buffer, last, count);
+}
+
+static void
+final_reordering (const hb_ot_shape_plan_t *plan,
+                 hb_font_t *font HB_UNUSED,
+                 hb_buffer_t *buffer)
+{
+  hb_glyph_info_t *info = buffer->info;
+  unsigned int count = buffer->len;
+
+  /* Zero syllables now... */
+  for (unsigned int i = 0; i < count; i++)
+    info[i].syllable() = 0;
+
+  HB_BUFFER_DEALLOCATE_VAR (buffer, sea_category);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, sea_position);
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_sea =
+{
+  "sea",
+  collect_features_sea,
+  override_features_sea,
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
+  NULL, /* decompose */
+  NULL, /* compose */
+  setup_masks_sea,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
+  false, /* fallback_position */
+};
index 24d476a..feb7fc7 100644 (file)
@@ -46,13 +46,13 @@ enum thai_consonant_type_t
 static thai_consonant_type_t
 get_consonant_type (hb_codepoint_t u)
 {
 static thai_consonant_type_t
 get_consonant_type (hb_codepoint_t u)
 {
-  if (u == 0x0E1B || u == 0x0E1D || u == 0x0E1F/* || u == 0x0E2C*/)
+  if (u == 0x0E1Bu || u == 0x0E1Du || u == 0x0E1Fu/* || u == 0x0E2Cu*/)
     return AC;
     return AC;
-  if (u == 0x0E0D || u == 0x0E10)
+  if (u == 0x0E0Du || u == 0x0E10u)
     return RC;
     return RC;
-  if (u == 0x0E0E || u == 0x0E0F)
+  if (u == 0x0E0Eu || u == 0x0E0Fu)
     return DC;
     return DC;
-  if (hb_in_range<hb_codepoint_t> (u, 0x0E01, 0x0E2E))
+  if (hb_in_range (u, 0x0E01u, 0x0E2Eu))
     return NC;
   return NOT_CONSONANT;
 }
     return NC;
   return NOT_CONSONANT;
 }
@@ -70,12 +70,12 @@ enum thai_mark_type_t
 static thai_mark_type_t
 get_mark_type (hb_codepoint_t u)
 {
 static thai_mark_type_t
 get_mark_type (hb_codepoint_t u)
 {
-  if (u == 0x0E31 || hb_in_range<hb_codepoint_t> (u, 0x0E34, 0x0E37) ||
-      u == 0x0E47 || hb_in_range<hb_codepoint_t> (u, 0x0E4D, 0x0E4E))
+  if (u == 0x0E31u || hb_in_range (u, 0x0E34u, 0x0E37u) ||
+      u == 0x0E47u || hb_in_range (u, 0x0E4Du, 0x0E4Eu))
     return AV;
     return AV;
-  if (hb_in_range<hb_codepoint_t> (u, 0x0E38, 0x0E3A))
+  if (hb_in_range (u, 0x0E38u, 0x0E3Au))
     return BV;
     return BV;
-  if (hb_in_range<hb_codepoint_t> (u, 0x0E48, 0x0E4C))
+  if (hb_in_range (u, 0x0E48u, 0x0E4Cu))
     return T;
   return NOT_MARK;
 }
     return T;
   return NOT_MARK;
 }
@@ -99,43 +99,43 @@ thai_pua_shape (hb_codepoint_t u, thai_action_t action, hb_font_t *font)
     hb_codepoint_t mac_pua;
   } const *pua_mappings = NULL;
   static const thai_pua_mapping_t SD_mappings[] = {
     hb_codepoint_t mac_pua;
   } const *pua_mappings = NULL;
   static const thai_pua_mapping_t SD_mappings[] = {
-    {0x0E48, 0xF70A, 0xF88B}, /* MAI EK */
-    {0x0E49, 0xF70B, 0xF88E}, /* MAI THO */
-    {0x0E4A, 0xF70C, 0xF891}, /* MAI TRI */
-    {0x0E4B, 0xF70D, 0xF894}, /* MAI CHATTAWA */
-    {0x0E4C, 0xF70E, 0xF897}, /* THANTHAKHAT */
-    {0x0E38, 0xF718, 0xF89B}, /* SARA U */
-    {0x0E39, 0xF719, 0xF89C}, /* SARA UU */
-    {0x0E3A, 0xF71A, 0xF89D}, /* PHINTHU */
-    {0x0000, 0x0000, 0x0000}
+    {0x0E48u, 0xF70Au, 0xF88Bu}, /* MAI EK */
+    {0x0E49u, 0xF70Bu, 0xF88Eu}, /* MAI THO */
+    {0x0E4Au, 0xF70Cu, 0xF891u}, /* MAI TRI */
+    {0x0E4Bu, 0xF70Du, 0xF894u}, /* MAI CHATTAWA */
+    {0x0E4Cu, 0xF70Eu, 0xF897u}, /* THANTHAKHAT */
+    {0x0E38u, 0xF718u, 0xF89Bu}, /* SARA U */
+    {0x0E39u, 0xF719u, 0xF89Cu}, /* SARA UU */
+    {0x0E3Au, 0xF71Au, 0xF89Du}, /* PHINTHU */
+    {0x0000u, 0x0000u, 0x0000u}
   };
   static const thai_pua_mapping_t SDL_mappings[] = {
   };
   static const thai_pua_mapping_t SDL_mappings[] = {
-    {0x0E48, 0xF705, 0xF88C}, /* MAI EK */
-    {0x0E49, 0xF706, 0xF88F}, /* MAI THO */
-    {0x0E4A, 0xF707, 0xF892}, /* MAI TRI */
-    {0x0E4B, 0xF708, 0xF895}, /* MAI CHATTAWA */
-    {0x0E4C, 0xF709, 0xF898}, /* THANTHAKHAT */
-    {0x0000, 0x0000, 0x0000}
+    {0x0E48u, 0xF705u, 0xF88Cu}, /* MAI EK */
+    {0x0E49u, 0xF706u, 0xF88Fu}, /* MAI THO */
+    {0x0E4Au, 0xF707u, 0xF892u}, /* MAI TRI */
+    {0x0E4Bu, 0xF708u, 0xF895u}, /* MAI CHATTAWA */
+    {0x0E4Cu, 0xF709u, 0xF898u}, /* THANTHAKHAT */
+    {0x0000u, 0x0000u, 0x0000u}
   };
   static const thai_pua_mapping_t SL_mappings[] = {
   };
   static const thai_pua_mapping_t SL_mappings[] = {
-    {0x0E48, 0xF713, 0xF88A}, /* MAI EK */
-    {0x0E49, 0xF714, 0xF88D}, /* MAI THO */
-    {0x0E4A, 0xF715, 0xF890}, /* MAI TRI */
-    {0x0E4B, 0xF716, 0xF893}, /* MAI CHATTAWA */
-    {0x0E4C, 0xF717, 0xF896}, /* THANTHAKHAT */
-    {0x0E31, 0xF710, 0xF884}, /* MAI HAN-AKAT */
-    {0x0E34, 0xF701, 0xF885}, /* SARA I */
-    {0x0E35, 0xF702, 0xF886}, /* SARA II */
-    {0x0E36, 0xF703, 0xF887}, /* SARA UE */
-    {0x0E37, 0xF704, 0xF888}, /* SARA UEE */
-    {0x0E47, 0xF712, 0xF889}, /* MAITAIKHU */
-    {0x0E4D, 0xF711, 0xF899}, /* NIKHAHIT */
-    {0x0000, 0x0000, 0x0000}
+    {0x0E48u, 0xF713u, 0xF88Au}, /* MAI EK */
+    {0x0E49u, 0xF714u, 0xF88Du}, /* MAI THO */
+    {0x0E4Au, 0xF715u, 0xF890u}, /* MAI TRI */
+    {0x0E4Bu, 0xF716u, 0xF893u}, /* MAI CHATTAWA */
+    {0x0E4Cu, 0xF717u, 0xF896u}, /* THANTHAKHAT */
+    {0x0E31u, 0xF710u, 0xF884u}, /* MAI HAN-AKAT */
+    {0x0E34u, 0xF701u, 0xF885u}, /* SARA I */
+    {0x0E35u, 0xF702u, 0xF886u}, /* SARA II */
+    {0x0E36u, 0xF703u, 0xF887u}, /* SARA UE */
+    {0x0E37u, 0xF704u, 0xF888u}, /* SARA UEE */
+    {0x0E47u, 0xF712u, 0xF889u}, /* MAITAIKHU */
+    {0x0E4Du, 0xF711u, 0xF899u}, /* NIKHAHIT */
+    {0x0000u, 0x0000u, 0x0000u}
   };
   static const thai_pua_mapping_t RD_mappings[] = {
   };
   static const thai_pua_mapping_t RD_mappings[] = {
-    {0x0E0D, 0xF70F, 0xF89A}, /* YO YING */
-    {0x0E10, 0xF700, 0xF89E}, /* THO THAN */
-    {0x0000, 0x0000, 0x0000}
+    {0x0E0Du, 0xF70Fu, 0xF89Au}, /* YO YING */
+    {0x0E10u, 0xF700u, 0xF89Eu}, /* THO THAN */
+    {0x0000u, 0x0000u, 0x0000u}
   };
 
   switch (action) {
   };
 
   switch (action) {
@@ -308,10 +308,10 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
 
   /* We only get one script at a time, so a script-agnostic implementation
    * is adequate here. */
 
   /* We only get one script at a time, so a script-agnostic implementation
    * is adequate here. */
-#define IS_SARA_AM(x) (((x) & ~0x0080) == 0x0E33)
-#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0xE33 + 0xE4D)
+#define IS_SARA_AM(x) (((x) & ~0x0080u) == 0x0E33u)
+#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0x0E33u + 0x0E4Du)
 #define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
 #define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
-#define IS_TONE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080, 0x0E34, 0x0E37, 0x0E47, 0x0E4E, 0x0E31, 0x0E31))
+#define IS_TONE_MARK(x) (hb_in_ranges ((x) & ~0x0080u, 0x0E34u, 0x0E37u, 0x0E47u, 0x0E4Eu, 0x0E31u, 0x0E31u))
 
   buffer->clear_output ();
   unsigned int count = buffer->len;
 
   buffer->clear_output ();
   unsigned int count = buffer->len;
@@ -330,8 +330,11 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
     if (unlikely (buffer->in_error))
       return;
 
     if (unlikely (buffer->in_error))
       return;
 
-    /* Ok, let's see... */
+    /* Make Nikhahit be recognized as a mark when zeroing widths. */
     unsigned int end = buffer->out_len;
     unsigned int end = buffer->out_len;
+    _hb_glyph_info_set_general_category (&buffer->out_info[end - 2], HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
+
+    /* Ok, let's see... */
     unsigned int start = end - 2;
     while (start > 0 && IS_TONE_MARK (buffer->out_info[start - 1].codepoint))
       start--;
     unsigned int start = end - 2;
     while (start > 0 && IS_TONE_MARK (buffer->out_info[start - 1].codepoint))
       start--;
@@ -369,10 +372,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
   NULL, /* data_create */
   NULL, /* data_destroy */
   preprocess_text_thai,
   NULL, /* data_create */
   NULL, /* data_destroy */
   preprocess_text_thai,
-  NULL, /* normalization_preference */
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
-  true, /* zero_width_attached_marks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
   false,/* fallback_position */
 };
   false,/* fallback_position */
 };
similarity index 53%
rename from src/hb-tt-font.cc
rename to src/hb-ot-shape-complex-tibetan.cc
index c503a40..01465a4 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2011  Google, Inc.
+ * Copyright © 2010,2012  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  * Google Author(s): Behdad Esfahbod
  */
 
  * Google Author(s): Behdad Esfahbod
  */
 
-#include "hb-font-private.hh" /* Shall be first since may include windows.h */
+#include "hb-ot-shape-complex-private.hh"
 
 
-#include "hb-open-type-private.hh"
 
 
-#include "hb-ot-hhea-table.hh"
-#include "hb-ot-hmtx-table.hh"
-
-#include "hb-blob.h"
-
-#include <string.h>
-
-
-
-#if 0
-struct hb_tt_font_t
+static const hb_tag_t tibetan_features[] =
 {
 {
-  const struct hhea *hhea;
-  hb_blob_t *hhea_blob;
+  HB_TAG('a','b','v','s'),
+  HB_TAG('b','l','w','s'),
+  HB_TAG('a','b','v','m'),
+  HB_TAG('b','l','w','m'),
+  HB_TAG_NONE
 };
 
 };
 
-
-static hb_tt_font_t *
-_hb_tt_font_create (hb_font_t *font)
-{
-  /* TODO Remove this object altogether */
-  hb_tt_font_t *tt = (hb_tt_font_t *) calloc (1, sizeof (hb_tt_font_t));
-
-  tt->hhea_blob = Sanitizer<hhea>::sanitize (font->face->reference_table (HB_OT_TAG_hhea));
-  tt->hhea = Sanitizer<hhea>::lock_instance (tt->hhea_blob);
-
-  return tt;
-}
-
 static void
 static void
-_hb_tt_font_destroy (hb_tt_font_t *tt)
-{
-  hb_blob_destroy (tt->hhea_blob);
-
-  free (tt);
-}
-
-static inline const hhea&
-_get_hhea (hb_face_t *face)
+collect_features_tibetan (hb_ot_shape_planner_t *plan)
 {
 {
-  return likely (face->tt && face->tt->hhea) ? *face->tt->hhea : Null(hhea);
+  for (const hb_tag_t *script_features = tibetan_features; script_features && *script_features; script_features++)
+    plan->map.add_global_bool_feature (*script_features);
 }
 
 
 }
 
 
-/*
- * hb_tt_font_funcs_t
- */
-
-#endif
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan =
+{
+  "default",
+  collect_features_tibetan,
+  NULL, /* override_features */
+  NULL, /* data_create */
+  NULL, /* data_destroy */
+  NULL, /* preprocess_text */
+  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
+  NULL, /* decompose */
+  NULL, /* compose */
+  NULL, /* setup_masks */
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
+  true, /* fallback_position */
+};
index 5e9cb06..ec65351 100644 (file)
@@ -41,4 +41,9 @@ HB_INTERNAL void _hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_
                                                                    hb_buffer_t  *buffer);
 
 
                                                                    hb_buffer_t  *buffer);
 
 
+HB_INTERNAL void _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
+                                            hb_font_t *font,
+                                            hb_buffer_t  *buffer);
+
+
 #endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
 #endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
index 6f3426e..80d7da8 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include "hb-ot-shape-fallback-private.hh"
  */
 
 #include "hb-ot-shape-fallback-private.hh"
+#include "hb-ot-layout-gsubgpos-private.hh"
 
 static unsigned int
 recategorize_combining_class (hb_codepoint_t u,
 
 static unsigned int
 recategorize_combining_class (hb_codepoint_t u,
@@ -34,42 +35,42 @@ recategorize_combining_class (hb_codepoint_t u,
     return klass;
 
   /* Thai / Lao need some per-character work. */
     return klass;
 
   /* Thai / Lao need some per-character work. */
-  if ((u & ~0xFF) == 0x0E00)
+  if ((u & ~0xFF) == 0x0E00u)
   {
     if (unlikely (klass == 0))
     {
       switch (u)
       {
   {
     if (unlikely (klass == 0))
     {
       switch (u)
       {
-        case 0x0E31:
-        case 0x0E34:
-        case 0x0E35:
-        case 0x0E36:
-        case 0x0E37:
-        case 0x0E47:
-        case 0x0E4C:
-        case 0x0E4D:
-        case 0x0E4E:
+        case 0x0E31u:
+        case 0x0E34u:
+        case 0x0E35u:
+        case 0x0E36u:
+        case 0x0E37u:
+        case 0x0E47u:
+        case 0x0E4Cu:
+        case 0x0E4Du:
+        case 0x0E4Eu:
          klass = HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
          break;
 
          klass = HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
          break;
 
-        case 0x0EB1:
-        case 0x0EB4:
-        case 0x0EB5:
-        case 0x0EB6:
-        case 0x0EB7:
-        case 0x0EBB:
-        case 0x0ECC:
-        case 0x0ECD:
+        case 0x0EB1u:
+        case 0x0EB4u:
+        case 0x0EB5u:
+        case 0x0EB6u:
+        case 0x0EB7u:
+        case 0x0EBBu:
+        case 0x0ECCu:
+        case 0x0ECDu:
          klass = HB_UNICODE_COMBINING_CLASS_ABOVE;
          break;
 
          klass = HB_UNICODE_COMBINING_CLASS_ABOVE;
          break;
 
-        case 0x0EBC:
+        case 0x0EBCu:
          klass = HB_UNICODE_COMBINING_CLASS_BELOW;
          break;
       }
     } else {
       /* Thai virama is below-right */
          klass = HB_UNICODE_COMBINING_CLASS_BELOW;
          break;
       }
     } else {
       /* Thai virama is below-right */
-      if (u == 0x0E3A)
+      if (u == 0x0E3Au)
        klass = HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
     }
   }
        klass = HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
     }
   }
@@ -166,11 +167,12 @@ _hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_shape_plan_t *pla
                                                   hb_buffer_t  *buffer)
 {
   unsigned int count = buffer->len;
                                                   hb_buffer_t  *buffer)
 {
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
-      unsigned int combining_class = _hb_glyph_info_get_modified_combining_class (&buffer->info[i]);
-      combining_class = recategorize_combining_class (buffer->info[i].codepoint, combining_class);
-      _hb_glyph_info_set_modified_combining_class (&buffer->info[i], combining_class);
+    if (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
+      unsigned int combining_class = _hb_glyph_info_get_modified_combining_class (&info[i]);
+      combining_class = recategorize_combining_class (info[i].codepoint, combining_class);
+      _hb_glyph_info_set_modified_combining_class (&info[i], combining_class);
     }
 }
 
     }
 }
 
@@ -180,8 +182,9 @@ zero_mark_advances (hb_buffer_t *buffer,
                    unsigned int start,
                    unsigned int end)
 {
                    unsigned int start,
                    unsigned int end)
 {
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = start; i < end; i++)
   for (unsigned int i = start; i < end; i++)
-    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    if (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
     {
       buffer->pos[i].x_advance = 0;
       buffer->pos[i].y_advance = 0;
     {
       buffer->pos[i].x_advance = 0;
       buffer->pos[i].y_advance = 0;
@@ -259,7 +262,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:
 
     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;
 
       base_extents.height += mark_extents.height;
       break;
 
@@ -273,7 +282,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:
 
     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;
       base_extents.y_bearing -= mark_extents.height;
       base_extents.height += mark_extents.height;
       break;
@@ -299,8 +316,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;
 
   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)) {
 
   hb_position_t x_offset = 0, y_offset = 0;
   if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
@@ -312,12 +329,13 @@ position_around_base (const hb_ot_shape_plan_t *plan,
   unsigned int last_lig_component = (unsigned int) -1;
   unsigned int last_combining_class = 255;
   hb_glyph_extents_t cluster_extents = base_extents; /* Initialization is just to shut gcc up. */
   unsigned int last_lig_component = (unsigned int) -1;
   unsigned int last_combining_class = 255;
   hb_glyph_extents_t cluster_extents = base_extents; /* Initialization is just to shut gcc up. */
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = base + 1; i < end; i++)
   for (unsigned int i = base + 1; i < end; i++)
-    if (_hb_glyph_info_get_modified_combining_class (&buffer->info[i]))
+    if (_hb_glyph_info_get_modified_combining_class (&info[i]))
     {
       if (num_lig_components > 1) {
     {
       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 (&info[i]);
+       unsigned int this_lig_component = _hb_glyph_info_get_lig_comp (&info[i]) - 1;
        /* Conditions for attaching to the last component. */
        if (!lig_id || lig_id != this_lig_id || this_lig_component >= num_lig_components)
          this_lig_component = num_lig_components - 1;
        /* 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;
@@ -340,7 +358,7 @@ position_around_base (const hb_ot_shape_plan_t *plan,
        }
       }
 
        }
       }
 
-      unsigned int this_combining_class = _hb_glyph_info_get_modified_combining_class (&buffer->info[i]);
+      unsigned int this_combining_class = _hb_glyph_info_get_modified_combining_class (&info[i]);
       if (last_combining_class != this_combining_class)
       {
        last_combining_class = this_combining_class;
       if (last_combining_class != this_combining_class)
       {
        last_combining_class = this_combining_class;
@@ -376,13 +394,14 @@ position_cluster (const hb_ot_shape_plan_t *plan,
     return;
 
   /* Find the base glyph */
     return;
 
   /* Find the base glyph */
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = start; i < end; i++)
   for (unsigned int i = start; i < end; i++)
-    if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[i])))
+    if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])))
     {
       /* Find mark glyphs */
       unsigned int j;
       for (j = i + 1; j < end; j++)
     {
       /* Find mark glyphs */
       unsigned int j;
       for (j = i + 1; j < end; j++)
-       if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[j])))
+       if (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[j])))
          break;
 
       position_around_base (plan, font, buffer, i, j);
          break;
 
       position_around_base (plan, font, buffer, i, j);
@@ -396,6 +415,8 @@ _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan,
                                hb_font_t *font,
                                hb_buffer_t  *buffer)
 {
                                hb_font_t *font,
                                hb_buffer_t  *buffer)
 {
+  _hb_buffer_assert_gsubgpos_vars (buffer);
+
   unsigned int start = 0;
   unsigned int last_cluster = buffer->info[0].cluster;
   unsigned int count = buffer->len;
   unsigned int start = 0;
   unsigned int last_cluster = buffer->info[0].cluster;
   unsigned int count = buffer->len;
@@ -407,3 +428,56 @@ _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan,
     }
   position_cluster (plan, font, buffer, start, count);
 }
     }
   position_cluster (plan, font, buffer, start, count);
 }
+
+
+/* Performs old-style TrueType kerning. */
+void
+_hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
+                           hb_font_t *font,
+                           hb_buffer_t  *buffer)
+{
+  if (!plan->has_kern) return;
+
+  OT::hb_apply_context_t c (1, font, buffer);
+  c.set_lookup_mask (plan->kern_mask);
+  c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
+
+  unsigned int count = buffer->len;
+  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, idx, 1);
+    if (!skippy_iter.next ())
+    {
+      idx++;
+      continue;
+    }
+
+    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);
+
+    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;
+    }
+
+    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;
+    }
+
+    idx = skippy_iter.idx;
+  }
+}
index 8112f03..c744e26 100644 (file)
@@ -29,8 +29,6 @@
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
-#include "hb-font.h"
-#include "hb-buffer.h"
 
 /* buffer var allocations, used during the normalization process */
 #define glyph_index()  var1.u32
 
 /* buffer var allocations, used during the normalization process */
 #define glyph_index()  var1.u32
 struct hb_ot_shape_plan_t;
 
 enum hb_ot_shape_normalization_mode_t {
 struct hb_ot_shape_plan_t;
 
 enum hb_ot_shape_normalization_mode_t {
+  HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
   HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* never composes base-to-base */
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* always fully decomposes and then recompose back */
   HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* never composes base-to-base */
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* always fully decomposes and then recompose back */
-  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL, /* including base-to-base composition */
 
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS
 };
 
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS
 };
index c5325e4..4287253 100644 (file)
@@ -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;
 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) ||
 
   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;
 
     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 */
   if (shortest && has_a) {
     /* Output a and b */
-    output_char (c->buffer, a, a_glyph);
+    output_char (buffer, a, a_glyph);
     if (likely (b)) {
     if (likely (b)) {
-      output_char (c->buffer, b, b_glyph);
+      output_char (buffer, b, b_glyph);
       return 2;
     }
     return 1;
       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) {
   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) {
       return ret + 1;
     }
     return ret;
   }
 
   if (has_a) {
-    output_char (c->buffer, a, a_glyph);
+    output_char (buffer, a, a_glyph);
     if (likely (b)) {
     if (likely (b)) {
-      output_char (c->buffer, b, b_glyph);
+      output_char (buffer, b, b_glyph);
       return 2;
     }
     return 1;
       return 2;
     }
     return 1;
@@ -170,7 +172,7 @@ decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint
 }
 
 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */
 }
 
 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */
-static inline bool
+static inline unsigned int
 decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_t u)
 {
   unsigned int len, i;
 decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_t u)
 {
   unsigned int len, i;
@@ -191,79 +193,84 @@ decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_
   return len;
 }
 
   return len;
 }
 
-/* Returns true if recomposition may be benefitial. */
-static inline bool
+static inline void
 decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
 {
   hb_buffer_t * const buffer = c->buffer;
   hb_codepoint_t glyph;
 decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
 {
   hb_buffer_t * const buffer = c->buffer;
   hb_codepoint_t glyph;
-  unsigned int len = 1;
 
   /* Kind of a cute waterfall here... */
   if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
 
   /* Kind of a cute waterfall here... */
   if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
-  else if ((len = decompose (c, shortest, buffer->cur().codepoint)))
+  else if (decompose (c, shortest, buffer->cur().codepoint))
     skip_char (buffer);
   else if (!shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
     skip_char (buffer);
   else if (!shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
     next_char (buffer, glyph);
-  else if ((len = decompose_compatibility (c, buffer->cur().codepoint)))
+  else if (decompose_compatibility (c, buffer->cur().codepoint))
     skip_char (buffer);
   else
     next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
     skip_char (buffer);
   else
     next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
-
-  /*
-   * A recomposition would only be useful if we decomposed into at least three
-   * characters...
-   */
-  return len > 2;
 }
 
 static inline void
 }
 
 static inline void
-handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
+handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool short_circuit)
 {
 {
+  /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
   hb_buffer_t * const buffer = c->buffer;
   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. */
   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. */
-      c->font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index());
-      buffer->replace_glyphs (2, 1, &buffer->cur().codepoint);
+      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(), font);
+       buffer->next_glyph ();
+       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(), font);
+       buffer->next_glyph ();
+      }
     } else {
     } else {
-      set_glyph (buffer->cur(), c->font);
+      set_glyph (buffer->cur(), font);
       buffer->next_glyph ();
     }
   }
   if (likely (buffer->idx < end)) {
       buffer->next_glyph ();
     }
   }
   if (likely (buffer->idx < end)) {
-    set_glyph (buffer->cur(), c->font);
+    set_glyph (buffer->cur(), font);
     buffer->next_glyph ();
   }
 }
 
     buffer->next_glyph ();
   }
 }
 
-/* Returns true if recomposition may be benefitial. */
-static inline bool
-decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
+static inline void
+decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool short_circuit)
 {
   hb_buffer_t * const buffer = c->buffer;
 {
   hb_buffer_t * const buffer = c->buffer;
-  /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
   for (unsigned int i = buffer->idx; i < end; i++)
     if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
   for (unsigned int i = buffer->idx; i < end; i++)
     if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
-      handle_variation_selector_cluster (c, end);
-      return false;
+      handle_variation_selector_cluster (c, end, short_circuit);
+      return;
     }
 
   while (buffer->idx < end)
     }
 
   while (buffer->idx < end)
-    decompose_current_character (c, false);
-  /* We can be smarter here and only return true if there are at least two ccc!=0 marks.
-   * But does not matter. */
-  return true;
+    decompose_current_character (c, short_circuit);
 }
 
 }
 
-static inline bool
-decompose_cluster (const hb_ot_shape_normalize_context_t *c, bool short_circuit, unsigned int end)
+static inline void
+decompose_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool might_short_circuit, bool always_short_circuit)
 {
   if (likely (c->buffer->idx + 1 == end))
 {
   if (likely (c->buffer->idx + 1 == end))
-    return decompose_current_character (c, short_circuit);
+    decompose_current_character (c, might_short_circuit);
   else
   else
-    return decompose_multi_char_cluster (c, end);
+    decompose_multi_char_cluster (c, end, always_short_circuit);
 }
 
 
 }
 
 
@@ -282,9 +289,9 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
                        hb_buffer_t *buffer,
                        hb_font_t *font)
 {
                        hb_buffer_t *buffer,
                        hb_font_t *font)
 {
-  hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference ?
-                                         plan->shaper->normalization_preference (&buffer->props) :
-                                         HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT;
+  _hb_buffer_assert_unicode_vars (buffer);
+
+  hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference;
   const hb_ot_shape_normalize_context_t c = {
     plan,
     buffer,
   const hb_ot_shape_normalize_context_t c = {
     plan,
     buffer,
@@ -294,9 +301,10 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
     plan->shaper->compose   ? plan->shaper->compose   : compose_unicode
   };
 
     plan->shaper->compose   ? plan->shaper->compose   : compose_unicode
   };
 
-  bool short_circuit = mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
-                      mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
-  bool can_use_recompose = false;
+  bool always_short_circuit = mode == HB_OT_SHAPE_NORMALIZATION_MODE_NONE;
+  bool might_short_circuit = always_short_circuit ||
+                            (mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
+                             mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT);
   unsigned int count;
 
   /* We do a fairly straightforward yet custom normalization process in three
   unsigned int count;
 
   /* We do a fairly straightforward yet custom normalization process in three
@@ -317,15 +325,11 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
       if (buffer->cur().cluster != buffer->info[end].cluster)
         break;
 
       if (buffer->cur().cluster != buffer->info[end].cluster)
         break;
 
-    can_use_recompose = decompose_cluster (&c, short_circuit, end) || can_use_recompose;
+    decompose_cluster (&c, end, might_short_circuit, always_short_circuit);
   }
   buffer->swap_buffers ();
 
 
   }
   buffer->swap_buffers ();
 
 
-  if (mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL && !can_use_recompose)
-    return; /* Done! */
-
-
   /* Second round, reorder (inplace) */
 
   count = buffer->len;
   /* Second round, reorder (inplace) */
 
   count = buffer->len;
@@ -353,7 +357,8 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
   }
 
 
   }
 
 
-  if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED)
+  if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_NONE ||
+      mode == HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED)
     return;
 
   /* Third round, recompose */
     return;
 
   /* Third round, recompose */
@@ -368,10 +373,11 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
   while (buffer->idx < count)
   {
     hb_codepoint_t composed, glyph;
   while (buffer->idx < count)
   {
     hb_codepoint_t composed, glyph;
-    if (/* If mode is NOT COMPOSED_FULL (ie. it's COMPOSED_DIACRITICS), we don't try to
-        * compose a CCC=0 character with it's preceding starter. */
-       (mode == HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL ||
-        _hb_glyph_info_get_modified_combining_class (&buffer->cur()) != 0) &&
+    if (/* We don't try to compose a non-mark character with it's preceding starter.
+        * This is both an optimization to avoid trying to compose every two neighboring
+        * glyphs in most scripts AND a desired feature for Hangul.  Apparently Hangul
+        * fonts are not designed to mix-and-match pre-composed syllables and Jamo. */
+       HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())) &&
        /* If there's anything between the starter and this char, they should have CCC
         * smaller than this character's. */
        (starter == buffer->out_len - 1 ||
        /* If there's anything between the starter and this char, they should have CCC
         * smaller than this character's. */
        (starter == buffer->out_len - 1 ||
@@ -390,8 +396,9 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
         return;
       buffer->merge_out_clusters (starter, buffer->out_len);
       buffer->out_len--; /* Remove the second composable. */
         return;
       buffer->merge_out_clusters (starter, buffer->out_len);
       buffer->out_len--; /* Remove the second composable. */
-      buffer->out_info[starter].codepoint = composed; /* Modify starter and carry on. */
-      set_glyph (buffer->out_info[starter], font);
+      /* Modify starter and carry on. */
+      buffer->out_info[starter].codepoint = composed;
+      buffer->out_info[starter].glyph_index() = glyph;
       _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer->unicode);
 
       continue;
       _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer->unicode);
 
       continue;
index 23e80b7..54ac2c3 100644 (file)
 #include "hb-private.hh"
 
 #include "hb-ot-map-private.hh"
 #include "hb-private.hh"
 
 #include "hb-ot-map-private.hh"
-
-
-
-/* buffer var allocations, used during the entire shaping process */
-#define unicode_props0()       var2.u8[0]
-#define unicode_props1()       var2.u8[1]
+#include "hb-ot-layout-private.hh"
 
 
 
 
 
 
@@ -45,6 +40,11 @@ struct hb_ot_shape_plan_t
   const struct hb_ot_complex_shaper_t *shaper;
   hb_ot_map_t map;
   const void *data;
   const struct hb_ot_complex_shaper_t *shaper;
   hb_ot_map_t map;
   const void *data;
+  hb_mask_t rtlm_mask, frac_mask, numr_mask, dnom_mask;
+  hb_mask_t kern_mask;
+  unsigned int has_frac : 1;
+  unsigned int has_kern : 1;
+  unsigned int has_mark : 1;
 
   inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
   {
 
   inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
   {
@@ -71,7 +71,7 @@ struct hb_ot_shape_planner_t
   hb_ot_map_builder_t map;
 
   hb_ot_shape_planner_t (const hb_shape_plan_t *master_plan) :
   hb_ot_map_builder_t map;
 
   hb_ot_shape_planner_t (const hb_shape_plan_t *master_plan) :
-                        face (master_plan->face),
+                        face (master_plan->face_unsafe),
                         props (master_plan->props),
                         shaper (NULL),
                         map (face, &props) {}
                         props (master_plan->props),
                         shaper (NULL),
                         map (face, &props) {}
@@ -82,6 +82,18 @@ struct hb_ot_shape_planner_t
     plan.props = props;
     plan.shaper = shaper;
     map.compile (plan.map);
     plan.props = props;
     plan.shaper = shaper;
     map.compile (plan.map);
+
+    plan.rtlm_mask = plan.map.get_1_mask (HB_TAG ('r','t','l','m'));
+    plan.frac_mask = plan.map.get_1_mask (HB_TAG ('f','r','a','c'));
+    plan.numr_mask = plan.map.get_1_mask (HB_TAG ('n','u','m','r'));
+    plan.dnom_mask = plan.map.get_1_mask (HB_TAG ('d','n','o','m'));
+
+    plan.kern_mask = plan.map.get_mask (HB_DIRECTION_IS_HORIZONTAL (plan.props.direction) ?
+                                       HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
+
+    plan.has_frac = plan.frac_mask || (plan.numr_mask && plan.dnom_mask);
+    plan.has_kern = !!plan.kern_mask;
+    plan.has_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
   }
 
   private:
   }
 
   private:
@@ -89,37 +101,4 @@ struct hb_ot_shape_planner_t
 };
 
 
 };
 
 
-
-inline void
-_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
-{
-  info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) |
-                          (unicode->is_default_ignorable (info->codepoint) ? 0x80 : 0);
-  info->unicode_props1() = unicode->modified_combining_class (info->codepoint);
-}
-
-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() & 0x7F);
-}
-
-inline void
-_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, unsigned int modified_class)
-{
-  info->unicode_props1() = modified_class;
-}
-
-inline unsigned int
-_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
-{
-  return info->unicode_props1();
-}
-
-inline hb_bool_t
-_hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
-{
-  return !!(info->unicode_props0() & 0x80);
-}
-
 #endif /* HB_OT_SHAPE_PRIVATE_HH */
 #endif /* HB_OT_SHAPE_PRIVATE_HH */
index 96461d7..a0b503a 100644 (file)
 #include "hb-ot-shape-normalize-private.hh"
 
 #include "hb-ot-layout-private.hh"
 #include "hb-ot-shape-normalize-private.hh"
 
 #include "hb-ot-layout-private.hh"
+#include "hb-unicode-private.hh"
 #include "hb-set-private.hh"
 
 
 static hb_tag_t common_features[] = {
   HB_TAG('c','c','m','p'),
 #include "hb-set-private.hh"
 
 
 static hb_tag_t common_features[] = {
   HB_TAG('c','c','m','p'),
-  HB_TAG('l','i','g','a'),
   HB_TAG('l','o','c','l'),
   HB_TAG('m','a','r','k'),
   HB_TAG('m','k','m','k'),
   HB_TAG('l','o','c','l'),
   HB_TAG('m','a','r','k'),
   HB_TAG('m','k','m','k'),
@@ -55,20 +55,12 @@ static hb_tag_t horizontal_features[] = {
   HB_TAG('c','l','i','g'),
   HB_TAG('c','u','r','s'),
   HB_TAG('k','e','r','n'),
   HB_TAG('c','l','i','g'),
   HB_TAG('c','u','r','s'),
   HB_TAG('k','e','r','n'),
+  HB_TAG('l','i','g','a'),
   HB_TAG('r','c','l','t'),
 };
 
   HB_TAG('r','c','l','t'),
 };
 
-/* Note:
- * Technically speaking, vrt2 and vert are mutually exclusive.
- * According to the spec, valt and vpal are also mutually exclusive.
- * But we apply them all for now.
- */
 static hb_tag_t vertical_features[] = {
 static hb_tag_t vertical_features[] = {
-  HB_TAG('v','a','l','t'),
   HB_TAG('v','e','r','t'),
   HB_TAG('v','e','r','t'),
-  HB_TAG('v','k','r','n'),
-  HB_TAG('v','p','a','l'),
-  HB_TAG('v','r','t','2'),
 };
 
 
 };
 
 
@@ -83,12 +75,12 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t          *planner,
 
   switch (props->direction) {
     case HB_DIRECTION_LTR:
 
   switch (props->direction) {
     case HB_DIRECTION_LTR:
-      map->add_bool_feature (HB_TAG ('l','t','r','a'));
-      map->add_bool_feature (HB_TAG ('l','t','r','m'));
+      map->add_global_bool_feature (HB_TAG ('l','t','r','a'));
+      map->add_global_bool_feature (HB_TAG ('l','t','r','m'));
       break;
     case HB_DIRECTION_RTL:
       break;
     case HB_DIRECTION_RTL:
-      map->add_bool_feature (HB_TAG ('r','t','l','a'));
-      map->add_bool_feature (HB_TAG ('r','t','l','m'), false);
+      map->add_global_bool_feature (HB_TAG ('r','t','l','a'));
+      map->add_feature (HB_TAG ('r','t','l','m'), 1, F_NONE);
       break;
     case HB_DIRECTION_TTB:
     case HB_DIRECTION_BTT:
       break;
     case HB_DIRECTION_TTB:
     case HB_DIRECTION_BTT:
@@ -97,30 +89,35 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t          *planner,
       break;
   }
 
       break;
   }
 
-#define ADD_FEATURES(array) \
-  HB_STMT_START { \
-    for (unsigned int i = 0; i < ARRAY_LENGTH (array); i++) \
-      map->add_bool_feature (array[i]); \
-  } HB_STMT_END
+  map->add_feature (HB_TAG ('f','r','a','c'), 1, F_NONE);
+  map->add_feature (HB_TAG ('n','u','m','r'), 1, F_NONE);
+  map->add_feature (HB_TAG ('d','n','o','m'), 1, F_NONE);
 
   if (planner->shaper->collect_features)
     planner->shaper->collect_features (planner);
 
 
   if (planner->shaper->collect_features)
     planner->shaper->collect_features (planner);
 
-  ADD_FEATURES (common_features);
+  for (unsigned int i = 0; i < ARRAY_LENGTH (common_features); i++)
+    map->add_global_bool_feature (common_features[i]);
 
   if (HB_DIRECTION_IS_HORIZONTAL (props->direction))
 
   if (HB_DIRECTION_IS_HORIZONTAL (props->direction))
-    ADD_FEATURES (horizontal_features);
+    for (unsigned int i = 0; i < ARRAY_LENGTH (horizontal_features); i++)
+      map->add_feature (horizontal_features[i], 1, F_GLOBAL |
+                       (horizontal_features[i] == HB_TAG('k','e','r','n') ?
+                        F_HAS_FALLBACK : F_NONE));
   else
   else
-    ADD_FEATURES (vertical_features);
+    for (unsigned int i = 0; i < ARRAY_LENGTH (vertical_features); i++)
+      map->add_feature (vertical_features[i], 1, F_GLOBAL |
+                       (vertical_features[i] == HB_TAG('v','k','r','n') ?
+                        F_HAS_FALLBACK : F_NONE));
 
   if (planner->shaper->override_features)
     planner->shaper->override_features (planner);
 
 
   if (planner->shaper->override_features)
     planner->shaper->override_features (planner);
 
-#undef ADD_FEATURES
-
   for (unsigned int i = 0; i < num_user_features; i++) {
     const hb_feature_t *feature = &user_features[i];
   for (unsigned int i = 0; i < num_user_features; i++) {
     const hb_feature_t *feature = &user_features[i];
-    map->add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1));
+    map->add_feature (feature->tag, feature->value,
+                     (feature->start == 0 && feature->end == (unsigned int) -1) ?
+                      F_GLOBAL : F_NONE);
   }
 }
 
   }
 }
 
@@ -230,24 +227,25 @@ static void
 hb_set_unicode_props (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
 hb_set_unicode_props (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    _hb_glyph_info_set_unicode_props (&buffer->info[i], buffer->unicode);
+    _hb_glyph_info_set_unicode_props (&info[i], buffer->unicode);
 }
 
 static void
 hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
 {
   if (!(buffer->flags & HB_BUFFER_FLAG_BOT) ||
 }
 
 static void
 hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
 {
   if (!(buffer->flags & HB_BUFFER_FLAG_BOT) ||
+      buffer->context_len[0] ||
       _hb_glyph_info_get_general_category (&buffer->info[0]) !=
       HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
     return;
 
       _hb_glyph_info_get_general_category (&buffer->info[0]) !=
       HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
     return;
 
-  hb_codepoint_t dottedcircle_glyph;
-  if (!font->get_glyph (0x25CC, 0, &dottedcircle_glyph))
+  if (!font->has_glyph (0x25CCu))
     return;
 
     return;
 
-  hb_glyph_info_t dottedcircle;
-  dottedcircle.codepoint = 0x25CC;
+  hb_glyph_info_t dottedcircle = {0};
+  dottedcircle.codepoint = 0x25CCu;
   _hb_glyph_info_set_unicode_props (&dottedcircle, buffer->unicode);
 
   buffer->clear_output ();
   _hb_glyph_info_set_unicode_props (&dottedcircle, buffer->unicode);
 
   buffer->clear_output ();
@@ -267,8 +265,9 @@ static void
 hb_form_clusters (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
 hb_form_clusters (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 1; i < count; i++)
   for (unsigned int i = 1; i < count; i++)
-    if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[i])))
+    if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])))
       buffer->merge_clusters (i - 1, i + 1);
 }
 
       buffer->merge_clusters (i - 1, i + 1);
 }
 
@@ -298,29 +297,77 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c)
   if (HB_DIRECTION_IS_FORWARD (c->target_direction))
     return;
 
   if (HB_DIRECTION_IS_FORWARD (c->target_direction))
     return;
 
-  hb_unicode_funcs_t *unicode = c->buffer->unicode;
-  hb_mask_t rtlm_mask = c->plan->map.get_1_mask (HB_TAG ('r','t','l','m'));
+  hb_buffer_t *buffer = c->buffer;
+  hb_unicode_funcs_t *unicode = buffer->unicode;
+  hb_mask_t rtlm_mask = c->plan->rtlm_mask;
 
 
-  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++) {
   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
     else
-      c->buffer->info[i].codepoint = codepoint;
+      info[i].codepoint = codepoint;
   }
 }
 
 static inline void
   }
 }
 
 static inline void
-hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
+hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
+{
+  if (!c->plan->has_frac)
+    return;
+
+  hb_buffer_t *buffer = c->buffer;
+
+  /* TODO look in pre/post context text also. */
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+  {
+    if (info[i].codepoint == 0x2044u) /* FRACTION SLASH */
+    {
+      unsigned int start = i, end = i + 1;
+      while (start &&
+            _hb_glyph_info_get_general_category (&info[start - 1]) ==
+            HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
+        start--;
+      while (end < count &&
+            _hb_glyph_info_get_general_category (&info[end]) ==
+            HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
+        end++;
+
+      for (unsigned int j = start; j < i; j++)
+        info[j].mask |= c->plan->numr_mask | c->plan->frac_mask;
+      info[i].mask |= c->plan->frac_mask;
+      for (unsigned int j = i + 1; j < end; j++)
+        info[j].mask |= c->plan->frac_mask | c->plan->dnom_mask;
+
+      i = end - 1;
+    }
+  }
+}
+
+static inline void
+hb_ot_shape_initialize_masks (hb_ot_shape_context_t *c)
 {
   hb_ot_map_t *map = &c->plan->map;
 {
   hb_ot_map_t *map = &c->plan->map;
+  hb_buffer_t *buffer = c->buffer;
 
   hb_mask_t global_mask = map->get_global_mask ();
 
   hb_mask_t global_mask = map->get_global_mask ();
-  c->buffer->reset_masks (global_mask);
+  buffer->reset_masks (global_mask);
+}
+
+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_ot_shape_setup_masks_fraction (c);
 
   if (c->plan->shaper->setup_masks)
 
   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++)
   {
 
   for (unsigned int i = 0; i < c->num_user_features; i++)
   {
@@ -328,7 +375,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);
     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,54 +385,78 @@ hb_ot_map_glyphs_fast (hb_buffer_t  *buffer)
 {
   /* Normalization process sets up glyph_index(), we just copy it. */
   unsigned int count = buffer->len;
 {
   /* Normalization process sets up glyph_index(), we just copy it. */
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    buffer->info[i].codepoint = buffer->info[i].glyph_index();
+    info[i].codepoint = info[i].glyph_index();
 }
 
 static inline void
 hb_synthesize_glyph_classes (hb_ot_shape_context_t *c)
 {
   unsigned int count = c->buffer->len;
 }
 
 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++)
   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_ot_layout_glyph_class_mask_t klass;
+
+    /* Never mark default-ignorables as marks.
+     * They won't get in the way of lookups anyway,
+     * but having them as mark will cause them to be skipped
+     * over if the lookup-flag says so, but at least for the
+     * Mongolian variation selectors, looks like Uniscribe
+     * marks them as non-mark.  Some Mongolian fonts without
+     * GDEF rely on this.  Another notable character that
+     * this applies to is COMBINING GRAPHEME JOINER. */
+    klass = (_hb_glyph_info_get_general_category (&info[i]) !=
+            HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ||
+            _hb_glyph_info_is_default_ignorable (&info[i])) ?
+           HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH :
+           HB_OT_LAYOUT_GLYPH_PROPS_MARK;
+    _hb_glyph_info_set_glyph_props (&info[i], klass);
+  }
 }
 
 static inline void
 hb_ot_substitute_default (hb_ot_shape_context_t *c)
 {
 }
 
 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)
   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_shape_initialize_masks (c);
 
   hb_ot_mirror_chars (c);
 
 
   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_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)
 {
 }
 
 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_buffer_allocate_gsubgpos_vars (buffer);
+  hb_ot_layout_substitute_start (c->font, buffer);
 
   if (!hb_ot_layout_has_glyph_classes (c->face))
     hb_synthesize_glyph_classes (c);
 
 
   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;
 }
 
   return;
 }
@@ -400,20 +471,65 @@ hb_ot_substitute (hb_ot_shape_context_t *c)
 /* Position */
 
 static inline void
 /* Position */
 
 static inline void
-hb_ot_position_default (hb_ot_shape_context_t *c)
+adjust_mark_offsets (hb_glyph_position_t *pos)
 {
 {
-  hb_ot_layout_position_start (c->font, c->buffer);
+  pos->x_offset -= pos->x_advance;
+  pos->y_offset -= pos->y_advance;
+}
+
+static inline void
+zero_mark_width (hb_glyph_position_t *pos)
+{
+  pos->x_advance = 0;
+  pos->y_advance = 0;
+}
+
+static inline void
+zero_mark_widths_by_unicode (hb_buffer_t *buffer, bool adjust_offsets)
+{
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    if (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    {
+      if (adjust_offsets)
+        adjust_mark_offsets (&buffer->pos[i]);
+      zero_mark_width (&buffer->pos[i]);
+    }
+}
 
 
+static inline void
+zero_mark_widths_by_gdef (hb_buffer_t *buffer, bool adjust_offsets)
+{
+  unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
+  for (unsigned int i = 0; i < count; i++)
+    if (_hb_glyph_info_is_mark (&info[i]))
+    {
+      if (adjust_offsets)
+        adjust_mark_offsets (&buffer->pos[i]);
+      zero_mark_width (&buffer->pos[i]);
+    }
+}
+
+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;
   unsigned int count = c->buffer->len;
-  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);
+  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 (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);
+
   }
 }
 
   }
 }
 
@@ -421,68 +537,96 @@ static inline bool
 hb_ot_position_complex (hb_ot_shape_context_t *c)
 {
   bool ret = false;
 hb_ot_position_complex (hb_ot_shape_context_t *c)
 {
   bool ret = false;
+  unsigned int count = c->buffer->len;
+  bool has_positioning = hb_ot_layout_has_positioning (c->face);
+  /* If the font has no GPOS, AND, no fallback positioning will
+   * happen, AND, direction is forward, then when zeroing mark
+   * widths, we shift the mark with it, such that the mark
+   * is positioned hanging over the previous glyph.  When
+   * direction is backward we don't shift and it will end up
+   * hanging over the next glyph after the final reordering.
+   * If fallback positinoing happens or GPOS is present, we don't
+   * care.
+   */
+  bool adjust_offsets_when_zeroing = !(has_positioning || c->plan->shaper->fallback_position ||
+                                       HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction));
+
+  switch (c->plan->shaper->zero_width_marks)
+  {
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
+      zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
+      break;
+
+    /* Not currently used for any shaper:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
+      zero_mark_widths_by_unicode (c->buffer, adjust_offsets_when_zeroing);
+      break;
+    */
+
+    default:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
+      break;
+  }
 
 
-  if (hb_ot_layout_has_positioning (c->face))
+  if (has_positioning)
   {
   {
+    hb_glyph_info_t *info = c->buffer->info;
+    hb_glyph_position_t *pos = c->buffer->pos;
+
     /* Change glyph origin to what GPOS expects, apply GPOS, change it back. */
 
     /* Change glyph origin to what GPOS expects, apply GPOS, change it back. */
 
-    unsigned int count = c->buffer->len;
     for (unsigned int i = 0; i < count; i++) {
     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,
                                               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->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,
                                                    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;
   }
 
     }
 
     ret = true;
   }
 
-  hb_ot_layout_position_finish (c->font, c->buffer, c->plan->shaper->zero_width_attached_marks);
+  switch (c->plan->shaper->zero_width_marks)
+  {
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
+      zero_mark_widths_by_unicode (c->buffer, adjust_offsets_when_zeroing);
+      break;
 
 
-  return ret;
-}
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
+      zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
+      break;
 
 
-static inline void
-hb_ot_truetype_kern (hb_ot_shape_context_t *c)
-{
-  /* TODO Check for kern=0 */
-  unsigned int count = c->buffer->len;
-  for (unsigned int i = 1; i < count; i++) {
-    hb_position_t x_kern, y_kern, kern1, kern2;
-    c->font->get_glyph_kerning_for_direction (c->buffer->info[i - 1].codepoint, c->buffer->info[i].codepoint,
-                                             c->buffer->props.direction,
-                                             &x_kern, &y_kern);
-
-    kern1 = x_kern >> 1;
-    kern2 = x_kern - kern1;
-    c->buffer->pos[i - 1].x_advance += kern1;
-    c->buffer->pos[i].x_advance += kern2;
-    c->buffer->pos[i].x_offset += kern2;
-
-    kern1 = y_kern >> 1;
-    kern2 = y_kern - kern1;
-    c->buffer->pos[i - 1].y_advance += kern1;
-    c->buffer->pos[i].y_advance += kern2;
-    c->buffer->pos[i].y_offset += kern2;
+    default:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
+    //case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
+      break;
   }
   }
+
+  return ret;
 }
 
 static inline void
 hb_ot_position (hb_ot_shape_context_t *c)
 {
 }
 
 static inline void
 hb_ot_position (hb_ot_shape_context_t *c)
 {
+  hb_ot_layout_position_start (c->font, c->buffer);
+
   hb_ot_position_default (c);
 
   hb_bool_t fallback = !hb_ot_position_complex (c);
 
   hb_ot_position_default (c);
 
   hb_bool_t fallback = !hb_ot_position_complex (c);
 
+  hb_ot_layout_position_finish (c->font, c->buffer);
+
   if (fallback && c->plan->shaper->fallback_position)
     _hb_ot_shape_fallback_position (c->plan, c->font, c->buffer);
 
   if (fallback && c->plan->shaper->fallback_position)
     _hb_ot_shape_fallback_position (c->plan, c->font, c->buffer);
 
@@ -492,7 +636,9 @@ hb_ot_position (hb_ot_shape_context_t *c)
   /* Visual fallback goes here. */
 
   if (fallback)
   /* Visual fallback goes here. */
 
   if (fallback)
-    hb_ot_truetype_kern (c);
+    _hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
+
+  _hb_buffer_deallocate_gsubgpos_vars (c->buffer);
 }
 
 
 }
 
 
@@ -504,22 +650,42 @@ hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
   if (c->buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES)
     return;
 
   if (c->buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES)
     return;
 
-  hb_codepoint_t space = 0;
+  hb_codepoint_t space;
+  enum {
+    SPACE_DONT_KNOW,
+    SPACE_AVAILABLE,
+    SPACE_UNAVAILABLE
+  } space_status = SPACE_DONT_KNOW;
 
   unsigned int count = c->buffer->len;
 
   unsigned int count = c->buffer->len;
+  hb_glyph_info_t *info = c->buffer->info;
+  hb_glyph_position_t *pos = c->buffer->pos;
+  unsigned int j = 0;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    if (unlikely (!is_a_ligature (c->buffer->info[i]) &&
-                 _hb_glyph_info_is_default_ignorable (&c->buffer->info[i])))
+  {
+    if (unlikely (!_hb_glyph_info_ligated (&info[i]) &&
+                 _hb_glyph_info_is_default_ignorable (&info[i])))
     {
     {
-      if (!space) {
-        /* We assume that the space glyph is not gid0. */
-        if (unlikely (!c->font->get_glyph (' ', 0, &space)) || !space)
-       return; /* No point! */
+      if (space_status == SPACE_DONT_KNOW)
+       space_status = c->font->get_glyph (' ', 0, &space) ? SPACE_AVAILABLE : SPACE_UNAVAILABLE;
+
+      if (space_status == SPACE_AVAILABLE)
+      {
+       info[i].codepoint = space;
+       pos[i].x_advance = 0;
+       pos[i].y_advance = 0;
       }
       }
-      c->buffer->info[i].codepoint = space;
-      c->buffer->pos[i].x_advance = 0;
-      c->buffer->pos[i].y_advance = 0;
+      else
+       continue; /* Delete it. */
+    }
+    if (j != i)
+    {
+      info[j] = info[i];
+      pos[j] = pos[i];
     }
     }
+    j++;
+  }
+  c->buffer->len = j;
 }
 
 
 }
 
 
@@ -533,8 +699,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;
 
   /* 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 ();
 
 
   c->buffer->clear_output ();
 
@@ -549,8 +714,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
 
   hb_ot_hide_default_ignorables (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;
 
 
   c->buffer->props.direction = c->target_direction;
 
@@ -611,8 +775,6 @@ hb_ot_shape_glyphs_closure (hb_font_t          *font,
 {
   hb_ot_shape_plan_t plan;
 
 {
   hb_ot_shape_plan_t plan;
 
-  buffer->guess_segment_properties ();
-
   const char *shapers[] = {"ot", NULL};
   hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
                                                             features, num_features, shapers);
   const char *shapers[] = {"ot", NULL};
   hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
                                                             features, num_features, shapers);
@@ -620,8 +782,9 @@ hb_ot_shape_glyphs_closure (hb_font_t          *font,
   bool mirror = hb_script_get_horizontal_direction (buffer->props.script) == HB_DIRECTION_RTL;
 
   unsigned int count = buffer->len;
   bool mirror = hb_script_get_horizontal_direction (buffer->props.script) == HB_DIRECTION_RTL;
 
   unsigned int count = buffer->len;
+  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   for (unsigned int i = 0; i < count; i++)
-    add_char (font, buffer->unicode, mirror, buffer->info[i].codepoint, glyphs);
+    add_char (font, buffer->unicode, mirror, info[i].codepoint, glyphs);
 
   hb_set_t lookups;
   lookups.init ();
 
   hb_set_t lookups;
   lookups.init ();
diff --git a/src/hb-ot-shape.h b/src/hb-ot-shape.h
new file mode 100644 (file)
index 0000000..1402f54
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright © 2013  Red Hat, 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.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_H_IN
+#error "Include <hb-ot.h> instead."
+#endif
+
+#ifndef HB_OT_SHAPE_H
+#define HB_OT_SHAPE_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+/* TODO port to shape-plan / set. */
+void
+hb_ot_shape_glyphs_closure (hb_font_t          *font,
+                           hb_buffer_t        *buffer,
+                           const hb_feature_t *features,
+                           unsigned int        num_features,
+                           hb_set_t           *glyphs);
+
+void
+hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
+                                 hb_tag_t         table_tag,
+                                 hb_set_t        *lookup_indexes /* OUT */);
+
+HB_END_DECLS
+
+#endif /* HB_OT_SHAPE_H */
index 91ebec7..878dd79 100644 (file)
@@ -27,7 +27,6 @@
  */
 
 #include "hb-private.hh"
  */
 
 #include "hb-private.hh"
-#include "hb-ot.h"
 
 #include <string.h>
 
 
 #include <string.h>
 
@@ -58,7 +57,7 @@ hb_ot_old_tag_from_script (hb_script_t script)
   }
 
   /* Else, just change first char to lowercase and return */
   }
 
   /* Else, just change first char to lowercase and return */
-  return ((hb_tag_t) script) | 0x20000000;
+  return ((hb_tag_t) script) | 0x20000000u;
 }
 
 static hb_script_t
 }
 
 static hb_script_t
@@ -71,13 +70,13 @@ hb_ot_old_tag_to_script (hb_tag_t tag)
 
   /* Any spaces at the end of the tag are replaced by repeating the last
    * letter.  Eg 'nko ' -> 'Nkoo' */
 
   /* Any spaces at the end of the tag are replaced by repeating the last
    * letter.  Eg 'nko ' -> 'Nkoo' */
-  if (unlikely ((tag & 0x0000FF00) == 0x00002000))
-    tag |= (tag >> 8) & 0x0000FF00; /* Copy second letter to third */
-  if (unlikely ((tag & 0x000000FF) == 0x00000020))
-    tag |= (tag >> 8) & 0x000000FF; /* Copy third letter to fourth */
+  if (unlikely ((tag & 0x0000FF00u) == 0x00002000u))
+    tag |= (tag >> 8) & 0x0000FF00u; /* Copy second letter to third */
+  if (unlikely ((tag & 0x000000FFu) == 0x00000020u))
+    tag |= (tag >> 8) & 0x000000FFu; /* Copy third letter to fourth */
 
   /* Change first char to uppercase and return */
 
   /* Change first char to uppercase and return */
-  return (hb_script_t) (tag & ~0x20000000);
+  return (hb_script_t) (tag & ~0x20000000u);
 }
 
 static hb_tag_t
 }
 
 static hb_tag_t
@@ -147,7 +146,7 @@ hb_ot_tags_from_script (hb_script_t  script,
 hb_script_t
 hb_ot_tag_to_script (hb_tag_t tag)
 {
 hb_script_t
 hb_ot_tag_to_script (hb_tag_t tag)
 {
-  if (unlikely ((tag & 0x000000FF) == '2'))
+  if (unlikely ((tag & 0x000000FFu) == '2'))
     return hb_ot_new_tag_to_script (tag);
 
   return hb_ot_old_tag_to_script (tag);
     return hb_ot_new_tag_to_script (tag);
 
   return hb_ot_old_tag_to_script (tag);
@@ -157,7 +156,7 @@ hb_ot_tag_to_script (hb_tag_t tag)
 /* hb_language_t */
 
 typedef struct {
 /* hb_language_t */
 
 typedef struct {
-  char language[6];
+  char language[4];
   hb_tag_t tag;
 } LangTag;
 
   hb_tag_t tag;
 } LangTag;
 
@@ -167,9 +166,12 @@ typedef struct {
  *
  * Generated by intersecting the OpenType language tag list from
  * Draft OpenType 1.5 spec, with with the ISO 639-3 codes from
  *
  * Generated by intersecting the OpenType language tag list from
  * Draft OpenType 1.5 spec, with with the ISO 639-3 codes from
- * 2008/08/04, matching on name, and finally adjusted manually.
+ * 2008-08-04, matching on name, and finally adjusted manually.
  *
  *
- * Updated on 2012/12/07 with more research into remaining codes.
+ * Updated on 2012-12-07 with more research into remaining codes.
+ *
+ * Updated on 2013-11-23 based on usage in SIL and Microsoft fonts,
+ * the new proposal from Microsoft, and latest ISO 639-3 names.
  *
  * Some items still missing.  Those are commented out at the end.
  * Keep sorted for bsearch.
  *
  * Some items still missing.  Those are commented out at the end.
  * Keep sorted for bsearch.
@@ -179,57 +181,90 @@ static const LangTag ot_languages[] = {
   {"aa",       HB_TAG('A','F','R',' ')},       /* Afar */
   {"ab",       HB_TAG('A','B','K',' ')},       /* Abkhazian */
   {"abq",      HB_TAG('A','B','A',' ')},       /* Abaza */
   {"aa",       HB_TAG('A','F','R',' ')},       /* Afar */
   {"ab",       HB_TAG('A','B','K',' ')},       /* Abkhazian */
   {"abq",      HB_TAG('A','B','A',' ')},       /* Abaza */
+  {"ach",      HB_TAG('A','C','H',' ')},       /* Acoli */
   {"ada",      HB_TAG('D','N','G',' ')},       /* Dangme */
   {"ady",      HB_TAG('A','D','Y',' ')},       /* Adyghe */
   {"af",       HB_TAG('A','F','K',' ')},       /* Afrikaans */
   {"aii",      HB_TAG('S','W','A',' ')},       /* Swadaya Aramaic */
   {"ada",      HB_TAG('D','N','G',' ')},       /* Dangme */
   {"ady",      HB_TAG('A','D','Y',' ')},       /* Adyghe */
   {"af",       HB_TAG('A','F','K',' ')},       /* Afrikaans */
   {"aii",      HB_TAG('S','W','A',' ')},       /* Swadaya Aramaic */
+  {"aio",      HB_TAG('A','I','O',' ')},       /* Aiton */
   {"aiw",      HB_TAG('A','R','I',' ')},       /* Aari */
   {"aiw",      HB_TAG('A','R','I',' ')},       /* Aari */
+  {"ak",       HB_TAG('T','W','I',' ')},       /* Akan [macrolanguage] */
   {"alt",      HB_TAG('A','L','T',' ')},       /* [Southern] Altai */
   {"am",       HB_TAG('A','M','H',' ')},       /* Amharic */
   {"amf",      HB_TAG('H','B','N',' ')},       /* Hammer-Banna */
   {"alt",      HB_TAG('A','L','T',' ')},       /* [Southern] Altai */
   {"am",       HB_TAG('A','M','H',' ')},       /* Amharic */
   {"amf",      HB_TAG('H','B','N',' ')},       /* Hammer-Banna */
-  {"ar",       HB_TAG('A','R','A',' ')},       /* Arabic */
+  {"an",       HB_TAG('A','R','G',' ')},       /* Aragonese */
+  {"ang",      HB_TAG('A','N','G',' ')},       /* Old English (ca. 450-1100) */
+  {"ar",       HB_TAG('A','R','A',' ')},       /* Arabic [macrolanguage] */
+  {"arb",      HB_TAG('A','R','A',' ')},       /* Standard Arabic */
   {"arn",      HB_TAG('M','A','P',' ')},       /* Mapudungun */
   {"arn",      HB_TAG('M','A','P',' ')},       /* Mapudungun */
+  {"ary",      HB_TAG('M','O','R',' ')},       /* Moroccan Arabic */
   {"as",       HB_TAG('A','S','M',' ')},       /* Assamese */
   {"as",       HB_TAG('A','S','M',' ')},       /* Assamese */
+  {"ast",      HB_TAG('A','S','T',' ')},       /* Asturian/Asturleonese/Bable/Leonese */
   {"ath",      HB_TAG('A','T','H',' ')},       /* Athapaskan [family] */
   {"atv",      HB_TAG('A','L','T',' ')},       /* [Northern] Altai */
   {"av",       HB_TAG('A','V','R',' ')},       /* Avaric */
   {"awa",      HB_TAG('A','W','A',' ')},       /* Awadhi */
   {"ath",      HB_TAG('A','T','H',' ')},       /* Athapaskan [family] */
   {"atv",      HB_TAG('A','L','T',' ')},       /* [Northern] Altai */
   {"av",       HB_TAG('A','V','R',' ')},       /* Avaric */
   {"awa",      HB_TAG('A','W','A',' ')},       /* Awadhi */
-  {"ay",       HB_TAG('A','Y','M',' ')},       /* Aymara */
-  {"az",       HB_TAG('A','Z','E',' ')},       /* Azerbaijani */
+  {"ay",       HB_TAG('A','Y','M',' ')},       /* Aymara [macrolanguage] */
+  {"az",       HB_TAG('A','Z','E',' ')},       /* Azerbaijani [macrolanguage] */
+  {"azb",      HB_TAG('A','Z','B',' ')},       /* South Azerbaijani */
+  {"azj",      HB_TAG('A','Z','E',' ')},       /* North Azerbaijani */
   {"ba",       HB_TAG('B','S','H',' ')},       /* Bashkir */
   {"bai",      HB_TAG('B','M','L',' ')},       /* Bamileke [family] */
   {"ba",       HB_TAG('B','S','H',' ')},       /* Bashkir */
   {"bai",      HB_TAG('B','M','L',' ')},       /* Bamileke [family] */
-  {"bal",      HB_TAG('B','L','I',' ')},       /* Baluchi */
-  {"bci",      HB_TAG('B','A','U',' ')},       /* Baule */
+  {"bal",      HB_TAG('B','L','I',' ')},       /* Baluchi [macrolangauge] */
+  {"ban",      HB_TAG('B','A','N',' ')},       /* Balinese */
+  {"bar",      HB_TAG('B','A','R',' ')},       /* Bavarian */
+  {"bbc",      HB_TAG('B','B','C',' ')},       /* Batak Toba */
+  {"bci",      HB_TAG('B','A','U',' ')},       /* Baoulé */
+  {"bcl",      HB_TAG('B','I','K',' ')},       /* Central Bikol */
   {"bcq",      HB_TAG('B','C','H',' ')},       /* Bench */
   {"bcq",      HB_TAG('B','C','H',' ')},       /* Bench */
-  {"be",       HB_TAG('B','E','L',' ')},       /* Belarussian */
+  {"be",       HB_TAG('B','E','L',' ')},       /* Belarusian */
   {"bem",      HB_TAG('B','E','M',' ')},       /* Bemba (Zambia) */
   {"ber",      HB_TAG('B','E','R',' ')},       /* Berber [family] */
   {"bfq",      HB_TAG('B','A','D',' ')},       /* Badaga */
   {"bft",      HB_TAG('B','L','T',' ')},       /* Balti */
   {"bfy",      HB_TAG('B','A','G',' ')},       /* Baghelkhandi */
   {"bg",       HB_TAG('B','G','R',' ')},       /* Bulgarian */
   {"bem",      HB_TAG('B','E','M',' ')},       /* Bemba (Zambia) */
   {"ber",      HB_TAG('B','E','R',' ')},       /* Berber [family] */
   {"bfq",      HB_TAG('B','A','D',' ')},       /* Badaga */
   {"bft",      HB_TAG('B','L','T',' ')},       /* Balti */
   {"bfy",      HB_TAG('B','A','G',' ')},       /* Baghelkhandi */
   {"bg",       HB_TAG('B','G','R',' ')},       /* Bulgarian */
+  {"bgc",      HB_TAG('B','G','C',' ')},       /* Haryanvi */
+  {"bgq",      HB_TAG('B','G','Q',' ')},       /* Bagri */
   {"bhb",      HB_TAG('B','H','I',' ')},       /* Bhili */
   {"bhb",      HB_TAG('B','H','I',' ')},       /* Bhili */
+  {"bhk",      HB_TAG('B','I','K',' ')},       /* Albay Bicolano (retired code) */
   {"bho",      HB_TAG('B','H','O',' ')},       /* Bhojpuri */
   {"bho",      HB_TAG('B','H','O',' ')},       /* Bhojpuri */
-  {"bik",      HB_TAG('B','I','K',' ')},       /* Bikol */
+  {"bi",       HB_TAG('B','I','S',' ')},       /* Bislama */
+  {"bik",      HB_TAG('B','I','K',' ')},       /* Bikol [macrolanguage] */
   {"bin",      HB_TAG('E','D','O',' ')},       /* Bini */
   {"bin",      HB_TAG('E','D','O',' ')},       /* Bini */
+  {"bjj",      HB_TAG('B','J','J',' ')},       /* Kanauji */
   {"bjt",      HB_TAG('B','L','N',' ')},       /* Balanta-Ganja */
   {"bla",      HB_TAG('B','K','F',' ')},       /* Blackfoot */
   {"ble",      HB_TAG('B','L','N',' ')},       /* Balanta-Kentohe */
   {"bjt",      HB_TAG('B','L','N',' ')},       /* Balanta-Ganja */
   {"bla",      HB_TAG('B','K','F',' ')},       /* Blackfoot */
   {"ble",      HB_TAG('B','L','N',' ')},       /* Balanta-Kentohe */
+  {"blk",      HB_TAG('B','L','K',' ')},       /* Pa'O/Pa'o Karen */
+  {"bln",      HB_TAG('B','I','K',' ')},       /* Southern Catanduanes Bikol */
   {"bm",       HB_TAG('B','M','B',' ')},       /* Bambara */
   {"bn",       HB_TAG('B','E','N',' ')},       /* Bengali */
   {"bo",       HB_TAG('T','I','B',' ')},       /* Tibetan */
   {"bm",       HB_TAG('B','M','B',' ')},       /* Bambara */
   {"bn",       HB_TAG('B','E','N',' ')},       /* Bengali */
   {"bo",       HB_TAG('T','I','B',' ')},       /* Tibetan */
+  {"bpy",      HB_TAG('B','P','Y',' ')},       /* Bishnupriya */
+  {"bqi",      HB_TAG('L','R','C',' ')},       /* Bakhtiari */
   {"br",       HB_TAG('B','R','E',' ')},       /* Breton */
   {"bra",      HB_TAG('B','R','I',' ')},       /* Braj Bhasha */
   {"brh",      HB_TAG('B','R','H',' ')},       /* Brahui */
   {"br",       HB_TAG('B','R','E',' ')},       /* Breton */
   {"bra",      HB_TAG('B','R','I',' ')},       /* Braj Bhasha */
   {"brh",      HB_TAG('B','R','H',' ')},       /* Brahui */
+  {"brx",      HB_TAG('B','R','X',' ')},       /* Bodo (India) */
   {"bs",       HB_TAG('B','O','S',' ')},       /* Bosnian */
   {"btb",      HB_TAG('B','T','I',' ')},       /* Beti (Cameroon) */
   {"bs",       HB_TAG('B','O','S',' ')},       /* Bosnian */
   {"btb",      HB_TAG('B','T','I',' ')},       /* Beti (Cameroon) */
+  {"bto",      HB_TAG('B','I','K',' ')},       /* Rinconada Bikol */
+  {"bts",      HB_TAG('B','T','S',' ')},       /* Batak Simalungun */
+  {"bug",      HB_TAG('B','U','G',' ')},       /* Buginese */
   {"bxr",      HB_TAG('R','B','U',' ')},       /* Russian Buriat */
   {"byn",      HB_TAG('B','I','L',' ')},       /* Bilen */
   {"ca",       HB_TAG('C','A','T',' ')},       /* Catalan */
   {"bxr",      HB_TAG('R','B','U',' ')},       /* Russian Buriat */
   {"byn",      HB_TAG('B','I','L',' ')},       /* Bilen */
   {"ca",       HB_TAG('C','A','T',' ')},       /* Catalan */
+  {"cbk",      HB_TAG('C','B','K',' ')},       /* Chavacano */
   {"ce",       HB_TAG('C','H','E',' ')},       /* Chechen */
   {"ceb",      HB_TAG('C','E','B',' ')},       /* Cebuano */
   {"ce",       HB_TAG('C','H','E',' ')},       /* Chechen */
   {"ceb",      HB_TAG('C','E','B',' ')},       /* Cebuano */
+  {"cgg",      HB_TAG('C','G','G',' ')},       /* Chiga */
+  {"ch",       HB_TAG('C','H','A',' ')},       /* Chamorro */
+  {"cho",      HB_TAG('C','H','O',' ')},       /* Choctaw */
   {"chp",      HB_TAG('C','H','P',' ')},       /* Chipewyan */
   {"chr",      HB_TAG('C','H','R',' ')},       /* Cherokee */
   {"chp",      HB_TAG('C','H','P',' ')},       /* Chipewyan */
   {"chr",      HB_TAG('C','H','R',' ')},       /* Cherokee */
+  {"chy",      HB_TAG('C','H','Y',' ')},       /* Cheyenne */
+  {"ckb",      HB_TAG('K','U','R',' ')},       /* Central Kurdish (Sorani) */
   {"ckt",      HB_TAG('C','H','K',' ')},       /* Chukchi */
   {"cop",      HB_TAG('C','O','P',' ')},       /* Coptic */
   {"cr",       HB_TAG('C','R','E',' ')},       /* Cree */
   {"ckt",      HB_TAG('C','H','K',' ')},       /* Chukchi */
   {"cop",      HB_TAG('C','O','P',' ')},       /* Coptic */
   {"cr",       HB_TAG('C','R','E',' ')},       /* Cree */
@@ -239,6 +274,9 @@ static const LangTag ot_languages[] = {
   {"crm",      HB_TAG('M','C','R',' ')},       /* Moose Cree */
   {"crx",      HB_TAG('C','R','R',' ')},       /* Carrier */
   {"cs",       HB_TAG('C','S','Y',' ')},       /* Czech */
   {"crm",      HB_TAG('M','C','R',' ')},       /* Moose Cree */
   {"crx",      HB_TAG('C','R','R',' ')},       /* Carrier */
   {"cs",       HB_TAG('C','S','Y',' ')},       /* Czech */
+  {"csb",      HB_TAG('C','S','B',' ')},       /* Kashubian */
+  {"ctg",      HB_TAG('C','T','G',' ')},       /* Chittagonian */
+  {"cts",      HB_TAG('B','I','K',' ')},       /* Northern Catanduanes Bikol */
   {"cu",       HB_TAG('C','S','L',' ')},       /* Church Slavic */
   {"cv",       HB_TAG('C','H','U',' ')},       /* Chuvash */
   {"cwd",      HB_TAG('D','C','R',' ')},       /* Woods Cree */
   {"cu",       HB_TAG('C','S','L',' ')},       /* Church Slavic */
   {"cv",       HB_TAG('C','H','U',' ')},       /* Chuvash */
   {"cwd",      HB_TAG('D','C','R',' ')},       /* Woods Cree */
@@ -247,34 +285,42 @@ static const LangTag ot_languages[] = {
   {"dap",      HB_TAG('N','I','S',' ')},       /* Nisi (India) */
   {"dar",      HB_TAG('D','A','R',' ')},       /* Dargwa */
   {"de",       HB_TAG('D','E','U',' ')},       /* German */
   {"dap",      HB_TAG('N','I','S',' ')},       /* Nisi (India) */
   {"dar",      HB_TAG('D','A','R',' ')},       /* Dargwa */
   {"de",       HB_TAG('D','E','U',' ')},       /* German */
-  {"din",      HB_TAG('D','N','K',' ')},       /* Dinka */
-  {"dje",      HB_TAG('D','J','R',' ')},       /* Djerma */
+  {"dgo",      HB_TAG('D','G','O',' ')},       /* Dogri */
+  {"dhd",      HB_TAG('M','A','W',' ')},       /* Dhundari */
+  {"din",      HB_TAG('D','N','K',' ')},       /* Dinka [macrolanguage] */
+  {"diq",      HB_TAG('D','I','Q',' ')},       /* Dimli */
+  {"dje",      HB_TAG('D','J','R',' ')},       /* Zarma */
   {"dng",      HB_TAG('D','U','N',' ')},       /* Dungan */
   {"dng",      HB_TAG('D','U','N',' ')},       /* Dungan */
-  {"doi",      HB_TAG('D','G','R',' ')},       /* Dogri */
+  {"doi",      HB_TAG('D','G','R',' ')},       /* Dogri [macrolanguage] */
   {"dsb",      HB_TAG('L','S','B',' ')},       /* Lower Sorbian */
   {"dsb",      HB_TAG('L','S','B',' ')},       /* Lower Sorbian */
-  {"dv",       HB_TAG('D','I','V',' ')},       /* Dhivehi */
+  {"dv",       HB_TAG('D','I','V',' ')},       /* Dhivehi/Divehi/Maldivian */
   {"dyu",      HB_TAG('J','U','L',' ')},       /* Jula */
   {"dz",       HB_TAG('D','Z','N',' ')},       /* Dzongkha */
   {"ee",       HB_TAG('E','W','E',' ')},       /* Ewe */
   {"efi",      HB_TAG('E','F','I',' ')},       /* Efik */
   {"dyu",      HB_TAG('J','U','L',' ')},       /* Jula */
   {"dz",       HB_TAG('D','Z','N',' ')},       /* Dzongkha */
   {"ee",       HB_TAG('E','W','E',' ')},       /* Ewe */
   {"efi",      HB_TAG('E','F','I',' ')},       /* Efik */
+  {"ekk",      HB_TAG('E','T','I',' ')},       /* Standard Estonian */
   {"el",       HB_TAG('E','L','L',' ')},       /* Modern Greek (1453-) */
   {"el",       HB_TAG('E','L','L',' ')},       /* Modern Greek (1453-) */
+  {"emk",      HB_TAG('M','N','K',' ')},       /* Eastern Maninkakan */
   {"en",       HB_TAG('E','N','G',' ')},       /* English */
   {"eo",       HB_TAG('N','T','O',' ')},       /* Esperanto */
   {"eot",      HB_TAG('B','T','I',' ')},       /* Beti (Côte d'Ivoire) */
   {"es",       HB_TAG('E','S','P',' ')},       /* Spanish */
   {"en",       HB_TAG('E','N','G',' ')},       /* English */
   {"eo",       HB_TAG('N','T','O',' ')},       /* Esperanto */
   {"eot",      HB_TAG('B','T','I',' ')},       /* Beti (Côte d'Ivoire) */
   {"es",       HB_TAG('E','S','P',' ')},       /* Spanish */
-  {"et",       HB_TAG('E','T','I',' ')},       /* Estonian */
+  {"et",       HB_TAG('E','T','I',' ')},       /* Estonian [macrolanguage] */
   {"eu",       HB_TAG('E','U','Q',' ')},       /* Basque */
   {"eve",      HB_TAG('E','V','N',' ')},       /* Even */
   {"evn",      HB_TAG('E','V','K',' ')},       /* Evenki */
   {"eu",       HB_TAG('E','U','Q',' ')},       /* Basque */
   {"eve",      HB_TAG('E','V','N',' ')},       /* Even */
   {"evn",      HB_TAG('E','V','K',' ')},       /* Evenki */
-  {"fa",       HB_TAG('F','A','R',' ')},       /* Persian */
-  {"ff",       HB_TAG('F','U','L',' ')},       /* Fulah */
+  {"fa",       HB_TAG('F','A','R',' ')},       /* Persian [macrolanguage] */
+  {"ff",       HB_TAG('F','U','L',' ')},       /* Fulah [macrolanguage] */
   {"fi",       HB_TAG('F','I','N',' ')},       /* Finnish */
   {"fil",      HB_TAG('P','I','L',' ')},       /* Filipino */
   {"fj",       HB_TAG('F','J','I',' ')},       /* Fijian */
   {"fo",       HB_TAG('F','O','S',' ')},       /* Faroese */
   {"fon",      HB_TAG('F','O','N',' ')},       /* Fon */
   {"fr",       HB_TAG('F','R','A',' ')},       /* French */
   {"fi",       HB_TAG('F','I','N',' ')},       /* Finnish */
   {"fil",      HB_TAG('P','I','L',' ')},       /* Filipino */
   {"fj",       HB_TAG('F','J','I',' ')},       /* Fijian */
   {"fo",       HB_TAG('F','O','S',' ')},       /* Faroese */
   {"fon",      HB_TAG('F','O','N',' ')},       /* Fon */
   {"fr",       HB_TAG('F','R','A',' ')},       /* French */
+  {"frc",      HB_TAG('F','R','C',' ')},       /* Cajun French */
+  {"frp",      HB_TAG('F','R','P',' ')},       /* Arpitan/Francoprovençal */
   {"fur",      HB_TAG('F','R','L',' ')},       /* Friulian */
   {"fur",      HB_TAG('F','R','L',' ')},       /* Friulian */
+  {"fuv",      HB_TAG('F','U','V',' ')},       /* Nigerian Fulfulde */
   {"fy",       HB_TAG('F','R','I',' ')},       /* Western Frisian */
   {"ga",       HB_TAG('I','R','I',' ')},       /* Irish */
   {"gaa",      HB_TAG('G','A','D',' ')},       /* Ga */
   {"fy",       HB_TAG('F','R','I',' ')},       /* Western Frisian */
   {"ga",       HB_TAG('I','R','I',' ')},       /* Irish */
   {"gaa",      HB_TAG('G','A','D',' ')},       /* Ga */
@@ -282,113 +328,167 @@ static const LangTag ot_languages[] = {
   {"gbm",      HB_TAG('G','A','W',' ')},       /* Garhwali */
   {"gd",       HB_TAG('G','A','E',' ')},       /* Scottish Gaelic */
   {"gez",      HB_TAG('G','E','Z',' ')},       /* Ge'ez */
   {"gbm",      HB_TAG('G','A','W',' ')},       /* Garhwali */
   {"gd",       HB_TAG('G','A','E',' ')},       /* Scottish Gaelic */
   {"gez",      HB_TAG('G','E','Z',' ')},       /* Ge'ez */
+  {"ggo",      HB_TAG('G','O','N',' ')},       /* Southern Gondi */
   {"gl",       HB_TAG('G','A','L',' ')},       /* Galician */
   {"gld",      HB_TAG('N','A','N',' ')},       /* Nanai */
   {"gl",       HB_TAG('G','A','L',' ')},       /* Galician */
   {"gld",      HB_TAG('N','A','N',' ')},       /* Nanai */
-  {"gn",       HB_TAG('G','U','A',' ')},       /* Guarani */
-  {"gon",      HB_TAG('G','O','N',' ')},       /* Gondi */
+  {"glk",      HB_TAG('G','L','K',' ')},       /* Gilaki */
+  {"gn",       HB_TAG('G','U','A',' ')},       /* Guarani [macrolanguage] */
+  {"gno",      HB_TAG('G','O','N',' ')},       /* Northern Gondi */
+  {"gog",      HB_TAG('G','O','G',' ')},       /* Gogo */
+  {"gon",      HB_TAG('G','O','N',' ')},       /* Gondi [macrolanguage] */
   {"grt",      HB_TAG('G','R','O',' ')},       /* Garo */
   {"gru",      HB_TAG('S','O','G',' ')},       /* Sodo Gurage */
   {"gu",       HB_TAG('G','U','J',' ')},       /* Gujarati */
   {"grt",      HB_TAG('G','R','O',' ')},       /* Garo */
   {"gru",      HB_TAG('S','O','G',' ')},       /* Sodo Gurage */
   {"gu",       HB_TAG('G','U','J',' ')},       /* Gujarati */
+  {"guc",      HB_TAG('G','U','C',' ')},       /* Wayuu */
   {"guk",      HB_TAG('G','M','Z',' ')},       /* Gumuz */
   {"guk",      HB_TAG('G','M','Z',' ')},       /* Gumuz */
-  {"gv",       HB_TAG('M','N','X',' ')},       /* Manx Gaelic */
+/*{"guk",      HB_TAG('G','U','K',' ')},*/     /* Gumuz (in SIL fonts) */
+  {"guz",      HB_TAG('G','U','Z',' ')},       /* Ekegusii/Gusii */
+  {"gv",       HB_TAG('M','N','X',' ')},       /* Manx */
   {"ha",       HB_TAG('H','A','U',' ')},       /* Hausa */
   {"har",      HB_TAG('H','R','I',' ')},       /* Harari */
   {"ha",       HB_TAG('H','A','U',' ')},       /* Hausa */
   {"har",      HB_TAG('H','R','I',' ')},       /* Harari */
-  {"haw",      HB_TAG('H','A','W',' ')},       /* Hawaiin */
+  {"haw",      HB_TAG('H','A','W',' ')},       /* Hawaiian */
+  {"hay",      HB_TAG('H','A','Y',' ')},       /* Haya */
+  {"haz",      HB_TAG('H','A','Z',' ')},       /* Hazaragi */
   {"he",       HB_TAG('I','W','R',' ')},       /* Hebrew */
   {"he",       HB_TAG('I','W','R',' ')},       /* Hebrew */
+  {"hz",       HB_TAG('H','E','R',' ')},       /* Herero */
   {"hi",       HB_TAG('H','I','N',' ')},       /* Hindi */
   {"hil",      HB_TAG('H','I','L',' ')},       /* Hiligaynon */
   {"hnd",      HB_TAG('H','N','D',' ')},       /* [Southern] Hindko */
   {"hne",      HB_TAG('C','H','H',' ')},       /* Chattisgarhi */
   {"hno",      HB_TAG('H','N','D',' ')},       /* [Northern] Hindko */
   {"hi",       HB_TAG('H','I','N',' ')},       /* Hindi */
   {"hil",      HB_TAG('H','I','L',' ')},       /* Hiligaynon */
   {"hnd",      HB_TAG('H','N','D',' ')},       /* [Southern] Hindko */
   {"hne",      HB_TAG('C','H','H',' ')},       /* Chattisgarhi */
   {"hno",      HB_TAG('H','N','D',' ')},       /* [Northern] Hindko */
+  {"ho",       HB_TAG('H','M','O',' ')},       /* Hiri Motu */
   {"hoc",      HB_TAG('H','O',' ',' ')},       /* Ho */
   {"hoj",      HB_TAG('H','A','R',' ')},       /* Harauti */
   {"hr",       HB_TAG('H','R','V',' ')},       /* Croatian */
   {"hsb",      HB_TAG('U','S','B',' ')},       /* Upper Sorbian */
   {"hoc",      HB_TAG('H','O',' ',' ')},       /* Ho */
   {"hoj",      HB_TAG('H','A','R',' ')},       /* Harauti */
   {"hr",       HB_TAG('H','R','V',' ')},       /* Croatian */
   {"hsb",      HB_TAG('U','S','B',' ')},       /* Upper Sorbian */
-  {"ht",       HB_TAG('H','A','I',' ')},       /* Haitian */
+  {"ht",       HB_TAG('H','A','I',' ')},       /* Haitian/Haitian Creole */
   {"hu",       HB_TAG('H','U','N',' ')},       /* Hungarian */
   {"hy",       HB_TAG('H','Y','E',' ')},       /* Armenian */
   {"hu",       HB_TAG('H','U','N',' ')},       /* Hungarian */
   {"hy",       HB_TAG('H','Y','E',' ')},       /* Armenian */
+  {"hz",       HB_TAG('H','E','R',' ')},       /* Herero */
+  {"ia",       HB_TAG('I','N','A',' ')},       /* Interlingua (International Auxiliary Language Association) */
+  {"ibb",      HB_TAG('I','B','B',' ')},       /* Ibibio */
   {"id",       HB_TAG('I','N','D',' ')},       /* Indonesian */
   {"id",       HB_TAG('I','N','D',' ')},       /* Indonesian */
+  {"ie",       HB_TAG('I','L','E',' ')},       /* Interlingue/Occidental */
   {"ig",       HB_TAG('I','B','O',' ')},       /* Igbo */
   {"igb",      HB_TAG('E','B','I',' ')},       /* Ebira */
   {"ig",       HB_TAG('I','B','O',' ')},       /* Igbo */
   {"igb",      HB_TAG('E','B','I',' ')},       /* Ebira */
+  {"ijc",      HB_TAG('I','J','O',' ')},       /* Izon */
   {"ijo",      HB_TAG('I','J','O',' ')},       /* Ijo [family] */
   {"ijo",      HB_TAG('I','J','O',' ')},       /* Ijo [family] */
+  {"ik",       HB_TAG('I','P','K',' ')},       /* Inupiaq [macrolanguage] */
   {"ilo",      HB_TAG('I','L','O',' ')},       /* Ilokano */
   {"inh",      HB_TAG('I','N','G',' ')},       /* Ingush */
   {"ilo",      HB_TAG('I','L','O',' ')},       /* Ilokano */
   {"inh",      HB_TAG('I','N','G',' ')},       /* Ingush */
+  {"io",       HB_TAG('I','D','O',' ')},       /* Ido */
   {"is",       HB_TAG('I','S','L',' ')},       /* Icelandic */
   {"it",       HB_TAG('I','T','A',' ')},       /* Italian */
   {"is",       HB_TAG('I','S','L',' ')},       /* Icelandic */
   {"it",       HB_TAG('I','T','A',' ')},       /* Italian */
-  {"iu",       HB_TAG('I','N','U',' ')},       /* Inuktitut */
+  {"iu",       HB_TAG('I','N','U',' ')},       /* Inuktitut [macrolanguage] */
   {"ja",       HB_TAG('J','A','N',' ')},       /* Japanese */
   {"ja",       HB_TAG('J','A','N',' ')},       /* Japanese */
+  {"jam",      HB_TAG('J','A','M',' ')},       /* Jamaican Creole English */
+  {"jbo",      HB_TAG('J','B','O',' ')},       /* Lojban */
   {"jv",       HB_TAG('J','A','V',' ')},       /* Javanese */
   {"ka",       HB_TAG('K','A','T',' ')},       /* Georgian */
   {"kaa",      HB_TAG('K','R','K',' ')},       /* Karakalpak */
   {"jv",       HB_TAG('J','A','V',' ')},       /* Javanese */
   {"ka",       HB_TAG('K','A','T',' ')},       /* Georgian */
   {"kaa",      HB_TAG('K','R','K',' ')},       /* Karakalpak */
+  {"kab",      HB_TAG('K','A','B',' ')},       /* Kabyle */
   {"kam",      HB_TAG('K','M','B',' ')},       /* Kamba (Kenya) */
   {"kar",      HB_TAG('K','R','N',' ')},       /* Karen [family] */
   {"kbd",      HB_TAG('K','A','B',' ')},       /* Kabardian */
   {"kam",      HB_TAG('K','M','B',' ')},       /* Kamba (Kenya) */
   {"kar",      HB_TAG('K','R','N',' ')},       /* Karen [family] */
   {"kbd",      HB_TAG('K','A','B',' ')},       /* Kabardian */
+  {"kde",      HB_TAG('K','D','E',' ')},       /* Makonde */
   {"kdr",      HB_TAG('K','R','M',' ')},       /* Karaim */
   {"kdt",      HB_TAG('K','U','Y',' ')},       /* Kuy */
   {"kex",      HB_TAG('K','K','N',' ')},       /* Kokni */
   {"kfr",      HB_TAG('K','A','C',' ')},       /* Kachchi */
   {"kfy",      HB_TAG('K','M','N',' ')},       /* Kumaoni */
   {"kdr",      HB_TAG('K','R','M',' ')},       /* Karaim */
   {"kdt",      HB_TAG('K','U','Y',' ')},       /* Kuy */
   {"kex",      HB_TAG('K','K','N',' ')},       /* Kokni */
   {"kfr",      HB_TAG('K','A','C',' ')},       /* Kachchi */
   {"kfy",      HB_TAG('K','M','N',' ')},       /* Kumaoni */
+  {"kg",       HB_TAG('K','O','N',' ')},       /* Kongo [macrolanguage] */
   {"kha",      HB_TAG('K','S','I',' ')},       /* Khasi */
   {"kha",      HB_TAG('K','S','I',' ')},       /* Khasi */
-  {"khb",      HB_TAG('X','B','D',' ')},       /* Tai Lue */
+  {"khb",      HB_TAG('X','B','D',' ')},       /* Lü */
+  {"kht",      HB_TAG('K','H','N',' ')},       /* Khamti (Microsoft fonts) */
+/*{"kht",      HB_TAG('K','H','T',' ')},*/     /* Khamti (OpenType spec and SIL fonts) */
   {"khw",      HB_TAG('K','H','W',' ')},       /* Khowar */
   {"khw",      HB_TAG('K','H','W',' ')},       /* Khowar */
-  {"ki",       HB_TAG('K','I','K',' ')},       /* Kikuyu */
+  {"ki",       HB_TAG('K','I','K',' ')},       /* Gikuyu/Kikuyu */
+  {"kj",       HB_TAG('K','U','A',' ')},       /* Kuanyama/Kwanyama */
   {"kjh",      HB_TAG('K','H','A',' ')},       /* Khakass */
   {"kjh",      HB_TAG('K','H','A',' ')},       /* Khakass */
+  {"kjp",      HB_TAG('K','J','P',' ')},       /* Pwo Eastern Karen */
   {"kk",       HB_TAG('K','A','Z',' ')},       /* Kazakh */
   {"kl",       HB_TAG('G','R','N',' ')},       /* Kalaallisut */
   {"kln",      HB_TAG('K','A','L',' ')},       /* Kalenjin */
   {"km",       HB_TAG('K','H','M',' ')},       /* Central Khmer */
   {"kk",       HB_TAG('K','A','Z',' ')},       /* Kazakh */
   {"kl",       HB_TAG('G','R','N',' ')},       /* Kalaallisut */
   {"kln",      HB_TAG('K','A','L',' ')},       /* Kalenjin */
   {"km",       HB_TAG('K','H','M',' ')},       /* Central Khmer */
-  {"kmb",      HB_TAG('M','B','N',' ')},       /* [North] Mbundu */
+  {"kmb",      HB_TAG('M','B','N',' ')},       /* Kimbundu */
   {"kmw",      HB_TAG('K','M','O',' ')},       /* Komo (Democratic Republic of Congo) */
   {"kn",       HB_TAG('K','A','N',' ')},       /* Kannada */
   {"kmw",      HB_TAG('K','M','O',' ')},       /* Komo (Democratic Republic of Congo) */
   {"kn",       HB_TAG('K','A','N',' ')},       /* Kannada */
+  {"knn",      HB_TAG('K','O','K',' ')},       /* Konkani */
   {"ko",       HB_TAG('K','O','R',' ')},       /* Korean */
   {"koi",      HB_TAG('K','O','P',' ')},       /* Komi-Permyak */
   {"ko",       HB_TAG('K','O','R',' ')},       /* Korean */
   {"koi",      HB_TAG('K','O','P',' ')},       /* Komi-Permyak */
-  {"kok",      HB_TAG('K','O','K',' ')},       /* Konkani */
-  {"kpe",      HB_TAG('K','P','L',' ')},       /* Kpelle */
+  {"kok",      HB_TAG('K','O','K',' ')},       /* Konkani [macrolanguage] */
+  {"kpe",      HB_TAG('K','P','L',' ')},       /* Kpelle [macrolanguage] */
   {"kpv",      HB_TAG('K','O','Z',' ')},       /* Komi-Zyrian */
   {"kpy",      HB_TAG('K','Y','K',' ')},       /* Koryak */
   {"kqy",      HB_TAG('K','R','T',' ')},       /* Koorete */
   {"kpv",      HB_TAG('K','O','Z',' ')},       /* Komi-Zyrian */
   {"kpy",      HB_TAG('K','Y','K',' ')},       /* Koryak */
   {"kqy",      HB_TAG('K','R','T',' ')},       /* Koorete */
-  {"kr",       HB_TAG('K','N','R',' ')},       /* Kanuri */
+  {"kr",       HB_TAG('K','N','R',' ')},       /* Kanuri [macrolanguage] */
   {"kri",      HB_TAG('K','R','I',' ')},       /* Krio */
   {"krl",      HB_TAG('K','R','L',' ')},       /* Karelian */
   {"kru",      HB_TAG('K','U','U',' ')},       /* Kurukh */
   {"ks",       HB_TAG('K','S','H',' ')},       /* Kashmiri */
   {"kri",      HB_TAG('K','R','I',' ')},       /* Krio */
   {"krl",      HB_TAG('K','R','L',' ')},       /* Karelian */
   {"kru",      HB_TAG('K','U','U',' ')},       /* Kurukh */
   {"ks",       HB_TAG('K','S','H',' ')},       /* Kashmiri */
-  {"ku",       HB_TAG('K','U','R',' ')},       /* Kurdish */
+  {"ksh",      HB_TAG('K','S','H',' ')},       /* Kölsch */
+/*{"ksw",      HB_TAG('K','R','N',' ')},*/     /* S'gaw Karen (Microsoft fonts?) */
+  {"ksw",      HB_TAG('K','S','W',' ')},       /* S'gaw Karen (OpenType spec and SIL fonts) */
+  {"ku",       HB_TAG('K','U','R',' ')},       /* Kurdish [macrolanguage] */
   {"kum",      HB_TAG('K','U','M',' ')},       /* Kumyk */
   {"kum",      HB_TAG('K','U','M',' ')},       /* Kumyk */
+  {"kv",       HB_TAG('K','O','M',' ')},       /* Komi [macrolanguage] */
   {"kvd",      HB_TAG('K','U','I',' ')},       /* Kui (Indonesia) */
   {"kvd",      HB_TAG('K','U','I',' ')},       /* Kui (Indonesia) */
+  {"kw",       HB_TAG('C','O','R',' ')},       /* Cornish */
   {"kxc",      HB_TAG('K','M','S',' ')},       /* Komso */
   {"kxu",      HB_TAG('K','U','I',' ')},       /* Kui (India) */
   {"kxc",      HB_TAG('K','M','S',' ')},       /* Komso */
   {"kxu",      HB_TAG('K','U','I',' ')},       /* Kui (India) */
-  {"ky",       HB_TAG('K','I','R',' ')},       /* Kirghiz */
+  {"ky",       HB_TAG('K','I','R',' ')},       /* Kirghiz/Kyrgyz */
+  {"kyu",      HB_TAG('K','Y','U',' ')},       /* Western Kayah */
   {"la",       HB_TAG('L','A','T',' ')},       /* Latin */
   {"lad",      HB_TAG('J','U','D',' ')},       /* Ladino */
   {"lb",       HB_TAG('L','T','Z',' ')},       /* Luxembourgish */
   {"lbe",      HB_TAG('L','A','K',' ')},       /* Lak */
   {"lbj",      HB_TAG('L','D','K',' ')},       /* Ladakhi */
   {"lez",      HB_TAG('L','E','Z',' ')},       /* Lezgi */
   {"la",       HB_TAG('L','A','T',' ')},       /* Latin */
   {"lad",      HB_TAG('J','U','D',' ')},       /* Ladino */
   {"lb",       HB_TAG('L','T','Z',' ')},       /* Luxembourgish */
   {"lbe",      HB_TAG('L','A','K',' ')},       /* Lak */
   {"lbj",      HB_TAG('L','D','K',' ')},       /* Ladakhi */
   {"lez",      HB_TAG('L','E','Z',' ')},       /* Lezgi */
-  {"lg",       HB_TAG('L','U','G',' ')},       /* Luganda */
+  {"lg",       HB_TAG('L','U','G',' ')},       /* Ganda */
+  {"li",       HB_TAG('L','I','M',' ')},       /* Limburgan/Limburger/Limburgish */
   {"lif",      HB_TAG('L','M','B',' ')},       /* Limbu */
   {"lif",      HB_TAG('L','M','B',' ')},       /* Limbu */
+  {"lij",      HB_TAG('L','I','J',' ')},       /* Ligurian */
+  {"lis",      HB_TAG('L','I','S',' ')},       /* Lisu */
+  {"ljp",      HB_TAG('L','J','P',' ')},       /* Lampung Api */
+  {"lki",      HB_TAG('L','K','I',' ')},       /* Laki */
   {"lld",      HB_TAG('L','A','D',' ')},       /* Ladin */
   {"lmn",      HB_TAG('L','A','M',' ')},       /* Lambani */
   {"lld",      HB_TAG('L','A','D',' ')},       /* Ladin */
   {"lmn",      HB_TAG('L','A','M',' ')},       /* Lambani */
+  {"lmo",      HB_TAG('L','M','O',' ')},       /* Lombard */
   {"ln",       HB_TAG('L','I','N',' ')},       /* Lingala */
   {"lo",       HB_TAG('L','A','O',' ')},       /* Lao */
   {"ln",       HB_TAG('L','I','N',' ')},       /* Lingala */
   {"lo",       HB_TAG('L','A','O',' ')},       /* Lao */
+  {"lrc",      HB_TAG('L','R','C',' ')},       /* Northern Luri */
   {"lt",       HB_TAG('L','T','H',' ')},       /* Lithuanian */
   {"lu",       HB_TAG('L','U','B',' ')},       /* Luba-Katanga */
   {"lua",      HB_TAG('L','U','B',' ')},       /* Luba-Kasai */
   {"luo",      HB_TAG('L','U','O',' ')},       /* Luo (Kenya and Tanzania) */
   {"lus",      HB_TAG('M','I','Z',' ')},       /* Mizo */
   {"lt",       HB_TAG('L','T','H',' ')},       /* Lithuanian */
   {"lu",       HB_TAG('L','U','B',' ')},       /* Luba-Katanga */
   {"lua",      HB_TAG('L','U','B',' ')},       /* Luba-Kasai */
   {"luo",      HB_TAG('L','U','O',' ')},       /* Luo (Kenya and Tanzania) */
   {"lus",      HB_TAG('M','I','Z',' ')},       /* Mizo */
-  {"luy",      HB_TAG('L','U','H',' ')},       /* Luhya [macrolanguage] */
+  {"luy",      HB_TAG('L','U','H',' ')},       /* Luyia/Oluluyia [macrolanguage] */
+  {"luz",      HB_TAG('L','R','C',' ')},       /* Southern Luri */
   {"lv",       HB_TAG('L','V','I',' ')},       /* Latvian */
   {"lzz",      HB_TAG('L','A','Z',' ')},       /* Laz */
   {"lv",       HB_TAG('L','V','I',' ')},       /* Latvian */
   {"lzz",      HB_TAG('L','A','Z',' ')},       /* Laz */
+  {"mad",      HB_TAG('M','A','D',' ')},       /* Madurese */
+  {"mag",      HB_TAG('M','A','G',' ')},       /* Magahi */
   {"mai",      HB_TAG('M','T','H',' ')},       /* Maithili */
   {"mai",      HB_TAG('M','T','H',' ')},       /* Maithili */
+  {"mak",      HB_TAG('M','K','R',' ')},       /* Makasar */
+  {"man",      HB_TAG('M','N','K',' ')},       /* Manding/Mandingo [macrolanguage] */
   {"mdc",      HB_TAG('M','L','E',' ')},       /* Male (Papua New Guinea) */
   {"mdf",      HB_TAG('M','O','K',' ')},       /* Moksha */
   {"mdc",      HB_TAG('M','L','E',' ')},       /* Male (Papua New Guinea) */
   {"mdf",      HB_TAG('M','O','K',' ')},       /* Moksha */
+  {"mdr",      HB_TAG('M','D','R',' ')},       /* Mandar */
   {"mdy",      HB_TAG('M','L','E',' ')},       /* Male (Ethiopia) */
   {"men",      HB_TAG('M','D','E',' ')},       /* Mende (Sierra Leone) */
   {"mdy",      HB_TAG('M','L','E',' ')},       /* Male (Ethiopia) */
   {"men",      HB_TAG('M','D','E',' ')},       /* Mende (Sierra Leone) */
-  {"mg",       HB_TAG('M','L','G',' ')},       /* Malagasy */
+  {"mer",      HB_TAG('M','E','R',' ')},       /* Meru */
+  {"mfe",      HB_TAG('M','F','E',' ')},       /* Morisyen */
+  {"mg",       HB_TAG('M','L','G',' ')},       /* Malagasy [macrolanguage] */
+  {"mh",       HB_TAG('M','A','H',' ')},       /* Marshallese */
   {"mhr",      HB_TAG('L','M','A',' ')},       /* Low Mari */
   {"mi",       HB_TAG('M','R','I',' ')},       /* Maori */
   {"mhr",      HB_TAG('L','M','A',' ')},       /* Low Mari */
   {"mi",       HB_TAG('M','R','I',' ')},       /* Maori */
+  {"min",      HB_TAG('M','I','N',' ')},       /* Minangkabau */
   {"mk",       HB_TAG('M','K','D',' ')},       /* Macedonian */
   {"mk",       HB_TAG('M','K','D',' ')},       /* Macedonian */
+  {"mku",      HB_TAG('M','N','K',' ')},       /* Konyanka Maninka */
+  {"mkw",      HB_TAG('M','K','W',' ')},       /* Kituba (Congo) */
   {"ml",       HB_TAG('M','L','R',' ')},       /* Malayalam */
   {"ml",       HB_TAG('M','L','R',' ')},       /* Malayalam */
-  {"mn",       HB_TAG('M','N','G',' ')},       /* Mongolian */
+  {"mlq",      HB_TAG('M','N','K',' ')},       /* Western Maninkakan */
+  {"mn",       HB_TAG('M','N','G',' ')},       /* Mongolian [macrolanguage] */
   {"mnc",      HB_TAG('M','C','H',' ')},       /* Manchu */
   {"mni",      HB_TAG('M','N','I',' ')},       /* Manipuri */
   {"mnk",      HB_TAG('M','N','D',' ')},       /* Mandinka */
   {"mnc",      HB_TAG('M','C','H',' ')},       /* Manchu */
   {"mni",      HB_TAG('M','N','I',' ')},       /* Manipuri */
   {"mnk",      HB_TAG('M','N','D',' ')},       /* Mandinka */
@@ -396,72 +496,119 @@ static const LangTag ot_languages[] = {
   {"mnw",      HB_TAG('M','O','N',' ')},       /* Mon */
   {"mo",       HB_TAG('M','O','L',' ')},       /* Moldavian */
   {"moh",      HB_TAG('M','O','H',' ')},       /* Mohawk */
   {"mnw",      HB_TAG('M','O','N',' ')},       /* Mon */
   {"mo",       HB_TAG('M','O','L',' ')},       /* Moldavian */
   {"moh",      HB_TAG('M','O','H',' ')},       /* Mohawk */
+  {"mos",      HB_TAG('M','O','S',' ')},       /* Mossi */
   {"mpe",      HB_TAG('M','A','J',' ')},       /* Majang */
   {"mr",       HB_TAG('M','A','R',' ')},       /* Marathi */
   {"mrj",      HB_TAG('H','M','A',' ')},       /* High Mari */
   {"mpe",      HB_TAG('M','A','J',' ')},       /* Majang */
   {"mr",       HB_TAG('M','A','R',' ')},       /* Marathi */
   {"mrj",      HB_TAG('H','M','A',' ')},       /* High Mari */
-  {"ms",       HB_TAG('M','L','Y',' ')},       /* Malay */
+  {"ms",       HB_TAG('M','L','Y',' ')},       /* Malay [macrolanguage] */
+  {"msc",      HB_TAG('M','N','K',' ')},       /* Sankaran Maninka */
   {"mt",       HB_TAG('M','T','S',' ')},       /* Maltese */
   {"mt",       HB_TAG('M','T','S',' ')},       /* Maltese */
-  {"mwr",      HB_TAG('M','A','W',' ')},       /* Marwari */
+  {"mtr",      HB_TAG('M','A','W',' ')},       /* Mewari */
+  {"mus",      HB_TAG('M','U','S',' ')},       /* Creek */
+  {"mve",      HB_TAG('M','A','W',' ')},       /* Marwari (Pakistan) */
+  {"mwk",      HB_TAG('M','N','K',' ')},       /* Kita Maninkakan */
+  {"mwl",      HB_TAG('M','W','L',' ')},       /* Mirandese */
+  {"mwr",      HB_TAG('M','A','W',' ')},       /* Marwari [macrolanguage] */
+  {"mww",      HB_TAG('M','W','W',' ')},       /* Hmong Daw */
   {"my",       HB_TAG('B','R','M',' ')},       /* Burmese */
   {"mym",      HB_TAG('M','E','N',' ')},       /* Me'en */
   {"my",       HB_TAG('B','R','M',' ')},       /* Burmese */
   {"mym",      HB_TAG('M','E','N',' ')},       /* Me'en */
+  {"myq",      HB_TAG('M','N','K',' ')},       /* Forest Maninka (retired code) */
   {"myv",      HB_TAG('E','R','Z',' ')},       /* Erzya */
   {"myv",      HB_TAG('E','R','Z',' ')},       /* Erzya */
+  {"mzn",      HB_TAG('M','Z','N',' ')},       /* Mazanderani */
+  {"na",       HB_TAG('N','A','U',' ')},       /* Nauru */
   {"nag",      HB_TAG('N','A','G',' ')},       /* Naga-Assamese */
   {"nag",      HB_TAG('N','A','G',' ')},       /* Naga-Assamese */
+  {"nah",      HB_TAG('N','A','H',' ')},       /* Nahuatl [family] */
+  {"nap",      HB_TAG('N','A','P',' ')},       /* Neapolitan */
   {"nb",       HB_TAG('N','O','R',' ')},       /* Norwegian Bokmål */
   {"nco",      HB_TAG('S','I','B',' ')},       /* Sibe */
   {"nd",       HB_TAG('N','D','B',' ')},       /* [North] Ndebele */
   {"nb",       HB_TAG('N','O','R',' ')},       /* Norwegian Bokmål */
   {"nco",      HB_TAG('S','I','B',' ')},       /* Sibe */
   {"nd",       HB_TAG('N','D','B',' ')},       /* [North] Ndebele */
+  {"ndc",      HB_TAG('N','D','C',' ')},       /* Ndau */
+  {"nds",      HB_TAG('N','D','S',' ')},       /* Low German/Low Saxon */
   {"ne",       HB_TAG('N','E','P',' ')},       /* Nepali */
   {"new",      HB_TAG('N','E','W',' ')},       /* Newari */
   {"ng",       HB_TAG('N','D','G',' ')},       /* Ndonga */
   {"ne",       HB_TAG('N','E','P',' ')},       /* Nepali */
   {"new",      HB_TAG('N','E','W',' ')},       /* Newari */
   {"ng",       HB_TAG('N','D','G',' ')},       /* Ndonga */
+  {"nga",      HB_TAG('N','G','A',' ')},       /* Ngabaka */
   {"ngl",      HB_TAG('L','M','W',' ')},       /* Lomwe */
   {"niu",      HB_TAG('N','I','U',' ')},       /* Niuean */
   {"niv",      HB_TAG('G','I','L',' ')},       /* Gilyak */
   {"nl",       HB_TAG('N','L','D',' ')},       /* Dutch */
   {"nn",       HB_TAG('N','Y','N',' ')},       /* Norwegian Nynorsk */
   {"ngl",      HB_TAG('L','M','W',' ')},       /* Lomwe */
   {"niu",      HB_TAG('N','I','U',' ')},       /* Niuean */
   {"niv",      HB_TAG('G','I','L',' ')},       /* Gilyak */
   {"nl",       HB_TAG('N','L','D',' ')},       /* Dutch */
   {"nn",       HB_TAG('N','Y','N',' ')},       /* Norwegian Nynorsk */
-  {"no",       HB_TAG('N','O','R',' ')},       /* Norwegian (deprecated) */
-  {"nod",      HB_TAG('N','T','A',' ')},       /* Northern Tai */
+  {"no",       HB_TAG('N','O','R',' ')},       /* Norwegian [macrolanguage] */
+  {"nod",      HB_TAG('N','T','A',' ')},       /* Northern Thai */
+  {"noe",      HB_TAG('N','O','E',' ')},       /* Nimadi */
   {"nog",      HB_TAG('N','O','G',' ')},       /* Nogai */
   {"nog",      HB_TAG('N','O','G',' ')},       /* Nogai */
+  {"nov",      HB_TAG('N','O','V',' ')},       /* Novial */
   {"nqo",      HB_TAG('N','K','O',' ')},       /* N'Ko */
   {"nr",       HB_TAG('N','D','B',' ')},       /* [South] Ndebele */
   {"nsk",      HB_TAG('N','A','S',' ')},       /* Naskapi */
   {"nso",      HB_TAG('S','O','T',' ')},       /* [Northern] Sotho */
   {"nqo",      HB_TAG('N','K','O',' ')},       /* N'Ko */
   {"nr",       HB_TAG('N','D','B',' ')},       /* [South] Ndebele */
   {"nsk",      HB_TAG('N','A','S',' ')},       /* Naskapi */
   {"nso",      HB_TAG('S','O','T',' ')},       /* [Northern] Sotho */
-  {"ny",       HB_TAG('C','H','I',' ')},       /* Nyanja */
-  {"nyn",      HB_TAG('N','K','L',' ')},       /* Nkole */
+  {"ny",       HB_TAG('C','H','I',' ')},       /* Chewa/Chichwa/Nyanja */
+  {"nym",      HB_TAG('N','Y','M',' ')},       /* Nyamwezi */
+  {"nyn",      HB_TAG('N','K','L',' ')},       /* Nyankole */
   {"oc",       HB_TAG('O','C','I',' ')},       /* Occitan (post 1500) */
   {"oc",       HB_TAG('O','C','I',' ')},       /* Occitan (post 1500) */
-  {"oj",       HB_TAG('O','J','B',' ')},       /* Ojibwa */
+  {"oj",       HB_TAG('O','J','B',' ')},       /* Ojibwa [macrolanguage] */
   {"ojs",      HB_TAG('O','C','R',' ')},       /* Oji-Cree */
   {"ojs",      HB_TAG('O','C','R',' ')},       /* Oji-Cree */
-  {"om",       HB_TAG('O','R','O',' ')},       /* Oromo */
+  {"om",       HB_TAG('O','R','O',' ')},       /* Oromo [macrolanguage] */
   {"or",       HB_TAG('O','R','I',' ')},       /* Oriya */
   {"os",       HB_TAG('O','S','S',' ')},       /* Ossetian */
   {"pa",       HB_TAG('P','A','N',' ')},       /* Panjabi */
   {"or",       HB_TAG('O','R','I',' ')},       /* Oriya */
   {"os",       HB_TAG('O','S','S',' ')},       /* Ossetian */
   {"pa",       HB_TAG('P','A','N',' ')},       /* Panjabi */
+  {"pag",      HB_TAG('P','A','G',' ')},       /* Pangasinan */
+  {"pam",      HB_TAG('P','A','M',' ')},       /* Kapampangan/Pampanga */
+  {"pap",      HB_TAG('P','A','P',' ')},       /* Papiamento */
+  {"pcc",      HB_TAG('P','C','C',' ')},       /* Bouyei */
+  {"pcd",      HB_TAG('P','C','D',' ')},       /* Picard */
   {"pce",      HB_TAG('P','L','G',' ')},       /* [Ruching] Palaung */
   {"pce",      HB_TAG('P','L','G',' ')},       /* [Ruching] Palaung */
+  {"pdc",      HB_TAG('P','D','C',' ')},       /* Pennsylvania German */
+  {"pes",      HB_TAG('F','A','R',' ')},       /* Iranian Persian */
+  {"phk",      HB_TAG('P','H','K',' ')},       /* Phake */
   {"pi",       HB_TAG('P','A','L',' ')},       /* Pali */
   {"pi",       HB_TAG('P','A','L',' ')},       /* Pali */
+  {"pih",      HB_TAG('P','I','H',' ')},       /* Pitcairn-Norfolk */
   {"pl",       HB_TAG('P','L','K',' ')},       /* Polish */
   {"pll",      HB_TAG('P','L','G',' ')},       /* [Shwe] Palaung */
   {"plp",      HB_TAG('P','A','P',' ')},       /* Palpa */
   {"pl",       HB_TAG('P','L','K',' ')},       /* Polish */
   {"pll",      HB_TAG('P','L','G',' ')},       /* [Shwe] Palaung */
   {"plp",      HB_TAG('P','A','P',' ')},       /* Palpa */
-  {"prs",      HB_TAG('D','R','I',' ')},       /* Dari */
-  {"ps",       HB_TAG('P','A','S',' ')},       /* Pushto */
+  {"pms",      HB_TAG('P','M','S',' ')},       /* Piemontese */
+  {"pnb",      HB_TAG('P','N','B',' ')},       /* Western Panjabi */
+  {"prs",      HB_TAG('D','R','I',' ')},       /* Afghan Persian/Dari */
+  {"ps",       HB_TAG('P','A','S',' ')},       /* Pashto/Pushto [macrolanguage] */
   {"pt",       HB_TAG('P','T','G',' ')},       /* Portuguese */
   {"pt",       HB_TAG('P','T','G',' ')},       /* Portuguese */
-  {"raj",      HB_TAG('R','A','J',' ')},       /* Rajasthani */
-  {"rbb",      HB_TAG('P','L','G',' ')},       /* [Rumai] Palaung */
+  {"pwo",      HB_TAG('P','W','O',' ')},       /* Pwo Western Karen */
+  {"qu",       HB_TAG('Q','U','Z',' ')},       /* Quechua [macrolanguage] */
+  {"quc",      HB_TAG('Q','U','C',' ')},       /* K'iche'/Quiché */
+  {"quz",      HB_TAG('Q','U','Z',' ')},       /* Cusco Quechua */
+  {"raj",      HB_TAG('R','A','J',' ')},       /* Rajasthani [macrolanguage] */
+  {"rbb",      HB_TAG('P','L','G',' ')},       /* Rumai Palaung */
+  {"rej",      HB_TAG('R','E','J',' ')},       /* Rejang */
   {"ria",      HB_TAG('R','I','A',' ')},       /* Riang (India) */
   {"ril",      HB_TAG('R','I','A',' ')},       /* Riang (Myanmar) */
   {"ria",      HB_TAG('R','I','A',' ')},       /* Riang (India) */
   {"ril",      HB_TAG('R','I','A',' ')},       /* Riang (Myanmar) */
-  {"rki",      HB_TAG('A','R','K',' ')},       /* Arakanese */
-  {"rm",       HB_TAG('R','M','S',' ')},       /* Rhaeto-Romanic */
+  {"rki",      HB_TAG('A','R','K',' ')},       /* Rakhine */
+  {"rm",       HB_TAG('R','M','S',' ')},       /* Romansh */
+  {"rmy",      HB_TAG('R','M','Y',' ')},       /* Vlax Romani */
+  {"rn",       HB_TAG('R','U','N',' ')},       /* Rundi */
   {"ro",       HB_TAG('R','O','M',' ')},       /* Romanian */
   {"ro",       HB_TAG('R','O','M',' ')},       /* Romanian */
-  {"rom",      HB_TAG('R','O','Y',' ')},       /* Romany */
+  {"rom",      HB_TAG('R','O','Y',' ')},       /* Romany [macrolanguage] */
   {"ru",       HB_TAG('R','U','S',' ')},       /* Russian */
   {"rue",      HB_TAG('R','S','Y',' ')},       /* Rusyn */
   {"ru",       HB_TAG('R','U','S',' ')},       /* Russian */
   {"rue",      HB_TAG('R','S','Y',' ')},       /* Rusyn */
-  {"rw",       HB_TAG('R','U','A',' ')},       /* Ruanda */
+  {"rup",      HB_TAG('R','U','P',' ')},       /* Aromanian/Arumanian/Macedo-Romanian */
+  {"rw",       HB_TAG('R','U','A',' ')},       /* Kinyarwanda */
+  {"rwr",      HB_TAG('M','A','W',' ')},       /* Marwari (India) */
   {"sa",       HB_TAG('S','A','N',' ')},       /* Sanskrit */
   {"sah",      HB_TAG('Y','A','K',' ')},       /* Yakut */
   {"sa",       HB_TAG('S','A','N',' ')},       /* Sanskrit */
   {"sah",      HB_TAG('Y','A','K',' ')},       /* Yakut */
+  {"sas",      HB_TAG('S','A','S',' ')},       /* Sasak */
   {"sat",      HB_TAG('S','A','T',' ')},       /* Santali */
   {"sck",      HB_TAG('S','A','D',' ')},       /* Sadri */
   {"sat",      HB_TAG('S','A','T',' ')},       /* Santali */
   {"sck",      HB_TAG('S','A','D',' ')},       /* Sadri */
+  {"sc",       HB_TAG('S','R','D',' ')},       /* Sardinian [macrolanguage] */
+  {"scn",      HB_TAG('S','C','N',' ')},       /* Sicilian */
+  {"sco",      HB_TAG('S','C','O',' ')},       /* Scots */
   {"scs",      HB_TAG('S','L','A',' ')},       /* [North] Slavey */
   {"sd",       HB_TAG('S','N','D',' ')},       /* Sindhi */
   {"se",       HB_TAG('N','S','M',' ')},       /* Northern Sami */
   {"seh",      HB_TAG('S','N','A',' ')},       /* Sena */
   {"sel",      HB_TAG('S','E','L',' ')},       /* Selkup */
   {"sg",       HB_TAG('S','G','O',' ')},       /* Sango */
   {"scs",      HB_TAG('S','L','A',' ')},       /* [North] Slavey */
   {"sd",       HB_TAG('S','N','D',' ')},       /* Sindhi */
   {"se",       HB_TAG('N','S','M',' ')},       /* Northern Sami */
   {"seh",      HB_TAG('S','N','A',' ')},       /* Sena */
   {"sel",      HB_TAG('S','E','L',' ')},       /* Selkup */
   {"sg",       HB_TAG('S','G','O',' ')},       /* Sango */
+  {"sga",      HB_TAG('S','G','A',' ')},       /* Old Irish (to 900) */
+  {"sgs",      HB_TAG('S','G','S',' ')},       /* Samogitian */
+  {"sgw",      HB_TAG('C','H','G',' ')},       /* Sebat Bet Gurage */
+/*{"sgw",      HB_TAG('S','G','W',' ')},*/     /* Sebat Bet Gurage (in SIL fonts) */
   {"shn",      HB_TAG('S','H','N',' ')},       /* Shan */
   {"si",       HB_TAG('S','N','H',' ')},       /* Sinhala */
   {"sid",      HB_TAG('S','I','D',' ')},       /* Sidamo */
   {"shn",      HB_TAG('S','H','N',' ')},       /* Shan */
   {"si",       HB_TAG('S','N','H',' ')},       /* Sinhala */
   {"sid",      HB_TAG('S','I','D',' ')},       /* Sidamo */
@@ -474,60 +621,98 @@ static const LangTag ot_languages[] = {
   {"smj",      HB_TAG('L','S','M',' ')},       /* Lule Sami */
   {"smn",      HB_TAG('I','S','M',' ')},       /* Inari Sami */
   {"sms",      HB_TAG('S','K','S',' ')},       /* Skolt Sami */
   {"smj",      HB_TAG('L','S','M',' ')},       /* Lule Sami */
   {"smn",      HB_TAG('I','S','M',' ')},       /* Inari Sami */
   {"sms",      HB_TAG('S','K','S',' ')},       /* Skolt Sami */
+  {"sn",       HB_TAG('S','N','A',' ')},       /* Shona */
   {"snk",      HB_TAG('S','N','K',' ')},       /* Soninke */
   {"so",       HB_TAG('S','M','L',' ')},       /* Somali */
   {"snk",      HB_TAG('S','N','K',' ')},       /* Soninke */
   {"so",       HB_TAG('S','M','L',' ')},       /* Somali */
-  {"sq",       HB_TAG('S','Q','I',' ')},       /* Albanian */
+  {"sop",      HB_TAG('S','O','P',' ')},       /* Songe */
+  {"sq",       HB_TAG('S','Q','I',' ')},       /* Albanian [macrolanguage] */
   {"sr",       HB_TAG('S','R','B',' ')},       /* Serbian */
   {"srr",      HB_TAG('S','R','R',' ')},       /* Serer */
   {"sr",       HB_TAG('S','R','B',' ')},       /* Serbian */
   {"srr",      HB_TAG('S','R','R',' ')},       /* Serer */
-  {"ss",       HB_TAG('S','W','Z',' ')},       /* Swazi */
+  {"ss",       HB_TAG('S','W','Z',' ')},       /* Swati */
   {"st",       HB_TAG('S','O','T',' ')},       /* [Southern] Sotho */
   {"st",       HB_TAG('S','O','T',' ')},       /* [Southern] Sotho */
+  {"stq",      HB_TAG('S','T','Q',' ')},       /* Saterfriesisch */
+  {"stv",      HB_TAG('S','I','G',' ')},       /* Silt'e */
+  {"su",       HB_TAG('S','U','N',' ')},       /* Sundanese */
+  {"suk",      HB_TAG('S','U','K',' ')},       /* Sukama */
   {"suq",      HB_TAG('S','U','R',' ')},       /* Suri */
   {"sv",       HB_TAG('S','V','E',' ')},       /* Swedish */
   {"sva",      HB_TAG('S','V','A',' ')},       /* Svan */
   {"suq",      HB_TAG('S','U','R',' ')},       /* Suri */
   {"sv",       HB_TAG('S','V','E',' ')},       /* Swedish */
   {"sva",      HB_TAG('S','V','A',' ')},       /* Svan */
-  {"sw",       HB_TAG('S','W','K',' ')},       /* Swahili */
+  {"sw",       HB_TAG('S','W','K',' ')},       /* Swahili [macrolanguage] */
   {"swb",      HB_TAG('C','M','R',' ')},       /* Comorian */
   {"swb",      HB_TAG('C','M','R',' ')},       /* Comorian */
-  {"syr",      HB_TAG('S','Y','R',' ')},       /* Syriac */
+  {"swh",      HB_TAG('S','W','K',' ')},       /* Kiswahili/Swahili */
+  {"swv",      HB_TAG('M','A','W',' ')},       /* Shekhawati */
+  {"sxu",      HB_TAG('S','X','U',' ')},       /* Upper Saxon */
+  {"syl",      HB_TAG('S','Y','L',' ')},       /* Sylheti */
+  {"syr",      HB_TAG('S','Y','R',' ')},       /* Syriac [macrolanguage] */
+  {"szl",      HB_TAG('S','Z','L',' ')},       /* Silesian */
   {"ta",       HB_TAG('T','A','M',' ')},       /* Tamil */
   {"tab",      HB_TAG('T','A','B',' ')},       /* Tabasaran */
   {"tcy",      HB_TAG('T','U','L',' ')},       /* Tulu */
   {"ta",       HB_TAG('T','A','M',' ')},       /* Tamil */
   {"tab",      HB_TAG('T','A','B',' ')},       /* Tabasaran */
   {"tcy",      HB_TAG('T','U','L',' ')},       /* Tulu */
+  {"tdd",      HB_TAG('T','D','D',' ')},       /* Tai Nüa */
   {"te",       HB_TAG('T','E','L',' ')},       /* Telugu */
   {"tem",      HB_TAG('T','M','N',' ')},       /* Temne */
   {"te",       HB_TAG('T','E','L',' ')},       /* Telugu */
   {"tem",      HB_TAG('T','M','N',' ')},       /* Temne */
+  {"tet",      HB_TAG('T','E','T',' ')},       /* Tetum */
   {"tg",       HB_TAG('T','A','J',' ')},       /* Tajik */
   {"th",       HB_TAG('T','H','A',' ')},       /* Thai */
   {"ti",       HB_TAG('T','G','Y',' ')},       /* Tigrinya */
   {"tig",      HB_TAG('T','G','R',' ')},       /* Tigre */
   {"tg",       HB_TAG('T','A','J',' ')},       /* Tajik */
   {"th",       HB_TAG('T','H','A',' ')},       /* Thai */
   {"ti",       HB_TAG('T','G','Y',' ')},       /* Tigrinya */
   {"tig",      HB_TAG('T','G','R',' ')},       /* Tigre */
+  {"tiv",      HB_TAG('T','I','V',' ')},       /* Tiv */
   {"tk",       HB_TAG('T','K','M',' ')},       /* Turkmen */
   {"tk",       HB_TAG('T','K','M',' ')},       /* Turkmen */
+  {"tl",       HB_TAG('T','G','L',' ')},       /* Tagalog */
+  {"tmh",      HB_TAG('t','m','h',' ')},       /* Tamashek [macrolanguage] */
   {"tn",       HB_TAG('T','N','A',' ')},       /* Tswana */
   {"to",       HB_TAG('T','G','N',' ')},       /* Tonga (Tonga Islands) */
   {"tn",       HB_TAG('T','N','A',' ')},       /* Tswana */
   {"to",       HB_TAG('T','G','N',' ')},       /* Tonga (Tonga Islands) */
+  {"tpi",      HB_TAG('T','P','I',' ')},       /* Tok Pisin */
   {"tr",       HB_TAG('T','R','K',' ')},       /* Turkish */
   {"tru",      HB_TAG('T','U','A',' ')},       /* Turoyo Aramaic */
   {"ts",       HB_TAG('T','S','G',' ')},       /* Tsonga */
   {"tt",       HB_TAG('T','A','T',' ')},       /* Tatar */
   {"tr",       HB_TAG('T','R','K',' ')},       /* Turkish */
   {"tru",      HB_TAG('T','U','A',' ')},       /* Turoyo Aramaic */
   {"ts",       HB_TAG('T','S','G',' ')},       /* Tsonga */
   {"tt",       HB_TAG('T','A','T',' ')},       /* Tatar */
+  {"tum",      HB_TAG('T','U','M',' ')},       /* Tumbuka */
   {"tw",       HB_TAG('T','W','I',' ')},       /* Twi */
   {"ty",       HB_TAG('T','H','T',' ')},       /* Tahitian */
   {"tyv",      HB_TAG('T','U','V',' ')},       /* Tuvin */
   {"tw",       HB_TAG('T','W','I',' ')},       /* Twi */
   {"ty",       HB_TAG('T','H','T',' ')},       /* Tahitian */
   {"tyv",      HB_TAG('T','U','V',' ')},       /* Tuvin */
+  {"tyz",      HB_TAG('T','Y','Z',' ')},       /* Tày */
+  {"tzm",      HB_TAG('T','Z','M',' ')},       /* Central Atlas Tamazight */
   {"udm",      HB_TAG('U','D','M',' ')},       /* Udmurt */
   {"ug",       HB_TAG('U','Y','G',' ')},       /* Uighur */
   {"uk",       HB_TAG('U','K','R',' ')},       /* Ukrainian */
   {"udm",      HB_TAG('U','D','M',' ')},       /* Udmurt */
   {"ug",       HB_TAG('U','Y','G',' ')},       /* Uighur */
   {"uk",       HB_TAG('U','K','R',' ')},       /* Ukrainian */
-  {"umb",      HB_TAG('M','B','N',' ')},       /* [South] Mbundu */
+  {"umb",      HB_TAG('U','M','B',' ')},       /* Umbundu */
   {"unr",      HB_TAG('M','U','N',' ')},       /* Mundari */
   {"ur",       HB_TAG('U','R','D',' ')},       /* Urdu */
   {"unr",      HB_TAG('M','U','N',' ')},       /* Mundari */
   {"ur",       HB_TAG('U','R','D',' ')},       /* Urdu */
-  {"uz",       HB_TAG('U','Z','B',' ')},       /* Uzbek */
+  {"uz",       HB_TAG('U','Z','B',' ')},       /* Uzbek [macrolanguage] */
+  {"uzn",      HB_TAG('U','Z','B',' ')},       /* Northern Uzbek */
+  {"uzs",      HB_TAG('U','Z','B',' ')},       /* Southern Uzbek */
   {"ve",       HB_TAG('V','E','N',' ')},       /* Venda */
   {"ve",       HB_TAG('V','E','N',' ')},       /* Venda */
+  {"vec",      HB_TAG('V','E','C',' ')},       /* Venetian */
+  {"vls",      HB_TAG('F','L','E',' ')},       /* Vlaams */
   {"vi",       HB_TAG('V','I','T',' ')},       /* Vietnamese */
   {"vi",       HB_TAG('V','I','T',' ')},       /* Vietnamese */
-  {"vmw",      HB_TAG('M','A','K',' ')},       /* Makua */
+  {"vmw",      HB_TAG('M','A','K',' ')},       /* Makhuwa */
+  {"vo",       HB_TAG('V','O','L',' ')},       /* Volapük */
+  {"vro",      HB_TAG('V','R','O',' ')},       /* Võro */
+  {"wa",       HB_TAG('W','L','N',' ')},       /* Walloon */
+  {"war",      HB_TAG('W','A','R',' ')},       /* Waray (Philippines) */
   {"wbm",      HB_TAG('W','A',' ',' ')},       /* Wa */
   {"wbr",      HB_TAG('W','A','G',' ')},       /* Wagdi */
   {"wbm",      HB_TAG('W','A',' ',' ')},       /* Wa */
   {"wbr",      HB_TAG('W','A','G',' ')},       /* Wagdi */
+  {"wle",      HB_TAG('S','I','G',' ')},       /* Wolane */
+  {"wry",      HB_TAG('M','A','W',' ')},       /* Merwari */
+  {"wtm",      HB_TAG('W','T','M',' ')},       /* Mewati */
   {"wo",       HB_TAG('W','L','F',' ')},       /* Wolof */
   {"xal",      HB_TAG('K','L','M',' ')},       /* Kalmyk */
   {"xh",       HB_TAG('X','H','S',' ')},       /* Xhosa */
   {"wo",       HB_TAG('W','L','F',' ')},       /* Wolof */
   {"xal",      HB_TAG('K','L','M',' ')},       /* Kalmyk */
   {"xh",       HB_TAG('X','H','S',' ')},       /* Xhosa */
+  {"xog",      HB_TAG('X','O','G',' ')},       /* Soga */
   {"xom",      HB_TAG('K','M','O',' ')},       /* Komo (Sudan) */
   {"xsl",      HB_TAG('S','S','L',' ')},       /* South Slavey */
   {"xom",      HB_TAG('K','M','O',' ')},       /* Komo (Sudan) */
   {"xsl",      HB_TAG('S','S','L',' ')},       /* South Slavey */
-  {"yi",       HB_TAG('J','I','I',' ')},       /* Yiddish */
+  {"xst",      HB_TAG('S','I','G',' ')},       /* Silt'e (retired code) */
+  {"xwo",      HB_TAG('T','O','D',' ')},       /* Written Oirat (Todo) */
+  {"yao",      HB_TAG('Y','A','O',' ')},       /* Yao */
+  {"yi",       HB_TAG('J','I','I',' ')},       /* Yiddish [macrolanguage] */
   {"yo",       HB_TAG('Y','B','A',' ')},       /* Yoruba */
   {"yso",      HB_TAG('N','I','S',' ')},       /* Nisi (China) */
   {"yo",       HB_TAG('Y','B','A',' ')},       /* Yoruba */
   {"yso",      HB_TAG('N','I','S',' ')},       /* Nisi (China) */
+  {"za",       HB_TAG('Z','H','A',' ')},       /* Chuang/Zhuang [macrolanguage] */
+  {"zea",      HB_TAG('Z','E','A',' ')},       /* Zeeuws */
   {"zne",      HB_TAG('Z','N','D',' ')},       /* Zande */
   {"zne",      HB_TAG('Z','N','D',' ')},       /* Zande */
-  {"zu",       HB_TAG('Z','U','L',' ')}        /* Zulu */
+  {"zu",       HB_TAG('Z','U','L',' ')},       /* Zulu */
+  {"zum",      HB_TAG('L','R','C',' ')}        /* Kumzari */
 
   /* The corresponding languages IDs for the following IDs are unclear,
    * overlap, or are architecturally weird. Needs more research. */
 
   /* The corresponding languages IDs for the following IDs are unclear,
    * overlap, or are architecturally weird. Needs more research. */
@@ -536,13 +721,13 @@ static const LangTag ot_languages[] = {
 /*{"gsw?/gsw-FR?",     HB_TAG('A','L','S',' ')},*/     /* Alsatian */
 /*{"krc",      HB_TAG('B','A','L',' ')},*/     /* Balkar */
 /*{"??",       HB_TAG('B','C','R',' ')},*/     /* Bible Cree */
 /*{"gsw?/gsw-FR?",     HB_TAG('A','L','S',' ')},*/     /* Alsatian */
 /*{"krc",      HB_TAG('B','A','L',' ')},*/     /* Balkar */
 /*{"??",       HB_TAG('B','C','R',' ')},*/     /* Bible Cree */
-/*{"sgw?",     HB_TAG('C','H','G',' ')},*/     /* Chaha Gurage */
+/*{"zh?",      HB_TAG('C','H','N',' ')},*/     /* Chinese (seen in Microsoft fonts) */
 /*{"acf/gcf?", HB_TAG('F','A','N',' ')},*/     /* French Antillean */
 /*{"acf/gcf?", HB_TAG('F','A','N',' ')},*/     /* French Antillean */
-/*{"vls/nl-be",        HB_TAG('F','L','E',' ')},*/     /* Flemish */
 /*{"enf?/yrk?",        HB_TAG('F','N','E',' ')},*/     /* Forest Nenets */
 /*{"fuf?",     HB_TAG('F','T','A',' ')},*/     /* Futa */
 /*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/     /* Garshuni */
 /*{"cfm/rnl?", HB_TAG('H','A','L',' ')},*/     /* Halam */
 /*{"enf?/yrk?",        HB_TAG('F','N','E',' ')},*/     /* Forest Nenets */
 /*{"fuf?",     HB_TAG('F','T','A',' ')},*/     /* Futa */
 /*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/     /* Garshuni */
 /*{"cfm/rnl?", HB_TAG('H','A','L',' ')},*/     /* Halam */
+/*{"fonipa",   HB_TAG('I','P','P','H')},*/     /* Phonetic transcription—IPA conventions */
 /*{"ga-Latg?/Latg?",   HB_TAG('I','R','T',' ')},*/     /* Irish Traditional */
 /*{"krc",      HB_TAG('K','A','R',' ')},*/     /* Karachay */
 /*{"alw?/ktb?",        HB_TAG('K','E','B',' ')},*/     /* Kebena */
 /*{"ga-Latg?/Latg?",   HB_TAG('I','R','T',' ')},*/     /* Irish Traditional */
 /*{"krc",      HB_TAG('K','A','R',' ')},*/     /* Karachay */
 /*{"alw?/ktb?",        HB_TAG('K','E','B',' ')},*/     /* Kebena */
@@ -559,8 +744,6 @@ static const LangTag ot_languages[] = {
 /*{"??",       HB_TAG('L','C','R',' ')},*/     /* L-Cree */
 /*{"??",       HB_TAG('M','A','L',' ')},*/     /* Malayalam Traditional */
 /*{"mnk?/mlq?/...",    HB_TAG('M','L','N',' ')},*/     /* Malinke */
 /*{"??",       HB_TAG('L','C','R',' ')},*/     /* L-Cree */
 /*{"??",       HB_TAG('M','A','L',' ')},*/     /* Malayalam Traditional */
 /*{"mnk?/mlq?/...",    HB_TAG('M','L','N',' ')},*/     /* Malinke */
-/*{"man?/myq?/mku?/msc?/...",  HB_TAG('M','N','K',' ')},*/     /* Maninka */
-/*{"??",       HB_TAG('M','O','R',' ')},*/     /* Moroccan */
 /*{"??",       HB_TAG('N','C','R',' ')},*/     /* N-Cree */
 /*{"??",       HB_TAG('N','H','C',' ')},*/     /* Norway House Cree */
 /*{"jpa?/sam?",        HB_TAG('P','A','A',' ')},*/     /* Palestinian Aramaic */
 /*{"??",       HB_TAG('N','C','R',' ')},*/     /* N-Cree */
 /*{"??",       HB_TAG('N','H','C',' ')},*/     /* Norway House Cree */
 /*{"jpa?/sam?",        HB_TAG('P','A','A',' ')},*/     /* Palestinian Aramaic */
@@ -569,25 +752,29 @@ static const LangTag ot_languages[] = {
 /*{"??",       HB_TAG('R','C','R',' ')},*/     /* R-Cree */
 /*{"chp?",     HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
 /*{"xan?",     HB_TAG('S','E','K',' ')},*/     /* Sekota */
 /*{"??",       HB_TAG('R','C','R',' ')},*/     /* R-Cree */
 /*{"chp?",     HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
 /*{"xan?",     HB_TAG('S','E','K',' ')},*/     /* Sekota */
-/*{"stv/wle?/xst?",    HB_TAG('S','I','G',' ')},*/     /* Silte Gurage */
 /*{"ngo?",     HB_TAG('S','X','T',' ')},*/     /* Sutu */
 /*{"??",       HB_TAG('T','C','R',' ')},*/     /* TH-Cree */
 /*{"tnz?/tog?/toi?",   HB_TAG('T','N','G',' ')},*/     /* Tonga */
 /*{"enh?/yrk?",        HB_TAG('T','N','E',' ')},*/     /* Tundra Nenets */
 /*{"ngo?",     HB_TAG('S','X','T',' ')},*/     /* Sutu */
 /*{"??",       HB_TAG('T','C','R',' ')},*/     /* TH-Cree */
 /*{"tnz?/tog?/toi?",   HB_TAG('T','N','G',' ')},*/     /* Tonga */
 /*{"enh?/yrk?",        HB_TAG('T','N','E',' ')},*/     /* Tundra Nenets */
-/*{"??",       HB_TAG('T','O','D',' ')},*/     /* Todo */
 /*{"??",       HB_TAG('W','C','R',' ')},*/     /* West-Cree */
 /*{"??",       HB_TAG('W','C','R',' ')},*/     /* West-Cree */
-/*{"??",       HB_TAG('Y','C','R',' ')},*/     /* Y-Cree */
+/*{"cre?",     HB_TAG('Y','C','R',' ')},*/     /* Y-Cree */
 /*{"??",       HB_TAG('Y','I','C',' ')},*/     /* Yi Classic */
 /*{"ii?/Yiii?",        HB_TAG('Y','I','M',' ')},*/     /* Yi Modern */
 /*{"??",       HB_TAG('Z','H','P',' ')},*/     /* Chinese Phonetic */
 };
 
 /*{"??",       HB_TAG('Y','I','C',' ')},*/     /* Yi Classic */
 /*{"ii?/Yiii?",        HB_TAG('Y','I','M',' ')},*/     /* Yi Modern */
 /*{"??",       HB_TAG('Z','H','P',' ')},*/     /* Chinese Phonetic */
 };
 
-static const LangTag ot_languages_zh[] = {
+typedef struct {
+  char language[8];
+  hb_tag_t tag;
+} LangTagLong;
+static const LangTagLong ot_languages_zh[] = {
   {"zh-cn",    HB_TAG('Z','H','S',' ')},       /* Chinese (China) */
   {"zh-hk",    HB_TAG('Z','H','H',' ')},       /* Chinese (Hong Kong) */
   {"zh-mo",    HB_TAG('Z','H','T',' ')},       /* Chinese (Macao) */
   {"zh-sg",    HB_TAG('Z','H','S',' ')},       /* Chinese (Singapore) */
   {"zh-cn",    HB_TAG('Z','H','S',' ')},       /* Chinese (China) */
   {"zh-hk",    HB_TAG('Z','H','H',' ')},       /* Chinese (Hong Kong) */
   {"zh-mo",    HB_TAG('Z','H','T',' ')},       /* Chinese (Macao) */
   {"zh-sg",    HB_TAG('Z','H','S',' ')},       /* Chinese (Singapore) */
-  {"zh-tw",    HB_TAG('Z','H','T',' ')}        /* Chinese (Taiwan) */
+  {"zh-tw",    HB_TAG('Z','H','T',' ')},       /* Chinese (Taiwan) */
+  {"zh-hans",  HB_TAG('Z','H','S',' ')},       /* Chinese (Simplified) */
+  {"zh-hant",  HB_TAG('Z','H','T',' ')},       /* Chinese (Traditional) */
 };
 
 static int
 };
 
 static int
@@ -619,7 +806,6 @@ hb_tag_t
 hb_ot_tag_from_language (hb_language_t language)
 {
   const char *lang_str, *s;
 hb_ot_tag_from_language (hb_language_t language)
 {
   const char *lang_str, *s;
-  const LangTag *lang_tag;
 
   if (language == HB_LANGUAGE_INVALID)
     return HB_OT_TAG_DEFAULT_LANGUAGE;
 
   if (language == HB_LANGUAGE_INVALID)
     return HB_OT_TAG_DEFAULT_LANGUAGE;
@@ -641,11 +827,14 @@ hb_ot_tag_from_language (hb_language_t language)
   }
 
   /* Find a language matching in the first component */
   }
 
   /* Find a language matching in the first component */
-  lang_tag = (LangTag *) bsearch (lang_str, ot_languages,
-                                 ARRAY_LENGTH (ot_languages), sizeof (LangTag),
-                                 (hb_compare_func_t) lang_compare_first_component);
-  if (lang_tag)
-    return lang_tag->tag;
+  {
+    const LangTag *lang_tag;
+    lang_tag = (LangTag *) bsearch (lang_str, ot_languages,
+                                   ARRAY_LENGTH (ot_languages), sizeof (LangTag),
+                                   (hb_compare_func_t) lang_compare_first_component);
+    if (lang_tag)
+      return lang_tag->tag;
+  }
 
   /* Otherwise, check the Chinese ones */
   if (0 == lang_compare_first_component (lang_str, "zh"))
 
   /* Otherwise, check the Chinese ones */
   if (0 == lang_compare_first_component (lang_str, "zh"))
@@ -654,8 +843,9 @@ hb_ot_tag_from_language (hb_language_t language)
 
     for (i = 0; i < ARRAY_LENGTH (ot_languages_zh); i++)
     {
 
     for (i = 0; i < ARRAY_LENGTH (ot_languages_zh); i++)
     {
+      const LangTagLong *lang_tag;
       lang_tag = &ot_languages_zh[i];
       lang_tag = &ot_languages_zh[i];
-      if (lang_matches (lang_tag->language, lang_str))
+      if (lang_matches (lang_str, lang_tag->language))
        return lang_tag->tag;
     }
 
        return lang_tag->tag;
     }
 
@@ -668,7 +858,7 @@ hb_ot_tag_from_language (hb_language_t language)
     s = lang_str + strlen (lang_str);
   if (s - lang_str == 3) {
     /* Assume it's ISO-639-3 and upper-case and use it. */
     s = lang_str + strlen (lang_str);
   if (s - lang_str == 3) {
     /* Assume it's ISO-639-3 and upper-case and use it. */
-    return hb_tag_from_string (lang_str, s - lang_str) & ~0x20202000;
+    return hb_tag_from_string (lang_str, s - lang_str) & ~0x20202000u;
   }
 
   return HB_OT_TAG_DEFAULT_LANGUAGE;
   }
 
   return HB_OT_TAG_DEFAULT_LANGUAGE;
@@ -687,21 +877,12 @@ hb_ot_tag_to_language (hb_tag_t tag)
       return hb_language_from_string (ot_languages[i].language, -1);
 
   /* If tag starts with ZH, it's Chinese */
       return hb_language_from_string (ot_languages[i].language, -1);
 
   /* If tag starts with ZH, it's Chinese */
-  if ((tag & 0xFFFF0000)  == 0x5A480000) {
+  if ((tag & 0xFFFF0000u)  == 0x5A480000u) {
     switch (tag) {
       case HB_TAG('Z','H','H',' '): return hb_language_from_string ("zh-hk", -1); /* Hong Kong */
     switch (tag) {
       case HB_TAG('Z','H','H',' '): return hb_language_from_string ("zh-hk", -1); /* Hong Kong */
-      default: {
-        /* Encode the tag... */
-       unsigned char buf[14] = "zh-x-hbot";
-       buf[9] = tag >> 24;
-       buf[10] = (tag >> 16) & 0xFF;
-       buf[11] = (tag >> 8) & 0xFF;
-       buf[12] = tag & 0xFF;
-       if (buf[12] == 0x20)
-         buf[12] = '\0';
-       buf[13] = '\0';
-       return hb_language_from_string ((char *) buf, -1);
-      }
+      case HB_TAG('Z','H','S',' '): return hb_language_from_string ("zh-Hans", -1); /* Simplified */
+      case HB_TAG('Z','H','T',' '): return hb_language_from_string ("zh-Hant", -1); /* Traditional */
+      default: break; /* Fall through */
     }
   }
 
     }
   }
 
index 8073906..47c92a5 100644 (file)
 
 #include "hb.h"
 
 
 #include "hb.h"
 
+#include "hb-ot-font.h"
 #include "hb-ot-layout.h"
 #include "hb-ot-tag.h"
 #include "hb-ot-layout.h"
 #include "hb-ot-tag.h"
+#include "hb-ot-shape.h"
 
 HB_BEGIN_DECLS
 
 
 HB_BEGIN_DECLS
 
-/* TODO remove */
-void
-hb_ot_shape_glyphs_closure (hb_font_t          *font,
-                           hb_buffer_t        *buffer,
-                           const hb_feature_t *features,
-                           unsigned int        num_features,
-                           hb_set_t           *glyphs);
-
 HB_END_DECLS
 
 #undef HB_OT_H_IN
 HB_END_DECLS
 
 #undef HB_OT_H_IN
index be0d505..80fd6c4 100644 (file)
 #include <stdarg.h>
 
 
 #include <stdarg.h>
 
 
+/* Compiler attributes */
 
 
-/* Essentials */
 
 
-#ifndef NULL
-# define NULL ((void *) 0)
+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+#define _HB_BOOLEAN_EXPR(expr) ((expr) ? 1 : 0)
+#define likely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
+#define unlikely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
+#else
+#define likely(expr) (expr)
+#define unlikely(expr) (expr)
 #endif
 
 #endif
 
+#ifndef __GNUC__
+#undef __attribute__
+#define __attribute__(x)
+#endif
 
 
-/* Void! */
-struct _hb_void_t {};
-typedef const _hb_void_t &hb_void_t;
-#define HB_VOID (* (const _hb_void_t *) NULL)
+#if __GNUC__ >= 3
+#define HB_PURE_FUNC   __attribute__((pure))
+#define HB_CONST_FUNC  __attribute__((const))
+#define HB_PRINTF_FUNC(format_idx, arg_idx) __attribute__((__format__ (__printf__, format_idx, arg_idx)))
+#else
+#define HB_PURE_FUNC
+#define HB_CONST_FUNC
+#define HB_PRINTF_FUNC(format_idx, arg_idx)
+#endif
+#if __GNUC__ >= 4
+#define HB_UNUSED      __attribute__((unused))
+#else
+#define HB_UNUSED
+#endif
+
+#ifndef HB_INTERNAL
+# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+#  define HB_INTERNAL __attribute__((__visibility__("hidden")))
+# else
+#  define HB_INTERNAL
+# endif
+#endif
+
+#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
+#define snprintf _snprintf
+/* Windows CE only has _strdup, while rest of Windows has both. */
+#define strdup _strdup
+#endif
+
+#ifdef _MSC_VER
+#undef inline
+#define inline __inline
+#endif
+
+#ifdef __STRICT_ANSI__
+#undef inline
+#define inline __inline__
+#endif
+
+#if __GNUC__ >= 3
+#define HB_FUNC __PRETTY_FUNCTION__
+#elif defined(_MSC_VER)
+#define HB_FUNC __FUNCSIG__
+#else
+#define HB_FUNC __func__
+#endif
 
 
+#if defined(_WIN32) || defined(__CYGWIN__)
+   /* We need Windows Vista for both Uniscribe backend and for
+    * MemoryBarrier.  We don't support compiling on Windows XP,
+    * though we run on it fine. */
+#  if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
+#    undef _WIN32_WINNT
+#  endif
+#  ifndef _WIN32_WINNT
+#    define _WIN32_WINNT 0x0600
+#  endif
+#  define WIN32_LEAN_AND_MEAN
+#  define STRICT
+#endif
+
+#ifdef _WIN32_WCE
+/* Some things not defined on Windows CE. */
+#define MemoryBarrier()
+#define getenv(Name) NULL
+#define setlocale(Category, Locale) "C"
+static int errno = 0; /* Use something better? */
+#endif
+
+#if HAVE_ATEXIT
+/* atexit() is only safe to be called from shared libraries on certain
+ * platforms.  Whitelist.
+ * https://bugs.freedesktop.org/show_bug.cgi?id=82246 */
+#  if defined(__linux) && defined(__GLIBC_PREREQ)
+#    if __GLIBC_PREREQ(2,3)
+/* From atexit() manpage, it's safe with glibc 2.2.3 on Linux. */
+#      define HB_USE_ATEXIT 1
+#    endif
+#  elif defined(_MSC_VER) || defined(__MINGW32__)
+/* For MSVC:
+ * http://msdn.microsoft.com/en-ca/library/tze57ck3.aspx
+ * http://msdn.microsoft.com/en-ca/library/zk17ww08.aspx
+ * mingw32 headers say atexit is safe to use in shared libraries.
+ */
+#    define HB_USE_ATEXIT 1
+#  elif defined(__ANDROID__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+/* This was fixed in Android NKD r8 or r8b:
+ * https://code.google.com/p/android/issues/detail?id=6455
+ * which introduced GCC 4.6:
+ * https://developer.android.com/tools/sdk/ndk/index.html
+ */
+#    define HB_USE_ATEXIT 1
+#  endif
+#endif
 
 /* Basics */
 
 
 
 /* Basics */
 
 
+#ifndef NULL
+# define NULL ((void *) 0)
+#endif
+
 #undef MIN
 template <typename Type>
 static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
 #undef MIN
 template <typename Type>
 static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
@@ -79,6 +181,9 @@ static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
 template <typename Type>
 static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; }
 
 template <typename Type>
 static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; }
 
+static inline unsigned int DIV_CEIL (const unsigned int a, unsigned int b)
+{ return (a + (b - 1)) / b; }
+
 
 #undef  ARRAY_LENGTH
 template <typename Type, unsigned int n>
 
 #undef  ARRAY_LENGTH
 template <typename Type, unsigned int n>
@@ -89,7 +194,7 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
 #define HB_STMT_START do
 #define HB_STMT_END   while (0)
 
 #define HB_STMT_START do
 #define HB_STMT_END   while (0)
 
-#define _ASSERT_STATIC1(_line, _cond)  typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _ASSERT_STATIC1(_line, _cond)  HB_UNUSED typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
 #define _ASSERT_STATIC0(_line, _cond)  _ASSERT_STATIC1 (_line, (_cond))
 #define ASSERT_STATIC(_cond)           _ASSERT_STATIC0 (__LINE__, (_cond))
 
 #define _ASSERT_STATIC0(_line, _cond)  _ASSERT_STATIC1 (_line, (_cond))
 #define ASSERT_STATIC(_cond)           _ASSERT_STATIC0 (__LINE__, (_cond))
 
@@ -136,7 +241,7 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
 
 /* Check _assertion in a method environment */
 #define _ASSERT_POD1(_line) \
 
 /* Check _assertion in a method environment */
 #define _ASSERT_POD1(_line) \
-       inline void _static_assertion_on_line_##_line (void) const \
+       HB_UNUSED inline void _static_assertion_on_line_##_line (void) const \
        { _ASSERT_INSTANCE_POD1 (_line, *this); /* Make sure it's POD. */ }
 # define _ASSERT_POD0(_line)   _ASSERT_POD1 (_line)
 # define ASSERT_POD()          _ASSERT_POD0 (__LINE__)
        { _ASSERT_INSTANCE_POD1 (_line, *this); /* Make sure it's POD. */ }
 # define _ASSERT_POD0(_line)   _ASSERT_POD1 (_line)
 # define ASSERT_POD()          _ASSERT_POD0 (__LINE__)
@@ -145,68 +250,10 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
 
 /* Misc */
 
 
 /* Misc */
 
-
-#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-#define _HB_BOOLEAN_EXPR(expr) ((expr) ? 1 : 0)
-#define likely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
-#define unlikely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
-#else
-#define likely(expr) (expr)
-#define unlikely(expr) (expr)
-#endif
-
-#ifndef __GNUC__
-#undef __attribute__
-#define __attribute__(x)
-#endif
-
-#if __GNUC__ >= 3
-#define HB_PURE_FUNC   __attribute__((pure))
-#define HB_CONST_FUNC  __attribute__((const))
-#define HB_PRINTF_FUNC(format_idx, arg_idx) __attribute__((__format__ (__printf__, format_idx, arg_idx)))
-#else
-#define HB_PURE_FUNC
-#define HB_CONST_FUNC
-#define HB_PRINTF_FUNC(format_idx, arg_idx)
-#endif
-#if __GNUC__ >= 4
-#define HB_UNUSED      __attribute__((unused))
-#else
-#define HB_UNUSED
-#endif
-
-#ifndef HB_INTERNAL
-# ifndef __MINGW32__
-#  define HB_INTERNAL __attribute__((__visibility__("hidden")))
-# else
-#  define HB_INTERNAL
-# endif
-#endif
-
-
-#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
-#define snprintf _snprintf
-#endif
-
-#ifdef _MSC_VER
-#undef inline
-#define inline __inline
-#endif
-
-#ifdef __STRICT_ANSI__
-#undef inline
-#define inline __inline__
-#endif
-
-
-#if __GNUC__ >= 3
-#define HB_FUNC __PRETTY_FUNCTION__
-#elif defined(_MSC_VER)
-#define HB_FUNC __FUNCSIG__
-#else
-#define HB_FUNC __func__
-#endif
-
+/* Void! */
+struct _hb_void_t {};
+typedef const _hb_void_t &hb_void_t;
+#define HB_VOID (* (const _hb_void_t *) NULL)
 
 /* Return the number of 1 bits in mask. */
 static inline HB_CONST_FUNC unsigned int
 
 /* Return the number of 1 bits in mask. */
 static inline HB_CONST_FUNC unsigned int
@@ -216,7 +263,7 @@ _hb_popcount32 (uint32_t mask)
   return __builtin_popcount (mask);
 #else
   /* "HACKMEM 169" */
   return __builtin_popcount (mask);
 #else
   /* "HACKMEM 169" */
-  register uint32_t y;
+  uint32_t y;
   y = (mask >> 1) &033333333333;
   y = mask - y - ((y >>1) & 033333333333);
   return (((y + (y >> 3)) & 030707070707) % 077);
   y = (mask >> 1) &033333333333;
   y = mask - y - ((y >>1) & 033333333333);
   return (((y + (y >> 3)) & 030707070707) % 077);
@@ -230,7 +277,7 @@ _hb_bit_storage (unsigned int number)
 #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
   return likely (number) ? (sizeof (unsigned int) * 8 - __builtin_clz (number)) : 0;
 #else
 #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
   return likely (number) ? (sizeof (unsigned int) * 8 - __builtin_clz (number)) : 0;
 #else
-  register unsigned int n_bits = 0;
+  unsigned int n_bits = 0;
   while (number) {
     n_bits++;
     number >>= 1;
   while (number) {
     n_bits++;
     number >>= 1;
@@ -246,7 +293,7 @@ _hb_ctz (unsigned int number)
 #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
   return likely (number) ? __builtin_ctz (number) : 0;
 #else
 #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
   return likely (number) ? __builtin_ctz (number) : 0;
 #else
-  register unsigned int n_bits = 0;
+  unsigned int n_bits = 0;
   if (unlikely (!number)) return 0;
   while (!(number & 1)) {
     n_bits++;
   if (unlikely (!number)) return 0;
   while (!(number & 1)) {
     n_bits++;
@@ -272,8 +319,8 @@ typedef int (*hb_compare_func_t) (const void *, const void *);
 /* arrays and maps */
 
 
 /* arrays and maps */
 
 
-#define HB_PREALLOCED_ARRAY_INIT {0}
-template <typename Type, unsigned int StaticSize>
+#define HB_PREALLOCED_ARRAY_INIT {0, 0, NULL}
+template <typename Type, unsigned int StaticSize=16>
 struct hb_prealloced_array_t
 {
   unsigned int len;
 struct hb_prealloced_array_t
 {
   unsigned int len;
@@ -321,14 +368,22 @@ struct hb_prealloced_array_t
   inline void pop (void)
   {
     len--;
   inline void pop (void)
   {
     len--;
-    /* TODO: shrink array if needed */
+  }
+
+  inline void remove (unsigned int i)
+  {
+     if (unlikely (i >= len))
+       return;
+     memmove (static_cast<void *> (&array[i]),
+             static_cast<void *> (&array[i + 1]),
+             (len - i - 1) * sizeof (Type));
+     len--;
   }
 
   inline void shrink (unsigned int l)
   {
      if (l < len)
        len = l;
   }
 
   inline void shrink (unsigned int l)
   {
      if (l < len)
        len = l;
-    /* TODO: shrink array if needed */
   }
 
   template <typename T>
   }
 
   template <typename T>
@@ -346,14 +401,14 @@ struct hb_prealloced_array_t
     return NULL;
   }
 
     return NULL;
   }
 
-  inline void sort (void)
+  inline void qsort (void)
   {
   {
-    qsort (array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
+    ::qsort (array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
   }
 
   }
 
-  inline void sort (unsigned int start, unsigned int end)
+  inline void qsort (unsigned int start, unsigned int end)
   {
   {
-    qsort (array + start, end - start, sizeof (Type), (hb_compare_func_t) Type::cmp);
+    ::qsort (array + start, end - start, sizeof (Type), (hb_compare_func_t) Type::cmp);
   }
 
   template <typename T>
   }
 
   template <typename T>
@@ -376,6 +431,13 @@ struct hb_prealloced_array_t
   }
 };
 
   }
 };
 
+template <typename Type>
+struct hb_auto_array_t : hb_prealloced_array_t <Type>
+{
+  hb_auto_array_t (void) { hb_prealloced_array_t<Type>::init (); }
+  ~hb_auto_array_t (void) { hb_prealloced_array_t<Type>::finish (); }
+};
+
 
 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT}
 template <typename item_t, typename lock_t>
 
 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT}
 template <typename item_t, typename lock_t>
@@ -509,17 +571,19 @@ static inline uint32_t hb_uint32_swap (const uint32_t v)
 #define hb_be_uint32_get(v)    (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
 #define hb_be_uint32_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
 
 #define hb_be_uint32_get(v)    (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
 #define hb_be_uint32_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
 
-#define hb_be_uint24_put(v,V)  HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v[2] (V); } HB_STMT_END
+#define hb_be_uint24_put(v,V)  HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v[2] (V); } HB_STMT_END
 #define hb_be_uint24_get(v)    (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2])
 #define hb_be_uint24_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2])
 
 
 /* ASCII tag/character handling */
 
 #define hb_be_uint24_get(v)    (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2])
 #define hb_be_uint24_eq(a,b)   (a[0] == b[0] && a[1] == b[1] && a[2] == b[2])
 
 
 /* ASCII tag/character handling */
 
-static inline unsigned char ISALPHA (unsigned char c)
+static inline bool ISALPHA (unsigned char c)
 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
-static inline unsigned char ISALNUM (unsigned char c)
+static inline bool ISALNUM (unsigned char c)
 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'); }
 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'); }
+static inline bool ISSPACE (unsigned char c)
+{ return c == ' ' || c =='\f'|| c =='\n'|| c =='\r'|| c =='\t'|| c =='\v'; }
 static inline unsigned char TOUPPER (unsigned char c)
 { return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; }
 static inline unsigned char TOLOWER (unsigned char c)
 static inline unsigned char TOUPPER (unsigned char c)
 { return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; }
 static inline unsigned char TOLOWER (unsigned char c)
@@ -553,8 +617,8 @@ _hb_debug (unsigned int level,
   return level < max_level;
 }
 
   return level < max_level;
 }
 
-#define DEBUG_LEVEL(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
-#define DEBUG(WHAT) (DEBUG_LEVEL (WHAT, 0))
+#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
+#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))
 
 template <int max_level> static inline void
 _hb_debug_msg_va (const char *what,
 
 template <int max_level> static inline void
 _hb_debug_msg_va (const char *what,
@@ -564,6 +628,15 @@ _hb_debug_msg_va (const char *what,
                  unsigned int level,
                  int level_dir,
                  const char *message,
                  unsigned int level,
                  int level_dir,
                  const char *message,
+                 va_list ap) HB_PRINTF_FUNC(7, 0);
+template <int max_level> static inline void
+_hb_debug_msg_va (const char *what,
+                 const void *obj,
+                 const char *func,
+                 bool indented,
+                 unsigned int level,
+                 int level_dir,
+                 const char *message,
                  va_list ap)
 {
   if (!_hb_debug (level, max_level))
                  va_list ap)
 {
   if (!_hb_debug (level, max_level))
@@ -585,7 +658,7 @@ _hb_debug_msg_va (const char *what,
 #define ULBAR  "\342\225\257"  /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */
 #define LBAR   "\342\225\264"  /* U+2574 BOX DRAWINGS LIGHT LEFT */
     static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR;
 #define ULBAR  "\342\225\257"  /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */
 #define LBAR   "\342\225\264"  /* U+2574 BOX DRAWINGS LIGHT LEFT */
     static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR;
-    fprintf (stderr, "%2d %s" VRBAR "%s",
+    fprintf (stderr, "%2u %s" VRBAR "%s",
             level,
             bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsigned int) (sizeof (VBAR) - 1) * level),
             level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR);
             level,
             bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsigned int) (sizeof (VBAR) - 1) * level),
             level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR);
@@ -594,6 +667,8 @@ _hb_debug_msg_va (const char *what,
 
   if (func)
   {
 
   if (func)
   {
+    unsigned int func_len = strlen (func);
+#ifndef HB_DEBUG_VERBOSE
     /* Skip "typename" */
     if (0 == strncmp (func, "typename ", 9))
       func += 9;
     /* Skip "typename" */
     if (0 == strncmp (func, "typename ", 9))
       func += 9;
@@ -603,7 +678,9 @@ _hb_debug_msg_va (const char *what,
       func = space + 1;
     /* Skip parameter list */
     const char *paren = strchr (func, '(');
       func = space + 1;
     /* Skip parameter list */
     const char *paren = strchr (func, '(');
-    unsigned int func_len = paren ? paren - func : strlen (func);
+    if (paren)
+      func_len = paren - func;
+#endif
     fprintf (stderr, "%.*s: ", func_len, func);
   }
 
     fprintf (stderr, "%.*s: ", func_len, func);
   }
 
@@ -700,7 +777,7 @@ static inline void _hb_warn_no_return (bool returned)
   }
 }
 template <>
   }
 }
 template <>
-inline void _hb_warn_no_return<hb_void_t> (bool returned HB_UNUSED)
+/*static*/ inline void _hb_warn_no_return<hb_void_t> (bool returned HB_UNUSED)
 {}
 
 template <int max_level, typename ret_t>
 {}
 
 template <int max_level, typename ret_t>
@@ -766,20 +843,31 @@ struct hb_auto_trace_t<0, ret_t> {
 
 /* Misc */
 
 
 /* Misc */
 
+template <typename T> class hb_assert_unsigned_t;
+template <> class hb_assert_unsigned_t<unsigned char> {};
+template <> class hb_assert_unsigned_t<unsigned short> {};
+template <> class hb_assert_unsigned_t<unsigned int> {};
+template <> class hb_assert_unsigned_t<unsigned long> {};
 
 
-/* Pre-mature optimization:
- * Checks for lo <= u <= hi but with an optimization if lo and hi
- * are only different in a contiguous set of lower-most bits.
- */
 template <typename T> static inline bool
 hb_in_range (T u, T lo, T hi)
 {
 template <typename T> static inline bool
 hb_in_range (T u, T lo, T hi)
 {
-  if ( ((lo^hi) & lo) == 0 &&
-       ((lo^hi) & hi) == (lo^hi) &&
-       ((lo^hi) & ((lo^hi) + 1)) == 0 )
-    return (u & ~(lo^hi)) == lo;
-  else
-    return lo <= u && u <= hi;
+  /* The sizeof() is here to force template instantiation.
+   * I'm sure there are better ways to do this but can't think of
+   * one right now.  Declaring a variable won't work as HB_UNUSED
+   * is unsable on some platforms and unused types are less likely
+   * to generate a warning than unused variables. */
+  ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0);
+
+  /* The casts below are important as if T is smaller than int,
+   * the subtract results will become a signed int! */
+  return (T)(u - lo) <= (T)(hi - lo);
+}
+
+template <typename T> static inline bool
+hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2)
+{
+  return hb_in_range (u, lo1, hi1) || hb_in_range (u, lo2, hi2);
 }
 
 template <typename T> static inline bool
 }
 
 template <typename T> static inline bool
@@ -841,8 +929,9 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
 {
   /* Pain because we don't know whether s is nul-terminated. */
   char buf[64];
 {
   /* Pain because we don't know whether s is nul-terminated. */
   char buf[64];
-  strncpy (buf, s, MIN (ARRAY_LENGTH (buf) - 1, len));
-  buf[MIN (ARRAY_LENGTH (buf) - 1, len)] = '\0';
+  len = MIN (ARRAY_LENGTH (buf) - 1, len);
+  strncpy (buf, s, len);
+  buf[len] = '\0';
 
   char *end;
   errno = 0;
 
   char *end;
   errno = 0;
@@ -854,4 +943,33 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
 }
 
 
 }
 
 
+/* Global runtime options. */
+
+struct hb_options_t
+{
+  int initialized : 1;
+  int uniscribe_bug_compatible : 1;
+};
+
+union hb_options_union_t {
+  int i;
+  hb_options_t opts;
+};
+ASSERT_STATIC (sizeof (int) == sizeof (hb_options_union_t));
+
+HB_INTERNAL void
+_hb_options_init (void);
+
+extern HB_INTERNAL hb_options_union_t _hb_options;
+
+static inline hb_options_t
+hb_options (void)
+{
+  if (unlikely (!_hb_options.i))
+    _hb_options_init ();
+
+  return _hb_options.opts;
+}
+
+
 #endif /* HB_PRIVATE_HH */
 #endif /* HB_PRIVATE_HH */
index 5e30a7e..705f554 100644 (file)
 #define HB_SET_PRIVATE_HH
 
 #include "hb-private.hh"
 #define HB_SET_PRIVATE_HH
 
 #include "hb-private.hh"
-#include "hb-set.h"
 #include "hb-object-private.hh"
 
 
 #include "hb-object-private.hh"
 
 
-struct hb_set_digest_common_bits_t
-{
-  ASSERT_POD ();
-
-  typedef unsigned int mask_t;
-
-  inline void init (void) {
-    mask = ~0;
-    value = (mask_t) -1;
-  }
-
-  inline void add (hb_codepoint_t g) {
-    if (unlikely (value == (mask_t) -1)) {
-      value = g;
-      return;
-    }
-
-    mask ^= (g & mask) ^ value;
-    value &= mask;
-  }
-
-  inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
-    /* The negation here stands for ~(x-1). */
-    mask &= -(1 << _hb_bit_storage (a ^ b));
-    value &= mask;
-  }
-
-  inline bool may_have (hb_codepoint_t g) const {
-    return (g & mask) == value;
-  }
-
-  private:
-  mask_t mask;
-  mask_t value;
-};
+/*
+ * The set digests here implement various "filters" that support
+ * "approximate member query".  Conceptually these are like Bloom
+ * Filter and Quotient Filter, however, much smaller, faster, and
+ * designed to fit the requirements of our uses for glyph coverage
+ * queries.  As a result, our filters have much higher.
+ */
 
 
+template <typename mask_t, unsigned int shift>
 struct hb_set_digest_lowest_bits_t
 {
   ASSERT_POD ();
 
 struct hb_set_digest_lowest_bits_t
 {
   ASSERT_POD ();
 
-  typedef unsigned long mask_t;
+  static const unsigned int mask_bytes = sizeof (mask_t);
+  static const unsigned int mask_bits = sizeof (mask_t) * 8;
+  static const unsigned int num_bits = 0
+                                    + (mask_bytes >= 1 ? 3 : 0)
+                                    + (mask_bytes >= 2 ? 1 : 0)
+                                    + (mask_bytes >= 4 ? 1 : 0)
+                                    + (mask_bytes >= 8 ? 1 : 0)
+                                    + (mask_bytes >= 16? 1 : 0)
+                                    + 0;
+
+  ASSERT_STATIC (shift < sizeof (hb_codepoint_t) * 8);
+  ASSERT_STATIC (shift + num_bits <= sizeof (hb_codepoint_t) * 8);
 
   inline void init (void) {
     mask = 0;
 
   inline void init (void) {
     mask = 0;
@@ -83,7 +66,7 @@ struct hb_set_digest_lowest_bits_t
   }
 
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
   }
 
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
-    if (b - a >= sizeof (mask_t) * 8 - 1)
+    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
       mask = (mask_t) -1;
     else {
       mask_t ma = mask_for (a);
       mask = (mask_t) -1;
     else {
       mask_t ma = mask_for (a);
@@ -98,39 +81,66 @@ struct hb_set_digest_lowest_bits_t
 
   private:
 
 
   private:
 
-  static inline mask_t mask_for (hb_codepoint_t g) { return ((mask_t) 1) << (g & (sizeof (mask_t) * 8 - 1)); }
+  static inline mask_t mask_for (hb_codepoint_t g) {
+    return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1));
+  }
   mask_t mask;
 };
 
   mask_t mask;
 };
 
-struct hb_set_digest_t
+template <typename head_t, typename tail_t>
+struct hb_set_digest_combiner_t
 {
   ASSERT_POD ();
 
   inline void init (void) {
 {
   ASSERT_POD ();
 
   inline void init (void) {
-    digest1.init ();
-    digest2.init ();
+    head.init ();
+    tail.init ();
   }
 
   inline void add (hb_codepoint_t g) {
   }
 
   inline void add (hb_codepoint_t g) {
-    digest1.add (g);
-    digest2.add (g);
+    head.add (g);
+    tail.add (g);
   }
 
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
   }
 
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
-    digest1.add_range (a, b);
-    digest2.add_range (a, b);
+    head.add_range (a, b);
+    tail.add_range (a, b);
   }
 
   inline bool may_have (hb_codepoint_t g) const {
   }
 
   inline bool may_have (hb_codepoint_t g) const {
-    return digest1.may_have (g) && digest2.may_have (g);
+    return head.may_have (g) && tail.may_have (g);
   }
 
   private:
   }
 
   private:
-  hb_set_digest_common_bits_t digest1;
-  hb_set_digest_lowest_bits_t digest2;
+  head_t head;
+  tail_t tail;
 };
 
 
 };
 
 
+/*
+ * hb_set_digest_t
+ *
+ * This is a combination of digests that performs "best".
+ * There is not much science to this: it's a result of intuition
+ * and testing.
+ */
+typedef hb_set_digest_combiner_t
+<
+  hb_set_digest_lowest_bits_t<unsigned long, 4>,
+  hb_set_digest_combiner_t
+  <
+    hb_set_digest_lowest_bits_t<unsigned long, 0>,
+    hb_set_digest_lowest_bits_t<unsigned long, 9>
+  >
+> hb_set_digest_t;
+
+
+
+/*
+ * hb_set_t
+ */
+
+
 /* TODO Make this faster and memmory efficient. */
 
 struct hb_set_t
 /* TODO Make this faster and memmory efficient. */
 
 struct hb_set_t
@@ -160,7 +170,7 @@ struct hb_set_t
   inline void add (hb_codepoint_t g)
   {
     if (unlikely (in_error)) return;
   inline void add (hb_codepoint_t g)
   {
     if (unlikely (in_error)) return;
-    if (unlikely (g == SENTINEL)) return;
+    if (unlikely (g == INVALID)) return;
     if (unlikely (g > MAX_G)) return;
     elt (g) |= mask (g);
   }
     if (unlikely (g > MAX_G)) return;
     elt (g) |= mask (g);
   }
@@ -245,19 +255,22 @@ struct hb_set_t
   }
   inline bool next (hb_codepoint_t *codepoint) const
   {
   }
   inline bool next (hb_codepoint_t *codepoint) const
   {
-    if (unlikely (*codepoint == SENTINEL)) {
+    if (unlikely (*codepoint == INVALID)) {
       hb_codepoint_t i = get_min ();
       hb_codepoint_t i = get_min ();
-      if (i != SENTINEL) {
+      if (i != INVALID) {
         *codepoint = i;
        return true;
         *codepoint = i;
        return true;
-      } else
+      } else {
+       *codepoint = INVALID;
         return false;
         return false;
+      }
     }
     for (hb_codepoint_t i = *codepoint + 1; i < MAX_G + 1; i++)
       if (has (i)) {
         *codepoint = i;
        return true;
       }
     }
     for (hb_codepoint_t i = *codepoint + 1; i < MAX_G + 1; i++)
       if (has (i)) {
         *codepoint = i;
        return true;
       }
+    *codepoint = INVALID;
     return false;
   }
   inline bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
     return false;
   }
   inline bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
@@ -266,7 +279,10 @@ struct hb_set_t
 
     i = *last;
     if (!next (&i))
 
     i = *last;
     if (!next (&i))
+    {
+      *last = *first = INVALID;
       return false;
       return false;
+    }
 
     *last = *first = i;
     while (next (&i) && i == *last + 1)
 
     *last = *first = i;
     while (next (&i) && i == *last + 1)
@@ -286,10 +302,10 @@ struct hb_set_t
   {
     for (unsigned int i = 0; i < ELTS; i++)
       if (elts[i])
   {
     for (unsigned int i = 0; i < ELTS; i++)
       if (elts[i])
-       for (unsigned int j = 0; i < BITS; j++)
+       for (unsigned int j = 0; j < BITS; j++)
          if (elts[i] & (1 << j))
            return i * BITS + j;
          if (elts[i] & (1 << j))
            return i * BITS + j;
-    return SENTINEL;
+    return INVALID;
   }
   inline hb_codepoint_t get_max (void) const
   {
   }
   inline hb_codepoint_t get_max (void) const
   {
@@ -298,7 +314,7 @@ struct hb_set_t
        for (unsigned int j = BITS; j; j--)
          if (elts[i - 1] & (1 << (j - 1)))
            return (i - 1) * BITS + (j - 1);
        for (unsigned int j = BITS; j; j--)
          if (elts[i - 1] & (1 << (j - 1)))
            return (i - 1) * BITS + (j - 1);
-    return SENTINEL;
+    return INVALID;
   }
 
   typedef uint32_t elt_t;
   }
 
   typedef uint32_t elt_t;
@@ -307,7 +323,7 @@ struct hb_set_t
   static const unsigned int BITS = (1 << SHIFT);
   static const unsigned int MASK = BITS - 1;
   static const unsigned int ELTS = (MAX_G + 1 + (BITS - 1)) / BITS;
   static const unsigned int BITS = (1 << SHIFT);
   static const unsigned int MASK = BITS - 1;
   static const unsigned int ELTS = (MAX_G + 1 + (BITS - 1)) / BITS;
-  static  const hb_codepoint_t SENTINEL = (hb_codepoint_t) -1;
+  static  const hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
 
   elt_t &elt (hb_codepoint_t g) { return elts[g >> SHIFT]; }
   elt_t elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
 
   elt_t &elt (hb_codepoint_t g) { return elts[g >> SHIFT]; }
   elt_t elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
index 5f427a5..59a0af4 100644 (file)
 #include "hb-set-private.hh"
 
 
 #include "hb-set-private.hh"
 
 
-
 /* Public API */
 
 
 /* Public API */
 
 
+/**
+ * hb_set_create: (Xconstructor)
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_set_t *
 hb_set_create (void)
 {
 hb_set_t *
 hb_set_create (void)
 {
@@ -44,6 +50,13 @@ hb_set_create (void)
   return set;
 }
 
   return set;
 }
 
+/**
+ * hb_set_get_empty:
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_set_t *
 hb_set_get_empty (void)
 {
 hb_set_t *
 hb_set_get_empty (void)
 {
@@ -57,12 +70,26 @@ hb_set_get_empty (void)
   return const_cast<hb_set_t *> (&_hb_set_nil);
 }
 
   return const_cast<hb_set_t *> (&_hb_set_nil);
 }
 
+/**
+ * hb_set_reference: (skip)
+ * @set: a set.
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_set_t *
 hb_set_reference (hb_set_t *set)
 {
   return hb_object_reference (set);
 }
 
 hb_set_t *
 hb_set_reference (hb_set_t *set)
 {
   return hb_object_reference (set);
 }
 
+/**
+ * hb_set_destroy: (skip)
+ * @set: a set.
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_destroy (hb_set_t *set)
 {
 void
 hb_set_destroy (hb_set_t *set)
 {
@@ -73,6 +100,18 @@ hb_set_destroy (hb_set_t *set)
   free (set);
 }
 
   free (set);
 }
 
+/**
+ * hb_set_set_user_data: (skip)
+ * @set: a set.
+ * @key:
+ * @data:
+ * @destroy (closure data):
+ * @replace:
+ *
+ * Return value:
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_set_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key,
 hb_bool_t
 hb_set_set_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key,
@@ -83,6 +122,15 @@ hb_set_set_user_data (hb_set_t           *set,
   return hb_object_set_user_data (set, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (set, key, data, destroy, replace);
 }
 
+/**
+ * hb_set_get_user_data: (skip)
+ * @set: a set.
+ * @key:
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
 void *
 hb_set_get_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key)
 void *
 hb_set_get_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key)
@@ -91,24 +139,63 @@ hb_set_get_user_data (hb_set_t           *set,
 }
 
 
 }
 
 
+/**
+ * hb_set_allocation_successful:
+ * @set: a set.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_allocation_successful (const hb_set_t  *set HB_UNUSED)
 {
   return !set->in_error;
 }
 
 hb_bool_t
 hb_set_allocation_successful (const hb_set_t  *set HB_UNUSED)
 {
   return !set->in_error;
 }
 
+/**
+ * hb_set_clear:
+ * @set: a set.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_clear (hb_set_t *set)
 {
   set->clear ();
 }
 
 void
 hb_set_clear (hb_set_t *set)
 {
   set->clear ();
 }
 
+/**
+ * hb_set_is_empty:
+ * @set: a set.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_is_empty (const hb_set_t *set)
 {
   return set->is_empty ();
 }
 
 hb_bool_t
 hb_set_is_empty (const hb_set_t *set)
 {
   return set->is_empty ();
 }
 
+/**
+ * hb_set_has:
+ * @set: a set.
+ * @codepoint: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_has (const hb_set_t *set,
            hb_codepoint_t  codepoint)
 hb_bool_t
 hb_set_has (const hb_set_t *set,
            hb_codepoint_t  codepoint)
@@ -116,6 +203,15 @@ hb_set_has (const hb_set_t *set,
   return set->has (codepoint);
 }
 
   return set->has (codepoint);
 }
 
+/**
+ * hb_set_add:
+ * @set: a set.
+ * @codepoint: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_add (hb_set_t       *set,
            hb_codepoint_t  codepoint)
 void
 hb_set_add (hb_set_t       *set,
            hb_codepoint_t  codepoint)
@@ -123,6 +219,16 @@ hb_set_add (hb_set_t       *set,
   set->add (codepoint);
 }
 
   set->add (codepoint);
 }
 
+/**
+ * hb_set_add_range:
+ * @set: a set.
+ * @first: 
+ * @last: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_add_range (hb_set_t       *set,
                  hb_codepoint_t  first,
 void
 hb_set_add_range (hb_set_t       *set,
                  hb_codepoint_t  first,
@@ -131,6 +237,15 @@ hb_set_add_range (hb_set_t       *set,
   set->add_range (first, last);
 }
 
   set->add_range (first, last);
 }
 
+/**
+ * hb_set_del:
+ * @set: a set.
+ * @codepoint: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_del (hb_set_t       *set,
            hb_codepoint_t  codepoint)
 void
 hb_set_del (hb_set_t       *set,
            hb_codepoint_t  codepoint)
@@ -138,6 +253,16 @@ hb_set_del (hb_set_t       *set,
   set->del (codepoint);
 }
 
   set->del (codepoint);
 }
 
+/**
+ * hb_set_del_range:
+ * @set: a set.
+ * @first: 
+ * @last: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_del_range (hb_set_t       *set,
                  hb_codepoint_t  first,
 void
 hb_set_del_range (hb_set_t       *set,
                  hb_codepoint_t  first,
@@ -146,6 +271,17 @@ hb_set_del_range (hb_set_t       *set,
   set->del_range (first, last);
 }
 
   set->del_range (first, last);
 }
 
+/**
+ * hb_set_is_equal:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_is_equal (const hb_set_t *set,
                 const hb_set_t *other)
 hb_bool_t
 hb_set_is_equal (const hb_set_t *set,
                 const hb_set_t *other)
@@ -153,6 +289,15 @@ hb_set_is_equal (const hb_set_t *set,
   return set->is_equal (other);
 }
 
   return set->is_equal (other);
 }
 
+/**
+ * hb_set_set:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_set (hb_set_t       *set,
            const hb_set_t *other)
 void
 hb_set_set (hb_set_t       *set,
            const hb_set_t *other)
@@ -160,6 +305,15 @@ hb_set_set (hb_set_t       *set,
   set->set (other);
 }
 
   set->set (other);
 }
 
+/**
+ * hb_set_union:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_union (hb_set_t       *set,
              const hb_set_t *other)
 void
 hb_set_union (hb_set_t       *set,
              const hb_set_t *other)
@@ -167,6 +321,15 @@ hb_set_union (hb_set_t       *set,
   set->union_ (other);
 }
 
   set->union_ (other);
 }
 
+/**
+ * hb_set_intersect:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_intersect (hb_set_t       *set,
                  const hb_set_t *other)
 void
 hb_set_intersect (hb_set_t       *set,
                  const hb_set_t *other)
@@ -174,6 +337,15 @@ hb_set_intersect (hb_set_t       *set,
   set->intersect (other);
 }
 
   set->intersect (other);
 }
 
+/**
+ * hb_set_subtract:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_subtract (hb_set_t       *set,
                 const hb_set_t *other)
 void
 hb_set_subtract (hb_set_t       *set,
                 const hb_set_t *other)
@@ -181,6 +353,15 @@ hb_set_subtract (hb_set_t       *set,
   set->subtract (other);
 }
 
   set->subtract (other);
 }
 
+/**
+ * hb_set_symmetric_difference:
+ * @set: a set.
+ * @other: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_symmetric_difference (hb_set_t       *set,
                             const hb_set_t *other)
 void
 hb_set_symmetric_difference (hb_set_t       *set,
                             const hb_set_t *other)
@@ -188,30 +369,79 @@ hb_set_symmetric_difference (hb_set_t       *set,
   set->symmetric_difference (other);
 }
 
   set->symmetric_difference (other);
 }
 
+/**
+ * hb_set_invert:
+ * @set: a set.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_set_invert (hb_set_t *set)
 {
   set->invert ();
 }
 
 void
 hb_set_invert (hb_set_t *set)
 {
   set->invert ();
 }
 
+/**
+ * hb_set_get_population:
+ * @set: a set.
+ *
+ * Returns the number of numbers in the set.
+ *
+ * Return value: set population.
+ *
+ * Since: 1.0
+ **/
 unsigned int
 hb_set_get_population (const hb_set_t *set)
 {
   return set->get_population ();
 }
 
 unsigned int
 hb_set_get_population (const hb_set_t *set)
 {
   return set->get_population ();
 }
 
+/**
+ * hb_set_get_min:
+ * @set: a set.
+ *
+ * Finds the minimum number in the set.
+ *
+ * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
+ *
+ * Since: 1.0
+ **/
 hb_codepoint_t
 hb_set_get_min (const hb_set_t *set)
 {
   return set->get_min ();
 }
 
 hb_codepoint_t
 hb_set_get_min (const hb_set_t *set)
 {
   return set->get_min ();
 }
 
+/**
+ * hb_set_get_max:
+ * @set: a set.
+ *
+ * Finds the maximum number in the set.
+ *
+ * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
+ *
+ * Since: 1.0
+ **/
 hb_codepoint_t
 hb_set_get_max (const hb_set_t *set)
 {
   return set->get_max ();
 }
 
 hb_codepoint_t
 hb_set_get_max (const hb_set_t *set)
 {
   return set->get_max ();
 }
 
+/**
+ * hb_set_next:
+ * @set: a set.
+ * @codepoint: (inout):
+ *
+ * 
+ *
+ * Return value: whether there was a next value.
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_next (const hb_set_t *set,
             hb_codepoint_t *codepoint)
 hb_bool_t
 hb_set_next (const hb_set_t *set,
             hb_codepoint_t *codepoint)
@@ -219,6 +449,19 @@ hb_set_next (const hb_set_t *set,
   return set->next (codepoint);
 }
 
   return set->next (codepoint);
 }
 
+/**
+ * hb_set_next_range:
+ * @set: a set.
+ * @first: (out): output first codepoint in the range.
+ * @last: (inout): input current last and output last codepoint in the range.
+ *
+ * Gets the next consecutive range of numbers in @set that
+ * are greater than current value of @last.
+ *
+ * Return value: whether there was a next range.
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_set_next_range (const hb_set_t *set,
                   hb_codepoint_t *first,
 hb_bool_t
 hb_set_next_range (const hb_set_t *set,
                   hb_codepoint_t *first,
index 291e249..bafdae9 100644 (file)
@@ -36,6 +36,8 @@
 HB_BEGIN_DECLS
 
 
 HB_BEGIN_DECLS
 
 
+#define HB_SET_VALUE_INVALID ((hb_codepoint_t) -1)
+
 typedef struct hb_set_t hb_set_t;
 
 
 typedef struct hb_set_t hb_set_t;
 
 
index dd014e3..607da5e 100644 (file)
@@ -28,7 +28,6 @@
 #define HB_SHAPE_PLAN_PRIVATE_HH
 
 #include "hb-private.hh"
 #define HB_SHAPE_PLAN_PRIVATE_HH
 
 #include "hb-private.hh"
-#include "hb-shape-plan.h"
 #include "hb-object-private.hh"
 #include "hb-shaper-private.hh"
 
 #include "hb-object-private.hh"
 #include "hb-shaper-private.hh"
 
@@ -39,12 +38,15 @@ struct hb_shape_plan_t
   ASSERT_POD ();
 
   hb_bool_t default_shaper_list;
   ASSERT_POD ();
 
   hb_bool_t default_shaper_list;
-  hb_face_t *face;
+  hb_face_t *face_unsafe; /* We don't carry a reference to face. */
   hb_segment_properties_t props;
 
   hb_shape_func_t *shaper_func;
   const char *shaper_name;
 
   hb_segment_properties_t props;
 
   hb_shape_func_t *shaper_func;
   const char *shaper_name;
 
+  hb_feature_t *user_features;
+  unsigned int num_user_features;
+
   struct hb_shaper_data_t shaper_data;
 };
 
   struct hb_shaper_data_t shaper_data;
 };
 
index 22a226f..2166173 100644 (file)
 #include "hb-shape-plan-private.hh"
 #include "hb-shaper-private.hh"
 #include "hb-font-private.hh"
 #include "hb-shape-plan-private.hh"
 #include "hb-shaper-private.hh"
 #include "hb-font-private.hh"
+#include "hb-buffer-private.hh"
+
+
+#ifndef HB_DEBUG_SHAPE_PLAN
+#define HB_DEBUG_SHAPE_PLAN (HB_DEBUG+0)
+#endif
+
 
 #define HB_SHAPER_IMPLEMENT(shaper) \
        HB_SHAPER_DATA_ENSURE_DECLARE(shaper, face) \
 
 #define HB_SHAPER_IMPLEMENT(shaper) \
        HB_SHAPER_DATA_ENSURE_DECLARE(shaper, face) \
@@ -41,11 +48,16 @@ hb_shape_plan_plan (hb_shape_plan_t    *shape_plan,
                    unsigned int        num_user_features,
                    const char * const *shaper_list)
 {
                    unsigned int        num_user_features,
                    const char * const *shaper_list)
 {
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan,
+                 "num_features=%d shaper_list=%p",
+                 num_user_features,
+                 shaper_list);
+
   const hb_shaper_pair_t *shapers = _hb_shapers_get ();
 
 #define HB_SHAPER_PLAN(shaper) \
        HB_STMT_START { \
   const hb_shaper_pair_t *shapers = _hb_shapers_get ();
 
 #define HB_SHAPER_PLAN(shaper) \
        HB_STMT_START { \
-         if (hb_##shaper##_shaper_face_data_ensure (shape_plan->face)) { \
+         if (hb_##shaper##_shaper_face_data_ensure (shape_plan->face_unsafe)) { \
            HB_SHAPER_DATA (shaper, shape_plan) = \
              HB_SHAPER_DATA_CREATE_FUNC (shaper, shape_plan) (shape_plan, user_features, num_user_features); \
            shape_plan->shaper_func = _hb_##shaper##_shape; \
            HB_SHAPER_DATA (shaper, shape_plan) = \
              HB_SHAPER_DATA_CREATE_FUNC (shaper, shape_plan) (shape_plan, user_features, num_user_features); \
            shape_plan->shaper_func = _hb_##shaper##_shape; \
@@ -82,6 +94,20 @@ hb_shape_plan_plan (hb_shape_plan_t    *shape_plan,
  * hb_shape_plan_t
  */
 
  * hb_shape_plan_t
  */
 
+/**
+ * hb_shape_plan_create: (Xconstructor)
+ * @face: 
+ * @props: 
+ * @user_features: (array length=num_user_features):
+ * @num_user_features: 
+ * @shaper_list: (array zero-terminated=1):
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_shape_plan_t *
 hb_shape_plan_create (hb_face_t                     *face,
                      const hb_segment_properties_t *props,
 hb_shape_plan_t *
 hb_shape_plan_create (hb_face_t                     *face,
                      const hb_segment_properties_t *props,
@@ -89,27 +115,51 @@ hb_shape_plan_create (hb_face_t                     *face,
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list)
 {
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list)
 {
-  assert (props->direction != HB_DIRECTION_INVALID);
+  DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+                 "face=%p num_features=%d shaper_list=%p",
+                 face,
+                 num_user_features,
+                 shaper_list);
 
   hb_shape_plan_t *shape_plan;
 
   hb_shape_plan_t *shape_plan;
+  hb_feature_t *features = NULL;
 
   if (unlikely (!face))
     face = hb_face_get_empty ();
   if (unlikely (!props || hb_object_is_inert (face)))
     return hb_shape_plan_get_empty ();
 
   if (unlikely (!face))
     face = hb_face_get_empty ();
   if (unlikely (!props || hb_object_is_inert (face)))
     return hb_shape_plan_get_empty ();
-  if (!(shape_plan = hb_object_create<hb_shape_plan_t> ()))
+  if (num_user_features && !(features = (hb_feature_t *) malloc (num_user_features * sizeof (hb_feature_t))))
+    return hb_shape_plan_get_empty ();
+  if (!(shape_plan = hb_object_create<hb_shape_plan_t> ())) {
+    free (features);
     return hb_shape_plan_get_empty ();
     return hb_shape_plan_get_empty ();
+  }
+
+  assert (props->direction != HB_DIRECTION_INVALID);
 
   hb_face_make_immutable (face);
   shape_plan->default_shaper_list = shaper_list == NULL;
 
   hb_face_make_immutable (face);
   shape_plan->default_shaper_list = shaper_list == NULL;
-  shape_plan->face = hb_face_reference (face);
+  shape_plan->face_unsafe = face;
   shape_plan->props = *props;
   shape_plan->props = *props;
+  shape_plan->num_user_features = num_user_features;
+  shape_plan->user_features = features;
+  if (num_user_features)
+    memcpy (features, user_features, num_user_features * sizeof (hb_feature_t));
 
   hb_shape_plan_plan (shape_plan, user_features, num_user_features, shaper_list);
 
   return shape_plan;
 }
 
 
   hb_shape_plan_plan (shape_plan, user_features, num_user_features, shaper_list);
 
   return shape_plan;
 }
 
+/**
+ * hb_shape_plan_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_shape_plan_t *
 hb_shape_plan_get_empty (void)
 {
 hb_shape_plan_t *
 hb_shape_plan_get_empty (void)
 {
@@ -123,6 +173,9 @@ hb_shape_plan_get_empty (void)
     NULL, /* shaper_func */
     NULL, /* shaper_name */
 
     NULL, /* shaper_func */
     NULL, /* shaper_name */
 
+    NULL, /* user_features */
+    0,    /* num_user_featurs */
+
     {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
 #include "hb-shaper-list.hh"
     {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
 #include "hb-shaper-list.hh"
@@ -133,12 +186,30 @@ hb_shape_plan_get_empty (void)
   return const_cast<hb_shape_plan_t *> (&_hb_shape_plan_nil);
 }
 
   return const_cast<hb_shape_plan_t *> (&_hb_shape_plan_nil);
 }
 
+/**
+ * hb_shape_plan_reference: (skip)
+ * @shape_plan: a shape plan.
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_shape_plan_t *
 hb_shape_plan_reference (hb_shape_plan_t *shape_plan)
 {
   return hb_object_reference (shape_plan);
 }
 
 hb_shape_plan_t *
 hb_shape_plan_reference (hb_shape_plan_t *shape_plan)
 {
   return hb_object_reference (shape_plan);
 }
 
+/**
+ * hb_shape_plan_destroy: (skip)
+ * @shape_plan: a shape plan.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
 {
 void
 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
 {
@@ -148,11 +219,25 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
-  hb_face_destroy (shape_plan->face);
+  free (shape_plan->user_features);
 
   free (shape_plan);
 }
 
 
   free (shape_plan);
 }
 
+/**
+ * hb_shape_plan_set_user_data: (skip)
+ * @shape_plan: a shape plan.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key,
 hb_bool_t
 hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key,
@@ -163,6 +248,17 @@ hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
   return hb_object_set_user_data (shape_plan, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (shape_plan, key, data, destroy, replace);
 }
 
+/**
+ * hb_shape_plan_get_user_data: (skip)
+ * @shape_plan: a shape plan.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
 void *
 hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key)
 void *
 hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key)
@@ -171,6 +267,20 @@ hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
 }
 
 
 }
 
 
+/**
+ * hb_shape_plan_execute:
+ * @shape_plan: a shape plan.
+ * @font: a font.
+ * @buffer: a buffer.
+ * @features: (array length=num_features):
+ * @num_features: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       hb_font_t          *font,
 hb_bool_t
 hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       hb_font_t          *font,
@@ -178,9 +288,19 @@ hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       const hb_feature_t *features,
                       unsigned int        num_features)
 {
                       const hb_feature_t *features,
                       unsigned int        num_features)
 {
-  if (unlikely (shape_plan->face != font->face))
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan,
+                 "num_features=%d shaper_func=%p",
+                 num_features,
+                 shape_plan->shaper_func);
+
+  if (unlikely (hb_object_is_inert (shape_plan) ||
+               hb_object_is_inert (font) ||
+               hb_object_is_inert (buffer)))
     return false;
 
     return false;
 
+  assert (shape_plan->face_unsafe == font->face);
+  assert (hb_segment_properties_equal (&shape_plan->props, &buffer->props));
+
 #define HB_SHAPER_EXECUTE(shaper) \
        HB_STMT_START { \
          return HB_SHAPER_DATA (shaper, shape_plan) && \
 #define HB_SHAPER_EXECUTE(shaper) \
        HB_STMT_START { \
          return HB_SHAPER_DATA (shaper, shape_plan) && \
@@ -215,23 +335,69 @@ hb_shape_plan_hash (const hb_shape_plan_t *shape_plan)
 }
 #endif
 
 }
 #endif
 
-/* TODO no user-feature caching for now. */
+/* User-feature caching is currently somewhat dumb:
+ * it only finds matches where the feature array is identical,
+ * not cases where the feature lists would be compatible for plan purposes
+ * but have different ranges, for example.
+ */
 struct hb_shape_plan_proposal_t
 {
   const hb_segment_properties_t  props;
   const char * const            *shaper_list;
 struct hb_shape_plan_proposal_t
 {
   const hb_segment_properties_t  props;
   const char * const            *shaper_list;
+  const hb_feature_t            *user_features;
+  unsigned int                   num_user_features;
   hb_shape_func_t               *shaper_func;
 };
 
   hb_shape_func_t               *shaper_func;
 };
 
+static inline hb_bool_t
+hb_shape_plan_user_features_match (const hb_shape_plan_t          *shape_plan,
+                                  const hb_shape_plan_proposal_t *proposal)
+{
+  if (proposal->num_user_features != shape_plan->num_user_features) return false;
+  for (unsigned int i = 0, n = proposal->num_user_features; i < n; i++)
+    if (proposal->user_features[i].tag   != shape_plan->user_features[i].tag   ||
+        proposal->user_features[i].value != shape_plan->user_features[i].value ||
+        proposal->user_features[i].start != shape_plan->user_features[i].start ||
+        proposal->user_features[i].end   != shape_plan->user_features[i].end) return false;
+  return true;
+}
+
 static hb_bool_t
 hb_shape_plan_matches (const hb_shape_plan_t          *shape_plan,
                       const hb_shape_plan_proposal_t *proposal)
 {
   return hb_segment_properties_equal (&shape_plan->props, &proposal->props) &&
 static hb_bool_t
 hb_shape_plan_matches (const hb_shape_plan_t          *shape_plan,
                       const hb_shape_plan_proposal_t *proposal)
 {
   return hb_segment_properties_equal (&shape_plan->props, &proposal->props) &&
+        hb_shape_plan_user_features_match (shape_plan, proposal) &&
         ((shape_plan->default_shaper_list && proposal->shaper_list == NULL) ||
          (shape_plan->shaper_func == proposal->shaper_func));
 }
 
         ((shape_plan->default_shaper_list && proposal->shaper_list == NULL) ||
          (shape_plan->shaper_func == proposal->shaper_func));
 }
 
+static inline hb_bool_t
+hb_non_global_user_features_present (const hb_feature_t *user_features,
+                                    unsigned int        num_user_features)
+{
+  while (num_user_features)
+    if (user_features->start != 0 || user_features->end != (unsigned int) -1)
+      return true;
+    else
+      num_user_features--, user_features++;
+  return false;
+}
+
+/**
+ * hb_shape_plan_create_cached:
+ * @face: 
+ * @props: 
+ * @user_features: (array length=num_user_features):
+ * @num_user_features: 
+ * @shaper_list: (array zero-terminated=1):
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_shape_plan_t *
 hb_shape_plan_create_cached (hb_face_t                     *face,
                             const hb_segment_properties_t *props,
 hb_shape_plan_t *
 hb_shape_plan_create_cached (hb_face_t                     *face,
                             const hb_segment_properties_t *props,
@@ -239,35 +405,37 @@ hb_shape_plan_create_cached (hb_face_t                     *face,
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list)
 {
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list)
 {
-  if (num_user_features)
-    return hb_shape_plan_create (face, props, user_features, num_user_features, shaper_list);
+  DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+                 "face=%p num_features=%d shaper_list=%p",
+                 face,
+                 num_user_features,
+                 shaper_list);
 
   hb_shape_plan_proposal_t proposal = {
     *props,
     shaper_list,
 
   hb_shape_plan_proposal_t proposal = {
     *props,
     shaper_list,
+    user_features,
+    num_user_features,
     NULL
   };
 
   if (shaper_list) {
     NULL
   };
 
   if (shaper_list) {
-    /* Choose shaper.  Adapted from hb_shape_plan_plan(). */
-#define HB_SHAPER_PLAN(shaper) \
-         HB_STMT_START { \
-           if (hb_##shaper##_shaper_face_data_ensure (face)) \
-             proposal.shaper_func = _hb_##shaper##_shape; \
-         } HB_STMT_END
-
+    /* Choose shaper.  Adapted from hb_shape_plan_plan().
+     * Must choose shaper exactly the same way as that function. */
     for (const char * const *shaper_item = shaper_list; *shaper_item; shaper_item++)
       if (0)
        ;
 #define HB_SHAPER_IMPLEMENT(shaper) \
     for (const char * const *shaper_item = shaper_list; *shaper_item; shaper_item++)
       if (0)
        ;
 #define HB_SHAPER_IMPLEMENT(shaper) \
-      else if (0 == strcmp (*shaper_item, #shaper)) \
-       HB_SHAPER_PLAN (shaper);
+      else if (0 == strcmp (*shaper_item, #shaper) && \
+              hb_##shaper##_shaper_face_data_ensure (face)) \
+      { \
+       proposal.shaper_func = _hb_##shaper##_shape; \
+       break; \
+      }
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
-#undef HB_SHAPER_PLAN
-
-    if (unlikely (!proposal.shaper_list))
+    if (unlikely (!proposal.shaper_func))
       return hb_shape_plan_get_empty ();
   }
 
       return hb_shape_plan_get_empty ();
   }
 
@@ -276,12 +444,20 @@ retry:
   hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) hb_atomic_ptr_get (&face->shape_plans);
   for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
     if (hb_shape_plan_matches (node->shape_plan, &proposal))
   hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) hb_atomic_ptr_get (&face->shape_plans);
   for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
     if (hb_shape_plan_matches (node->shape_plan, &proposal))
+    {
+      DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
       return hb_shape_plan_reference (node->shape_plan);
       return hb_shape_plan_reference (node->shape_plan);
+    }
 
   /* Not found. */
 
   hb_shape_plan_t *shape_plan = hb_shape_plan_create (face, props, user_features, num_user_features, shaper_list);
 
 
   /* Not found. */
 
   hb_shape_plan_t *shape_plan = hb_shape_plan_create (face, props, user_features, num_user_features, shaper_list);
 
+  /* Don't add the plan to the cache if there were user features with non-global ranges */
+
+  if (hb_non_global_user_features_present (user_features, num_user_features))
+    return shape_plan;
+
   hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) calloc (1, sizeof (hb_face_t::plan_node_t));
   if (unlikely (!node))
     return shape_plan;
   hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) calloc (1, sizeof (hb_face_t::plan_node_t));
   if (unlikely (!node))
     return shape_plan;
@@ -294,13 +470,21 @@ retry:
     free (node);
     goto retry;
   }
     free (node);
     goto retry;
   }
-
-  /* Release our reference on face. */
-  hb_face_destroy (face);
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan, "inserted into cache");
 
   return hb_shape_plan_reference (shape_plan);
 }
 
 
   return hb_shape_plan_reference (shape_plan);
 }
 
+/**
+ * hb_shape_plan_get_shaper:
+ * @shape_plan: a shape plan.
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
 const char *
 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan)
 {
 const char *
 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan)
 {
index 389ce3e..74747f8 100644 (file)
 #include "hb-font-private.hh"
 
 
 #include "hb-font-private.hh"
 
 
-static void
+static bool
 parse_space (const char **pp, const char *end)
 {
 parse_space (const char **pp, const char *end)
 {
-  char c;
-#define ISSPACE(c) ((c)==' '||(c)=='\f'||(c)=='\n'||(c)=='\r'||(c)=='\t'||(c)=='\v')
-  while (*pp < end && (c = **pp, ISSPACE (c)))
+  while (*pp < end && ISSPACE (**pp))
     (*pp)++;
     (*pp)++;
-#undef ISSPACE
+  return true;
 }
 
 }
 
-static hb_bool_t
+static bool
 parse_char (const char **pp, const char *end, char c)
 {
   parse_space (pp, end);
 parse_char (const char **pp, const char *end, char c)
 {
   parse_space (pp, end);
@@ -56,20 +54,23 @@ parse_char (const char **pp, const char *end, char c)
   return true;
 }
 
   return true;
 }
 
-static hb_bool_t
+static bool
 parse_uint (const char **pp, const char *end, unsigned int *pv)
 {
   char buf[32];
 parse_uint (const char **pp, const char *end, unsigned int *pv)
 {
   char buf[32];
-  strncpy (buf, *pp, end - *pp);
-  buf[ARRAY_LENGTH (buf) - 1] = '\0';
+  unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
+  strncpy (buf, *pp, len);
+  buf[len] = '\0';
 
   char *p = buf;
   char *pend = p;
   unsigned int v;
 
 
   char *p = buf;
   char *pend = p;
   unsigned int v;
 
+  /* Intentionally use strtol instead of strtoul, such that
+   * -1 turns into "big number"... */
+  errno = 0;
   v = strtol (p, &pend, 0);
   v = strtol (p, &pend, 0);
-
-  if (p == pend)
+  if (errno || p == pend)
     return false;
 
   *pv = v;
     return false;
 
   *pv = v;
@@ -77,7 +78,27 @@ parse_uint (const char **pp, const char *end, unsigned int *pv)
   return true;
 }
 
   return true;
 }
 
-static hb_bool_t
+static bool
+parse_bool (const char **pp, const char *end, unsigned int *pv)
+{
+  parse_space (pp, end);
+
+  const char *p = *pp;
+  while (*pp < end && ISALPHA(**pp))
+    (*pp)++;
+
+  /* CSS allows on/off as aliases 1/0. */
+  if (*pp - p == 2 || 0 == strncmp (p, "on", 2))
+    *pv = 1;
+  else if (*pp - p == 3 || 0 == strncmp (p, "off", 2))
+    *pv = 0;
+  else
+    return false;
+
+  return true;
+}
+
+static bool
 parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feature)
 {
   if (parse_char (pp, end, '-'))
 parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feature)
 {
   if (parse_char (pp, end, '-'))
@@ -90,32 +111,48 @@ parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feat
   return true;
 }
 
   return true;
 }
 
-static hb_bool_t
+static bool
 parse_feature_tag (const char **pp, const char *end, hb_feature_t *feature)
 {
 parse_feature_tag (const char **pp, const char *end, hb_feature_t *feature)
 {
-  const char *p = *pp;
-  char c;
-
   parse_space (pp, end);
 
   parse_space (pp, end);
 
-#define ISALNUM(c) (('a' <= (c) && (c) <= 'z') || ('A' <= (c) && (c) <= 'Z') || ('0' <= (c) && (c) <= '9'))
-  while (*pp < end && (c = **pp, ISALNUM(c)))
+  char quote = 0;
+
+  if (*pp < end && (**pp == '\'' || **pp == '"'))
+  {
+    quote = **pp;
     (*pp)++;
     (*pp)++;
-#undef ISALNUM
+  }
 
 
-  if (p == *pp)
+  const char *p = *pp;
+  while (*pp < end && ISALNUM(**pp))
+    (*pp)++;
+
+  if (p == *pp || *pp - p > 4)
     return false;
 
   feature->tag = hb_tag_from_string (p, *pp - p);
     return false;
 
   feature->tag = hb_tag_from_string (p, *pp - p);
+
+  if (quote)
+  {
+    /* CSS expects exactly four bytes.  And we only allow quotations for
+     * CSS compatibility.  So, enforce the length. */
+     if (*pp - p != 4)
+       return false;
+    if (*pp == end || **pp != quote)
+      return false;
+    (*pp)++;
+  }
+
   return true;
 }
 
   return true;
 }
 
-static hb_bool_t
+static bool
 parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
 {
   parse_space (pp, end);
 
 parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
 {
   parse_space (pp, end);
 
-  hb_bool_t has_start;
+  bool has_start;
 
   feature->start = 0;
   feature->end = (unsigned int) -1;
 
   feature->start = 0;
   feature->end = (unsigned int) -1;
@@ -135,33 +172,73 @@ parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
   return parse_char (pp, end, ']');
 }
 
   return parse_char (pp, end, ']');
 }
 
-static hb_bool_t
+static bool
 parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *feature)
 {
 parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *feature)
 {
-  return !parse_char (pp, end, '=') || parse_uint (pp, end, &feature->value);
+  bool had_equal = parse_char (pp, end, '=');
+  bool had_value = parse_uint (pp, end, &feature->value) ||
+                   parse_bool (pp, end, &feature->value);
+  /* CSS doesn't use equal-sign between tag and value.
+   * If there was an equal-sign, then there *must* be a value.
+   * A value without an eqaul-sign is ok, but not required. */
+  return !had_equal || had_value;
 }
 
 
 }
 
 
-static hb_bool_t
+static bool
 parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
 {
   return parse_feature_value_prefix (pp, end, feature) &&
         parse_feature_tag (pp, end, feature) &&
         parse_feature_indices (pp, end, feature) &&
         parse_feature_value_postfix (pp, end, feature) &&
 parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
 {
   return parse_feature_value_prefix (pp, end, feature) &&
         parse_feature_tag (pp, end, feature) &&
         parse_feature_indices (pp, end, feature) &&
         parse_feature_value_postfix (pp, end, feature) &&
+        parse_space (pp, end) &&
         *pp == end;
 }
 
         *pp == end;
 }
 
+/**
+ * hb_feature_from_string:
+ * @str: (array length=len):
+ * @len: 
+ * @feature: (out) (allow-none):
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_feature_from_string (const char *str, int len,
                        hb_feature_t *feature)
 {
 hb_bool_t
 hb_feature_from_string (const char *str, int len,
                        hb_feature_t *feature)
 {
+  hb_feature_t feat;
+
   if (len < 0)
     len = strlen (str);
 
   if (len < 0)
     len = strlen (str);
 
-  return parse_one_feature (&str, str + len, feature);
+  if (likely (parse_one_feature (&str, str + len, &feat)))
+  {
+    if (feature)
+      *feature = feat;
+    return true;
+  }
+
+  if (feature)
+    memset (feature, 0, sizeof (*feature));
+  return false;
 }
 
 }
 
+/**
+ * hb_feature_to_string:
+ * @feature: 
+ * @buf: (array length=size):
+ * @size: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_feature_to_string (hb_feature_t *feature,
                      char *buf, unsigned int size)
 void
 hb_feature_to_string (hb_feature_t *feature,
                      char *buf, unsigned int size)
@@ -180,34 +257,43 @@ hb_feature_to_string (hb_feature_t *feature,
   {
     s[len++] = '[';
     if (feature->start)
   {
     s[len++] = '[';
     if (feature->start)
-      len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->start);
+      len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->start));
     if (feature->end != feature->start + 1) {
       s[len++] = ':';
       if (feature->end != (unsigned int) -1)
     if (feature->end != feature->start + 1) {
       s[len++] = ':';
       if (feature->end != (unsigned int) -1)
-       len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->end);
+       len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->end));
     }
     s[len++] = ']';
   }
   if (feature->value > 1)
   {
     s[len++] = '=';
     }
     s[len++] = ']';
   }
   if (feature->value > 1)
   {
     s[len++] = '=';
-    len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->value);
+    len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->value));
   }
   assert (len < ARRAY_LENGTH (s));
   len = MIN (len, size - 1);
   memcpy (buf, s, len);
   }
   assert (len < ARRAY_LENGTH (s));
   len = MIN (len, size - 1);
   memcpy (buf, s, len);
-  s[len] = '\0';
+  buf[len] = '\0';
 }
 
 
 static const char **static_shaper_list;
 
 }
 
 
 static const char **static_shaper_list;
 
-static
+static inline
 void free_static_shaper_list (void)
 {
   free (static_shaper_list);
 }
 
 void free_static_shaper_list (void)
 {
   free (static_shaper_list);
 }
 
+/**
+ * hb_shape_list_shapers:
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
 const char **
 hb_shape_list_shapers (void)
 {
 const char **
 hb_shape_list_shapers (void)
 {
@@ -234,7 +320,7 @@ retry:
       goto retry;
     }
 
       goto retry;
     }
 
-#ifdef HAVE_ATEXIT
+#ifdef HB_USE_ATEXIT
     atexit (free_static_shaper_list); /* First person registers atexit() callback. */
 #endif
   }
     atexit (free_static_shaper_list); /* First person registers atexit() callback. */
 #endif
   }
@@ -243,6 +329,20 @@ retry:
 }
 
 
 }
 
 
+/**
+ * hb_shape_full:
+ * @font: a font.
+ * @buffer: a buffer.
+ * @features: (array length=num_features):
+ * @num_features: 
+ * @shaper_list: (array zero-terminated=1):
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_shape_full (hb_font_t          *font,
               hb_buffer_t        *buffer,
 hb_bool_t
 hb_shape_full (hb_font_t          *font,
               hb_buffer_t        *buffer,
@@ -255,8 +355,6 @@ hb_shape_full (hb_font_t          *font,
 
   assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
 
 
   assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
 
-  buffer->guess_segment_properties ();
-
   hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props, features, num_features, shaper_list);
   hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
   hb_shape_plan_destroy (shape_plan);
   hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props, features, num_features, shaper_list);
   hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
   hb_shape_plan_destroy (shape_plan);
@@ -266,6 +364,17 @@ hb_shape_full (hb_font_t          *font,
   return res;
 }
 
   return res;
 }
 
+/**
+ * hb_shape:
+ * @font: a font.
+ * @buffer: a buffer.
+ * @features: (array length=num_features):
+ * @num_features: 
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_shape (hb_font_t           *font,
          hb_buffer_t         *buffer,
 void
 hb_shape (hb_font_t           *font,
          hb_buffer_t         *buffer,
index b9c029e..6c537d4 100644 (file)
 /* Only picks up fonts that have a "Silf" table. */
 HB_SHAPER_IMPLEMENT (graphite2)
 #endif
 /* Only picks up fonts that have a "Silf" table. */
 HB_SHAPER_IMPLEMENT (graphite2)
 #endif
+#ifdef HAVE_CORETEXT
+/* Only picks up fonts that have a "mort" or "morx" table. */
+HB_SHAPER_IMPLEMENT (coretext_aat)
+#endif
 
 #ifdef HAVE_OT
 HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
 #endif
 
 
 #ifdef HAVE_OT
 HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
 #endif
 
-#ifdef HAVE_HB_OLD
-HB_SHAPER_IMPLEMENT (old)
-#endif
-#ifdef HAVE_ICU_LE
-HB_SHAPER_IMPLEMENT (icu_le)
-#endif
 #ifdef HAVE_UNISCRIBE
 HB_SHAPER_IMPLEMENT (uniscribe)
 #endif
 #ifdef HAVE_UNISCRIBE
 HB_SHAPER_IMPLEMENT (uniscribe)
 #endif
@@ -52,4 +50,6 @@ HB_SHAPER_IMPLEMENT (uniscribe)
 HB_SHAPER_IMPLEMENT (coretext)
 #endif
 
 HB_SHAPER_IMPLEMENT (coretext)
 #endif
 
+#ifdef HAVE_FALLBACK
 HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
 HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
+#endif
index 1c1aed9..6ae2601 100644 (file)
@@ -40,7 +40,7 @@ static const hb_shaper_pair_t all_shapers[] = {
 
 static const hb_shaper_pair_t *static_shapers;
 
 
 static const hb_shaper_pair_t *static_shapers;
 
-static
+static inline
 void free_static_shapers (void)
 {
   if (unlikely (static_shapers != all_shapers))
 void free_static_shapers (void)
 {
   if (unlikely (static_shapers != all_shapers))
@@ -100,7 +100,7 @@ retry:
       goto retry;
     }
 
       goto retry;
     }
 
-#ifdef HAVE_ATEXIT
+#ifdef HB_USE_ATEXIT
     atexit (free_static_shapers); /* First person registers atexit() callback. */
 #endif
   }
     atexit (free_static_shapers); /* First person registers atexit() callback. */
 #endif
   }
index 61e6ad3..5b53821 100644 (file)
@@ -49,7 +49,7 @@ static const hb_script_t ucdn_script_translate[] =
     HB_SCRIPT_HANGUL,
     HB_SCRIPT_ETHIOPIC,
     HB_SCRIPT_CHEROKEE,
     HB_SCRIPT_HANGUL,
     HB_SCRIPT_ETHIOPIC,
     HB_SCRIPT_CHEROKEE,
-    HB_SCRIPT_CANADIAN_ABORIGINAL,
+    HB_SCRIPT_CANADIAN_SYLLABICS,
     HB_SCRIPT_OGHAM,
     HB_SCRIPT_RUNIC,
     HB_SCRIPT_KHMER,
     HB_SCRIPT_OGHAM,
     HB_SCRIPT_RUNIC,
     HB_SCRIPT_KHMER,
@@ -125,6 +125,29 @@ static const hb_script_t ucdn_script_translate[] =
     HB_SCRIPT_SORA_SOMPENG,
     HB_SCRIPT_TAKRI,
     HB_SCRIPT_UNKNOWN,
     HB_SCRIPT_SORA_SOMPENG,
     HB_SCRIPT_TAKRI,
     HB_SCRIPT_UNKNOWN,
+    HB_SCRIPT_BASSA_VAH,
+    HB_SCRIPT_CAUCASIAN_ALBANIAN,
+    HB_SCRIPT_DUPLOYAN,
+    HB_SCRIPT_ELBASAN,
+    HB_SCRIPT_GRANTHA,
+    HB_SCRIPT_KHOJKI,
+    HB_SCRIPT_KHUDAWADI,
+    HB_SCRIPT_LINEAR_A,
+    HB_SCRIPT_MAHAJANI,
+    HB_SCRIPT_MANICHAEAN,
+    HB_SCRIPT_MENDE_KIKAKUI,
+    HB_SCRIPT_MODI,
+    HB_SCRIPT_MRO,
+    HB_SCRIPT_NABATAEAN,
+    HB_SCRIPT_OLD_NORTH_ARABIAN,
+    HB_SCRIPT_OLD_PERMIC,
+    HB_SCRIPT_PAHAWH_HMONG,
+    HB_SCRIPT_PALMYRENE,
+    HB_SCRIPT_PAU_CIN_HAU,
+    HB_SCRIPT_PSALTER_PAHLAVI,
+    HB_SCRIPT_SIDDHAM,
+    HB_SCRIPT_TIRHUTA,
+    HB_SCRIPT_WARANG_CITI,
 };
 
 static hb_unicode_combining_class_t
 };
 
 static hb_unicode_combining_class_t
index 40d6055..0670b5c 100644 (file)
@@ -7,7 +7,7 @@ libhb_ucdn_la_SOURCES = \
        ucdn.h \
        ucdn.c \
        unicodedata_db.h
        ucdn.h \
        ucdn.c \
        unicodedata_db.h
-libhb_ucdn_CPPFLAGS = \
+libhb_ucdn_la_CPPFLAGS = \
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
        -I$(top_builddir)/src
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
        -I$(top_builddir)/src
index 64e16d2..95f8ac6 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 VPATH = @srcdir@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -35,14 +79,14 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = src/hb-ucdn
 build_triplet = @build@
 host_triplet = @host@
 subdir = src/hb-ucdn
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-       COPYING
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp COPYING README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -51,11 +95,24 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libhb_ucdn_la_DEPENDENCIES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libhb_ucdn_la_DEPENDENCIES =
-am_libhb_ucdn_la_OBJECTS = ucdn.lo
+am_libhb_ucdn_la_OBJECTS = libhb_ucdn_la-ucdn.lo
 libhb_ucdn_la_OBJECTS = $(am_libhb_ucdn_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 libhb_ucdn_la_OBJECTS = $(am_libhb_ucdn_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -68,22 +125,40 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(libhb_ucdn_la_SOURCES)
 DIST_SOURCES = $(libhb_ucdn_la_SOURCES)
 SOURCES = $(libhb_ucdn_la_SOURCES)
 DIST_SOURCES = $(libhb_ucdn_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -124,6 +199,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -132,22 +208,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -177,6 +265,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -245,7 +334,7 @@ libhb_ucdn_la_SOURCES = \
        ucdn.c \
        unicodedata_db.h
 
        ucdn.c \
        unicodedata_db.h
 
-libhb_ucdn_CPPFLAGS = \
+libhb_ucdn_la_CPPFLAGS = \
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
        -I$(top_builddir)/src
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
        -I$(top_builddir)/src
@@ -289,12 +378,15 @@ $(am__aclocal_m4_deps):
 
 clean-noinstLTLIBRARIES:
        -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
 
 clean-noinstLTLIBRARIES:
        -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
 libhb-ucdn.la: $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_DEPENDENCIES) $(EXTRA_libhb_ucdn_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(LINK)  $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_LIBADD) $(LIBS)
 
 libhb-ucdn.la: $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_DEPENDENCIES) $(EXTRA_libhb_ucdn_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(LINK)  $(libhb_ucdn_la_OBJECTS) $(libhb_ucdn_la_LIBADD) $(LIBS)
 
@@ -304,21 +396,21 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ucdn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhb_ucdn_la-ucdn.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -327,32 +419,28 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libhb_ucdn_la-ucdn.lo: ucdn.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_ucdn_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhb_ucdn_la-ucdn.lo -MD -MP -MF $(DEPDIR)/libhb_ucdn_la-ucdn.Tpo -c -o libhb_ucdn_la-ucdn.lo `test -f 'ucdn.c' || echo '$(srcdir)/'`ucdn.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libhb_ucdn_la-ucdn.Tpo $(DEPDIR)/libhb_ucdn_la-ucdn.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ucdn.c' object='libhb_ucdn_la-ucdn.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhb_ucdn_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhb_ucdn_la-ucdn.lo `test -f 'ucdn.c' || echo '$(srcdir)/'`ucdn.c
+
 mostlyclean-libtool:
        -rm -f *.lo
 
 clean-libtool:
        -rm -rf .libs _libs
 
 mostlyclean-libtool:
        -rm -f *.lo
 
 clean-libtool:
        -rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -364,15 +452,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -381,6 +465,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -522,18 +621,19 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
 
 
 -include $(top_srcdir)/git.mk
 
 
 -include $(top_srcdir)/git.mk
index fcb97b9..2f3c552 100644 (file)
@@ -1,6 +1,7 @@
 Contents of this directory are derived from UCDN:
 
   https://github.com/grigorig/ucdn
 Contents of this directory are derived from UCDN:
 
   https://github.com/grigorig/ucdn
+  https://github.com/behdad/ucdn
 
 The original README follows:
 
 
 The original README follows:
 
index b61e34a..d1a4195 100644 (file)
@@ -16,7 +16,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdint.h>
 #include "ucdn.h"
 
 typedef struct {
 #include "ucdn.h"
 
 typedef struct {
@@ -34,7 +33,7 @@ typedef struct {
 } MirrorPair;
 
 typedef struct {
 } MirrorPair;
 
 typedef struct {
-    int start;
+    unsigned int start;
     short count, index;
 } Reindex;
 
     short count, index;
 } Reindex;
 
index 802f044..ec8085b 100644 (file)
 
 HB_BEGIN_HEADER
 
 
 HB_BEGIN_HEADER
 
-#include <stdint.h>
+#if !defined (HB_DONT_DEFINE_STDINT)
+
+#if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \
+    defined (_sgi) || defined (__sun) || defined (sun) || \
+    defined (__digital__) || defined (__HP_cc)
+#  include <inttypes.h>
+#elif defined (_AIX)
+#  include <sys/inttypes.h>
+/* VS 2010 (_MSC_VER 1600) has stdint.h */
+#elif defined (_MSC_VER) && _MSC_VER < 1600
+typedef __int8 int8_t;
+typedef unsigned __int8 uint8_t;
+typedef __int16 int16_t;
+typedef unsigned __int16 uint16_t;
+typedef __int32 int32_t;
+typedef unsigned __int32 uint32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+#  include <stdint.h>
+#endif
+
+#endif
 
 #define UCDN_EAST_ASIAN_F 0
 #define UCDN_EAST_ASIAN_H 1
 
 #define UCDN_EAST_ASIAN_F 0
 #define UCDN_EAST_ASIAN_H 1
@@ -146,6 +168,29 @@ HB_BEGIN_HEADER
 #define UCDN_SCRIPT_SORA_SOMPENG 100
 #define UCDN_SCRIPT_TAKRI 101
 #define UCDN_SCRIPT_UNKNOWN 102
 #define UCDN_SCRIPT_SORA_SOMPENG 100
 #define UCDN_SCRIPT_TAKRI 101
 #define UCDN_SCRIPT_UNKNOWN 102
+#define UCDN_SCRIPT_BASSA_VAH 103
+#define UCDN_SCRIPT_CAUCASIAN_ALBANIAN 104
+#define UCDN_SCRIPT_DUPLOYAN 105
+#define UCDN_SCRIPT_ELBASAN 106
+#define UCDN_SCRIPT_GRANTHA 107
+#define UCDN_SCRIPT_KHOJKI 108
+#define UCDN_SCRIPT_KHUDAWADI 109
+#define UCDN_SCRIPT_LINEAR_A 110
+#define UCDN_SCRIPT_MAHAJANI 111
+#define UCDN_SCRIPT_MANICHAEAN 112
+#define UCDN_SCRIPT_MENDE_KIKAKUI 113
+#define UCDN_SCRIPT_MODI 114
+#define UCDN_SCRIPT_MRO 115
+#define UCDN_SCRIPT_NABATAEAN 116
+#define UCDN_SCRIPT_OLD_NORTH_ARABIAN 117
+#define UCDN_SCRIPT_OLD_PERMIC 118
+#define UCDN_SCRIPT_PAHAWH_HMONG 119
+#define UCDN_SCRIPT_PALMYRENE 120
+#define UCDN_SCRIPT_PAU_CIN_HAU 121
+#define UCDN_SCRIPT_PSALTER_PAHLAVI 122
+#define UCDN_SCRIPT_SIDDHAM 123
+#define UCDN_SCRIPT_TIRHUTA 124
+#define UCDN_SCRIPT_WARANG_CITI 125
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
@@ -197,6 +242,10 @@ HB_BEGIN_HEADER
 #define UCDN_BIDI_CLASS_S 16
 #define UCDN_BIDI_CLASS_WS 17
 #define UCDN_BIDI_CLASS_ON 18
 #define UCDN_BIDI_CLASS_S 16
 #define UCDN_BIDI_CLASS_WS 17
 #define UCDN_BIDI_CLASS_ON 18
+#define UCDN_BIDI_CLASS_LRI 19
+#define UCDN_BIDI_CLASS_RLI 20
+#define UCDN_BIDI_CLASS_FSI 21
+#define UCDN_BIDI_CLASS_PDI 22
 
 /**
  * Return version of the Unicode database.
 
 /**
  * Return version of the Unicode database.
index 20244ac..a78d2e6 100644 (file)
@@ -1,6 +1,6 @@
 /* this file was generated by makeunicodedata.py 3.2 */
 
 /* this file was generated by makeunicodedata.py 3.2 */
 
-#define UNIDATA_VERSION "6.2.0"
+#define UNIDATA_VERSION "7.0.0"
 /* a list of unique database records */
 static const UCDRecord ucd_records[] = {
     {2, 0, 18, 0, 5, 0, 102},
 /* a list of unique database records */
 static const UCDRecord ucd_records[] = {
     {2, 0, 18, 0, 5, 0, 102},
@@ -89,6 +89,7 @@ static const UCDRecord ucd_records[] = {
     {5, 0, 0, 0, 5, 0, 4},
     {21, 0, 0, 0, 5, 0, 0},
     {17, 0, 18, 0, 5, 0, 4},
     {5, 0, 0, 0, 5, 0, 4},
     {21, 0, 0, 0, 5, 0, 0},
     {17, 0, 18, 0, 5, 0, 4},
+    {26, 0, 18, 0, 5, 0, 4},
     {23, 0, 10, 0, 5, 0, 4},
     {12, 220, 13, 0, 5, 0, 5},
     {12, 230, 13, 0, 5, 0, 5},
     {23, 0, 10, 0, 5, 0, 4},
     {12, 220, 13, 0, 5, 0, 5},
     {12, 230, 13, 0, 5, 0, 5},
@@ -114,6 +115,7 @@ static const UCDRecord ucd_records[] = {
     {12, 25, 13, 0, 5, 0, 5},
     {7, 0, 3, 0, 5, 0, 5},
     {1, 0, 11, 0, 5, 0, 6},
     {12, 25, 13, 0, 5, 0, 5},
     {7, 0, 3, 0, 5, 0, 5},
     {1, 0, 11, 0, 5, 0, 6},
+    {1, 0, 11, 0, 5, 0, 0},
     {25, 0, 18, 0, 5, 0, 6},
     {25, 0, 4, 0, 5, 0, 6},
     {21, 0, 10, 0, 5, 0, 6},
     {25, 0, 18, 0, 5, 0, 6},
     {25, 0, 4, 0, 5, 0, 6},
     {21, 0, 10, 0, 5, 0, 6},
@@ -126,6 +128,7 @@ static const UCDRecord ucd_records[] = {
     {12, 31, 13, 0, 5, 0, 6},
     {12, 32, 13, 0, 5, 0, 6},
     {21, 0, 4, 0, 5, 0, 0},
     {12, 31, 13, 0, 5, 0, 6},
     {12, 32, 13, 0, 5, 0, 6},
     {21, 0, 4, 0, 5, 0, 0},
+    {1, 0, 4, 0, 5, 0, 0},
     {7, 0, 4, 0, 5, 0, 6},
     {6, 0, 4, 0, 5, 0, 0},
     {12, 27, 13, 0, 5, 0, 40},
     {7, 0, 4, 0, 5, 0, 6},
     {6, 0, 4, 0, 5, 0, 0},
     {12, 27, 13, 0, 5, 0, 40},
@@ -141,7 +144,6 @@ static const UCDRecord ucd_records[] = {
     {13, 0, 11, 0, 5, 0, 0},
     {21, 0, 11, 0, 5, 0, 6},
     {12, 35, 13, 0, 5, 0, 40},
     {13, 0, 11, 0, 5, 0, 0},
     {21, 0, 11, 0, 5, 0, 6},
     {12, 35, 13, 0, 5, 0, 40},
-    {1, 0, 11, 0, 5, 0, 0},
     {6, 0, 4, 0, 5, 0, 6},
     {13, 0, 8, 0, 5, 0, 6},
     {26, 0, 4, 0, 5, 0, 6},
     {6, 0, 4, 0, 5, 0, 6},
     {13, 0, 8, 0, 5, 0, 6},
     {26, 0, 4, 0, 5, 0, 6},
@@ -179,9 +181,9 @@ static const UCDRecord ucd_records[] = {
     {13, 0, 0, 0, 5, 0, 9},
     {21, 0, 0, 0, 5, 0, 9},
     {6, 0, 0, 0, 5, 0, 9},
     {13, 0, 0, 0, 5, 0, 9},
     {21, 0, 0, 0, 5, 0, 9},
     {6, 0, 0, 0, 5, 0, 9},
+    {7, 0, 0, 0, 5, 0, 10},
     {12, 0, 13, 0, 5, 0, 10},
     {10, 0, 0, 0, 5, 0, 10},
     {12, 0, 13, 0, 5, 0, 10},
     {10, 0, 0, 0, 5, 0, 10},
-    {7, 0, 0, 0, 5, 0, 10},
     {12, 7, 13, 0, 5, 0, 10},
     {12, 9, 13, 0, 5, 0, 10},
     {13, 0, 0, 0, 5, 0, 10},
     {12, 7, 13, 0, 5, 0, 10},
     {12, 9, 13, 0, 5, 0, 10},
     {13, 0, 0, 0, 5, 0, 10},
@@ -218,25 +220,25 @@ static const UCDRecord ucd_records[] = {
     {15, 0, 0, 0, 5, 0, 14},
     {26, 0, 18, 0, 5, 0, 14},
     {23, 0, 10, 0, 5, 0, 14},
     {15, 0, 0, 0, 5, 0, 14},
     {26, 0, 18, 0, 5, 0, 14},
     {23, 0, 10, 0, 5, 0, 14},
+    {12, 0, 13, 0, 5, 0, 15},
     {10, 0, 0, 0, 5, 0, 15},
     {7, 0, 0, 0, 5, 0, 15},
     {10, 0, 0, 0, 5, 0, 15},
     {7, 0, 0, 0, 5, 0, 15},
-    {12, 0, 13, 0, 5, 0, 15},
     {12, 9, 13, 0, 5, 0, 15},
     {12, 84, 13, 0, 5, 0, 15},
     {12, 91, 13, 0, 5, 0, 15},
     {13, 0, 0, 0, 5, 0, 15},
     {15, 0, 18, 0, 5, 0, 15},
     {26, 0, 0, 0, 5, 0, 15},
     {12, 9, 13, 0, 5, 0, 15},
     {12, 84, 13, 0, 5, 0, 15},
     {12, 91, 13, 0, 5, 0, 15},
     {13, 0, 0, 0, 5, 0, 15},
     {15, 0, 18, 0, 5, 0, 15},
     {26, 0, 0, 0, 5, 0, 15},
+    {12, 0, 13, 0, 5, 0, 16},
     {10, 0, 0, 0, 5, 0, 16},
     {7, 0, 0, 0, 5, 0, 16},
     {12, 7, 13, 0, 5, 0, 16},
     {12, 0, 0, 0, 5, 0, 16},
     {10, 0, 0, 0, 5, 0, 16},
     {7, 0, 0, 0, 5, 0, 16},
     {12, 7, 13, 0, 5, 0, 16},
     {12, 0, 0, 0, 5, 0, 16},
-    {12, 0, 13, 0, 5, 0, 16},
     {12, 9, 13, 0, 5, 0, 16},
     {13, 0, 0, 0, 5, 0, 16},
     {12, 9, 13, 0, 5, 0, 16},
     {13, 0, 0, 0, 5, 0, 16},
+    {12, 0, 13, 0, 5, 0, 17},
     {10, 0, 0, 0, 5, 0, 17},
     {7, 0, 0, 0, 5, 0, 17},
     {10, 0, 0, 0, 5, 0, 17},
     {7, 0, 0, 0, 5, 0, 17},
-    {12, 0, 13, 0, 5, 0, 17},
     {12, 9, 13, 0, 5, 0, 17},
     {13, 0, 0, 0, 5, 0, 17},
     {15, 0, 0, 0, 5, 0, 17},
     {12, 9, 13, 0, 5, 0, 17},
     {13, 0, 0, 0, 5, 0, 17},
     {15, 0, 0, 0, 5, 0, 17},
@@ -245,6 +247,7 @@ static const UCDRecord ucd_records[] = {
     {7, 0, 0, 0, 5, 0, 18},
     {12, 9, 13, 0, 5, 0, 18},
     {12, 0, 13, 0, 5, 0, 18},
     {7, 0, 0, 0, 5, 0, 18},
     {12, 9, 13, 0, 5, 0, 18},
     {12, 0, 13, 0, 5, 0, 18},
+    {13, 0, 0, 0, 5, 0, 18},
     {21, 0, 0, 0, 5, 0, 18},
     {7, 0, 0, 0, 5, 0, 19},
     {12, 0, 13, 0, 5, 0, 19},
     {21, 0, 0, 0, 5, 0, 18},
     {7, 0, 0, 0, 5, 0, 19},
     {12, 0, 13, 0, 5, 0, 19},
@@ -330,7 +333,7 @@ static const UCDRecord ucd_records[] = {
     {21, 0, 18, 0, 5, 0, 31},
     {17, 0, 18, 0, 5, 0, 31},
     {12, 0, 13, 0, 5, 0, 31},
     {21, 0, 18, 0, 5, 0, 31},
     {17, 0, 18, 0, 5, 0, 31},
     {12, 0, 13, 0, 5, 0, 31},
-    {29, 0, 17, 0, 5, 0, 31},
+    {1, 0, 14, 0, 5, 0, 31},
     {13, 0, 0, 0, 5, 0, 31},
     {7, 0, 0, 0, 5, 0, 31},
     {6, 0, 0, 0, 5, 0, 31},
     {13, 0, 0, 0, 5, 0, 31},
     {7, 0, 0, 0, 5, 0, 31},
     {6, 0, 0, 0, 5, 0, 31},
@@ -355,6 +358,7 @@ static const UCDRecord ucd_records[] = {
     {12, 230, 13, 0, 5, 0, 53},
     {12, 220, 13, 0, 5, 0, 53},
     {10, 0, 0, 0, 5, 0, 53},
     {12, 230, 13, 0, 5, 0, 53},
     {12, 220, 13, 0, 5, 0, 53},
     {10, 0, 0, 0, 5, 0, 53},
+    {12, 0, 13, 0, 5, 0, 53},
     {21, 0, 0, 0, 5, 0, 53},
     {7, 0, 0, 0, 5, 0, 77},
     {10, 0, 0, 0, 5, 0, 77},
     {21, 0, 0, 0, 5, 0, 53},
     {7, 0, 0, 0, 5, 0, 77},
     {10, 0, 0, 0, 5, 0, 77},
@@ -365,6 +369,7 @@ static const UCDRecord ucd_records[] = {
     {13, 0, 0, 0, 5, 0, 77},
     {21, 0, 0, 0, 5, 0, 77},
     {6, 0, 0, 0, 5, 0, 77},
     {13, 0, 0, 0, 5, 0, 77},
     {21, 0, 0, 0, 5, 0, 77},
     {6, 0, 0, 0, 5, 0, 77},
+    {11, 0, 13, 0, 5, 0, 40},
     {12, 0, 13, 0, 5, 0, 61},
     {10, 0, 0, 0, 5, 0, 61},
     {7, 0, 0, 0, 5, 0, 61},
     {12, 0, 13, 0, 5, 0, 61},
     {10, 0, 0, 0, 5, 0, 61},
     {7, 0, 0, 0, 5, 0, 61},
@@ -432,11 +437,14 @@ static const UCDRecord ucd_records[] = {
     {22, 0, 18, 1, 5, 0, 0},
     {18, 0, 18, 1, 5, 0, 0},
     {25, 0, 18, 0, 5, 0, 0},
     {22, 0, 18, 1, 5, 0, 0},
     {18, 0, 18, 1, 5, 0, 0},
     {25, 0, 18, 0, 5, 0, 0},
+    {1, 0, 19, 0, 5, 0, 0},
+    {1, 0, 20, 0, 5, 0, 0},
+    {1, 0, 21, 0, 5, 0, 0},
+    {1, 0, 22, 0, 5, 0, 0},
     {15, 0, 8, 0, 5, 0, 0},
     {25, 0, 9, 0, 5, 0, 0},
     {6, 0, 0, 0, 4, 0, 1},
     {23, 0, 10, 0, 1, 0, 0},
     {15, 0, 8, 0, 5, 0, 0},
     {25, 0, 9, 0, 5, 0, 0},
     {6, 0, 0, 0, 4, 0, 1},
     {23, 0, 10, 0, 1, 0, 0},
-    {11, 0, 13, 0, 5, 0, 40},
     {9, 0, 0, 0, 5, 0, 0},
     {5, 0, 0, 0, 4, 0, 0},
     {26, 0, 10, 0, 5, 0, 0},
     {9, 0, 0, 0, 5, 0, 0},
     {5, 0, 0, 0, 4, 0, 0},
     {26, 0, 10, 0, 5, 0, 0},
@@ -541,14 +549,13 @@ static const UCDRecord ucd_records[] = {
     {12, 7, 13, 0, 5, 0, 84},
     {10, 9, 0, 0, 5, 0, 84},
     {21, 0, 0, 0, 5, 0, 84},
     {12, 7, 13, 0, 5, 0, 84},
     {10, 9, 0, 0, 5, 0, 84},
     {21, 0, 0, 0, 5, 0, 84},
-    {6, 0, 0, 0, 5, 0, 84},
     {13, 0, 0, 0, 5, 0, 84},
     {13, 0, 0, 0, 5, 0, 84},
+    {6, 0, 0, 0, 5, 0, 22},
     {7, 0, 0, 0, 5, 0, 76},
     {12, 0, 13, 0, 5, 0, 76},
     {10, 0, 0, 0, 5, 0, 76},
     {13, 0, 0, 0, 5, 0, 76},
     {21, 0, 0, 0, 5, 0, 76},
     {7, 0, 0, 0, 5, 0, 76},
     {12, 0, 13, 0, 5, 0, 76},
     {10, 0, 0, 0, 5, 0, 76},
     {13, 0, 0, 0, 5, 0, 76},
     {21, 0, 0, 0, 5, 0, 76},
-    {6, 0, 0, 0, 5, 0, 22},
     {7, 0, 0, 0, 5, 0, 78},
     {12, 230, 13, 0, 5, 0, 78},
     {12, 220, 13, 0, 5, 0, 78},
     {7, 0, 0, 0, 5, 0, 78},
     {12, 230, 13, 0, 5, 0, 78},
     {12, 220, 13, 0, 5, 0, 78},
@@ -612,6 +619,8 @@ static const UCDRecord ucd_records[] = {
     {15, 0, 0, 0, 5, 0, 37},
     {7, 0, 0, 0, 5, 0, 38},
     {14, 0, 0, 0, 5, 0, 38},
     {15, 0, 0, 0, 5, 0, 37},
     {7, 0, 0, 0, 5, 0, 38},
     {14, 0, 0, 0, 5, 0, 38},
+    {7, 0, 0, 0, 5, 0, 118},
+    {12, 230, 13, 0, 5, 0, 118},
     {7, 0, 0, 0, 5, 0, 48},
     {21, 0, 0, 0, 5, 0, 48},
     {7, 0, 0, 0, 5, 0, 59},
     {7, 0, 0, 0, 5, 0, 48},
     {21, 0, 0, 0, 5, 0, 48},
     {7, 0, 0, 0, 5, 0, 59},
@@ -622,10 +631,19 @@ static const UCDRecord ucd_records[] = {
     {7, 0, 0, 0, 5, 0, 49},
     {7, 0, 0, 0, 5, 0, 50},
     {13, 0, 0, 0, 5, 0, 50},
     {7, 0, 0, 0, 5, 0, 49},
     {7, 0, 0, 0, 5, 0, 50},
     {13, 0, 0, 0, 5, 0, 50},
+    {7, 0, 0, 0, 5, 0, 106},
+    {7, 0, 0, 0, 5, 0, 104},
+    {21, 0, 0, 0, 5, 0, 104},
+    {7, 0, 0, 0, 5, 0, 110},
     {7, 0, 3, 0, 5, 0, 51},
     {7, 0, 3, 0, 5, 0, 86},
     {21, 0, 3, 0, 5, 0, 86},
     {15, 0, 3, 0, 5, 0, 86},
     {7, 0, 3, 0, 5, 0, 51},
     {7, 0, 3, 0, 5, 0, 86},
     {21, 0, 3, 0, 5, 0, 86},
     {15, 0, 3, 0, 5, 0, 86},
+    {7, 0, 3, 0, 5, 0, 120},
+    {26, 0, 3, 0, 5, 0, 120},
+    {15, 0, 3, 0, 5, 0, 120},
+    {7, 0, 3, 0, 5, 0, 116},
+    {15, 0, 3, 0, 5, 0, 116},
     {7, 0, 3, 0, 5, 0, 63},
     {15, 0, 3, 0, 5, 0, 63},
     {21, 0, 18, 0, 5, 0, 63},
     {7, 0, 3, 0, 5, 0, 63},
     {15, 0, 3, 0, 5, 0, 63},
     {21, 0, 18, 0, 5, 0, 63},
@@ -644,12 +662,23 @@ static const UCDRecord ucd_records[] = {
     {7, 0, 3, 0, 5, 0, 87},
     {15, 0, 3, 0, 5, 0, 87},
     {21, 0, 3, 0, 5, 0, 87},
     {7, 0, 3, 0, 5, 0, 87},
     {15, 0, 3, 0, 5, 0, 87},
     {21, 0, 3, 0, 5, 0, 87},
+    {7, 0, 3, 0, 5, 0, 117},
+    {15, 0, 3, 0, 5, 0, 117},
+    {7, 0, 3, 0, 5, 0, 112},
+    {26, 0, 3, 0, 5, 0, 112},
+    {12, 230, 13, 0, 5, 0, 112},
+    {12, 220, 13, 0, 5, 0, 112},
+    {15, 0, 3, 0, 5, 0, 112},
+    {21, 0, 3, 0, 5, 0, 112},
     {7, 0, 3, 0, 5, 0, 79},
     {21, 0, 18, 0, 5, 0, 79},
     {7, 0, 3, 0, 5, 0, 88},
     {15, 0, 3, 0, 5, 0, 88},
     {7, 0, 3, 0, 5, 0, 89},
     {15, 0, 3, 0, 5, 0, 89},
     {7, 0, 3, 0, 5, 0, 79},
     {21, 0, 18, 0, 5, 0, 79},
     {7, 0, 3, 0, 5, 0, 88},
     {15, 0, 3, 0, 5, 0, 88},
     {7, 0, 3, 0, 5, 0, 89},
     {15, 0, 3, 0, 5, 0, 89},
+    {7, 0, 3, 0, 5, 0, 122},
+    {21, 0, 3, 0, 5, 0, 122},
+    {15, 0, 3, 0, 5, 0, 122},
     {7, 0, 3, 0, 5, 0, 90},
     {15, 0, 11, 0, 5, 0, 6},
     {10, 0, 0, 0, 5, 0, 93},
     {7, 0, 3, 0, 5, 0, 90},
     {15, 0, 11, 0, 5, 0, 6},
     {10, 0, 0, 0, 5, 0, 93},
@@ -675,31 +704,99 @@ static const UCDRecord ucd_records[] = {
     {12, 9, 13, 0, 5, 0, 95},
     {13, 0, 0, 0, 5, 0, 95},
     {21, 0, 0, 0, 5, 0, 95},
     {12, 9, 13, 0, 5, 0, 95},
     {13, 0, 0, 0, 5, 0, 95},
     {21, 0, 0, 0, 5, 0, 95},
+    {7, 0, 0, 0, 5, 0, 111},
+    {12, 7, 13, 0, 5, 0, 111},
+    {21, 0, 0, 0, 5, 0, 111},
     {12, 0, 13, 0, 5, 0, 99},
     {10, 0, 0, 0, 5, 0, 99},
     {7, 0, 0, 0, 5, 0, 99},
     {10, 9, 0, 0, 5, 0, 99},
     {21, 0, 0, 0, 5, 0, 99},
     {13, 0, 0, 0, 5, 0, 99},
     {12, 0, 13, 0, 5, 0, 99},
     {10, 0, 0, 0, 5, 0, 99},
     {7, 0, 0, 0, 5, 0, 99},
     {10, 9, 0, 0, 5, 0, 99},
     {21, 0, 0, 0, 5, 0, 99},
     {13, 0, 0, 0, 5, 0, 99},
+    {15, 0, 0, 0, 5, 0, 18},
+    {7, 0, 0, 0, 5, 0, 108},
+    {10, 0, 0, 0, 5, 0, 108},
+    {12, 0, 13, 0, 5, 0, 108},
+    {10, 9, 0, 0, 5, 0, 108},
+    {12, 7, 13, 0, 5, 0, 108},
+    {21, 0, 0, 0, 5, 0, 108},
+    {7, 0, 0, 0, 5, 0, 109},
+    {12, 0, 13, 0, 5, 0, 109},
+    {10, 0, 0, 0, 5, 0, 109},
+    {12, 7, 13, 0, 5, 0, 109},
+    {12, 9, 13, 0, 5, 0, 109},
+    {13, 0, 0, 0, 5, 0, 109},
+    {12, 0, 13, 0, 5, 0, 107},
+    {10, 0, 0, 0, 5, 0, 107},
+    {7, 0, 0, 0, 5, 0, 107},
+    {12, 7, 13, 0, 5, 0, 107},
+    {10, 9, 0, 0, 5, 0, 107},
+    {12, 230, 13, 0, 5, 0, 107},
+    {7, 0, 0, 0, 5, 0, 124},
+    {10, 0, 0, 0, 5, 0, 124},
+    {12, 0, 13, 0, 5, 0, 124},
+    {12, 9, 13, 0, 5, 0, 124},
+    {12, 7, 13, 0, 5, 0, 124},
+    {21, 0, 0, 0, 5, 0, 124},
+    {13, 0, 0, 0, 5, 0, 124},
+    {7, 0, 0, 0, 5, 0, 123},
+    {10, 0, 0, 0, 5, 0, 123},
+    {12, 0, 13, 0, 5, 0, 123},
+    {12, 9, 13, 0, 5, 0, 123},
+    {12, 7, 13, 0, 5, 0, 123},
+    {21, 0, 0, 0, 5, 0, 123},
+    {7, 0, 0, 0, 5, 0, 114},
+    {10, 0, 0, 0, 5, 0, 114},
+    {12, 0, 13, 0, 5, 0, 114},
+    {12, 9, 13, 0, 5, 0, 114},
+    {21, 0, 0, 0, 5, 0, 114},
+    {13, 0, 0, 0, 5, 0, 114},
     {7, 0, 0, 0, 5, 0, 101},
     {12, 0, 13, 0, 5, 0, 101},
     {10, 0, 0, 0, 5, 0, 101},
     {10, 9, 0, 0, 5, 0, 101},
     {12, 7, 13, 0, 5, 0, 101},
     {13, 0, 0, 0, 5, 0, 101},
     {7, 0, 0, 0, 5, 0, 101},
     {12, 0, 13, 0, 5, 0, 101},
     {10, 0, 0, 0, 5, 0, 101},
     {10, 9, 0, 0, 5, 0, 101},
     {12, 7, 13, 0, 5, 0, 101},
     {13, 0, 0, 0, 5, 0, 101},
+    {9, 0, 0, 0, 5, 0, 125},
+    {5, 0, 0, 0, 5, 0, 125},
+    {13, 0, 0, 0, 5, 0, 125},
+    {15, 0, 0, 0, 5, 0, 125},
+    {7, 0, 0, 0, 5, 0, 125},
+    {7, 0, 0, 0, 5, 0, 121},
     {7, 0, 0, 0, 5, 0, 62},
     {14, 0, 0, 0, 5, 0, 62},
     {21, 0, 0, 0, 5, 0, 62},
     {7, 0, 0, 0, 5, 0, 80},
     {7, 0, 0, 0, 5, 0, 62},
     {14, 0, 0, 0, 5, 0, 62},
     {21, 0, 0, 0, 5, 0, 62},
     {7, 0, 0, 0, 5, 0, 80},
+    {7, 0, 0, 0, 5, 0, 115},
+    {13, 0, 0, 0, 5, 0, 115},
+    {21, 0, 0, 0, 5, 0, 115},
+    {7, 0, 0, 0, 5, 0, 103},
+    {12, 1, 13, 0, 5, 0, 103},
+    {21, 0, 0, 0, 5, 0, 103},
+    {7, 0, 0, 0, 5, 0, 119},
+    {12, 230, 13, 0, 5, 0, 119},
+    {21, 0, 0, 0, 5, 0, 119},
+    {26, 0, 0, 0, 5, 0, 119},
+    {6, 0, 0, 0, 5, 0, 119},
+    {13, 0, 0, 0, 5, 0, 119},
+    {15, 0, 0, 0, 5, 0, 119},
     {7, 0, 0, 0, 5, 0, 98},
     {10, 0, 0, 0, 5, 0, 98},
     {12, 0, 13, 0, 5, 0, 98},
     {6, 0, 0, 0, 5, 0, 98},
     {7, 0, 0, 0, 5, 0, 98},
     {10, 0, 0, 0, 5, 0, 98},
     {12, 0, 13, 0, 5, 0, 98},
     {6, 0, 0, 0, 5, 0, 98},
+    {7, 0, 0, 0, 5, 0, 105},
+    {26, 0, 0, 0, 5, 0, 105},
+    {12, 0, 13, 0, 5, 0, 105},
+    {12, 1, 13, 0, 5, 0, 105},
+    {21, 0, 0, 0, 5, 0, 105},
     {10, 216, 0, 0, 5, 0, 0},
     {10, 226, 0, 0, 5, 0, 0},
     {12, 230, 13, 0, 5, 0, 2},
     {25, 0, 0, 0, 5, 0, 0},
     {13, 0, 8, 0, 5, 0, 0},
     {10, 216, 0, 0, 5, 0, 0},
     {10, 226, 0, 0, 5, 0, 0},
     {12, 230, 13, 0, 5, 0, 2},
     {25, 0, 0, 0, 5, 0, 0},
     {13, 0, 8, 0, 5, 0, 0},
+    {7, 0, 3, 0, 5, 0, 113},
+    {15, 0, 3, 0, 5, 0, 113},
+    {12, 220, 13, 0, 5, 0, 113},
     {26, 0, 0, 0, 2, 0, 32},
 };
 
     {26, 0, 0, 0, 2, 0, 32},
 };
 
@@ -1072,8 +1169,8 @@ static const MirrorPair mirror_pairs[] = {
 };
 
 /* Reindexing of NFC first characters. */
 };
 
 /* Reindexing of NFC first characters. */
-#define TOTAL_FIRST 372
-#define TOTAL_LAST 56
+#define TOTAL_FIRST 376
+#define TOTAL_LAST 62
 static const Reindex nfc_first[] = {
   { 60, 2, 0},
   { 65, 15, 3},
 static const Reindex nfc_first[] = {
   { 60, 2, 0},
   { 65, 15, 3},
@@ -1282,6 +1379,9 @@ static const Reindex nfc_first[] = {
   { 69787, 0, 368},
   { 69797, 0, 369},
   { 69937, 1, 370},
   { 69787, 0, 368},
   { 69797, 0, 369},
   { 69937, 1, 370},
+  { 70471, 0, 372},
+  { 70841, 0, 373},
+  { 71096, 1, 374},
   {0,0,0}
 };
 
   {0,0,0}
 };
 
@@ -1319,6 +1419,12 @@ static const Reindex nfc_last[] = {
   { 12441, 1, 52},
   { 69818, 0, 54},
   { 69927, 0, 55},
   { 12441, 1, 52},
   { 69818, 0, 54},
   { 69927, 0, 55},
+  { 70462, 0, 56},
+  { 70487, 0, 57},
+  { 70832, 0, 58},
+  { 70842, 0, 59},
+  { 70845, 0, 60},
+  { 71087, 0, 61},
   {0,0,0}
 };
 
   {0,0,0}
 };
 
@@ -1432,6 +1538,29 @@ static const Reindex nfc_last[] = {
 #define UCDN_SCRIPT_SORA_SOMPENG 100
 #define UCDN_SCRIPT_TAKRI 101
 #define UCDN_SCRIPT_UNKNOWN 102
 #define UCDN_SCRIPT_SORA_SOMPENG 100
 #define UCDN_SCRIPT_TAKRI 101
 #define UCDN_SCRIPT_UNKNOWN 102
+#define UCDN_SCRIPT_BASSA_VAH 103
+#define UCDN_SCRIPT_CAUCASIAN_ALBANIAN 104
+#define UCDN_SCRIPT_DUPLOYAN 105
+#define UCDN_SCRIPT_ELBASAN 106
+#define UCDN_SCRIPT_GRANTHA 107
+#define UCDN_SCRIPT_KHOJKI 108
+#define UCDN_SCRIPT_KHUDAWADI 109
+#define UCDN_SCRIPT_LINEAR_A 110
+#define UCDN_SCRIPT_MAHAJANI 111
+#define UCDN_SCRIPT_MANICHAEAN 112
+#define UCDN_SCRIPT_MENDE_KIKAKUI 113
+#define UCDN_SCRIPT_MODI 114
+#define UCDN_SCRIPT_MRO 115
+#define UCDN_SCRIPT_NABATAEAN 116
+#define UCDN_SCRIPT_OLD_NORTH_ARABIAN 117
+#define UCDN_SCRIPT_OLD_PERMIC 118
+#define UCDN_SCRIPT_PAHAWH_HMONG 119
+#define UCDN_SCRIPT_PALMYRENE 120
+#define UCDN_SCRIPT_PAU_CIN_HAU 121
+#define UCDN_SCRIPT_PSALTER_PAHLAVI 122
+#define UCDN_SCRIPT_SIDDHAM 123
+#define UCDN_SCRIPT_TIRHUTA 124
+#define UCDN_SCRIPT_WARANG_CITI 125
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
@@ -1483,6 +1612,10 @@ static const Reindex nfc_last[] = {
 #define UCDN_BIDI_CLASS_S 16
 #define UCDN_BIDI_CLASS_WS 17
 #define UCDN_BIDI_CLASS_ON 18
 #define UCDN_BIDI_CLASS_S 16
 #define UCDN_BIDI_CLASS_WS 17
 #define UCDN_BIDI_CLASS_ON 18
+#define UCDN_BIDI_CLASS_LRI 19
+#define UCDN_BIDI_CLASS_RLI 20
+#define UCDN_BIDI_CLASS_FSI 21
+#define UCDN_BIDI_CLASS_PDI 22
 
 /* index tables for the database records */
 #define SHIFT1 5
 
 /* index tables for the database records */
 #define SHIFT1 5
@@ -1502,21 +1635,21 @@ static const unsigned char index0[] = {
     67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 69, 70, 70, 
     71, 69, 70, 70, 72, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 76, 77, 78, 79, 80, 81, 
     67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 69, 70, 70, 
     71, 69, 70, 70, 72, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 76, 77, 78, 79, 80, 81, 
-    82, 83, 84, 85, 86, 87, 70, 70, 70, 88, 89, 90, 91, 92, 70, 93, 70, 94
-    95, 70, 70, 70, 70, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 97, 97, 97
-    98, 99, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 100, 100, 100, 100
-    101, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 70, 96, 70, 97
+    98, 99, 100, 101, 102, 103, 70, 104, 70, 105, 70, 70, 70, 70, 70, 106
+    106, 106, 107, 108, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 109, 109
+    109, 109, 110, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 102, 102, 
-    103, 70, 70, 70, 70, 104, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 111, 111, 112, 113, 70, 70, 70, 114, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 106, 107, 108, 109, 110, 
-    111, 112, 113, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 70, 70, 114, 70, 115, 116, 117, 118, 119, 120, 
-    121, 122, 70, 70, 70, 70, 70, 70, 70, 70, 52, 53, 53, 53, 53, 53, 53, 53, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 115, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 116, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 117, 118, 
+    119, 120, 121, 122, 123, 124, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 125, 70, 70, 70, 70, 70, 126, 70, 127, 128, 129, 130, 
+    131, 132, 133, 134, 135, 70, 70, 70, 70, 70, 70, 70, 52, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
@@ -1525,32 +1658,32 @@ static const unsigned char index0[] = {
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
     53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 
-    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 123, 52, 53, 53
-    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 124, 125, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 76, 76, 127, 126, 126, 126, 126, 128, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126
-    126, 128, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 136
+    52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 137, 138
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 76, 76, 140, 139, 139, 139, 139, 141
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139
+    139, 139, 139, 141, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
@@ -1692,7 +1825,7 @@ static const unsigned char index0[] = {
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 129, 130, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 142, 143, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
@@ -1706,7 +1839,8 @@ static const unsigned char index0[] = {
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
     70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
-    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 73, 74, 74, 74, 74, 74, 74, 74, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 73, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
@@ -1719,8 +1853,8 @@ static const unsigned char index0[] = {
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 144, 73, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
-    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 131, 73, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
@@ -1734,7 +1868,7 @@ static const unsigned char index0[] = {
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
     74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
-    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 131
+    74, 74, 144
 };
 
 static const unsigned short index1[] = {
 };
 
 static const unsigned short index1[] = {
@@ -1747,299 +1881,332 @@ static const unsigned short index1[] = {
     79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
     97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 101, 101, 101, 101, 102, 103, 
     101, 101, 101, 101, 101, 101, 104, 105, 101, 101, 101, 101, 101, 101, 
     79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
     97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 101, 101, 101, 101, 102, 103, 
     101, 101, 101, 101, 101, 101, 104, 105, 101, 101, 101, 101, 101, 101, 
-    101, 101, 101, 101, 101, 106, 107, 108, 108, 108, 109, 110, 111, 112
-    112, 112, 112, 113, 114, 115, 116, 117, 118, 119, 120, 106, 121, 121, 
-    121, 122, 123, 106, 124, 125, 126, 127, 128, 128, 128, 128, 129, 130, 
+    101, 101, 101, 101, 101, 101, 106, 107, 107, 107, 108, 109, 110, 111
+    111, 111, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 121, 
+    121, 122, 123, 120, 124, 125, 126, 127, 128, 128, 128, 128, 129, 130, 
     131, 132, 133, 134, 135, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 145, 145, 
     146, 147, 148, 149, 128, 128, 128, 128, 128, 128, 150, 150, 150, 150, 
     131, 132, 133, 134, 135, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 145, 145, 
     146, 147, 148, 149, 128, 128, 128, 128, 128, 128, 150, 150, 150, 150, 
-    151, 152, 153, 106, 154, 155, 156, 156, 156, 157, 158, 159, 160, 160, 
-    161, 162, 163, 164, 165, 166, 167, 167, 167, 168, 106, 106, 106, 106
-    106, 106, 106, 106, 169, 170, 106, 106, 106, 106, 106, 106, 171, 172
-    173, 174, 175, 176, 176, 176, 176, 176, 176, 177, 178, 179, 180, 176
-    181, 182, 183, 184, 185, 186, 187, 188, 188, 189, 190, 191, 192, 193
-    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 203, 204, 205, 206
-    207, 208, 209, 210, 211, 212, 213, 106, 214, 215, 216, 217, 217, 218
-    219, 220, 221, 222, 223, 106, 224, 225, 226, 106, 227, 228, 229, 230
-    230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 106, 241, 242
-    243, 244, 245, 242, 246, 247, 248, 249, 250, 106, 251, 252, 253, 254
-    255, 256, 257, 258, 258, 257, 259, 260, 261, 262, 263, 264, 265, 266
-    106, 267, 268, 269, 270, 271, 271, 270, 272, 273, 274, 275, 276, 277
-    278, 279, 280, 106, 281, 282, 283, 284, 284, 284, 284, 285, 286, 287
-    288, 106, 289, 290, 291, 292, 293, 294, 295, 296, 294, 294, 297, 298
-    295, 299, 300, 301, 106, 106, 302, 106, 303, 304, 304, 304, 304, 304
-    305, 306, 307, 308, 309, 310, 106, 106, 106, 106, 311, 312, 313, 314
-    315, 316, 317, 318, 319, 320, 321, 322, 106, 106, 106, 106, 323, 324
-    325, 326, 327, 328, 329, 330, 331, 332, 331, 331, 331, 333, 334, 335
-    336, 337, 338, 339, 338, 338, 338, 340, 341, 342, 343, 344, 106, 106
-    106, 106, 345, 345, 345, 345, 345, 346, 347, 348, 349, 350, 351, 352
-    353, 354, 355, 345, 356, 357, 349, 358, 359, 359, 359, 359, 360, 361
-    362, 362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364
-    364, 364, 364, 364, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365
-    365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 366, 366, 366, 366
-    366, 366, 366, 366, 366, 367, 368, 367, 366, 366, 366, 366, 366, 367
-    366, 366, 366, 366, 367, 368, 367, 366, 368, 366, 366, 366, 366, 366
-    366, 366, 367, 366, 366, 366, 366, 366, 366, 366, 366, 369, 370, 371
-    372, 373, 366, 366, 374, 375, 376, 376, 376, 376, 376, 376, 376, 376
-    376, 376, 377, 106, 378, 379, 379, 379, 379, 379, 379, 379, 379, 379
-    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379
-    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379
-    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379
-    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379
-    379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 380, 379, 379
-    381, 382, 382, 383, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385
-    386, 106, 387, 388, 389, 106, 390, 390, 391, 106, 392, 392, 393, 106
-    394, 395, 396, 106, 397, 397, 397, 397, 397, 397, 398, 399, 400, 401, 
+    151, 152, 153, 120, 154, 155, 156, 156, 156, 157, 158, 159, 160, 160, 
+    161, 162, 163, 164, 165, 166, 167, 167, 167, 168, 120, 120, 120, 120
+    120, 120, 120, 120, 128, 128, 169, 120, 120, 120, 120, 120, 170, 171
+    172, 173, 174, 175, 175, 175, 175, 175, 175, 176, 177, 178, 179, 175
+    180, 181, 182, 175, 183, 184, 185, 186, 186, 187, 188, 189, 190, 191
+    192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 201, 202, 203, 204
+    205, 206, 207, 208, 209, 210, 211, 120, 212, 213, 214, 215, 215, 216
+    217, 218, 219, 220, 221, 120, 222, 223, 224, 120, 225, 226, 227, 228
+    228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 120, 239, 240
+    241, 242, 243, 240, 244, 245, 246, 247, 248, 120, 249, 250, 251, 252
+    253, 254, 255, 256, 256, 255, 256, 257, 258, 259, 260, 261, 262, 263
+    120, 264, 265, 266, 267, 268, 268, 267, 269, 270, 271, 272, 273, 274
+    275, 276, 277, 120, 278, 279, 280, 281, 281, 281, 281, 282, 283, 284
+    285, 120, 286, 287, 288, 289, 290, 291, 292, 293, 291, 291, 294, 295
+    292, 296, 297, 298, 299, 300, 301, 120, 302, 303, 303, 303, 303, 303
+    304, 305, 306, 307, 308, 309, 120, 120, 120, 120, 310, 311, 312, 313
+    314, 315, 316, 317, 318, 319, 320, 321, 120, 120, 120, 120, 322, 323
+    324, 325, 326, 327, 328, 329, 330, 331, 330, 330, 330, 332, 333, 334
+    335, 336, 337, 338, 337, 337, 337, 339, 340, 341, 342, 343, 120, 120
+    120, 120, 344, 344, 344, 344, 344, 345, 346, 347, 348, 349, 350, 351
+    352, 353, 354, 344, 355, 356, 348, 357, 358, 358, 358, 358, 359, 360
+    361, 361, 361, 361, 361, 362, 363, 363, 363, 363, 363, 363, 363, 363
+    363, 363, 363, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364
+    364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 365, 365, 365, 365
+    365, 365, 365, 365, 365, 366, 367, 366, 365, 365, 365, 365, 365, 366
+    365, 365, 365, 365, 366, 367, 366, 365, 367, 365, 365, 365, 365, 365
+    365, 365, 366, 365, 365, 365, 365, 365, 365, 365, 365, 368, 369, 370
+    371, 372, 365, 365, 373, 374, 375, 375, 375, 375, 375, 375, 375, 375
+    375, 375, 376, 120, 377, 378, 378, 378, 378, 378, 378, 378, 378, 378
+    378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378
+    378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378
+    378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378
+    378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378
+    378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 378, 378
+    380, 381, 381, 382, 383, 383, 383, 383, 383, 383, 383, 383, 383, 384
+    385, 386, 387, 388, 389, 120, 390, 390, 391, 120, 392, 392, 393, 120
+    394, 395, 396, 120, 397, 397, 397, 397, 397, 397, 398, 399, 400, 401, 
     402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 412, 412, 412, 
     402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 412, 412, 412, 
-    413, 412, 412, 412, 412, 412, 412, 106, 412, 412, 412, 412, 412, 414, 
-    379, 379, 379, 379, 379, 379, 379, 379, 415, 106, 416, 416, 416, 417, 
-    418, 419, 420, 421, 422, 423, 424, 424, 424, 425, 426, 106, 427, 427, 
+    413, 412, 412, 412, 412, 412, 412, 120, 412, 412, 412, 412, 412, 414, 
+    378, 378, 378, 378, 378, 378, 378, 378, 415, 120, 416, 416, 416, 417, 
+    418, 419, 420, 421, 422, 423, 424, 424, 424, 425, 426, 120, 427, 427, 
     427, 427, 427, 428, 429, 429, 430, 431, 432, 433, 434, 434, 434, 434, 
     435, 435, 436, 437, 438, 438, 438, 438, 438, 438, 439, 440, 441, 442, 
     427, 427, 427, 428, 429, 429, 430, 431, 432, 433, 434, 434, 434, 434, 
     435, 435, 436, 437, 438, 438, 438, 438, 438, 438, 439, 440, 441, 442, 
-    443, 444, 445, 446, 445, 446, 447, 448, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 449, 450, 450, 450, 450, 450, 451, 452, 453, 454
-    455, 456, 457, 458, 459, 460, 461, 462, 462, 462, 463, 464, 465, 466
-    467, 467, 467, 467, 468, 469, 470, 471, 472, 472, 472, 472, 473, 474
-    475, 476, 477, 478, 479, 480, 481, 481, 481, 482, 106, 106, 106, 106
-    106, 106, 106, 106, 483, 106, 484, 485, 486, 487, 488, 106, 54, 54, 54, 
-    54, 489, 490, 56, 56, 56, 56, 56, 491, 492, 493, 54, 494, 54, 54, 54, 
-    495, 56, 56, 56, 496, 497, 498, 499, 500, 501, 106, 106, 502, 27, 27, 27, 
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 503, 504, 27, 
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 505, 506, 507, 508, 505, 506
-    505, 506, 507, 508, 505, 509, 505, 506, 505, 507, 505, 510, 505, 510
-    505, 510, 511, 512, 513, 514, 515, 516, 505, 517, 518, 519, 520, 521
-    522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535
-    536, 537, 56, 538, 539, 540, 539, 541, 106, 106, 542, 543, 544, 545, 546
-    106, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559
-    560, 559, 561, 562, 563, 564, 565, 566, 567, 568, 569, 568, 570, 571
-    568, 572, 568, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583
-    584, 585, 586, 587, 588, 583, 583, 589, 590, 591, 592, 593, 583, 583
-    594, 574, 595, 596, 583, 583, 597, 583, 583, 568, 598, 599, 568, 600
-    601, 602, 603, 603, 603, 603, 603, 603, 603, 603, 604, 568, 568, 605
-    606, 574, 574, 607, 568, 568, 568, 568, 573, 608, 568, 609, 106, 568
-    568, 568, 568, 610, 106, 106, 106, 568, 611, 106, 106, 612, 612, 612
-    612, 612, 613, 613, 614, 615, 615, 615, 615, 615, 615, 615, 615, 615
-    616, 612, 612, 617, 617, 617, 617, 617, 617, 617, 617, 617, 618, 617
-    617, 617, 617, 618, 568, 617, 617, 619, 568, 620, 569, 621, 622, 623
-    624, 569, 568, 619, 572, 568, 574, 625, 626, 622, 627, 568, 568, 568
-    568, 628, 568, 568, 568, 629, 630, 568, 568, 568, 568, 568, 631, 568
-    632, 568, 631, 633, 634, 617, 617, 635, 617, 617, 617, 636, 568, 568
-    568, 568, 568, 568, 637, 568, 568, 572, 568, 568, 638, 639, 612, 640
-    640, 641, 568, 568, 568, 568, 568, 642, 643, 644, 645, 646, 647, 574
-    574, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648
-    648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648
-    648, 648, 648, 648, 648, 574, 574, 574, 574, 574, 574, 574, 574, 574
-    574, 574, 574, 574, 574, 574, 574, 649, 650, 650, 651, 583, 583, 574
-    652, 597, 653, 654, 655, 656, 657, 658, 659, 574, 660, 583, 661, 662
-    663, 664, 645, 574, 574, 586, 652, 664, 665, 666, 667, 583, 583, 583
-    583, 668, 669, 583, 583, 583, 583, 670, 671, 672, 645, 673, 674, 568
-    568, 568, 568, 568, 568, 574, 574, 675, 676, 677, 678, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 679, 679, 679, 679, 679, 680, 681, 681, 681, 681, 681
-    682, 683, 684, 685, 686, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 
-    687, 688, 689, 690, 691, 691, 691, 691, 692, 693, 694, 694, 694, 694
-    694, 694, 694, 695, 696, 697, 366, 366, 368, 106, 368, 368, 368, 368
-    368, 368, 368, 368, 698, 698, 698, 698, 699, 700, 701, 702, 703, 704
-    529, 705, 106, 106, 106, 106, 106, 106, 106, 106, 706, 706, 706, 707
-    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 708, 106, 706, 706
-    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706
-    706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 709, 106, 106, 106
-    710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 721, 721
-    721, 721, 721, 721, 721, 721, 722, 723, 724, 725, 725, 725, 725, 725
-    725, 725, 725, 725, 725, 726, 727, 728, 728, 728, 728, 729, 730, 364
-    364, 364, 364, 364, 364, 364, 364, 364, 364, 731, 732, 733, 728, 728
-    728, 734, 710, 710, 710, 710, 711, 106, 725, 725, 735, 735, 735, 736
-    737, 738, 733, 733, 733, 739, 740, 741, 735, 735, 735, 742, 737, 738
-    733, 733, 733, 733, 743, 741, 733, 744, 745, 745, 745, 745, 745, 746
-    745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 733, 733, 733
-    747, 748, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 749
-    733, 733, 733, 747, 750, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 752, 753, 568, 568, 568, 568, 568, 568
-    568, 568, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 754
-    753, 753, 753, 753, 753, 753, 755, 755, 756, 755, 755, 755, 755, 755
-    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755
-    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755
-    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755
-    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755
-    755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755
-    755, 755, 755, 757, 758, 758, 758, 758, 758, 758, 759, 106, 760, 760
-    760, 760, 760, 761, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762
-    762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762
-    762, 762, 762, 762, 762, 762, 762, 762, 762, 763, 762, 762, 764, 765
-    106, 106, 101, 101, 101, 101, 101, 766, 767, 768, 101, 101, 101, 769
-    770, 770, 770, 770, 770, 770, 770, 770, 771, 772, 773, 106, 64, 64, 774
-    775, 776, 27, 777, 27, 27, 27, 27, 27, 27, 27, 778, 779, 27, 780, 781
-    106, 27, 782, 106, 106, 106, 106, 106, 106, 106, 106, 106, 783, 784, 785
-    786, 786, 787, 788, 789, 790, 791, 791, 791, 791, 791, 791, 792, 106
-    793, 794, 794, 794, 794, 794, 795, 796, 797, 798, 799, 800, 801, 801
-    802, 803, 804, 805, 806, 806, 807, 808, 809, 809, 810, 811, 812, 813
-    364, 364, 364, 814, 815, 816, 816, 816, 816, 816, 817, 818, 819, 820
-    821, 822, 106, 106, 106, 106, 823, 823, 823, 823, 823, 824, 825, 106
-    826, 827, 828, 829, 345, 345, 830, 831, 832, 832, 832, 832, 832, 832, 
-    833, 834, 835, 106, 106, 836, 837, 838, 839, 106, 840, 840, 840, 106
-    368, 368, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 837, 837, 837, 837, 841, 842, 843, 844
-    845, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846
-    847, 106, 365, 365, 848, 849, 365, 365, 365, 365, 365, 850, 851, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 852, 851, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 852, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 852
-    853, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 855, 856, 856
-    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856
-    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856
-    856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856
-    856, 857, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856
-    856, 858, 753, 753, 753, 753, 859, 106, 860, 861, 121, 862, 863, 864
-    865, 121, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
-    866, 867, 868, 106, 869, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    443, 444, 445, 446, 445, 446, 447, 448, 449, 450, 120, 120, 120, 120
+    120, 120, 120, 120, 451, 452, 452, 452, 452, 452, 453, 454, 455, 456
+    457, 458, 459, 460, 461, 462, 463, 464, 464, 464, 465, 466, 467, 468
+    469, 469, 469, 469, 470, 471, 472, 473, 474, 474, 474, 474, 475, 476
+    477, 478, 479, 480, 481, 482, 483, 483, 483, 484, 120, 120, 120, 120
+    120, 120, 120, 120, 485, 120, 486, 487, 488, 489, 490, 491, 54, 54, 54, 
+    54, 492, 493, 56, 56, 56, 56, 56, 494, 495, 496, 54, 497, 54, 54, 54, 
+    498, 56, 56, 56, 499, 500, 501, 502, 503, 503, 503, 504, 505, 27, 27, 27, 
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 506, 507, 27, 
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 508, 509, 510, 511, 508, 509
+    508, 509, 510, 511, 508, 512, 508, 509, 508, 510, 508, 513, 508, 513
+    508, 513, 514, 515, 516, 517, 518, 519, 508, 520, 521, 522, 523, 524
+    525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538
+    539, 540, 56, 541, 542, 543, 542, 544, 120, 120, 545, 546, 547, 548, 549
+    120, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562
+    563, 562, 564, 565, 566, 567, 568, 569, 570, 571, 572, 571, 573, 574
+    571, 575, 571, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586
+    587, 588, 589, 590, 591, 586, 586, 592, 593, 594, 595, 596, 586, 586
+    597, 577, 598, 599, 586, 586, 600, 586, 586, 571, 601, 602, 571, 603
+    604, 605, 606, 606, 606, 606, 606, 606, 606, 606, 607, 571, 571, 608
+    609, 577, 577, 610, 571, 571, 571, 571, 576, 611, 571, 571, 612, 571
+    571, 571, 571, 613, 120, 120, 120, 571, 612, 120, 120, 614, 614, 614
+    614, 614, 615, 615, 616, 617, 617, 617, 617, 617, 617, 617, 617, 617
+    618, 614, 614, 619, 619, 619, 619, 619, 619, 619, 619, 619, 620, 619
+    619, 619, 619, 620, 571, 619, 619, 621, 571, 622, 572, 623, 624, 625
+    626, 572, 571, 621, 575, 571, 577, 627, 628, 624, 629, 571, 571, 571
+    571, 630, 571, 571, 571, 631, 632, 571, 571, 571, 571, 571, 633, 571
+    634, 571, 633, 635, 636, 619, 619, 637, 619, 619, 619, 571, 571, 571
+    571, 571, 571, 571, 638, 571, 571, 575, 571, 571, 639, 640, 614, 641
+    641, 642, 571, 571, 571, 571, 571, 643, 644, 645, 646, 647, 648, 577
+    577, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649
+    649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649
+    649, 649, 649, 649, 649, 577, 577, 577, 577, 577, 577, 577, 577, 577
+    577, 577, 577, 577, 577, 577, 577, 650, 651, 651, 652, 586, 586, 577
+    653, 600, 654, 655, 656, 657, 658, 659, 660, 577, 661, 586, 662, 663
+    664, 665, 646, 577, 577, 589, 653, 665, 666, 667, 668, 586, 586, 586
+    586, 669, 670, 586, 586, 586, 586, 671, 672, 673, 646, 674, 675, 571
+    571, 571, 571, 571, 571, 577, 577, 676, 677, 678, 572, 571, 571, 679
+    571, 571, 571, 680, 571, 571, 571, 571, 681, 571, 682, 683, 120, 120
+    120, 120, 120, 684, 684, 684, 684, 684, 685, 686, 686, 686, 686, 686
+    687, 688, 689, 690, 691, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 
+    692, 693, 694, 695, 696, 696, 696, 696, 697, 698, 699, 699, 699, 699
+    699, 699, 699, 700, 701, 702, 365, 365, 367, 120, 367, 367, 367, 367
+    367, 367, 367, 367, 703, 703, 703, 703, 704, 705, 706, 707, 708, 709
+    532, 710, 711, 120, 120, 120, 120, 120, 120, 120, 712, 712, 712, 713
+    712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 714, 120, 712, 712
+    712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712
+    712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 715, 120, 120, 120
+    716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 727, 727
+    727, 727, 727, 727, 727, 727, 728, 729, 730, 731, 731, 731, 731, 731
+    731, 731, 731, 731, 731, 732, 733, 734, 734, 734, 734, 735, 736, 363
+    363, 363, 363, 363, 363, 363, 363, 363, 363, 737, 738, 739, 734, 734
+    734, 740, 716, 716, 716, 716, 717, 120, 731, 731, 741, 741, 741, 742
+    743, 744, 739, 739, 739, 745, 746, 747, 741, 741, 741, 748, 743, 744
+    739, 739, 739, 739, 749, 747, 739, 750, 751, 751, 751, 751, 751, 752
+    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 739, 739, 739
+    753, 754, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 755
+    739, 739, 739, 753, 756, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 758, 759, 571, 571, 571, 571, 571, 571
+    571, 571, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 760
+    759, 759, 759, 759, 759, 759, 761, 761, 762, 761, 761, 761, 761, 761
+    761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761
+    761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761
+    761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761
+    761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761
+    761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761
+    761, 761, 761, 763, 764, 764, 764, 764, 764, 764, 765, 120, 766, 766
+    766, 766, 766, 767, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768
+    768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768
+    768, 768, 768, 768, 768, 768, 768, 768, 768, 769, 768, 768, 770, 771
+    120, 120, 101, 101, 101, 101, 101, 772, 773, 774, 101, 101, 101, 775
+    776, 776, 776, 776, 776, 776, 776, 776, 777, 778, 779, 120, 64, 64, 780
+    781, 782, 27, 783, 27, 27, 27, 27, 27, 27, 27, 784, 785, 27, 786, 787
+    27, 27, 788, 789, 120, 120, 120, 120, 120, 120, 120, 790, 791, 792, 793
+    794, 794, 795, 796, 797, 798, 799, 799, 799, 799, 799, 799, 800, 120
+    801, 802, 802, 802, 802, 802, 803, 804, 805, 806, 807, 808, 809, 809
+    810, 811, 812, 813, 814, 814, 815, 816, 817, 817, 818, 819, 820, 821
+    363, 363, 363, 822, 823, 824, 824, 824, 824, 824, 825, 826, 827, 828
+    829, 830, 831, 344, 348, 832, 833, 833, 833, 833, 833, 834, 835, 120
+    836, 837, 838, 839, 344, 344, 840, 841, 842, 842, 842, 842, 842, 842, 
+    843, 844, 845, 120, 120, 846, 847, 848, 849, 120, 850, 850, 850, 120
+    367, 367, 54, 54, 54, 54, 54, 851, 852, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 847, 847, 847, 847, 853, 854, 855, 856, 857
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858
+    858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 859
+    120, 364, 364, 860, 861, 364, 364, 364, 364, 364, 862, 863, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 864, 863, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 864, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 864, 865
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 867, 868, 868, 868
+    868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868
+    868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868
+    868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868
+    869, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868
+    870, 759, 759, 759, 759, 871, 120, 872, 873, 121, 874, 875, 876, 877
+    121, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 878, 
+    879, 880, 120, 881, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
     128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
-    128, 128, 128, 128, 128, 128, 128, 870, 106, 106, 128, 128, 128, 128, 
-    128, 128, 128, 128, 871, 128, 128, 128, 128, 128, 128, 106, 106, 106, 
-    106, 106, 128, 872, 873, 873, 874, 875, 501, 106, 876, 877, 878, 879, 
-    880, 881, 882, 883, 884, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
-    128, 128, 128, 128, 128, 128, 128, 885, 886, 887, 888, 889, 890, 891, 
-    891, 892, 893, 894, 894, 895, 896, 897, 898, 897, 897, 897, 897, 899, 
-    900, 900, 900, 901, 902, 902, 902, 903, 904, 905, 106, 906, 907, 908, 
-    907, 907, 909, 907, 907, 910, 907, 911, 907, 911, 106, 106, 106, 106, 
-    907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 
-    907, 912, 913, 914, 914, 914, 914, 914, 915, 603, 916, 916, 916, 916, 
-    916, 916, 917, 918, 919, 920, 568, 609, 106, 106, 106, 106, 106, 106, 
-    603, 603, 603, 603, 603, 921, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 922, 922, 922, 923, 924, 924, 
-    924, 924, 924, 924, 925, 106, 106, 106, 106, 106, 926, 926, 926, 927, 
-    928, 106, 929, 929, 930, 931, 106, 106, 106, 106, 106, 106, 932, 932, 
-    932, 933, 934, 934, 934, 934, 935, 934, 936, 106, 106, 106, 106, 106, 
-    937, 937, 937, 937, 937, 938, 938, 938, 938, 938, 939, 939, 939, 939, 
-    939, 939, 940, 940, 940, 941, 942, 943, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 944, 945, 946, 946, 946, 946, 947, 948, 949, 949, 
-    950, 951, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 952, 952, 953, 954, 955, 955, 
-    955, 956, 106, 106, 106, 106, 106, 106, 106, 106, 957, 957, 957, 957, 
-    958, 958, 958, 959, 106, 106, 106, 106, 106, 106, 106, 106, 960, 961, 
-    962, 963, 964, 964, 965, 966, 967, 106, 968, 969, 970, 970, 970, 971, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 972, 972, 972, 972, 972, 972, 973, 974, 975, 975, 976, 977, 
-    978, 978, 979, 980, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 981, 981, 981, 981, 981, 981, 981, 981, 
-    981, 982, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 983, 983, 983, 984, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    985, 986, 986, 986, 986, 986, 986, 987, 988, 989, 990, 991, 992, 993, 
-    106, 106, 994, 995, 995, 995, 995, 995, 996, 997, 998, 106, 999, 999, 
-    999, 1000, 1001, 1002, 1003, 1004, 1004, 1004, 1005, 1006, 1007, 1008, 
-    1009, 106, 106, 106, 106, 106, 106, 106, 1010, 1011, 1011, 1011, 1011, 
-    1011, 1012, 1013, 1014, 1015, 1016, 1017, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    1018, 1018, 1018, 1018, 1018, 1019, 1020, 106, 1021, 1022, 106, 106, 106, 
-    106, 106, 106, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
-    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
-    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
-    1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 
-    1024, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 
-    1025, 1025, 1025, 1025, 1026, 106, 1027, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1028, 1028, 1028, 
-    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 
-    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 
-    1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 770, 770, 770, 
-    770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 
-    770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 
-    770, 770, 770, 770, 770, 770, 770, 770, 1030, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 
-    1032, 106, 1033, 1034, 1034, 1034, 1034, 1035, 106, 1036, 1037, 1038, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1039, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
-    603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
-    603, 603, 603, 603, 1040, 106, 603, 603, 603, 603, 1041, 1042, 603, 603, 
-    603, 603, 603, 603, 1043, 1044, 1045, 1046, 1047, 1048, 603, 603, 603, 
-    1049, 603, 603, 603, 603, 603, 1040, 106, 106, 106, 106, 919, 919, 919, 
-    919, 919, 919, 919, 919, 1050, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 610, 106, 914, 
-    914, 1051, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 1052, 1052, 1052, 1053, 1054, 1054, 1055, 1052, 
-    1052, 1056, 1057, 1054, 1054, 1052, 1052, 1052, 1053, 1054, 1054, 1058, 
-    1059, 1060, 1056, 1061, 1062, 1054, 1052, 1052, 1052, 1053, 1054, 1054, 
-    1063, 1064, 1065, 1066, 1054, 1054, 1054, 1067, 1068, 1069, 1070, 1054, 
-    1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 1052, 1053, 
-    1054, 1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 1052, 
-    1053, 1054, 1054, 1055, 1052, 1052, 1056, 1054, 1054, 1054, 1052, 1052, 
-    1052, 1053, 1054, 1054, 1071, 1052, 1052, 1052, 1072, 1054, 1054, 1073, 
-    1074, 1052, 1052, 1075, 1054, 1054, 1076, 1055, 1052, 1052, 1077, 1054, 
-    1054, 1078, 1079, 1052, 1052, 1080, 1054, 1054, 1054, 1081, 1052, 1052, 
-    1052, 1072, 1054, 1054, 1073, 1082, 1083, 1083, 1083, 1083, 1083, 1083, 
-    1084, 128, 128, 128, 1085, 1086, 1087, 1088, 1089, 1090, 1085, 1091, 
-    1085, 1087, 1087, 1092, 128, 1093, 128, 1094, 1095, 1093, 128, 1094, 106, 
-    106, 106, 106, 106, 106, 1096, 106, 568, 568, 568, 568, 568, 609, 568, 
-    568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 609, 106, 568, 
-    610, 636, 610, 636, 568, 636, 568, 106, 106, 106, 106, 613, 1097, 615, 
-    615, 615, 1098, 615, 615, 615, 615, 615, 615, 615, 1099, 615, 615, 615, 
-    615, 615, 1100, 106, 106, 106, 106, 106, 106, 106, 106, 1101, 603, 603, 
-    603, 1102, 106, 733, 733, 733, 733, 733, 1103, 733, 1104, 1105, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 568, 568, 568, 568, 1106, 106, 1107, 568, 568, 
-    568, 568, 568, 568, 568, 568, 1108, 568, 568, 609, 106, 568, 568, 568, 
-    568, 1109, 611, 106, 106, 568, 568, 1106, 106, 568, 568, 568, 568, 568, 
-    568, 568, 610, 1110, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 
-    568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1111, 568, 
-    568, 568, 568, 568, 568, 568, 1112, 609, 106, 568, 568, 568, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    106, 106, 1113, 568, 568, 568, 568, 568, 568, 568, 568, 1114, 568, 106, 
-    106, 106, 106, 106, 106, 568, 568, 568, 568, 568, 568, 568, 568, 1112, 
-    106, 106, 106, 106, 106, 106, 106, 568, 568, 568, 568, 568, 568, 568, 
-    568, 568, 568, 568, 568, 568, 568, 609, 106, 106, 106, 106, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 751, 751, 751, 
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 1115, 753, 753, 753, 753, 
-    753, 751, 751, 751, 751, 751, 751, 754, 753, 750, 751, 751, 751, 751, 
-    751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 
-    751, 751, 751, 751, 751, 751, 751, 751, 752, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 856, 
-    856, 856, 857, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 
-    753, 753, 753, 753, 753, 753, 1116, 1117, 106, 106, 106, 1118, 1118, 
-    1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 106, 106, 
-    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 
-    873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 
-    873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 
-    873, 873, 106, 106, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
-    854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 
-    854, 854, 854, 854, 854, 854, 854, 1119, 
+    128, 128, 128, 128, 128, 128, 882, 120, 120, 128, 128, 128, 128, 128, 
+    128, 128, 128, 883, 128, 128, 128, 128, 128, 128, 120, 120, 120, 120, 
+    120, 128, 884, 885, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 
+    895, 896, 897, 898, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
+    128, 128, 128, 128, 128, 128, 899, 900, 901, 902, 903, 904, 905, 905, 
+    906, 907, 908, 908, 909, 910, 911, 912, 911, 911, 911, 911, 913, 914, 
+    914, 914, 915, 916, 916, 916, 917, 918, 919, 120, 920, 921, 922, 921, 
+    921, 923, 921, 921, 924, 921, 925, 921, 925, 120, 120, 120, 120, 921, 
+    921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 
+    926, 927, 928, 928, 928, 928, 928, 929, 606, 930, 930, 930, 930, 930, 
+    930, 931, 932, 933, 934, 571, 935, 936, 120, 120, 120, 120, 120, 606, 
+    606, 606, 606, 606, 937, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 938, 938, 938, 939, 940, 940, 940, 
+    940, 940, 940, 941, 120, 942, 943, 943, 944, 945, 945, 945, 945, 946, 
+    120, 947, 947, 948, 949, 950, 950, 950, 950, 951, 952, 953, 953, 953, 
+    954, 955, 955, 955, 955, 956, 955, 957, 120, 120, 120, 120, 120, 958, 
+    958, 958, 958, 958, 959, 959, 959, 959, 959, 960, 960, 960, 960, 960, 
+    960, 961, 961, 961, 962, 963, 964, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 965, 965, 965, 965, 965, 120, 966, 966, 966, 966, 966, 
+    966, 967, 968, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 969, 969, 969, 969, 969, 969, 969, 
+    969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 
+    969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 
+    969, 969, 969, 970, 120, 969, 969, 971, 120, 969, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 972, 973, 974, 974, 974, 974, 975, 976, 977, 977, 978, 979, 980, 
+    980, 981, 982, 983, 983, 983, 984, 985, 986, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 987, 987, 988, 989, 990, 990, 990, 991, 120, 
+    120, 120, 120, 120, 120, 120, 120, 992, 992, 992, 992, 993, 993, 993, 
+    994, 120, 120, 120, 120, 120, 120, 120, 120, 995, 996, 997, 998, 999, 
+    999, 1000, 1001, 1002, 120, 1003, 1004, 1005, 1005, 1005, 1006, 1007, 
+    1007, 1007, 1008, 120, 120, 120, 120, 1009, 1010, 1009, 1009, 1011, 1012, 
+    1013, 120, 1014, 1014, 1014, 1014, 1014, 1014, 1015, 1016, 1017, 1017, 
+    1018, 1019, 1020, 1020, 1021, 1022, 1023, 1023, 1024, 1025, 120, 1026, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1027, 1027, 1027, 1027, 
+    1027, 1027, 1027, 1027, 1027, 1028, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1029, 
+    1029, 1029, 1030, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 1031, 1032, 1032, 1032, 1032, 1032, 1032, 1033, 
+    1034, 1035, 1036, 1037, 1038, 1039, 120, 1040, 1041, 1042, 1042, 1042, 
+    1042, 1042, 1043, 1044, 1045, 120, 1046, 1046, 1046, 1047, 1048, 1049, 
+    1050, 1051, 1051, 1051, 1052, 1053, 1054, 1055, 1056, 120, 1057, 1057, 
+    1057, 1057, 1058, 120, 1059, 1060, 1060, 1060, 1060, 1060, 1061, 1062, 
+    1063, 1064, 1065, 1066, 1067, 1068, 1069, 120, 1070, 1070, 1071, 1070, 
+    1070, 1072, 1073, 1074, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 1075, 1075, 1075, 1075, 1075, 1076, 1077, 1078, 1079, 
+    1080, 1081, 1082, 1083, 1084, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 
+    1091, 1092, 1093, 1093, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 1094, 1094, 1094, 1094, 
+    1094, 1094, 1095, 1096, 1097, 120, 1098, 1099, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 1100, 1100, 1100, 1100, 1100, 1101, 1102, 1103, 1104, 1105, 120, 
+    120, 120, 120, 120, 120, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1108, 
+    1109, 120, 1110, 1111, 120, 120, 120, 120, 1112, 1112, 1112, 1112, 1112, 
+    1113, 1114, 120, 1115, 1116, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 1117, 1117, 1117, 1117, 1118, 1118, 1118, 1118, 1119, 
+    1120, 1121, 1122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1123, 
+    1123, 1123, 1123, 1123, 1123, 1123, 1124, 1125, 1125, 1125, 1125, 1125, 
+    1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 
+    1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 
+    1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 
+    1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1126, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1127, 1127, 1127, 
+    1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1129, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 
+    1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 
+    1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 
+    1130, 1130, 1130, 1130, 1131, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 
+    776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 
+    776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 
+    776, 1132, 1133, 1133, 1133, 1134, 1135, 1136, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 1137, 1137, 1137, 1138, 1139, 120, 
+    1140, 1140, 1140, 1140, 1140, 1140, 1141, 1142, 1143, 120, 1144, 1145, 
+    1146, 1140, 1140, 1147, 1140, 1140, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 1148, 1148, 1148, 1148, 1148, 1148, 
+    1148, 1148, 1149, 120, 1150, 1151, 1151, 1151, 1151, 1152, 120, 1153, 
+    1154, 1155, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    1156, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 
+    1157, 1157, 1157, 1157, 1158, 1157, 1159, 1157, 1160, 1157, 1161, 1162, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 606, 606, 606, 
+    606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 
+    606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1163, 
+    120, 606, 606, 606, 606, 1164, 1165, 606, 606, 606, 606, 606, 606, 1166, 
+    1167, 1168, 1169, 1170, 1171, 606, 606, 606, 1172, 606, 606, 606, 606, 
+    606, 1163, 120, 120, 120, 120, 933, 933, 933, 933, 933, 933, 933, 933, 
+    1173, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 571, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 613, 120, 928, 928, 1174, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    1175, 1175, 1175, 1176, 1177, 1177, 1178, 1175, 1175, 1179, 1180, 1177, 
+    1177, 1175, 1175, 1175, 1176, 1177, 1177, 1181, 1182, 1183, 1179, 1184, 
+    1185, 1177, 1175, 1175, 1175, 1176, 1177, 1177, 1186, 1187, 1188, 1189, 
+    1177, 1177, 1177, 1190, 1191, 1192, 1193, 1177, 1177, 1178, 1175, 1175, 
+    1179, 1177, 1177, 1177, 1175, 1175, 1175, 1176, 1177, 1177, 1178, 1175, 
+    1175, 1179, 1177, 1177, 1177, 1175, 1175, 1175, 1176, 1177, 1177, 1178, 
+    1175, 1175, 1179, 1177, 1177, 1177, 1175, 1175, 1175, 1176, 1177, 1177, 
+    1194, 1175, 1175, 1175, 1195, 1177, 1177, 1196, 1197, 1175, 1175, 1198, 
+    1177, 1177, 1199, 1178, 1175, 1175, 1200, 1177, 1177, 1201, 1202, 1175, 
+    1175, 1203, 1177, 1177, 1177, 1204, 1175, 1175, 1175, 1195, 1177, 1177, 
+    1196, 1205, 1206, 1206, 1206, 1206, 1206, 1206, 1207, 1207, 1207, 1207, 
+    1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 
+    1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208, 1209, 1210, 120, 
+    120, 120, 120, 120, 1211, 128, 128, 128, 1212, 1213, 1214, 1215, 1216, 
+    1217, 1212, 1218, 1212, 1214, 1214, 1219, 128, 1220, 128, 1221, 1222, 
+    1220, 128, 1221, 120, 120, 120, 120, 120, 120, 1223, 120, 571, 571, 571, 
+    571, 571, 935, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 935, 120, 571, 613, 1224, 571, 1224, 571, 1224, 571, 571, 571, 680, 
+    120, 615, 1225, 617, 617, 617, 1226, 617, 617, 617, 617, 617, 617, 617, 
+    1227, 617, 617, 617, 617, 617, 1228, 120, 120, 120, 120, 120, 120, 120, 
+    120, 1229, 606, 606, 606, 1230, 120, 739, 739, 739, 739, 739, 1231, 739, 
+    1232, 1233, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 120, 571, 571, 571, 571, 571, 
+    1234, 571, 571, 571, 571, 571, 571, 571, 571, 571, 680, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 613, 1235, 571, 571, 571, 571, 120, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 571, 613, 571, 571, 571, 571, 571, 571, 571, 571, 571, 612, 571, 
+    571, 571, 571, 571, 1236, 571, 571, 571, 571, 1237, 571, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 1238, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 571, 571, 571, 571, 120, 120, 571, 1234, 935, 120, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 935, 120, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 571, 1234, 120, 120, 120, 120, 
+    120, 571, 935, 571, 571, 571, 571, 571, 571, 571, 120, 571, 683, 571, 
+    571, 571, 571, 571, 120, 571, 571, 571, 680, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 757, 757, 757, 757, 757, 757, 757, 757, 757, 
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 
+    757, 757, 757, 1239, 759, 759, 759, 759, 759, 757, 757, 757, 757, 757, 
+    757, 760, 759, 756, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 
+    757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 
+    757, 757, 758, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 868, 868, 868, 869, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 
+    1240, 1241, 120, 120, 120, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 
+    1242, 1242, 1242, 1242, 1242, 120, 120, 120, 120, 120, 120, 120, 120, 
+    120, 120, 120, 120, 120, 120, 120, 120, 885, 885, 885, 885, 885, 885, 
+    885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 
+    885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 120, 120, 866, 866, 
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 
+    866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 
+    866, 1243, 
 };
 
 static const unsigned short index2[] = {
 };
 
 static const unsigned short index2[] = {
@@ -2077,7 +2244,7 @@ static const unsigned short index2[] = {
     53, 51, 51, 51, 51, 51, 51, 51, 51, 57, 51, 53, 53, 53, 51, 51, 51, 53, 
     53, 58, 51, 51, 51, 53, 53, 53, 53, 51, 52, 53, 53, 51, 59, 60, 60, 59, 
     60, 60, 59, 51, 51, 51, 51, 51, 61, 62, 61, 62, 45, 63, 61, 62, 64, 64, 
     53, 51, 51, 51, 51, 51, 51, 51, 51, 57, 51, 53, 53, 53, 51, 51, 51, 53, 
     53, 58, 51, 51, 51, 53, 53, 53, 53, 51, 52, 53, 53, 51, 59, 60, 60, 59, 
     60, 60, 59, 51, 51, 51, 51, 51, 61, 62, 61, 62, 45, 63, 61, 62, 64, 64, 
-    65, 62, 62, 62, 66, 64, 64, 64, 64, 64, 63, 47, 61, 66, 61, 61, 61, 64, 
+    65, 62, 62, 62, 66, 61, 64, 64, 64, 64, 63, 47, 61, 66, 61, 61, 61, 64, 
     61, 64, 61, 61, 62, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
     67, 67, 67, 67, 64, 67, 67, 67, 67, 67, 67, 67, 61, 61, 62, 62, 62, 62, 
     62, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
     61, 64, 61, 61, 62, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
     67, 67, 67, 67, 64, 67, 67, 67, 67, 67, 67, 67, 61, 61, 62, 62, 62, 62, 
     62, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
@@ -2089,538 +2256,603 @@ static const unsigned short index2[] = {
     74, 74, 74, 74, 75, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 
     75, 75, 72, 75, 72, 75, 72, 75, 72, 75, 72, 75, 76, 77, 77, 78, 78, 77, 
     79, 79, 72, 75, 72, 75, 72, 75, 72, 72, 75, 72, 75, 72, 75, 72, 75, 72, 
     74, 74, 74, 74, 75, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 
     75, 75, 72, 75, 72, 75, 72, 75, 72, 75, 72, 75, 76, 77, 77, 78, 78, 77, 
     79, 79, 72, 75, 72, 75, 72, 75, 72, 72, 75, 72, 75, 72, 75, 72, 75, 72, 
-    75, 72, 75, 72, 75, 75, 64, 64, 64, 64, 64, 64, 64, 64, 64, 80, 80, 80, 
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
-    80, 64, 64, 81, 82, 82, 82, 82, 82, 82, 64, 83, 83, 83, 83, 83, 83, 83, 
-    83, 83, 83, 83, 83, 83, 83, 83, 64, 84, 85, 64, 64, 64, 64, 86, 64, 87, 
-    88, 88, 88, 88, 87, 88, 88, 88, 89, 87, 88, 88, 88, 88, 88, 88, 87, 87, 
-    87, 87, 87, 87, 88, 88, 87, 88, 88, 89, 90, 88, 91, 92, 93, 94, 95, 96, 
-    97, 98, 99, 100, 100, 101, 102, 103, 104, 105, 106, 107, 108, 106, 88, 
-    87, 106, 99, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 64, 
-    64, 64, 64, 64, 109, 109, 109, 106, 106, 64, 64, 64, 110, 110, 110, 110, 
-    110, 64, 111, 111, 112, 113, 113, 114, 115, 116, 117, 117, 118, 118, 118, 
-    118, 118, 118, 118, 118, 119, 120, 121, 122, 64, 64, 116, 122, 123, 123, 
-    123, 123, 123, 123, 123, 123, 124, 123, 123, 123, 123, 123, 123, 123, 
-    123, 123, 123, 125, 126, 127, 128, 129, 130, 131, 132, 78, 78, 133, 134, 
-    118, 118, 118, 118, 118, 134, 118, 118, 134, 135, 135, 135, 135, 135, 
-    135, 135, 135, 135, 135, 113, 136, 136, 116, 123, 123, 137, 123, 123, 
-    123, 123, 123, 123, 123, 123, 123, 123, 123, 116, 123, 118, 118, 118, 
-    118, 118, 118, 118, 138, 117, 118, 118, 118, 118, 134, 118, 139, 139, 
-    118, 118, 117, 134, 118, 118, 134, 123, 123, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 123, 123, 123, 141, 141, 123, 142, 142, 142, 
-    142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 64, 143, 144, 145, 
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 
-    146, 147, 146, 146, 147, 146, 146, 147, 147, 147, 146, 147, 147, 146, 
-    147, 146, 146, 146, 147, 146, 147, 146, 147, 146, 147, 146, 146, 64, 64, 
-    144, 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 
-    148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 
-    148, 64, 64, 64, 64, 64, 64, 150, 150, 150, 150, 150, 150, 150, 150, 150, 
-    150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 
-    151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 153, 152, 154, 
-    154, 155, 156, 156, 156, 154, 64, 64, 64, 64, 64, 157, 157, 157, 157, 
-    157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 
-    159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 158, 158, 158, 
-    159, 158, 158, 158, 158, 158, 64, 64, 160, 160, 160, 160, 160, 160, 160, 
-    160, 160, 160, 160, 160, 160, 160, 160, 64, 161, 161, 161, 161, 161, 161, 
-    161, 161, 161, 162, 162, 162, 64, 64, 163, 64, 123, 64, 123, 123, 123, 
-    123, 123, 123, 123, 123, 123, 123, 123, 64, 64, 64, 64, 64, 64, 64, 118, 
-    118, 134, 118, 118, 134, 118, 118, 118, 134, 134, 134, 164, 165, 166, 
-    118, 118, 118, 134, 118, 118, 134, 134, 118, 118, 118, 118, 64, 167, 167, 
-    167, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 
-    169, 169, 167, 168, 170, 169, 168, 168, 168, 167, 167, 167, 167, 167, 
-    167, 167, 167, 168, 168, 168, 168, 171, 168, 168, 169, 78, 133, 172, 172, 
-    167, 167, 167, 169, 169, 167, 167, 84, 84, 173, 173, 173, 173, 173, 173, 
-    173, 173, 173, 173, 174, 175, 169, 169, 169, 169, 169, 169, 64, 169, 169, 
-    169, 169, 169, 169, 169, 64, 176, 177, 177, 64, 178, 178, 178, 178, 178, 
-    178, 178, 178, 64, 64, 178, 178, 64, 64, 178, 178, 178, 178, 178, 178, 
-    178, 178, 178, 178, 178, 178, 178, 178, 64, 178, 178, 178, 178, 178, 178, 
-    178, 64, 178, 64, 64, 64, 178, 178, 178, 178, 64, 64, 179, 178, 177, 177, 
-    177, 176, 176, 176, 176, 64, 64, 177, 177, 64, 64, 177, 177, 180, 178, 
-    64, 64, 64, 64, 64, 64, 64, 64, 177, 64, 64, 64, 64, 178, 178, 64, 178, 
-    178, 178, 176, 176, 64, 64, 181, 181, 181, 181, 181, 181, 181, 181, 181, 
-    181, 178, 178, 182, 182, 183, 183, 183, 183, 183, 183, 184, 182, 64, 64, 
-    64, 64, 64, 185, 185, 186, 64, 187, 187, 187, 187, 187, 187, 64, 64, 64, 
-    64, 187, 187, 64, 64, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 64, 187, 187, 187, 187, 187, 187, 187, 64, 187, 187, 
-    64, 187, 187, 64, 187, 187, 64, 64, 188, 64, 186, 186, 186, 185, 185, 64, 
-    64, 64, 64, 185, 185, 64, 64, 185, 185, 189, 64, 64, 64, 185, 64, 64, 64, 
-    64, 64, 64, 64, 187, 187, 187, 187, 64, 187, 64, 64, 64, 64, 64, 64, 64, 
-    190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 185, 185, 187, 187, 
-    187, 185, 64, 64, 64, 191, 191, 192, 64, 193, 193, 193, 193, 193, 193, 
-    193, 193, 193, 64, 193, 193, 193, 64, 193, 193, 193, 193, 193, 193, 193, 
-    193, 193, 193, 193, 193, 193, 193, 64, 193, 193, 193, 193, 193, 193, 193, 
-    64, 193, 193, 64, 193, 193, 193, 193, 193, 64, 64, 194, 193, 192, 192, 
-    192, 191, 191, 191, 191, 191, 64, 191, 191, 192, 64, 192, 192, 195, 64, 
-    64, 193, 64, 64, 64, 64, 64, 64, 64, 193, 193, 191, 191, 64, 64, 196, 
-    196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 198, 64, 64, 64, 64, 
-    64, 64, 64, 199, 200, 200, 64, 201, 201, 201, 201, 201, 201, 201, 201, 
-    64, 64, 201, 201, 64, 64, 201, 201, 201, 201, 201, 201, 201, 201, 201, 
-    201, 201, 201, 201, 201, 64, 201, 201, 201, 201, 201, 201, 201, 64, 201, 
-    201, 64, 201, 201, 201, 201, 201, 64, 64, 202, 201, 200, 199, 200, 199, 
-    199, 199, 199, 64, 64, 200, 200, 64, 64, 200, 200, 203, 64, 64, 64, 64, 
-    64, 64, 64, 64, 199, 200, 64, 64, 64, 64, 201, 201, 64, 201, 201, 201, 
-    199, 199, 64, 64, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 
-    201, 206, 206, 206, 206, 206, 206, 64, 64, 207, 208, 64, 208, 208, 208, 
-    208, 208, 208, 64, 64, 64, 208, 208, 208, 64, 208, 208, 208, 208, 64, 64, 
-    64, 208, 208, 64, 208, 64, 208, 208, 64, 64, 64, 208, 208, 64, 64, 64, 
-    208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 64, 64, 64, 64, 209, 
-    209, 207, 209, 209, 64, 64, 64, 209, 209, 209, 64, 209, 209, 209, 210, 
-    64, 64, 208, 64, 64, 64, 64, 64, 64, 209, 64, 64, 64, 64, 64, 64, 211, 
-    211, 211, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 213, 213, 
-    213, 213, 213, 213, 214, 213, 64, 64, 64, 64, 64, 64, 215, 215, 215, 64, 
-    216, 216, 216, 216, 216, 216, 216, 216, 64, 216, 216, 216, 64, 216, 216, 
-    216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 
-    216, 216, 64, 216, 216, 216, 216, 216, 64, 64, 64, 216, 217, 217, 217, 
-    215, 215, 215, 215, 64, 217, 217, 217, 64, 217, 217, 217, 218, 64, 64, 
-    64, 64, 64, 64, 64, 219, 220, 64, 216, 216, 64, 64, 64, 64, 64, 64, 216, 
-    216, 217, 217, 64, 64, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 
-    222, 222, 222, 222, 222, 222, 222, 223, 64, 64, 224, 224, 64, 225, 225, 
-    225, 225, 225, 225, 225, 225, 64, 225, 225, 225, 64, 225, 225, 225, 225, 
-    225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 64, 
-    225, 225, 225, 225, 225, 64, 64, 226, 225, 224, 227, 224, 224, 224, 224, 
-    224, 64, 227, 224, 224, 64, 224, 224, 228, 229, 64, 64, 64, 64, 64, 64, 
-    64, 224, 224, 64, 64, 64, 64, 64, 64, 64, 225, 64, 225, 225, 228, 228, 
-    64, 64, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 64, 225, 225, 
-    64, 64, 64, 64, 64, 64, 64, 231, 231, 64, 232, 232, 232, 232, 232, 232, 
-    232, 232, 64, 232, 232, 232, 64, 232, 232, 232, 232, 232, 232, 232, 232, 
-    232, 232, 232, 232, 232, 232, 232, 232, 232, 64, 64, 232, 231, 231, 231, 
-    233, 233, 233, 233, 64, 231, 231, 231, 64, 231, 231, 231, 234, 232, 64, 
-    64, 64, 64, 64, 64, 64, 64, 231, 232, 232, 233, 233, 64, 64, 235, 235, 
-    235, 235, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 64, 
-    64, 64, 237, 232, 232, 232, 232, 232, 232, 64, 64, 238, 238, 64, 239, 
-    239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 
-    239, 239, 239, 64, 64, 64, 239, 239, 239, 239, 239, 239, 239, 239, 64, 
-    239, 239, 239, 239, 239, 239, 239, 239, 239, 64, 239, 64, 64, 64, 64, 
-    240, 64, 64, 64, 64, 238, 238, 238, 241, 241, 241, 64, 241, 64, 238, 238, 
-    238, 238, 238, 238, 238, 238, 64, 64, 238, 238, 242, 64, 64, 64, 64, 243, 
-    243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 
-    243, 244, 243, 243, 244, 244, 244, 244, 245, 245, 246, 64, 64, 64, 64, 
-    247, 243, 243, 243, 243, 243, 243, 248, 244, 249, 249, 249, 249, 244, 
-    244, 244, 250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 250, 
-    250, 64, 64, 64, 64, 64, 252, 252, 64, 252, 64, 64, 252, 252, 64, 252, 
-    64, 64, 252, 64, 64, 64, 64, 64, 64, 252, 252, 252, 252, 64, 252, 252, 
-    252, 252, 252, 252, 252, 64, 252, 252, 252, 64, 252, 64, 252, 64, 64, 
-    252, 252, 64, 252, 252, 252, 252, 253, 252, 252, 253, 253, 253, 253, 254, 
-    254, 64, 253, 253, 252, 64, 64, 252, 252, 252, 252, 252, 64, 255, 64, 
-    256, 256, 256, 256, 253, 253, 64, 64, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 64, 64, 252, 252, 252, 252, 258, 259, 259, 259, 260, 260, 
-    260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 259, 
-    260, 259, 259, 259, 261, 261, 259, 259, 259, 259, 259, 259, 262, 262, 
-    262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, 263, 
-    263, 263, 263, 263, 259, 261, 259, 261, 259, 264, 265, 266, 265, 266, 
-    267, 267, 258, 258, 258, 258, 258, 258, 258, 258, 64, 258, 258, 258, 258, 
-    258, 258, 258, 258, 258, 258, 258, 258, 64, 64, 64, 64, 268, 269, 270, 
-    271, 270, 270, 270, 270, 270, 269, 269, 269, 269, 270, 267, 269, 270, 
-    272, 272, 273, 260, 272, 272, 258, 258, 258, 258, 258, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 64, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 64, 259, 259, 259, 259, 259, 259, 259, 259, 
-    261, 259, 259, 259, 259, 259, 259, 64, 259, 259, 260, 260, 260, 260, 260, 
-    274, 274, 274, 274, 260, 260, 64, 64, 64, 64, 64, 275, 275, 275, 275, 
-    275, 275, 275, 275, 275, 275, 275, 276, 276, 277, 277, 277, 277, 276, 
-    277, 277, 277, 277, 277, 278, 276, 279, 279, 276, 276, 277, 277, 275, 
-    280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 
-    281, 281, 275, 275, 275, 275, 275, 275, 276, 276, 277, 277, 275, 275, 
-    275, 275, 277, 277, 277, 275, 276, 276, 276, 275, 275, 276, 276, 276, 
-    276, 276, 276, 276, 275, 275, 275, 277, 277, 277, 277, 275, 275, 275, 
-    275, 275, 277, 276, 276, 277, 277, 276, 276, 276, 276, 276, 276, 282, 
-    275, 276, 280, 280, 276, 276, 276, 277, 283, 283, 284, 284, 284, 284, 
-    284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 64, 284, 64, 64, 64, 
-    64, 64, 284, 64, 64, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 
-    285, 84, 286, 285, 285, 285, 287, 287, 287, 287, 287, 287, 287, 287, 288, 
-    288, 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, 289, 289, 289, 
-    289, 289, 64, 289, 289, 289, 289, 64, 64, 289, 289, 289, 289, 289, 289, 
-    289, 64, 289, 289, 289, 64, 64, 290, 290, 290, 291, 291, 291, 291, 291, 
-    291, 291, 291, 291, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 
-    292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 64, 64, 64, 293, 293, 
-    293, 293, 293, 293, 293, 293, 293, 293, 64, 64, 64, 64, 64, 64, 294, 294, 
-    294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 64, 64, 64, 295, 
-    296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 
-    296, 296, 296, 296, 296, 296, 297, 297, 296, 298, 299, 299, 299, 299, 
-    299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 
-    300, 301, 64, 64, 64, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 
-    302, 84, 84, 84, 303, 303, 303, 64, 64, 64, 64, 64, 64, 64, 304, 304, 
-    304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 64, 304, 304, 304, 
-    304, 305, 305, 306, 64, 64, 64, 307, 307, 307, 307, 307, 307, 307, 307, 
-    307, 307, 308, 308, 309, 84, 84, 64, 310, 310, 310, 310, 310, 310, 310, 
-    310, 310, 310, 311, 311, 64, 64, 64, 64, 312, 312, 312, 312, 312, 312, 
-    312, 312, 312, 312, 312, 312, 312, 64, 312, 312, 312, 64, 313, 313, 64, 
-    64, 64, 64, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 
-    315, 315, 316, 315, 315, 315, 315, 315, 315, 315, 316, 316, 316, 316, 
-    316, 316, 316, 316, 315, 316, 316, 315, 315, 315, 315, 315, 315, 315, 
-    315, 315, 317, 315, 318, 318, 318, 319, 318, 318, 318, 320, 314, 321, 64, 
-    64, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 64, 64, 64, 64, 64, 
-    64, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 64, 64, 64, 64, 64, 
-    64, 324, 324, 66, 66, 324, 66, 325, 324, 324, 324, 324, 326, 326, 326, 
-    327, 64, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 64, 64, 64, 
-    64, 64, 64, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 330, 
-    329, 329, 329, 329, 329, 331, 329, 64, 64, 64, 64, 64, 296, 296, 296, 
-    296, 296, 296, 64, 64, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 
-    332, 332, 332, 64, 64, 64, 333, 333, 333, 334, 334, 334, 334, 333, 333, 
-    334, 334, 334, 64, 64, 64, 64, 334, 334, 333, 334, 334, 334, 334, 334, 
-    334, 335, 336, 337, 64, 64, 64, 64, 338, 64, 64, 64, 339, 339, 340, 340, 
-    340, 340, 340, 340, 340, 340, 340, 340, 341, 341, 341, 341, 341, 341, 
-    341, 341, 341, 341, 341, 341, 341, 341, 64, 64, 341, 341, 341, 341, 341, 
-    64, 64, 64, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 
-    64, 64, 64, 64, 343, 343, 343, 343, 343, 343, 343, 343, 343, 342, 342, 
-    342, 342, 342, 342, 342, 343, 343, 64, 64, 64, 64, 64, 64, 344, 344, 344, 
-    344, 344, 344, 344, 344, 344, 344, 345, 64, 64, 64, 346, 346, 347, 347, 
-    347, 347, 347, 347, 347, 347, 348, 348, 348, 348, 348, 348, 348, 348, 
-    348, 348, 348, 348, 348, 348, 348, 349, 350, 351, 351, 351, 64, 64, 352, 
-    352, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 
-    354, 355, 354, 355, 355, 355, 355, 355, 355, 355, 64, 356, 354, 355, 354, 
-    354, 355, 355, 355, 355, 355, 355, 355, 355, 354, 354, 354, 354, 354, 
-    354, 355, 355, 357, 357, 357, 357, 357, 357, 357, 357, 64, 64, 358, 359, 
-    359, 359, 359, 359, 359, 359, 359, 359, 359, 64, 64, 64, 64, 64, 64, 360, 
-    360, 360, 360, 360, 360, 360, 361, 360, 360, 360, 360, 360, 360, 64, 64, 
-    362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 
-    364, 364, 364, 364, 364, 364, 365, 363, 362, 362, 362, 362, 362, 363, 
-    362, 363, 363, 363, 363, 363, 362, 363, 366, 364, 364, 364, 364, 364, 
-    364, 364, 64, 64, 64, 64, 367, 367, 367, 367, 367, 367, 367, 367, 367, 
-    367, 368, 368, 368, 368, 368, 368, 368, 369, 369, 369, 369, 369, 369, 
-    369, 369, 369, 369, 370, 371, 370, 370, 370, 370, 370, 370, 370, 369, 
-    369, 369, 369, 369, 369, 369, 369, 369, 64, 64, 64, 372, 372, 373, 374, 
-    374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 373, 
-    372, 372, 372, 372, 373, 373, 372, 372, 375, 376, 373, 373, 374, 374, 
-    377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 374, 374, 374, 374, 
-    374, 374, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 
-    378, 378, 379, 380, 381, 381, 380, 380, 380, 381, 380, 381, 381, 381, 
-    382, 382, 64, 64, 64, 64, 64, 64, 64, 64, 383, 383, 383, 383, 384, 384, 
-    384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 385, 385, 385, 
-    385, 385, 385, 385, 386, 386, 386, 386, 386, 386, 386, 386, 385, 385, 
-    386, 387, 64, 64, 64, 388, 388, 388, 388, 388, 389, 389, 389, 389, 389, 
-    389, 389, 389, 389, 389, 64, 64, 64, 384, 384, 384, 390, 390, 390, 390, 
-    390, 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 391, 391, 
-    391, 391, 391, 391, 391, 391, 392, 392, 392, 392, 392, 392, 393, 393, 
-    394, 394, 394, 394, 394, 394, 394, 394, 78, 78, 78, 84, 395, 133, 133, 
-    133, 133, 133, 78, 78, 133, 133, 133, 133, 78, 396, 395, 395, 395, 395, 
-    395, 395, 395, 397, 397, 397, 397, 133, 397, 397, 397, 397, 396, 396, 78, 
-    397, 397, 64, 41, 41, 41, 41, 41, 41, 62, 62, 62, 62, 62, 75, 44, 44, 44, 
+    75, 72, 75, 72, 75, 75, 64, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 64, 64, 81, 82, 82, 82, 82, 
+    82, 82, 64, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 
+    64, 84, 85, 64, 64, 86, 86, 87, 64, 88, 89, 89, 89, 89, 88, 89, 89, 89, 
+    90, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 88, 89, 
+    89, 90, 91, 89, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 101, 102, 103, 
+    104, 105, 106, 107, 108, 109, 107, 89, 88, 107, 100, 64, 64, 64, 64, 64, 
+    64, 64, 64, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 64, 
+    64, 64, 64, 64, 110, 110, 110, 107, 107, 64, 64, 64, 111, 111, 111, 111, 
+    111, 112, 113, 113, 114, 115, 115, 116, 117, 118, 119, 119, 120, 120, 
+    120, 120, 120, 120, 120, 120, 121, 122, 123, 124, 125, 64, 118, 124, 126, 
+    126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 128, 129, 130, 131, 132, 133, 134, 135, 78, 78, 136, 
+    137, 120, 120, 120, 120, 120, 137, 120, 120, 137, 138, 138, 138, 138, 
+    138, 138, 138, 138, 138, 138, 115, 139, 139, 118, 126, 126, 140, 126, 
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 118, 126, 120, 120, 
+    120, 120, 120, 120, 120, 112, 119, 120, 120, 120, 120, 137, 120, 141, 
+    141, 120, 120, 119, 137, 120, 120, 137, 126, 126, 142, 142, 142, 142, 
+    142, 142, 142, 142, 142, 142, 126, 126, 126, 143, 143, 126, 144, 144, 
+    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 64, 145, 146, 
+    147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 
+    146, 148, 149, 148, 148, 149, 148, 148, 149, 149, 149, 148, 149, 149, 
+    148, 149, 148, 148, 148, 149, 148, 149, 148, 149, 148, 149, 148, 148, 64, 
+    64, 146, 146, 146, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 
+    150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 
+    150, 64, 64, 64, 64, 64, 64, 152, 152, 152, 152, 152, 152, 152, 152, 152, 
+    152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 
+    153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 155, 154, 156, 
+    156, 157, 158, 158, 158, 156, 64, 64, 64, 64, 64, 159, 159, 159, 159, 
+    159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 
+    161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 160, 160, 160, 
+    161, 160, 160, 160, 160, 160, 64, 64, 162, 162, 162, 162, 162, 162, 162, 
+    162, 162, 162, 162, 162, 162, 162, 162, 64, 163, 163, 163, 163, 163, 163, 
+    163, 163, 163, 164, 164, 164, 64, 64, 165, 64, 126, 126, 126, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 120, 120, 137, 120, 120, 137, 120, 120, 120, 137, 
+    137, 137, 166, 167, 168, 120, 120, 120, 137, 120, 120, 137, 137, 120, 
+    120, 120, 120, 120, 169, 169, 169, 170, 171, 171, 171, 171, 171, 171, 
+    171, 171, 171, 171, 171, 171, 171, 171, 169, 170, 172, 171, 170, 170, 
+    170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 173, 
+    170, 170, 171, 78, 136, 174, 174, 169, 169, 169, 171, 171, 169, 169, 84, 
+    84, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 177, 171, 171, 
+    171, 171, 171, 171, 178, 179, 180, 180, 64, 178, 178, 178, 178, 178, 178, 
+    178, 178, 64, 64, 178, 178, 64, 64, 178, 178, 178, 178, 178, 178, 178, 
+    178, 178, 178, 178, 178, 178, 178, 64, 178, 178, 178, 178, 178, 178, 178, 
+    64, 178, 64, 64, 64, 178, 178, 178, 178, 64, 64, 181, 178, 180, 180, 180, 
+    179, 179, 179, 179, 64, 64, 180, 180, 64, 64, 180, 180, 182, 178, 64, 64, 
+    64, 64, 64, 64, 64, 64, 180, 64, 64, 64, 64, 178, 178, 64, 178, 178, 178, 
+    179, 179, 64, 64, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 178, 
+    178, 184, 184, 185, 185, 185, 185, 185, 185, 186, 184, 64, 64, 64, 64, 
+    64, 187, 187, 188, 64, 189, 189, 189, 189, 189, 189, 64, 64, 64, 64, 189, 
+    189, 64, 64, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 
+    189, 189, 64, 189, 189, 189, 189, 189, 189, 189, 64, 189, 189, 64, 189, 
+    189, 64, 189, 189, 64, 64, 190, 64, 188, 188, 188, 187, 187, 64, 64, 64, 
+    64, 187, 187, 64, 64, 187, 187, 191, 64, 64, 64, 187, 64, 64, 64, 64, 64, 
+    64, 64, 189, 189, 189, 189, 64, 189, 64, 64, 64, 64, 64, 64, 64, 192, 
+    192, 192, 192, 192, 192, 192, 192, 192, 192, 187, 187, 189, 189, 189, 
+    187, 64, 64, 64, 193, 193, 194, 64, 195, 195, 195, 195, 195, 195, 195, 
+    195, 195, 64, 195, 195, 195, 64, 195, 195, 195, 195, 195, 195, 195, 195, 
+    195, 195, 195, 195, 195, 195, 64, 195, 195, 195, 195, 195, 195, 195, 64, 
+    195, 195, 64, 195, 195, 195, 195, 195, 64, 64, 196, 195, 194, 194, 194, 
+    193, 193, 193, 193, 193, 64, 193, 193, 194, 64, 194, 194, 197, 64, 64, 
+    195, 64, 64, 64, 64, 64, 64, 64, 195, 195, 193, 193, 64, 64, 198, 198, 
+    198, 198, 198, 198, 198, 198, 198, 198, 199, 200, 64, 64, 64, 64, 64, 64, 
+    64, 201, 202, 202, 64, 203, 203, 203, 203, 203, 203, 203, 203, 64, 64, 
+    203, 203, 64, 64, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 
+    203, 203, 203, 64, 203, 203, 203, 203, 203, 203, 203, 64, 203, 203, 64, 
+    203, 203, 203, 203, 203, 64, 64, 204, 203, 202, 201, 202, 201, 201, 201, 
+    201, 64, 64, 202, 202, 64, 64, 202, 202, 205, 64, 64, 64, 64, 64, 64, 64, 
+    64, 201, 202, 64, 64, 64, 64, 203, 203, 64, 203, 203, 203, 201, 201, 64, 
+    64, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 207, 203, 208, 208, 
+    208, 208, 208, 208, 64, 64, 209, 210, 64, 210, 210, 210, 210, 210, 210, 
+    64, 64, 64, 210, 210, 210, 64, 210, 210, 210, 210, 64, 64, 64, 210, 210, 
+    64, 210, 64, 210, 210, 64, 64, 64, 210, 210, 64, 64, 64, 210, 210, 210, 
+    210, 210, 210, 210, 210, 210, 210, 64, 64, 64, 64, 211, 211, 209, 211, 
+    211, 64, 64, 64, 211, 211, 211, 64, 211, 211, 211, 212, 64, 64, 210, 64, 
+    64, 64, 64, 64, 64, 211, 64, 64, 64, 64, 64, 64, 213, 213, 213, 213, 213, 
+    213, 213, 213, 213, 213, 214, 214, 214, 215, 215, 215, 215, 215, 215, 
+    216, 215, 64, 64, 64, 64, 64, 217, 218, 218, 218, 64, 219, 219, 219, 219, 
+    219, 219, 219, 219, 64, 219, 219, 219, 64, 219, 219, 219, 219, 219, 219, 
+    219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 64, 64, 64, 219, 217, 
+    217, 217, 218, 218, 218, 218, 64, 217, 217, 217, 64, 217, 217, 217, 220, 
+    64, 64, 64, 64, 64, 64, 64, 221, 222, 64, 219, 219, 64, 64, 64, 64, 64, 
+    64, 219, 219, 217, 217, 64, 64, 223, 223, 223, 223, 223, 223, 223, 223, 
+    223, 223, 224, 224, 224, 224, 224, 224, 224, 225, 64, 226, 227, 227, 64, 
+    228, 228, 228, 228, 228, 228, 228, 228, 64, 228, 228, 228, 64, 228, 228, 
+    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
+    228, 228, 64, 228, 228, 228, 228, 228, 64, 64, 229, 228, 227, 230, 227, 
+    227, 227, 227, 227, 64, 230, 227, 227, 64, 227, 227, 226, 231, 64, 64, 
+    64, 64, 64, 64, 64, 227, 227, 64, 64, 64, 64, 64, 64, 64, 228, 64, 228, 
+    228, 226, 226, 64, 64, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    64, 228, 228, 64, 64, 64, 64, 64, 64, 233, 234, 234, 64, 235, 235, 235, 
+    235, 235, 235, 235, 235, 64, 235, 235, 235, 64, 235, 235, 235, 235, 235, 
+    235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 64, 64, 235, 
+    234, 234, 234, 233, 233, 233, 233, 64, 234, 234, 234, 64, 234, 234, 234, 
+    236, 235, 64, 64, 64, 64, 64, 64, 64, 64, 234, 235, 235, 233, 233, 64, 
+    64, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 
+    238, 238, 64, 64, 64, 239, 235, 235, 235, 235, 235, 235, 64, 64, 240, 
+    240, 64, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 64, 64, 64, 241, 241, 241, 241, 241, 241, 241, 
+    241, 64, 241, 241, 241, 241, 241, 241, 241, 241, 241, 64, 241, 64, 64, 
+    64, 64, 242, 64, 64, 64, 64, 240, 240, 240, 243, 243, 243, 64, 243, 64, 
+    240, 240, 240, 240, 240, 240, 240, 240, 64, 64, 64, 64, 64, 64, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 64, 64, 240, 240, 245, 64, 64, 
+    64, 64, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 
+    246, 246, 246, 247, 246, 246, 247, 247, 247, 247, 248, 248, 249, 64, 64, 
+    64, 64, 250, 246, 246, 246, 246, 246, 246, 251, 247, 252, 252, 252, 252, 
+    247, 247, 247, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 
+    253, 253, 64, 64, 64, 64, 64, 255, 255, 64, 255, 64, 64, 255, 255, 64, 
+    255, 64, 64, 255, 64, 64, 64, 64, 64, 64, 255, 255, 255, 255, 64, 255, 
+    255, 255, 255, 255, 255, 255, 64, 255, 255, 255, 64, 255, 64, 255, 64, 
+    64, 255, 255, 64, 255, 255, 255, 255, 256, 255, 255, 256, 256, 256, 256, 
+    257, 257, 64, 256, 256, 255, 64, 64, 255, 255, 255, 255, 255, 64, 258, 
+    64, 259, 259, 259, 259, 256, 256, 64, 64, 260, 260, 260, 260, 260, 260, 
+    260, 260, 260, 260, 64, 64, 255, 255, 255, 255, 261, 262, 262, 262, 263, 
+    263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 
+    262, 263, 262, 262, 262, 264, 264, 262, 262, 262, 262, 262, 262, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266, 266, 
+    266, 266, 266, 266, 266, 262, 264, 262, 264, 262, 267, 268, 269, 268, 
+    269, 270, 270, 261, 261, 261, 261, 261, 261, 261, 261, 64, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 64, 64, 64, 64, 271, 272, 
+    273, 274, 273, 273, 273, 273, 273, 272, 272, 272, 272, 273, 270, 272, 
+    273, 275, 275, 276, 263, 275, 275, 261, 261, 261, 261, 261, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 64, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 64, 262, 262, 262, 262, 262, 262, 262, 
+    262, 264, 262, 262, 262, 262, 262, 262, 64, 262, 262, 263, 263, 263, 263, 
+    263, 277, 277, 277, 277, 263, 263, 64, 64, 64, 64, 64, 278, 278, 278, 
+    278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 280, 280, 280, 280, 
+    279, 280, 280, 280, 280, 280, 281, 279, 282, 282, 279, 279, 280, 280, 
+    278, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 284, 
+    284, 284, 284, 278, 278, 278, 278, 278, 278, 279, 279, 280, 280, 278, 
+    278, 278, 278, 280, 280, 280, 278, 279, 279, 279, 278, 278, 279, 279, 
+    279, 279, 279, 279, 279, 278, 278, 278, 280, 280, 280, 280, 278, 278, 
+    278, 278, 278, 280, 279, 279, 280, 280, 279, 279, 279, 279, 279, 279, 
+    285, 278, 279, 283, 283, 279, 279, 279, 280, 286, 286, 287, 287, 287, 
+    287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 64, 287, 64, 64, 
+    64, 64, 64, 287, 64, 64, 288, 288, 288, 288, 288, 288, 288, 288, 288, 
+    288, 288, 84, 289, 288, 288, 288, 290, 290, 290, 290, 290, 290, 290, 290, 
+    291, 291, 291, 291, 291, 291, 291, 291, 292, 292, 292, 292, 292, 292, 
+    292, 292, 292, 64, 292, 292, 292, 292, 64, 64, 292, 292, 292, 292, 292, 
+    292, 292, 64, 292, 292, 292, 64, 64, 293, 293, 293, 294, 294, 294, 294, 
+    294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295, 295, 295, 295, 
+    295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 64, 64, 64, 296, 
+    296, 296, 296, 296, 296, 296, 296, 296, 296, 64, 64, 64, 64, 64, 64, 297, 
+    297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 64, 64, 64, 
+    298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 
+    299, 299, 299, 299, 299, 299, 299, 300, 300, 299, 301, 302, 302, 302, 
+    302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 
+    302, 303, 304, 64, 64, 64, 305, 305, 305, 305, 305, 305, 305, 305, 305, 
+    305, 305, 84, 84, 84, 306, 306, 306, 305, 305, 305, 305, 305, 305, 305, 
+    305, 64, 64, 64, 64, 64, 64, 64, 307, 307, 307, 307, 307, 307, 307, 307, 
+    307, 307, 307, 307, 307, 64, 307, 307, 307, 307, 308, 308, 309, 64, 64, 
+    64, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, 312, 84, 
+    84, 64, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 314, 64, 
+    64, 64, 64, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 
+    315, 64, 315, 315, 315, 64, 316, 316, 64, 64, 64, 64, 317, 317, 317, 317, 
+    317, 317, 317, 317, 317, 317, 317, 317, 318, 318, 319, 318, 318, 318, 
+    318, 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319, 318, 319, 
+    319, 318, 318, 318, 318, 318, 318, 318, 318, 318, 320, 318, 321, 321, 
+    321, 322, 321, 321, 321, 323, 317, 324, 64, 64, 325, 325, 325, 325, 325, 
+    325, 325, 325, 325, 325, 64, 64, 64, 64, 64, 64, 326, 326, 326, 326, 326, 
+    326, 326, 326, 326, 326, 64, 64, 64, 64, 64, 64, 327, 327, 66, 66, 327, 
+    66, 328, 327, 327, 327, 327, 329, 329, 329, 330, 64, 331, 331, 331, 331, 
+    331, 331, 331, 331, 331, 331, 64, 64, 64, 64, 64, 64, 332, 332, 332, 332, 
+    332, 332, 332, 332, 332, 332, 332, 333, 332, 332, 332, 332, 332, 334, 
+    332, 64, 64, 64, 64, 64, 299, 299, 299, 299, 299, 299, 64, 64, 335, 335, 
+    335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 64, 336, 
+    336, 336, 337, 337, 337, 337, 336, 336, 337, 337, 337, 64, 64, 64, 64, 
+    337, 337, 336, 337, 337, 337, 337, 337, 337, 338, 339, 340, 64, 64, 64, 
+    64, 341, 64, 64, 64, 342, 342, 343, 343, 343, 343, 343, 343, 343, 343, 
+    343, 343, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 
+    344, 344, 64, 64, 344, 344, 344, 344, 344, 64, 64, 64, 345, 345, 345, 
+    345, 345, 345, 345, 345, 345, 345, 345, 345, 64, 64, 64, 64, 346, 346, 
+    346, 346, 346, 346, 346, 346, 346, 345, 345, 345, 345, 345, 345, 345, 
+    346, 346, 64, 64, 64, 64, 64, 64, 347, 347, 347, 347, 347, 347, 347, 347, 
+    347, 347, 348, 64, 64, 64, 349, 349, 350, 350, 350, 350, 350, 350, 350, 
+    350, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 
+    351, 351, 352, 353, 354, 354, 355, 64, 64, 356, 356, 357, 357, 357, 357, 
+    357, 357, 357, 357, 357, 357, 357, 357, 357, 358, 359, 358, 359, 359, 
+    359, 359, 359, 359, 359, 64, 360, 358, 359, 358, 358, 359, 359, 359, 359, 
+    359, 359, 359, 359, 358, 358, 358, 358, 358, 358, 359, 359, 361, 361, 
+    361, 361, 361, 361, 361, 361, 64, 64, 362, 363, 363, 363, 363, 363, 363, 
+    363, 363, 363, 363, 64, 64, 64, 64, 64, 64, 364, 364, 364, 364, 364, 364, 
+    364, 365, 364, 364, 364, 364, 364, 364, 64, 64, 78, 78, 78, 78, 78, 136, 
+    136, 136, 136, 136, 136, 78, 78, 136, 366, 64, 367, 367, 367, 367, 368, 
+    369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 
+    369, 370, 368, 367, 367, 367, 367, 367, 368, 367, 368, 368, 368, 368, 
+    368, 367, 368, 371, 369, 369, 369, 369, 369, 369, 369, 64, 64, 64, 64, 
+    372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 
+    373, 373, 373, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375, 
+    376, 375, 375, 375, 375, 375, 375, 375, 374, 374, 374, 374, 374, 374, 
+    374, 374, 374, 64, 64, 64, 377, 377, 378, 379, 379, 379, 379, 379, 379, 
+    379, 379, 379, 379, 379, 379, 379, 379, 378, 377, 377, 377, 377, 378, 
+    378, 377, 377, 380, 381, 377, 377, 379, 379, 382, 382, 382, 382, 382, 
+    382, 382, 382, 382, 382, 379, 379, 379, 379, 379, 379, 383, 383, 383, 
+    383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 384, 385, 386, 
+    386, 385, 385, 385, 386, 385, 386, 386, 386, 387, 387, 64, 64, 64, 64, 
+    64, 64, 64, 64, 388, 388, 388, 388, 389, 389, 389, 389, 389, 389, 389, 
+    389, 389, 389, 389, 389, 390, 390, 390, 390, 390, 390, 390, 390, 391, 
+    391, 391, 391, 391, 391, 391, 391, 390, 390, 391, 392, 64, 64, 64, 393, 
+    393, 393, 393, 393, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 64, 
+    64, 64, 389, 389, 389, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 
+    396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 
+    397, 397, 397, 397, 397, 397, 398, 398, 399, 399, 399, 399, 399, 399, 
+    399, 399, 78, 78, 78, 84, 400, 136, 136, 136, 136, 136, 78, 78, 136, 136, 
+    136, 136, 78, 401, 400, 400, 400, 400, 400, 400, 400, 402, 402, 402, 402, 
+    136, 402, 402, 402, 402, 401, 401, 78, 402, 402, 64, 78, 78, 64, 64, 64, 
+    64, 64, 64, 41, 41, 41, 41, 41, 41, 62, 62, 62, 62, 62, 75, 44, 44, 44, 
     44, 44, 44, 44, 44, 44, 65, 65, 65, 65, 65, 44, 44, 44, 44, 65, 65, 65, 
     44, 44, 44, 44, 44, 44, 65, 65, 65, 65, 65, 44, 44, 44, 44, 65, 65, 65, 
-    65, 65, 41, 41, 41, 41, 41, 398, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 65, 78, 78, 133, 78, 78, 
-    78, 78, 78, 78, 78, 133, 78, 78, 399, 400, 133, 401, 78, 78, 78, 78, 78, 
-    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 64, 
-    64, 64, 64, 64, 402, 133, 78, 133, 37, 41, 37, 41, 37, 41, 41, 41, 41, 
+    65, 65, 41, 41, 41, 41, 41, 403, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 65, 78, 78, 136, 78, 78, 
+    78, 78, 78, 78, 78, 136, 78, 78, 404, 405, 136, 406, 78, 78, 78, 78, 78, 
+    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 64, 64, 
+    64, 64, 64, 64, 407, 136, 78, 136, 37, 41, 37, 41, 37, 41, 41, 41, 41, 
     41, 41, 41, 41, 41, 37, 41, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 
     61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 64, 64, 61, 61, 61, 61, 61, 
     41, 41, 41, 41, 41, 37, 41, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 
     61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 64, 64, 61, 61, 61, 61, 61, 
-    61, 64, 64, 64, 61, 64, 61, 64, 61, 64, 61, 403, 403, 403, 403, 403, 403
-    403, 403, 62, 62, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 63, 62, 
-    63, 63, 63, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 63, 63, 63, 62, 
+    61, 64, 64, 64, 61, 64, 61, 64, 61, 64, 61, 408, 408, 408, 408, 408, 408
+    408, 408, 62, 62, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 408, 63, 62, 
+    63, 63, 63, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 408, 63, 63, 63, 62, 
     62, 62, 62, 64, 64, 62, 62, 61, 61, 61, 61, 64, 63, 63, 63, 61, 61, 61, 
     62, 62, 62, 64, 64, 62, 62, 61, 61, 61, 61, 64, 63, 63, 63, 61, 61, 61, 
-    61, 61, 63, 63, 63, 64, 64, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 403, 
-    63, 63, 64, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 405, 
-    406, 406, 407, 408, 409, 410, 410, 409, 409, 409, 22, 66, 411, 412, 413, 
-    414, 411, 412, 413, 414, 22, 22, 22, 66, 22, 22, 22, 22, 415, 416, 417, 
-    418, 419, 420, 421, 21, 422, 423, 422, 422, 423, 22, 66, 66, 66, 28, 35, 
-    22, 66, 66, 22, 424, 424, 66, 66, 66, 425, 426, 427, 66, 66, 66, 66, 66, 
-    66, 66, 66, 66, 66, 66, 428, 66, 424, 66, 66, 66, 66, 66, 66, 66, 66, 66, 
-    66, 404, 405, 405, 405, 405, 405, 64, 64, 64, 64, 64, 405, 405, 405, 405, 
-    405, 405, 429, 44, 64, 64, 33, 429, 429, 429, 429, 429, 430, 430, 428, 
-    426, 427, 431, 429, 33, 33, 33, 33, 429, 429, 429, 429, 429, 430, 430, 
-    428, 426, 427, 64, 44, 44, 44, 44, 44, 64, 64, 64, 247, 247, 247, 247, 
-    247, 247, 247, 247, 247, 432, 247, 247, 23, 247, 247, 247, 247, 247, 247, 
-    64, 64, 64, 64, 64, 78, 78, 395, 395, 78, 78, 78, 78, 395, 395, 395, 78, 
-    78, 433, 433, 433, 433, 78, 433, 433, 433, 395, 395, 78, 133, 78, 395, 
-    395, 133, 133, 133, 133, 78, 64, 64, 64, 64, 64, 64, 64, 26, 26, 434, 30, 
-    26, 30, 26, 434, 26, 30, 34, 434, 434, 434, 34, 34, 434, 434, 434, 435, 
-    26, 434, 30, 26, 428, 434, 434, 434, 434, 434, 26, 26, 26, 30, 30, 26, 
-    434, 26, 67, 26, 434, 26, 37, 38, 434, 434, 436, 34, 434, 434, 37, 434, 
-    34, 397, 397, 397, 397, 34, 26, 26, 34, 34, 434, 434, 437, 428, 428, 428, 
-    428, 434, 34, 34, 34, 34, 26, 428, 26, 26, 41, 274, 438, 438, 438, 36, 
-    36, 438, 438, 438, 438, 438, 438, 36, 36, 36, 36, 438, 439, 439, 439, 
-    439, 439, 439, 439, 439, 439, 439, 439, 439, 440, 440, 440, 440, 439, 
-    439, 440, 440, 440, 440, 440, 440, 440, 440, 440, 37, 41, 440, 440, 440, 
-    440, 36, 64, 64, 64, 64, 64, 64, 39, 39, 39, 39, 39, 30, 30, 30, 30, 30, 
-    428, 428, 26, 26, 26, 26, 428, 26, 26, 428, 26, 26, 428, 26, 26, 26, 26, 
-    26, 26, 26, 428, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 428, 428, 26, 26, 39, 26, 39, 26, 26, 
-    26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 428, 428, 428, 428, 
-    428, 428, 428, 428, 428, 428, 428, 428, 39, 437, 441, 441, 437, 428, 428, 
-    39, 441, 437, 437, 441, 437, 437, 428, 39, 428, 441, 430, 442, 428, 441, 
-    437, 428, 428, 428, 441, 437, 437, 441, 39, 441, 441, 437, 437, 39, 437, 
-    39, 437, 39, 39, 39, 39, 441, 441, 437, 441, 437, 437, 437, 437, 437, 39, 
-    39, 39, 39, 428, 437, 428, 437, 441, 441, 437, 437, 437, 437, 437, 437, 
-    437, 437, 437, 437, 441, 437, 437, 437, 441, 428, 428, 428, 428, 428, 
-    441, 437, 437, 437, 428, 428, 428, 428, 428, 428, 428, 428, 428, 437, 
-    441, 39, 437, 428, 441, 441, 441, 441, 437, 437, 441, 441, 428, 428, 441, 
-    441, 437, 437, 441, 441, 437, 437, 441, 441, 437, 437, 437, 437, 437, 
-    428, 428, 437, 437, 437, 437, 428, 428, 39, 428, 428, 437, 39, 428, 428, 
-    428, 428, 428, 428, 428, 428, 437, 437, 428, 39, 437, 437, 437, 428, 428, 
-    428, 428, 428, 437, 441, 428, 437, 437, 437, 437, 437, 428, 428, 437, 
-    437, 428, 428, 428, 428, 437, 437, 437, 437, 437, 437, 437, 437, 428, 
-    428, 437, 437, 437, 437, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 
-    437, 437, 26, 26, 26, 26, 26, 26, 26, 443, 444, 26, 26, 26, 26, 26, 26, 
-    26, 26, 26, 26, 26, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
-    274, 274, 274, 26, 428, 26, 26, 26, 26, 26, 26, 26, 26, 274, 26, 26, 26, 
-    26, 26, 428, 428, 428, 428, 428, 428, 428, 428, 428, 26, 26, 26, 26, 428, 
-    428, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 64, 64, 64, 64, 26, 26, 26, 
-    26, 26, 26, 26, 64, 26, 26, 26, 64, 64, 64, 64, 64, 36, 36, 36, 36, 36, 
-    36, 36, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 445, 445, 
-    445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 438, 36, 36, 
-    36, 36, 36, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 
-    26, 26, 26, 30, 30, 30, 30, 26, 26, 30, 30, 26, 30, 30, 30, 30, 30, 26, 
-    26, 30, 30, 26, 26, 30, 39, 26, 26, 26, 26, 30, 30, 26, 26, 30, 39, 26, 
-    26, 26, 26, 30, 30, 30, 26, 26, 30, 26, 26, 30, 30, 26, 26, 26, 26, 26, 
-    30, 30, 26, 26, 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 30, 26, 30, 
-    26, 30, 26, 30, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 
-    30, 30, 26, 30, 30, 26, 39, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 
-    26, 274, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
-    30, 26, 30, 30, 30, 26, 30, 26, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 
-    26, 26, 26, 26, 26, 26, 30, 26, 26, 426, 427, 426, 427, 426, 427, 426, 
-    427, 426, 427, 426, 427, 426, 427, 36, 36, 438, 438, 438, 438, 438, 438, 
-    438, 438, 438, 438, 438, 438, 26, 26, 26, 26, 437, 428, 428, 437, 437, 
-    426, 427, 428, 437, 437, 428, 437, 437, 437, 428, 428, 428, 428, 428, 
-    437, 437, 437, 437, 428, 428, 428, 428, 428, 437, 437, 437, 428, 428, 
-    428, 437, 437, 437, 437, 9, 10, 9, 10, 9, 10, 9, 10, 426, 427, 446, 446, 
-    446, 446, 446, 446, 446, 446, 428, 428, 428, 426, 427, 9, 10, 426, 427, 
-    426, 427, 426, 427, 426, 427, 426, 427, 428, 428, 437, 437, 437, 437, 
-    437, 437, 428, 428, 428, 428, 428, 428, 428, 428, 437, 428, 428, 428, 
-    428, 437, 437, 437, 437, 437, 428, 437, 437, 428, 428, 426, 427, 426, 
-    427, 437, 428, 428, 428, 428, 437, 428, 437, 437, 437, 428, 428, 437, 
-    437, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 437, 437, 437, 
-    437, 437, 437, 428, 428, 426, 427, 428, 428, 428, 428, 437, 437, 437, 
-    437, 437, 437, 437, 437, 437, 437, 437, 428, 437, 437, 437, 437, 428, 
-    428, 437, 428, 437, 428, 428, 437, 428, 437, 437, 437, 437, 428, 428, 
-    428, 428, 428, 437, 437, 428, 428, 428, 428, 437, 437, 437, 437, 428, 
-    437, 437, 428, 428, 437, 437, 428, 428, 428, 428, 437, 437, 437, 437, 
-    437, 437, 437, 437, 437, 437, 437, 428, 428, 437, 437, 437, 437, 437, 
-    437, 437, 437, 428, 437, 437, 437, 437, 437, 437, 437, 437, 428, 428, 
-    428, 428, 428, 437, 428, 437, 428, 428, 428, 437, 437, 437, 437, 437, 
-    428, 428, 428, 428, 437, 428, 428, 428, 437, 437, 437, 437, 437, 428, 
-    437, 428, 428, 428, 428, 428, 428, 428, 26, 26, 428, 428, 428, 428, 428, 
-    428, 64, 64, 64, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 64, 64, 64, 64, 
-    64, 64, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 
-    447, 447, 64, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 
-    448, 448, 448, 64, 37, 41, 37, 37, 37, 41, 41, 37, 41, 37, 41, 37, 41, 
-    37, 37, 37, 37, 41, 37, 41, 41, 37, 41, 41, 41, 41, 41, 41, 44, 44, 37, 
-    37, 69, 70, 69, 70, 70, 449, 449, 449, 449, 449, 449, 69, 70, 69, 70, 
-    450, 450, 450, 69, 70, 64, 64, 64, 64, 64, 451, 451, 451, 451, 452, 451, 
-    451, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 
-    453, 64, 453, 64, 64, 64, 64, 64, 453, 64, 64, 454, 454, 454, 454, 454, 
-    454, 454, 454, 64, 64, 64, 64, 64, 64, 64, 455, 456, 64, 64, 64, 64, 64, 
-    64, 64, 64, 64, 64, 64, 64, 64, 64, 457, 77, 77, 77, 77, 77, 77, 77, 77, 
+    61, 61, 63, 63, 63, 64, 64, 62, 62, 62, 64, 62, 62, 61, 61, 61, 61, 408, 
+    63, 63, 64, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 410, 
+    411, 411, 412, 413, 414, 415, 415, 414, 414, 414, 22, 66, 416, 417, 418, 
+    419, 416, 417, 418, 419, 22, 22, 22, 66, 22, 22, 22, 22, 420, 421, 422, 
+    423, 424, 425, 426, 21, 427, 428, 427, 427, 428, 22, 66, 66, 66, 28, 35, 
+    22, 66, 66, 22, 429, 429, 66, 66, 66, 430, 431, 432, 66, 66, 66, 66, 66, 
+    66, 66, 66, 66, 66, 66, 433, 66, 429, 66, 66, 66, 66, 66, 66, 66, 66, 66, 
+    66, 409, 410, 410, 410, 410, 410, 64, 434, 435, 436, 437, 410, 410, 410, 
+    410, 410, 410, 438, 44, 64, 64, 33, 438, 438, 438, 438, 438, 439, 439, 
+    433, 431, 432, 440, 438, 33, 33, 33, 33, 438, 438, 438, 438, 438, 439, 
+    439, 433, 431, 432, 64, 44, 44, 44, 44, 44, 64, 64, 64, 250, 250, 250, 
+    250, 250, 250, 250, 250, 250, 441, 250, 250, 23, 250, 250, 250, 250, 250, 
+    250, 250, 250, 250, 64, 64, 78, 78, 400, 400, 78, 78, 78, 78, 400, 400, 
+    400, 78, 78, 366, 366, 366, 366, 78, 366, 366, 366, 400, 400, 78, 136, 
+    78, 400, 400, 136, 136, 136, 136, 78, 64, 64, 64, 64, 64, 64, 64, 26, 26, 
+    442, 30, 26, 30, 26, 442, 26, 30, 34, 442, 442, 442, 34, 34, 442, 442, 
+    442, 443, 26, 442, 30, 26, 433, 442, 442, 442, 442, 442, 26, 26, 26, 30, 
+    30, 26, 442, 26, 67, 26, 442, 26, 37, 38, 442, 442, 444, 34, 442, 442, 
+    37, 442, 34, 402, 402, 402, 402, 34, 26, 26, 34, 34, 442, 442, 445, 433, 
+    433, 433, 433, 442, 34, 34, 34, 34, 26, 433, 26, 26, 41, 277, 446, 446, 
+    446, 36, 36, 446, 446, 446, 446, 446, 446, 36, 36, 36, 36, 446, 447, 447, 
+    447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 448, 448, 448, 448, 
+    447, 447, 448, 448, 448, 448, 448, 448, 448, 448, 448, 37, 41, 448, 448, 
+    448, 448, 36, 64, 64, 64, 64, 64, 64, 39, 39, 39, 39, 39, 30, 30, 30, 30, 
+    30, 433, 433, 26, 26, 26, 26, 433, 26, 26, 433, 26, 26, 433, 26, 26, 26, 
+    26, 26, 26, 26, 433, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 433, 433, 26, 26, 39, 26, 39, 26, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 433, 433, 433, 
+    433, 433, 433, 433, 433, 433, 433, 433, 433, 39, 445, 449, 449, 445, 433, 
+    433, 39, 449, 445, 445, 449, 445, 445, 433, 39, 433, 449, 439, 450, 433, 
+    449, 445, 433, 433, 433, 449, 445, 445, 449, 39, 449, 449, 445, 445, 39, 
+    445, 39, 445, 39, 39, 39, 39, 449, 449, 445, 449, 445, 445, 445, 445, 
+    445, 39, 39, 39, 39, 433, 445, 433, 445, 449, 449, 445, 445, 445, 445, 
+    445, 445, 445, 445, 445, 445, 449, 445, 445, 445, 449, 433, 433, 433, 
+    433, 433, 449, 445, 445, 445, 433, 433, 433, 433, 433, 433, 433, 433, 
+    433, 445, 449, 39, 445, 433, 449, 449, 449, 449, 445, 445, 449, 449, 433, 
+    433, 449, 449, 445, 445, 449, 449, 445, 445, 449, 449, 445, 445, 445, 
+    445, 445, 433, 433, 445, 445, 445, 445, 433, 433, 39, 433, 433, 445, 39, 
+    433, 433, 433, 433, 433, 433, 433, 433, 445, 445, 433, 39, 445, 445, 445, 
+    433, 433, 433, 433, 433, 445, 449, 433, 445, 445, 445, 445, 445, 433, 
+    433, 445, 445, 433, 433, 433, 433, 445, 445, 445, 445, 445, 445, 445, 
+    445, 433, 433, 431, 432, 431, 432, 26, 26, 26, 26, 26, 26, 30, 26, 26, 
+    26, 26, 26, 445, 445, 26, 26, 26, 26, 26, 26, 26, 451, 452, 26, 26, 26, 
+    26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277, 
+    277, 277, 277, 277, 277, 26, 433, 26, 26, 26, 26, 26, 26, 26, 26, 277, 
+    26, 26, 26, 26, 26, 433, 433, 433, 433, 433, 433, 433, 433, 433, 26, 26, 
+    26, 26, 433, 433, 26, 26, 26, 26, 26, 26, 26, 26, 26, 64, 64, 64, 64, 64, 
+    26, 26, 26, 26, 26, 26, 26, 64, 36, 36, 36, 36, 36, 36, 36, 36, 33, 33, 
+    33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 453, 453, 453, 453, 453, 453, 
+    453, 453, 453, 453, 453, 453, 453, 453, 446, 36, 36, 36, 36, 36, 30, 30, 
+    30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 30, 30, 
+    30, 30, 26, 26, 30, 30, 26, 30, 30, 30, 30, 30, 26, 26, 30, 30, 26, 26, 
+    30, 39, 26, 26, 26, 26, 30, 30, 26, 26, 30, 39, 26, 26, 26, 26, 30, 30, 
+    30, 26, 26, 30, 26, 26, 30, 30, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 
+    26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 30, 26, 30, 26, 30, 26, 30, 26, 
+    26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 30, 30, 26, 30, 30, 
+    26, 39, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 277, 26, 26, 26, 
+    26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, 
+    26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 431, 432, 431, 
+    432, 431, 432, 431, 432, 431, 432, 431, 432, 431, 432, 36, 36, 446, 446, 
+    446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 26, 26, 26, 26, 445, 
+    433, 433, 445, 445, 431, 432, 433, 445, 445, 433, 445, 445, 445, 433, 
+    433, 433, 433, 433, 445, 445, 445, 445, 433, 433, 433, 433, 433, 445, 
+    445, 445, 433, 433, 433, 445, 445, 445, 445, 9, 10, 9, 10, 9, 10, 9, 10, 
+    431, 432, 454, 454, 454, 454, 454, 454, 454, 454, 433, 433, 433, 431, 
+    432, 9, 10, 431, 432, 431, 432, 431, 432, 431, 432, 431, 432, 433, 433, 
+    445, 445, 445, 445, 445, 445, 433, 433, 433, 433, 433, 433, 433, 433, 
+    445, 433, 433, 433, 433, 445, 445, 445, 445, 445, 433, 445, 445, 433, 
+    433, 431, 432, 431, 432, 445, 433, 433, 433, 433, 445, 433, 445, 445, 
+    445, 433, 433, 445, 445, 433, 433, 433, 433, 433, 433, 433, 433, 433, 
+    433, 445, 445, 445, 445, 445, 445, 433, 433, 431, 432, 433, 433, 433, 
+    433, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 433, 445, 
+    445, 445, 445, 433, 433, 445, 433, 445, 433, 433, 445, 433, 445, 445, 
+    445, 445, 433, 433, 433, 433, 433, 445, 445, 433, 433, 433, 433, 445, 
+    445, 445, 445, 433, 445, 445, 433, 433, 445, 445, 433, 433, 433, 433, 
+    445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 433, 433, 445, 
+    445, 445, 445, 445, 445, 445, 445, 433, 445, 445, 445, 445, 445, 445, 
+    445, 445, 433, 433, 433, 433, 433, 445, 433, 445, 433, 433, 433, 445, 
+    445, 445, 445, 445, 433, 433, 433, 433, 445, 433, 433, 433, 445, 445, 
+    445, 445, 445, 433, 445, 433, 433, 433, 433, 433, 433, 433, 26, 26, 433, 
+    433, 433, 433, 433, 433, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 26, 
+    26, 26, 26, 64, 64, 26, 26, 26, 26, 26, 26, 26, 26, 64, 64, 26, 26, 64, 
+    64, 64, 26, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 26, 26, 64, 64, 64, 
+    64, 64, 64, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 
+    455, 455, 455, 64, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 
+    456, 456, 456, 456, 64, 37, 41, 37, 37, 37, 41, 41, 37, 41, 37, 41, 37, 
+    41, 37, 37, 37, 37, 41, 37, 41, 41, 37, 41, 41, 41, 41, 41, 41, 44, 44, 
+    37, 37, 69, 70, 69, 70, 70, 457, 457, 457, 457, 457, 457, 69, 70, 69, 70, 
+    458, 458, 458, 69, 70, 64, 64, 64, 64, 64, 459, 459, 459, 459, 460, 459, 
+    459, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 
+    461, 64, 461, 64, 64, 64, 64, 64, 461, 64, 64, 462, 462, 462, 462, 462, 
+    462, 462, 462, 64, 64, 64, 64, 64, 64, 64, 463, 464, 64, 64, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 465, 77, 77, 77, 77, 77, 77, 77, 77, 
     66, 66, 28, 35, 28, 35, 66, 66, 66, 28, 35, 66, 28, 35, 66, 66, 66, 66, 
     66, 66, 28, 35, 28, 35, 66, 66, 66, 28, 35, 66, 28, 35, 66, 66, 66, 66, 
-    66, 66, 66, 66, 66, 410, 66, 66, 410, 66, 28, 35, 66, 66, 28, 35, 426, 
-    427, 426, 427, 426, 427, 426, 427, 66, 66, 66, 66, 66, 45, 66, 66, 410, 
-    410, 64, 64, 64, 64, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 
-    64, 458, 458, 458, 458, 458, 458, 458, 458, 458, 64, 64, 64, 64, 458, 
-    458, 458, 458, 458, 458, 64, 64, 459, 459, 459, 459, 459, 459, 459, 459, 
-    459, 459, 459, 459, 64, 64, 64, 64, 460, 461, 461, 461, 459, 462, 463, 
-    464, 443, 444, 443, 444, 443, 444, 443, 444, 443, 444, 459, 459, 443, 
-    444, 443, 444, 443, 444, 443, 444, 465, 466, 467, 467, 459, 464, 464, 
-    464, 464, 464, 464, 464, 464, 464, 468, 469, 470, 471, 472, 472, 465, 
-    473, 473, 473, 473, 473, 459, 459, 464, 464, 464, 462, 463, 461, 459, 26, 
-    64, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 
-    474, 474, 474, 474, 474, 474, 474, 474, 64, 64, 475, 475, 476, 476, 477, 
-    477, 474, 465, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 
-    478, 478, 478, 478, 478, 478, 478, 461, 473, 479, 479, 478, 64, 64, 64, 
-    64, 64, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 
-    480, 480, 480, 480, 64, 64, 64, 287, 287, 287, 287, 287, 287, 287, 287, 
-    287, 287, 287, 287, 287, 287, 64, 481, 481, 482, 482, 482, 482, 481, 481, 
-    481, 481, 481, 481, 481, 481, 481, 481, 480, 480, 480, 64, 64, 64, 64, 
-    64, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 484, 
-    484, 64, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 481, 481, 481, 
-    481, 481, 481, 485, 485, 485, 485, 485, 485, 485, 485, 459, 486, 486, 
-    486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 483, 
-    483, 483, 483, 484, 484, 484, 481, 481, 486, 486, 486, 486, 486, 486, 
-    486, 481, 481, 481, 481, 459, 459, 459, 459, 487, 487, 487, 487, 487, 
-    487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 64, 481, 481, 481, 481, 
-    481, 481, 481, 459, 459, 459, 459, 481, 481, 481, 481, 481, 481, 481, 
-    481, 481, 481, 481, 459, 459, 488, 489, 489, 489, 489, 489, 489, 489, 
-    489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 488, 
-    490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 489, 489, 489, 489, 
-    488, 490, 490, 490, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 
-    491, 491, 491, 492, 491, 491, 491, 491, 491, 491, 491, 64, 64, 64, 493, 
-    493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 64, 
-    494, 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, 495, 495, 495, 
-    496, 496, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 
-    498, 499, 499, 499, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
-    497, 497, 64, 64, 64, 64, 72, 75, 72, 75, 72, 75, 501, 77, 79, 79, 79, 
-    502, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 502, 503, 64, 64, 64, 64, 
-    64, 64, 64, 77, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 
-    504, 504, 504, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 
-    506, 507, 507, 507, 507, 507, 507, 47, 47, 47, 47, 47, 47, 47, 45, 45, 
-    45, 45, 45, 45, 45, 45, 45, 47, 47, 37, 41, 37, 41, 37, 41, 41, 41, 37, 
-    41, 37, 41, 37, 41, 44, 41, 41, 41, 41, 41, 41, 41, 41, 37, 41, 37, 41, 
-    37, 37, 41, 45, 508, 508, 37, 41, 37, 41, 64, 37, 41, 37, 41, 64, 64, 64, 
-    64, 37, 41, 37, 64, 64, 64, 64, 64, 44, 44, 41, 42, 42, 42, 42, 42, 509, 
-    509, 510, 509, 509, 509, 511, 509, 509, 509, 509, 510, 509, 509, 509, 
-    509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 512, 512, 
-    510, 510, 512, 513, 513, 513, 513, 64, 64, 64, 64, 514, 514, 514, 514, 
-    514, 514, 274, 274, 247, 436, 64, 64, 64, 64, 64, 64, 515, 515, 515, 515, 
-    515, 515, 515, 515, 515, 515, 515, 515, 516, 516, 516, 516, 517, 517, 
-    518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 
-    518, 518, 518, 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 
-    517, 517, 517, 517, 517, 517, 519, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
-    520, 520, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 64, 64, 64, 
-    64, 64, 64, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 169, 169, 
-    169, 169, 169, 169, 174, 174, 174, 169, 64, 64, 64, 64, 522, 522, 522, 
-    522, 522, 522, 522, 522, 522, 522, 523, 523, 523, 523, 523, 523, 523, 
-    523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 524, 
-    524, 524, 524, 524, 525, 525, 525, 526, 526, 527, 527, 527, 527, 527, 
-    527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 528, 528, 528, 
-    528, 528, 528, 528, 528, 528, 528, 529, 530, 64, 64, 64, 64, 64, 64, 64, 
-    64, 64, 64, 64, 531, 287, 287, 287, 287, 287, 64, 64, 64, 532, 532, 532, 
-    533, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 
-    534, 534, 535, 533, 533, 532, 532, 532, 532, 533, 533, 532, 533, 533, 
-    533, 536, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 
-    537, 64, 538, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 64, 64, 
-    64, 64, 537, 537, 540, 540, 540, 540, 540, 540, 540, 540, 540, 541, 541, 
-    541, 541, 541, 541, 542, 542, 541, 541, 542, 542, 541, 541, 64, 540, 540, 
-    540, 541, 540, 540, 540, 540, 540, 540, 540, 540, 541, 542, 64, 64, 543, 
-    543, 543, 543, 543, 543, 543, 543, 543, 543, 64, 64, 544, 544, 544, 544, 
-    545, 275, 275, 275, 275, 275, 275, 283, 283, 283, 275, 276, 64, 64, 64, 
-    64, 546, 546, 546, 546, 546, 546, 546, 546, 547, 546, 547, 547, 548, 546, 
-    546, 547, 547, 546, 546, 546, 546, 546, 547, 547, 546, 547, 546, 64, 64, 
-    64, 64, 64, 64, 64, 64, 546, 546, 549, 550, 550, 551, 551, 551, 551, 551, 
-    551, 551, 551, 551, 551, 551, 552, 553, 553, 552, 552, 554, 554, 551, 
-    555, 555, 552, 556, 64, 64, 289, 289, 289, 289, 289, 289, 64, 551, 551, 
-    551, 552, 552, 553, 552, 552, 553, 552, 552, 554, 552, 556, 64, 64, 557, 
-    557, 557, 557, 557, 557, 557, 557, 557, 557, 64, 64, 64, 64, 64, 64, 287, 
-    558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 
-    558, 558, 558, 558, 287, 64, 64, 64, 64, 288, 288, 288, 288, 288, 288, 
-    288, 64, 64, 64, 64, 288, 288, 288, 288, 288, 288, 288, 288, 288, 64, 64, 
-    64, 64, 559, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 559, 
-    560, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 
-    561, 561, 561, 561, 561, 561, 561, 561, 561, 560, 488, 488, 488, 488, 
-    488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 490, 490, 488, 488, 
-    490, 490, 490, 490, 490, 490, 41, 41, 41, 41, 41, 41, 41, 64, 64, 64, 64, 
-    83, 83, 83, 83, 83, 64, 64, 64, 64, 64, 109, 562, 109, 109, 563, 109, 
-    109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 64, 109, 109, 
-    109, 109, 109, 64, 109, 64, 109, 109, 64, 109, 109, 64, 109, 109, 123, 
-    123, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 
-    564, 564, 564, 64, 64, 64, 64, 64, 64, 64, 64, 64, 123, 123, 123, 123, 
-    123, 123, 123, 123, 123, 123, 123, 413, 565, 64, 64, 123, 123, 123, 123, 
-    123, 123, 123, 123, 123, 123, 114, 26, 64, 64, 58, 58, 58, 58, 58, 58, 
-    58, 58, 461, 461, 461, 461, 461, 461, 461, 466, 467, 461, 64, 64, 64, 64, 
-    64, 64, 461, 465, 465, 566, 566, 466, 467, 466, 467, 466, 467, 466, 467, 
-    466, 467, 466, 467, 466, 467, 466, 467, 461, 461, 466, 467, 461, 461, 
-    461, 461, 566, 566, 566, 567, 461, 567, 64, 461, 567, 461, 461, 465, 443, 
-    444, 443, 444, 443, 444, 568, 461, 461, 569, 570, 571, 571, 572, 64, 461, 
-    573, 568, 461, 64, 64, 64, 64, 123, 123, 123, 123, 123, 64, 123, 123, 
-    123, 123, 123, 123, 123, 64, 64, 405, 64, 574, 574, 575, 576, 575, 574, 
-    574, 577, 578, 574, 579, 580, 581, 580, 580, 582, 582, 582, 582, 582, 
-    582, 582, 582, 582, 582, 580, 574, 583, 584, 583, 574, 574, 585, 585, 
-    585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 
-    585, 585, 577, 574, 578, 586, 587, 586, 588, 588, 588, 588, 588, 588, 
-    588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 577, 584, 
-    578, 584, 577, 578, 589, 590, 591, 589, 589, 592, 592, 592, 592, 592, 
-    592, 592, 592, 592, 592, 593, 592, 592, 592, 592, 592, 592, 592, 592, 
-    592, 592, 592, 592, 592, 593, 593, 594, 594, 594, 594, 594, 594, 594, 
-    594, 594, 594, 594, 594, 594, 594, 594, 64, 64, 64, 594, 594, 594, 594, 
-    594, 594, 64, 64, 594, 594, 594, 64, 64, 64, 576, 576, 584, 586, 595, 
-    576, 576, 64, 596, 597, 597, 597, 597, 596, 596, 64, 64, 598, 598, 598, 
-    26, 30, 64, 64, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 
-    599, 64, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 64, 599, 599, 
-    599, 64, 599, 599, 64, 599, 599, 599, 599, 599, 599, 599, 64, 64, 599, 
-    599, 599, 64, 64, 64, 64, 64, 84, 66, 84, 64, 64, 64, 64, 514, 514, 514, 
-    514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 64, 64, 64, 274, 600, 
-    600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 601, 601, 
-    601, 601, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 
-    602, 602, 602, 602, 602, 601, 64, 64, 64, 64, 64, 274, 274, 274, 274, 
-    274, 133, 64, 64, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
-    603, 603, 64, 64, 64, 604, 604, 604, 604, 604, 604, 604, 604, 604, 64, 
-    64, 64, 64, 64, 64, 64, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 
-    605, 605, 605, 605, 605, 64, 606, 606, 606, 606, 64, 64, 64, 64, 607, 
-    607, 607, 607, 607, 607, 607, 607, 607, 608, 607, 607, 607, 607, 607, 
-    607, 607, 607, 608, 64, 64, 64, 64, 64, 609, 609, 609, 609, 609, 609, 
-    609, 609, 609, 609, 609, 609, 609, 609, 64, 610, 611, 611, 611, 611, 611, 
-    611, 611, 611, 611, 611, 611, 611, 64, 64, 64, 64, 612, 613, 613, 613, 
-    613, 613, 64, 64, 614, 614, 614, 614, 614, 614, 614, 614, 615, 615, 615, 
-    615, 615, 615, 615, 615, 616, 616, 616, 616, 616, 616, 616, 616, 617, 
-    617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 64, 64, 
-    618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 64, 64, 64, 64, 64, 64, 
-    619, 619, 619, 619, 619, 619, 64, 64, 619, 64, 619, 619, 619, 619, 619, 
-    619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 
-    619, 64, 619, 619, 64, 64, 64, 619, 64, 64, 619, 620, 620, 620, 620, 620, 
-    620, 620, 620, 620, 620, 620, 620, 620, 620, 64, 621, 622, 622, 622, 622, 
-    622, 622, 622, 622, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 
-    623, 623, 623, 623, 624, 624, 624, 624, 624, 624, 64, 64, 64, 625, 626, 
-    626, 626, 626, 626, 626, 626, 626, 626, 626, 64, 64, 64, 64, 64, 627, 
-    628, 628, 628, 628, 628, 628, 628, 628, 629, 629, 629, 629, 629, 629, 
-    629, 629, 64, 64, 64, 64, 64, 64, 629, 629, 630, 631, 631, 631, 64, 631, 
-    631, 64, 64, 64, 64, 64, 631, 632, 631, 633, 630, 630, 630, 630, 64, 630, 
-    630, 630, 64, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 
-    630, 630, 630, 630, 630, 630, 630, 64, 64, 64, 64, 633, 634, 632, 64, 64, 
-    64, 64, 635, 636, 636, 636, 636, 636, 636, 636, 636, 637, 637, 637, 637, 
-    637, 637, 637, 637, 637, 64, 64, 64, 64, 64, 64, 64, 638, 638, 638, 638, 
-    638, 638, 638, 638, 638, 638, 638, 638, 638, 639, 639, 640, 641, 641, 
-    641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 64, 64, 64, 
-    642, 642, 642, 642, 642, 642, 642, 643, 643, 643, 643, 643, 643, 643, 
-    643, 643, 643, 643, 643, 643, 643, 64, 64, 644, 644, 644, 644, 644, 644, 
-    644, 644, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 64, 64, 
-    64, 64, 64, 646, 646, 646, 646, 646, 646, 646, 646, 647, 647, 647, 647, 
-    647, 647, 647, 647, 647, 64, 64, 64, 64, 64, 64, 64, 648, 648, 648, 648, 
-    648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 64, 649, 650, 649, 
-    651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 650, 
-    650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 652, 
-    653, 653, 653, 653, 653, 653, 653, 64, 64, 64, 64, 654, 654, 654, 654, 
-    654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 
-    654, 654, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 656, 656, 
-    657, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 
-    657, 657, 657, 656, 656, 656, 656, 657, 657, 659, 660, 661, 661, 662, 
-    661, 661, 661, 661, 64, 64, 64, 64, 64, 64, 663, 663, 663, 663, 663, 663, 
-    663, 663, 663, 64, 64, 64, 64, 64, 64, 64, 664, 664, 664, 664, 664, 664, 
-    664, 664, 664, 664, 64, 64, 64, 64, 64, 64, 665, 665, 665, 666, 666, 666, 
-    666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 
-    666, 666, 666, 667, 667, 667, 667, 667, 668, 667, 667, 667, 667, 667, 
-    667, 669, 669, 64, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 671, 
-    671, 671, 671, 64, 64, 64, 64, 672, 672, 673, 674, 674, 674, 674, 674, 
-    674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 673, 673, 673, 
-    672, 672, 672, 672, 672, 672, 672, 672, 672, 673, 675, 674, 674, 674, 
-    674, 676, 676, 676, 676, 64, 64, 64, 64, 64, 64, 64, 677, 677, 677, 677, 
-    677, 677, 677, 677, 677, 677, 64, 64, 64, 64, 64, 64, 678, 678, 678, 678, 
-    678, 678, 678, 678, 678, 678, 678, 679, 680, 679, 680, 680, 679, 679, 
-    679, 679, 679, 679, 681, 682, 683, 683, 683, 683, 683, 683, 683, 683, 
-    683, 683, 64, 64, 64, 64, 64, 64, 684, 684, 684, 684, 684, 684, 684, 684, 
-    684, 684, 684, 684, 684, 684, 684, 64, 685, 685, 685, 685, 685, 685, 685, 
-    685, 685, 685, 685, 64, 64, 64, 64, 64, 686, 686, 686, 686, 64, 64, 64, 
-    64, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 
-    687, 64, 504, 64, 64, 64, 64, 64, 64, 64, 688, 688, 688, 688, 688, 688, 
-    688, 688, 688, 688, 688, 688, 688, 64, 64, 64, 688, 689, 689, 689, 689, 
-    689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, 
-    689, 689, 689, 689, 64, 64, 64, 64, 64, 64, 64, 64, 690, 690, 690, 690, 
-    691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 478, 
-    474, 64, 64, 64, 64, 64, 64, 274, 274, 274, 274, 274, 274, 64, 64, 274, 
-    274, 274, 274, 274, 274, 274, 64, 64, 274, 274, 274, 274, 274, 274, 274, 
-    274, 274, 274, 274, 274, 692, 692, 395, 395, 395, 274, 274, 274, 693, 
-    692, 692, 692, 692, 692, 405, 405, 405, 405, 405, 405, 405, 405, 133, 
-    133, 133, 133, 133, 133, 133, 133, 274, 274, 78, 78, 78, 78, 78, 133, 
-    133, 274, 274, 274, 274, 274, 274, 78, 78, 78, 78, 274, 274, 602, 602, 
-    694, 694, 694, 602, 64, 64, 514, 514, 64, 64, 64, 64, 64, 64, 434, 434, 
-    434, 434, 434, 434, 434, 434, 434, 434, 34, 34, 34, 34, 34, 34, 34, 34, 
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 434, 434, 
-    434, 434, 434, 434, 34, 34, 34, 34, 34, 34, 34, 64, 34, 34, 34, 34, 34, 
-    34, 434, 64, 434, 434, 64, 64, 434, 64, 64, 434, 434, 64, 64, 434, 434, 
-    434, 434, 64, 434, 434, 34, 34, 64, 34, 64, 34, 34, 34, 34, 34, 34, 34, 
-    64, 34, 34, 34, 34, 34, 34, 34, 434, 434, 64, 434, 434, 434, 434, 64, 64, 
-    434, 434, 434, 434, 434, 434, 434, 434, 64, 434, 434, 434, 434, 434, 434, 
-    434, 64, 34, 34, 434, 434, 64, 434, 434, 434, 434, 64, 434, 434, 434, 
-    434, 434, 64, 434, 64, 64, 64, 434, 434, 434, 434, 434, 434, 434, 64, 34, 
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 64, 434, 695, 34, 34, 34, 
-    34, 34, 34, 34, 34, 34, 437, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 
-    434, 434, 434, 434, 434, 695, 34, 34, 34, 34, 34, 34, 34, 34, 34, 437, 
-    34, 34, 434, 434, 434, 434, 434, 695, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
-    437, 34, 34, 34, 34, 34, 34, 434, 434, 434, 434, 434, 434, 434, 434, 434, 
-    695, 34, 437, 34, 34, 34, 34, 34, 34, 34, 34, 434, 34, 64, 64, 696, 696, 
-    696, 696, 696, 696, 696, 696, 696, 696, 123, 123, 123, 123, 64, 123, 123, 
-    123, 64, 123, 123, 64, 123, 64, 64, 123, 64, 123, 123, 123, 123, 123, 
-    123, 123, 123, 123, 123, 64, 123, 123, 123, 123, 64, 123, 64, 123, 64, 
-    64, 64, 64, 64, 64, 123, 64, 64, 64, 64, 123, 64, 123, 64, 123, 64, 123, 
-    123, 123, 64, 123, 64, 123, 64, 123, 64, 123, 64, 123, 123, 123, 123, 64, 
-    123, 64, 123, 123, 64, 123, 123, 123, 123, 123, 123, 123, 123, 123, 64, 
-    64, 64, 64, 64, 123, 123, 123, 64, 123, 123, 123, 111, 111, 64, 64, 64, 
-    64, 64, 64, 33, 33, 33, 64, 64, 64, 64, 64, 445, 445, 445, 445, 445, 445, 
-    274, 64, 445, 445, 26, 26, 64, 64, 64, 64, 445, 445, 445, 64, 64, 64, 64, 
-    64, 64, 64, 64, 64, 64, 64, 274, 274, 697, 481, 481, 64, 64, 64, 64, 64, 
-    481, 481, 481, 64, 64, 64, 64, 64, 481, 64, 64, 64, 64, 64, 64, 64, 481, 
-    481, 64, 64, 64, 64, 64, 64, 26, 64, 64, 64, 64, 64, 64, 64, 26, 26, 26, 
-    26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 64, 64, 64, 26, 26, 26, 26, 26, 
-    64, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 64, 26, 26, 26, 26, 64, 64, 
-    64, 26, 26, 26, 26, 26, 26, 64, 64, 64, 64, 64, 26, 26, 26, 26, 26, 26, 
-    64, 64, 64, 64, 26, 26, 26, 489, 489, 489, 489, 489, 489, 488, 490, 490, 
-    490, 490, 490, 490, 490, 64, 64, 64, 405, 64, 64, 64, 64, 64, 64, 405, 
-    405, 405, 405, 405, 405, 405, 405, 561, 561, 561, 561, 561, 560, 64, 64, 
+    66, 66, 66, 66, 66, 415, 66, 66, 415, 66, 28, 35, 66, 66, 28, 35, 431, 
+    432, 431, 432, 431, 432, 431, 432, 66, 66, 66, 66, 66, 45, 66, 66, 415, 
+    415, 66, 66, 66, 66, 415, 66, 418, 64, 64, 64, 64, 64, 466, 466, 466, 
+    466, 466, 466, 466, 466, 466, 466, 64, 466, 466, 466, 466, 466, 466, 466, 
+    466, 466, 64, 64, 64, 64, 466, 466, 466, 466, 466, 466, 64, 64, 467, 467, 
+    467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 64, 64, 64, 64, 468, 
+    469, 469, 469, 467, 470, 471, 472, 451, 452, 451, 452, 451, 452, 451, 
+    452, 451, 452, 467, 467, 451, 452, 451, 452, 451, 452, 451, 452, 473, 
+    474, 475, 475, 467, 472, 472, 472, 472, 472, 472, 472, 472, 472, 476, 
+    477, 478, 479, 480, 480, 473, 481, 481, 481, 481, 481, 467, 467, 472, 
+    472, 472, 470, 471, 469, 467, 26, 64, 482, 482, 482, 482, 482, 482, 482, 
+    482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 
+    482, 64, 64, 483, 483, 484, 484, 485, 485, 482, 473, 486, 486, 486, 486, 
+    486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 
+    469, 481, 487, 487, 486, 64, 64, 64, 64, 64, 488, 488, 488, 488, 488, 
+    488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 64, 64, 64, 
+    290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 64, 
+    489, 489, 490, 490, 490, 490, 489, 489, 489, 489, 489, 489, 489, 489, 
+    489, 489, 488, 488, 488, 64, 64, 64, 64, 64, 491, 491, 491, 491, 491, 
+    491, 491, 491, 491, 491, 491, 491, 491, 492, 492, 64, 490, 490, 490, 490, 
+    490, 490, 490, 490, 490, 490, 489, 489, 489, 489, 489, 489, 493, 493, 
+    493, 493, 493, 493, 493, 493, 467, 494, 494, 494, 494, 494, 494, 494, 
+    494, 494, 494, 494, 494, 494, 494, 494, 491, 491, 491, 491, 492, 492, 
+    492, 489, 489, 494, 494, 494, 494, 494, 494, 494, 489, 489, 489, 489, 
+    467, 467, 467, 467, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 
+    495, 495, 495, 495, 495, 64, 489, 489, 489, 489, 489, 489, 489, 467, 467, 
+    467, 467, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 467, 
+    467, 496, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 
+    497, 497, 497, 497, 497, 497, 497, 497, 496, 498, 498, 498, 498, 498, 
+    498, 498, 498, 498, 498, 497, 497, 497, 497, 496, 498, 498, 498, 499, 
+    499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 500, 499, 
+    499, 499, 499, 499, 499, 499, 64, 64, 64, 501, 501, 501, 501, 501, 501, 
+    501, 501, 501, 501, 501, 501, 501, 501, 501, 64, 502, 502, 502, 502, 502, 
+    502, 502, 502, 503, 503, 503, 503, 503, 503, 504, 504, 505, 505, 505, 
+    505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 507, 507, 507, 508, 
+    508, 508, 508, 508, 508, 508, 508, 508, 508, 505, 505, 64, 64, 64, 64, 
+    72, 75, 72, 75, 72, 75, 509, 77, 79, 79, 79, 510, 77, 77, 77, 77, 77, 77, 
+    77, 77, 77, 77, 510, 511, 72, 75, 72, 75, 403, 403, 64, 77, 512, 512, 
+    512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 513, 513, 
+    513, 513, 513, 513, 513, 513, 513, 513, 514, 514, 515, 515, 515, 515, 
+    515, 515, 47, 47, 47, 47, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 
+    47, 47, 37, 41, 37, 41, 37, 41, 41, 41, 37, 41, 37, 41, 37, 41, 44, 41, 
+    41, 41, 41, 41, 41, 41, 41, 37, 41, 37, 41, 37, 37, 41, 45, 516, 516, 37, 
+    41, 37, 41, 64, 37, 41, 37, 41, 41, 41, 37, 41, 37, 41, 37, 37, 37, 37, 
+    64, 64, 37, 37, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 42, 
+    44, 44, 41, 42, 42, 42, 42, 42, 517, 517, 518, 517, 517, 517, 519, 517, 
+    517, 517, 517, 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 
+    517, 517, 517, 517, 517, 520, 520, 518, 518, 520, 521, 521, 521, 521, 64, 
+    64, 64, 64, 522, 522, 522, 522, 522, 522, 277, 277, 250, 444, 64, 64, 64, 
+    64, 64, 64, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 
+    524, 524, 524, 524, 525, 525, 526, 526, 526, 526, 526, 526, 526, 526, 
+    526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 525, 525, 525, 525, 
+    525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 527, 64, 64, 
+    64, 64, 64, 64, 64, 64, 64, 528, 528, 529, 529, 529, 529, 529, 529, 529, 
+    529, 529, 529, 64, 64, 64, 64, 64, 64, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 171, 171, 171, 171, 171, 171, 176, 176, 176, 171, 64, 64, 
+    64, 64, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 531, 531, 531, 
+    531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 
+    531, 531, 531, 532, 532, 532, 532, 532, 533, 533, 533, 84, 534, 535, 535, 
+    535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 536, 
+    536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 537, 538, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 64, 64, 539, 290, 290, 290, 290, 290, 64, 64, 64, 
+    540, 540, 540, 541, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 
+    542, 542, 542, 542, 542, 543, 541, 541, 540, 540, 540, 540, 541, 541, 
+    540, 541, 541, 541, 544, 545, 545, 545, 545, 545, 545, 545, 545, 545, 
+    545, 545, 545, 545, 64, 46, 546, 546, 546, 546, 546, 546, 546, 546, 546, 
+    546, 64, 64, 64, 64, 545, 545, 278, 278, 278, 278, 278, 280, 547, 278, 
+    283, 283, 278, 278, 278, 278, 278, 64, 548, 548, 548, 548, 548, 548, 548, 
+    548, 548, 549, 549, 549, 549, 549, 549, 550, 550, 549, 549, 550, 550, 
+    549, 549, 64, 548, 548, 548, 549, 548, 548, 548, 548, 548, 548, 548, 548, 
+    549, 550, 64, 64, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 64, 
+    64, 552, 552, 552, 552, 547, 278, 278, 278, 278, 278, 278, 286, 286, 286, 
+    278, 279, 280, 279, 278, 278, 553, 553, 553, 553, 553, 553, 553, 553, 
+    554, 553, 554, 554, 555, 553, 553, 554, 554, 553, 553, 553, 553, 553, 
+    554, 554, 553, 554, 553, 64, 64, 64, 64, 64, 64, 64, 64, 553, 553, 556, 
+    557, 557, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 559, 
+    560, 560, 559, 559, 561, 561, 558, 562, 562, 559, 563, 64, 64, 292, 292, 
+    292, 292, 292, 292, 64, 41, 41, 41, 516, 44, 44, 44, 44, 64, 64, 64, 64, 
+    41, 62, 64, 64, 558, 558, 558, 559, 559, 560, 559, 559, 560, 559, 559, 
+    561, 559, 563, 64, 64, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 
+    64, 64, 64, 64, 64, 64, 290, 565, 565, 565, 565, 565, 565, 565, 565, 565, 
+    565, 565, 565, 565, 565, 565, 565, 565, 565, 290, 64, 64, 64, 64, 291, 
+    291, 291, 291, 291, 291, 291, 64, 64, 64, 64, 291, 291, 291, 291, 291, 
+    291, 291, 291, 291, 64, 64, 64, 64, 566, 64, 64, 64, 64, 64, 64, 64, 64, 
+    64, 64, 64, 64, 64, 64, 566, 567, 568, 568, 568, 568, 568, 568, 568, 568, 
+    568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 
+    567, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 
+    496, 498, 498, 496, 496, 498, 498, 498, 498, 498, 498, 41, 41, 41, 41, 
+    41, 41, 41, 64, 64, 64, 64, 83, 83, 83, 83, 83, 64, 64, 64, 64, 64, 110, 
+    569, 110, 110, 570, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 
+    110, 110, 110, 64, 110, 110, 110, 110, 110, 64, 110, 64, 110, 110, 64, 
+    110, 110, 64, 110, 110, 126, 126, 571, 571, 571, 571, 571, 571, 571, 571, 
+    571, 571, 571, 571, 571, 571, 571, 571, 64, 64, 64, 64, 64, 64, 64, 64, 
+    64, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 572, 418, 64, 
+    64, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 116, 119, 64, 64, 
+    58, 58, 58, 58, 58, 58, 58, 58, 469, 469, 469, 469, 469, 469, 469, 474, 
+    475, 469, 64, 64, 64, 64, 64, 64, 78, 78, 78, 78, 78, 78, 78, 136, 136, 
+    136, 136, 136, 136, 136, 64, 64, 469, 473, 473, 573, 573, 474, 475, 474, 
+    475, 474, 475, 474, 475, 474, 475, 474, 475, 474, 475, 474, 475, 469, 
+    469, 474, 475, 469, 469, 469, 469, 573, 573, 573, 574, 469, 574, 64, 469, 
+    574, 469, 469, 473, 451, 452, 451, 452, 451, 452, 575, 469, 469, 576, 
+    577, 578, 578, 579, 64, 469, 580, 575, 469, 64, 64, 64, 64, 126, 126, 
+    126, 126, 126, 64, 126, 126, 126, 126, 126, 126, 126, 64, 64, 410, 64, 
+    581, 581, 582, 583, 582, 581, 581, 584, 585, 581, 586, 587, 588, 587, 
+    587, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 587, 581, 590, 
+    591, 590, 581, 581, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 
+    592, 592, 592, 592, 592, 592, 592, 592, 584, 581, 585, 593, 594, 593, 
+    595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 
+    595, 595, 595, 595, 584, 591, 585, 591, 584, 585, 596, 597, 598, 596, 
+    596, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 600, 599, 599, 
+    599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 600, 600, 601, 
+    601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 64, 
+    64, 64, 601, 601, 601, 601, 601, 601, 64, 64, 601, 601, 601, 64, 64, 64, 
+    583, 583, 591, 593, 602, 583, 583, 64, 603, 604, 604, 604, 604, 603, 603, 
+    64, 64, 605, 605, 605, 26, 30, 64, 64, 606, 606, 606, 606, 606, 606, 606, 
+    606, 606, 606, 606, 606, 64, 606, 606, 606, 606, 606, 606, 606, 606, 606, 
+    606, 64, 606, 606, 606, 64, 606, 606, 64, 606, 606, 606, 606, 606, 606, 
+    606, 64, 64, 606, 606, 606, 64, 64, 64, 64, 64, 84, 66, 84, 64, 64, 64, 
+    64, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 64, 
+    64, 64, 277, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 
+    607, 608, 608, 608, 608, 609, 609, 609, 609, 609, 609, 609, 609, 609, 
+    609, 609, 609, 609, 609, 609, 609, 609, 608, 608, 609, 64, 64, 64, 26, 
+    26, 26, 26, 64, 64, 64, 64, 609, 64, 64, 64, 64, 64, 64, 64, 277, 277, 
+    277, 277, 277, 136, 64, 64, 610, 610, 610, 610, 610, 610, 610, 610, 610, 
+    610, 610, 610, 610, 64, 64, 64, 611, 611, 611, 611, 611, 611, 611, 611, 
+    611, 64, 64, 64, 64, 64, 64, 64, 136, 438, 438, 438, 438, 438, 438, 438, 
+    438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 64, 64, 64, 
+    64, 612, 612, 612, 612, 612, 612, 612, 612, 613, 613, 613, 613, 64, 64, 
+    64, 64, 614, 614, 614, 614, 614, 614, 614, 614, 614, 615, 614, 614, 614, 
+    614, 614, 614, 614, 614, 615, 64, 64, 64, 64, 64, 616, 616, 616, 616, 
+    616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 617, 617, 617, 617, 
+    617, 64, 64, 64, 64, 64, 618, 618, 618, 618, 618, 618, 618, 618, 618, 
+    618, 618, 618, 618, 618, 64, 619, 620, 620, 620, 620, 620, 620, 620, 620, 
+    620, 620, 620, 620, 64, 64, 64, 64, 621, 622, 622, 622, 622, 622, 64, 64, 
+    623, 623, 623, 623, 623, 623, 623, 623, 624, 624, 624, 624, 624, 624, 
+    624, 624, 625, 625, 625, 625, 625, 625, 625, 625, 626, 626, 626, 626, 
+    626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 64, 64, 627, 627, 627, 
+    627, 627, 627, 627, 627, 627, 627, 64, 64, 64, 64, 64, 64, 628, 628, 628, 
+    628, 628, 628, 628, 628, 629, 629, 629, 629, 629, 629, 629, 629, 629, 
+    629, 629, 629, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 630, 631, 631, 
+    631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 64, 631, 
+    631, 631, 631, 631, 631, 64, 64, 632, 632, 632, 632, 632, 632, 64, 64, 
+    632, 64, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 
+    632, 632, 632, 632, 632, 632, 632, 64, 632, 632, 64, 64, 64, 632, 64, 64, 
+    632, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 
+    633, 64, 634, 635, 635, 635, 635, 635, 635, 635, 635, 636, 636, 636, 636, 
+    636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 637, 637, 638, 
+    638, 638, 638, 638, 638, 638, 639, 639, 639, 639, 639, 639, 639, 639, 
+    639, 639, 639, 639, 639, 639, 639, 64, 64, 64, 64, 64, 64, 64, 64, 640, 
+    640, 640, 640, 640, 640, 640, 640, 640, 641, 641, 641, 641, 641, 641, 
+    641, 641, 641, 641, 641, 641, 641, 641, 642, 642, 642, 642, 642, 642, 64, 
+    64, 64, 643, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 64, 64, 
+    64, 64, 64, 645, 646, 646, 646, 646, 646, 646, 646, 646, 647, 647, 647, 
+    647, 647, 647, 647, 647, 64, 64, 64, 64, 64, 64, 647, 647, 648, 649, 649, 
+    649, 64, 649, 649, 64, 64, 64, 64, 64, 649, 650, 649, 651, 648, 648, 648, 
+    648, 64, 648, 648, 648, 64, 648, 648, 648, 648, 648, 648, 648, 648, 648, 
+    648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 64, 64, 64, 64, 651, 
+    652, 650, 64, 64, 64, 64, 653, 654, 654, 654, 654, 654, 654, 654, 654, 
+    655, 655, 655, 655, 655, 655, 655, 655, 655, 64, 64, 64, 64, 64, 64, 64, 
+    656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 657, 
+    657, 658, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 
+    659, 660, 660, 660, 661, 661, 661, 661, 661, 661, 661, 661, 662, 661, 
+    661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 663, 664, 64, 64, 
+    64, 64, 665, 665, 665, 665, 665, 666, 666, 666, 666, 666, 666, 666, 64, 
+    667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 64, 
+    64, 64, 668, 668, 668, 668, 668, 668, 668, 669, 669, 669, 669, 669, 669, 
+    669, 669, 669, 669, 669, 669, 669, 669, 64, 64, 670, 670, 670, 670, 670, 
+    670, 670, 670, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 64, 
+    64, 64, 64, 64, 672, 672, 672, 672, 672, 672, 672, 672, 673, 673, 673, 
+    673, 673, 673, 673, 673, 673, 673, 64, 64, 64, 64, 64, 64, 64, 674, 674, 
+    674, 674, 64, 64, 64, 64, 675, 675, 675, 675, 675, 675, 675, 676, 676, 
+    676, 676, 676, 676, 676, 676, 676, 64, 64, 64, 64, 64, 64, 64, 677, 677, 
+    677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 64, 678, 
+    679, 678, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 
+    680, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 
+    679, 681, 682, 682, 682, 682, 682, 682, 682, 64, 64, 64, 64, 683, 683, 
+    683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 
+    683, 683, 683, 683, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 64, 
+    64, 64, 64, 64, 64, 64, 681, 685, 685, 686, 687, 687, 687, 687, 687, 687, 
+    687, 687, 687, 687, 687, 687, 687, 686, 686, 686, 685, 685, 685, 685, 
+    686, 686, 688, 689, 690, 690, 691, 690, 690, 690, 690, 64, 64, 64, 64, 
+    64, 64, 692, 692, 692, 692, 692, 692, 692, 692, 692, 64, 64, 64, 64, 64, 
+    64, 64, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 64, 64, 64, 64, 
+    64, 64, 694, 694, 694, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 
+    695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 696, 696, 696, 696, 
+    696, 697, 696, 696, 696, 696, 696, 696, 698, 698, 64, 699, 699, 699, 699, 
+    699, 699, 699, 699, 699, 699, 700, 700, 700, 700, 64, 64, 64, 64, 701, 
+    701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 702, 703, 703, 701, 64, 
+    704, 704, 705, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 
+    706, 706, 706, 706, 706, 705, 705, 705, 704, 704, 704, 704, 704, 704, 
+    704, 704, 704, 705, 707, 706, 706, 706, 706, 708, 708, 708, 708, 64, 64, 
+    64, 64, 708, 64, 64, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 
+    706, 64, 64, 64, 64, 64, 64, 710, 710, 710, 710, 710, 710, 710, 710, 710, 
+    710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 64, 64, 64, 711, 
+    711, 711, 711, 711, 711, 711, 711, 711, 711, 64, 711, 711, 711, 711, 711, 
+    711, 711, 711, 711, 712, 712, 712, 713, 713, 713, 712, 712, 713, 714, 
+    715, 713, 716, 716, 716, 716, 716, 716, 64, 64, 717, 717, 717, 717, 717, 
+    717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 718, 719, 719, 719, 
+    718, 718, 718, 718, 718, 718, 720, 721, 64, 64, 64, 64, 64, 722, 722, 
+    722, 722, 722, 722, 722, 722, 722, 722, 64, 64, 64, 64, 64, 64, 64, 723, 
+    724, 724, 64, 725, 725, 725, 725, 725, 725, 725, 725, 64, 64, 725, 725, 
+    64, 64, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 
+    725, 64, 725, 725, 725, 725, 725, 725, 725, 64, 725, 725, 64, 725, 725, 
+    725, 725, 725, 64, 64, 726, 725, 724, 724, 723, 724, 724, 724, 724, 64, 
+    64, 724, 724, 64, 64, 724, 724, 727, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+    724, 64, 64, 64, 64, 64, 725, 725, 725, 725, 725, 724, 724, 64, 64, 728, 
+    728, 728, 728, 728, 728, 728, 64, 64, 64, 729, 729, 729, 729, 729, 729, 
+    729, 729, 730, 730, 730, 731, 731, 731, 731, 731, 731, 730, 731, 730, 
+    730, 730, 730, 731, 731, 730, 732, 733, 729, 729, 734, 729, 735, 735, 
+    735, 735, 735, 735, 735, 735, 735, 735, 64, 64, 64, 64, 64, 64, 736, 736, 
+    736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 737, 
+    737, 737, 738, 738, 738, 738, 64, 64, 737, 737, 737, 737, 738, 738, 737, 
+    739, 740, 741, 741, 741, 741, 741, 741, 741, 741, 741, 64, 64, 64, 64, 
+    64, 64, 742, 742, 742, 742, 742, 742, 742, 742, 743, 743, 743, 744, 744, 
+    744, 744, 744, 744, 744, 744, 743, 743, 744, 743, 745, 744, 746, 746, 
+    746, 742, 64, 64, 64, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 
+    64, 64, 64, 64, 64, 64, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 
+    748, 749, 750, 749, 750, 750, 749, 749, 749, 749, 749, 749, 751, 752, 
+    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 64, 64, 64, 64, 64, 64, 
+    754, 754, 754, 754, 754, 754, 754, 754, 755, 755, 755, 755, 755, 755, 
+    755, 755, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 757, 757, 
+    757, 757, 757, 757, 757, 757, 757, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+    64, 64, 64, 758, 759, 759, 759, 759, 759, 759, 759, 759, 759, 64, 64, 64, 
+    64, 64, 64, 64, 760, 760, 760, 760, 760, 760, 760, 760, 760, 64, 64, 64, 
+    64, 64, 64, 64, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 
+    761, 761, 761, 761, 64, 762, 762, 762, 762, 762, 64, 64, 64, 763, 763, 
+    763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 64, 512, 
+    64, 64, 64, 64, 64, 64, 64, 764, 764, 764, 764, 764, 764, 764, 764, 764, 
+    764, 764, 764, 764, 764, 764, 64, 765, 765, 765, 765, 765, 765, 765, 765, 
+    765, 765, 64, 64, 64, 64, 766, 766, 767, 767, 767, 767, 767, 767, 767, 
+    767, 767, 767, 767, 767, 767, 767, 64, 64, 768, 768, 768, 768, 768, 769, 
+    64, 64, 770, 770, 770, 770, 770, 770, 770, 770, 771, 771, 771, 771, 771, 
+    771, 771, 772, 772, 772, 772, 772, 773, 773, 773, 773, 774, 774, 774, 
+    774, 772, 773, 64, 64, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
+    64, 776, 776, 776, 776, 776, 776, 776, 64, 770, 770, 770, 770, 770, 64, 
+    64, 64, 64, 64, 770, 770, 770, 777, 777, 777, 777, 777, 777, 777, 777, 
+    777, 777, 777, 777, 777, 64, 64, 64, 777, 778, 778, 778, 778, 778, 778, 
+    778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 
+    778, 778, 64, 64, 64, 64, 64, 64, 64, 64, 779, 779, 779, 779, 780, 780, 
+    780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 486, 482, 64, 64, 
+    64, 64, 64, 64, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 
+    64, 64, 64, 64, 64, 781, 781, 781, 781, 781, 64, 64, 64, 781, 64, 64, 64, 
+    64, 64, 64, 64, 781, 781, 64, 64, 782, 783, 784, 785, 410, 410, 410, 410, 
+    64, 64, 64, 64, 277, 277, 277, 277, 277, 277, 64, 64, 277, 277, 277, 277, 
+    277, 277, 277, 64, 64, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 
+    277, 277, 786, 786, 400, 400, 400, 277, 277, 277, 787, 786, 786, 786, 
+    786, 786, 410, 410, 410, 410, 410, 410, 410, 410, 136, 136, 136, 136, 
+    136, 136, 136, 136, 277, 277, 78, 78, 78, 78, 78, 136, 136, 277, 277, 
+    277, 277, 277, 277, 78, 78, 78, 78, 277, 277, 609, 609, 788, 788, 788, 
+    609, 64, 64, 522, 522, 64, 64, 64, 64, 64, 64, 442, 442, 442, 442, 442, 
+    442, 442, 442, 442, 442, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 
+    34, 34, 34, 34, 34, 34, 34, 64, 34, 34, 34, 34, 34, 34, 442, 64, 442, 
+    442, 64, 64, 442, 64, 64, 442, 442, 64, 64, 442, 442, 442, 442, 64, 442, 
+    442, 34, 34, 64, 34, 64, 34, 34, 34, 34, 34, 34, 34, 64, 34, 34, 34, 34, 
+    34, 34, 34, 442, 442, 64, 442, 442, 442, 442, 64, 64, 442, 442, 442, 442, 
+    442, 442, 442, 442, 64, 442, 442, 442, 442, 442, 442, 442, 64, 34, 34, 
+    442, 442, 64, 442, 442, 442, 442, 64, 442, 442, 442, 442, 442, 64, 442, 
+    64, 64, 64, 442, 442, 442, 442, 442, 442, 442, 64, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 64, 64, 442, 789, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 445, 34, 34, 34, 34, 34, 34, 442, 442, 442, 442, 442, 442, 442, 
+    442, 442, 789, 34, 34, 34, 34, 34, 34, 34, 34, 34, 445, 34, 34, 442, 442, 
+    442, 442, 442, 789, 34, 34, 34, 34, 34, 34, 34, 34, 34, 445, 34, 34, 34, 
+    34, 34, 34, 442, 442, 442, 442, 442, 442, 442, 442, 442, 789, 34, 445, 
+    34, 34, 34, 34, 34, 34, 34, 34, 442, 34, 64, 64, 790, 790, 790, 790, 790, 
+    790, 790, 790, 790, 790, 791, 791, 791, 791, 791, 791, 791, 791, 791, 
+    791, 791, 791, 791, 64, 64, 792, 792, 792, 792, 792, 792, 792, 792, 792, 
+    793, 793, 793, 793, 793, 793, 793, 64, 126, 126, 126, 126, 64, 126, 126, 
+    126, 64, 126, 126, 64, 126, 64, 64, 126, 64, 126, 126, 126, 126, 126, 
+    126, 126, 126, 126, 126, 64, 126, 126, 126, 126, 64, 126, 64, 126, 64, 
+    64, 64, 64, 64, 64, 126, 64, 64, 64, 64, 126, 64, 126, 64, 126, 64, 126, 
+    126, 126, 64, 126, 64, 126, 64, 126, 64, 126, 64, 126, 126, 126, 126, 64, 
+    126, 64, 126, 126, 64, 126, 126, 126, 126, 126, 126, 126, 126, 126, 64, 
+    64, 64, 64, 64, 126, 126, 126, 64, 126, 126, 126, 113, 113, 64, 64, 64, 
+    64, 64, 64, 64, 26, 26, 26, 26, 26, 26, 26, 33, 33, 33, 446, 446, 64, 64, 
+    64, 453, 453, 453, 453, 453, 453, 277, 64, 453, 453, 26, 26, 64, 64, 64, 
+    64, 453, 453, 453, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 277, 277, 
+    794, 489, 489, 64, 64, 64, 64, 64, 489, 489, 489, 64, 64, 64, 64, 64, 
+    489, 64, 64, 64, 64, 64, 64, 64, 489, 489, 64, 64, 64, 64, 64, 64, 26, 
+    26, 26, 26, 26, 64, 64, 64, 64, 64, 64, 64, 26, 26, 26, 26, 26, 26, 64, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 64, 26, 26, 26, 26, 26, 26, 64, 64, 
+    26, 26, 26, 497, 497, 497, 497, 497, 497, 496, 498, 498, 498, 498, 498, 
+    498, 498, 64, 64, 64, 410, 64, 64, 64, 64, 64, 64, 410, 410, 410, 410, 
+    410, 410, 410, 410, 568, 568, 568, 568, 568, 567, 64, 64, 
 };
 
 /* decomposition data */
 };
 
 /* decomposition data */
@@ -3107,84 +3339,85 @@ static const unsigned short decomp_data[] = {
     50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52, 
     26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770, 
     50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49, 
     50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52, 
     26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770, 
     50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49, 
-    26085, 778, 103, 97, 108, 259, 42863, 259, 294, 259, 339, 256, 35912, 
-    256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, 
-    256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, 
-    256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, 
-    256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853, 
-    256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211, 
-    256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172, 
-    256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010, 
-    256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796, 
-    256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396, 
-    256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103, 
-    256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751, 
-    256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034, 
-    256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431, 
-    256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956, 
-    256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712, 
-    256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594, 
-    256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489, 
-    256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622, 
-    256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784, 
-    256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841, 
-    256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327, 
-    256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670, 
-    256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147, 
-    256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088, 
-    256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244, 
-    256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015, 
-    256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265, 
-    256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196, 
-    256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801, 
-    256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936, 
-    256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102, 
-    256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134, 
-    256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446, 
-    256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705, 
-    256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134, 
-    256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459, 
-    256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519, 
-    256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702, 
-    256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626, 
-    256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298, 
-    256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256, 
-    256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672, 
-    256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299, 
-    256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892, 
-    256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618, 
-    256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070, 
-    256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322, 
-    256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208, 
-    256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813, 
-    256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120, 
-    256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936, 
-    256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757, 
-    256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730, 
-    256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062, 
-    256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680, 
-    256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261, 
-    256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585, 
-    256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627, 
-    256, 38911, 256, 38971, 256, 24693, 256, 55376, 57070, 256, 33304, 256, 
-    20006, 256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 
-    21191, 256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 
-    22618, 256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 
-    24274, 256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 
-    24840, 256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 
-    25628, 256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 
-    26454, 256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 
-    28450, 256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 
-    29482, 256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 
-    30410, 256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 
-    31409, 256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 
-    32773, 256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 
-    35222, 256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 
-    35565, 256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 
-    37273, 256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 
-    38911, 256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 55370, 56394, 
-    256, 55370, 56388, 256, 55372, 57301, 256, 15261, 256, 16408, 256, 16441, 
-    256, 55380, 56905, 256, 55383, 56528, 256, 55391, 57043, 256, 40771, 256, 
+    26085, 778, 103, 97, 108, 259, 1098, 259, 1100, 259, 42863, 259, 294, 
+    259, 339, 259, 42791, 259, 43831, 259, 619, 259, 43858, 256, 35912, 256, 
+    26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, 256, 
+    40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, 256, 
+    25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, 256, 
+    37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853, 256, 
+    37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211, 256, 
+    34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172, 256, 
+    25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010, 256, 
+    29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796, 256, 
+    27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396, 256, 
+    36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103, 256, 
+    32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751, 256, 
+    24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034, 256, 
+    38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431, 256, 
+    32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956, 256, 
+    20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712, 256, 
+    25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594, 256, 
+    29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489, 256, 
+    19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622, 256, 
+    30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784, 256, 
+    25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841, 256, 
+    20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327, 256, 
+    21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670, 256, 
+    31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147, 256, 
+    26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088, 256, 
+    25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244, 256, 
+    32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015, 256, 
+    21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265, 256, 
+    24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196, 256, 
+    22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801, 256, 
+    32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936, 256, 
+    20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102, 256, 
+    20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134, 256, 
+    30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446, 256, 
+    21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705, 256, 
+    30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134, 256, 
+    38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459, 256, 
+    24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519, 256, 
+    23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702, 256, 
+    30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626, 256, 
+    21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298, 256, 
+    38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256, 256, 
+    31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672, 256, 
+    20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299, 256, 
+    31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892, 256, 
+    38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618, 256, 
+    26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070, 256, 
+    31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322, 256, 
+    35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208, 256, 
+    40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813, 256, 
+    21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120, 256, 
+    22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936, 256, 
+    24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757, 256, 
+    28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730, 256, 
+    30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062, 256, 
+    31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680, 256, 
+    32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261, 256, 
+    33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585, 256, 
+    35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627, 256, 
+    38911, 256, 38971, 256, 24693, 256, 55376, 57070, 256, 33304, 256, 20006, 
+    256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 21191, 
+    256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 22618, 
+    256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 24274, 
+    256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 24840, 
+    256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 25628, 
+    256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 26454, 
+    256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 28450, 
+    256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 29482, 
+    256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 30410, 
+    256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 31409, 
+    256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 32773, 
+    256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 35222, 
+    256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 35565, 
+    256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 37273, 
+    256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 38911, 
+    256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 55370, 56394, 256, 
+    55370, 56388, 256, 55372, 57301, 256, 15261, 256, 16408, 256, 16441, 256, 
+    55380, 56905, 256, 55383, 56528, 256, 55391, 57043, 256, 40771, 256, 
     40846, 514, 102, 102, 514, 102, 105, 514, 102, 108, 770, 102, 102, 105, 
     770, 102, 102, 108, 514, 383, 116, 514, 115, 116, 514, 1396, 1398, 514, 
     1396, 1381, 514, 1396, 1387, 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 
     40846, 514, 102, 102, 514, 102, 105, 514, 102, 108, 770, 102, 102, 105, 
     770, 102, 102, 108, 514, 383, 116, 514, 115, 116, 514, 1396, 1398, 514, 
     1396, 1381, 514, 1396, 1387, 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 
@@ -3409,54 +3642,64 @@ static const unsigned short decomp_data[] = {
     8592, 272, 8593, 272, 8594, 272, 8595, 272, 9632, 272, 9675, 512, 55300, 
     56473, 55300, 56506, 512, 55300, 56475, 55300, 56506, 512, 55300, 56485, 
     55300, 56506, 512, 55300, 56625, 55300, 56615, 512, 55300, 56626, 55300, 
     8592, 272, 8593, 272, 8594, 272, 8595, 272, 9632, 272, 9675, 512, 55300, 
     56473, 55300, 56506, 512, 55300, 56475, 55300, 56506, 512, 55300, 56485, 
     55300, 56506, 512, 55300, 56625, 55300, 56615, 512, 55300, 56626, 55300, 
-    56615, 512, 55348, 56663, 55348, 56677, 512, 55348, 56664, 55348, 56677, 
-    512, 55348, 56671, 55348, 56686, 512, 55348, 56671, 55348, 56687, 512, 
-    55348, 56671, 55348, 56688, 512, 55348, 56671, 55348, 56689, 512, 55348, 
-    56671, 55348, 56690, 512, 55348, 56761, 55348, 56677, 512, 55348, 56762, 
-    55348, 56677, 512, 55348, 56763, 55348, 56686, 512, 55348, 56764, 55348, 
-    56686, 512, 55348, 56763, 55348, 56687, 512, 55348, 56764, 55348, 56687, 
-    262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 
-    262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 
-    262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 
-    262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 
-    102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 
-    109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
-    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
-    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 
-    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 
-    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 
-    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 
-    103, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 
+    56615, 512, 55300, 57159, 55300, 57150, 512, 55300, 57159, 55300, 57175, 
+    512, 55301, 56505, 55301, 56506, 512, 55301, 56505, 55301, 56496, 512, 
+    55301, 56505, 55301, 56509, 512, 55301, 56760, 55301, 56751, 512, 55301, 
+    56761, 55301, 56751, 512, 55348, 56663, 55348, 56677, 512, 55348, 56664, 
+    55348, 56677, 512, 55348, 56671, 55348, 56686, 512, 55348, 56671, 55348, 
+    56687, 512, 55348, 56671, 55348, 56688, 512, 55348, 56671, 55348, 56689, 
+    512, 55348, 56671, 55348, 56690, 512, 55348, 56761, 55348, 56677, 512, 
+    55348, 56762, 55348, 56677, 512, 55348, 56763, 55348, 56686, 512, 55348, 
+    56764, 55348, 56686, 512, 55348, 56763, 55348, 56687, 512, 55348, 56764, 
+    55348, 56687, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 
+    71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 
+    79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 
+    87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 
+    101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 
+    108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 
+    115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 
+    122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 
+    72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 
+    80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 
+    88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 
+    102, 262, 103, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 
+    110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 
+    117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 
+    262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 
+    262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 
+    262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 
+    262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 
+    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 
     111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 
     111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 
-    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 
-    262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 
-    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 
+    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 67, 262, 68, 
+    262, 71, 262, 74, 262, 75, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 
     262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 
     262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 
-    262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 
-    105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 
-    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 
-    119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 67, 262, 68, 262, 71, 
-    262, 74, 262, 75, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 
-    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 
-    262, 99, 262, 100, 262, 102, 262, 104, 262, 105, 262, 106, 262, 107, 262, 
-    108, 262, 109, 262, 110, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
+    262, 98, 262, 99, 262, 100, 262, 102, 262, 104, 262, 105, 262, 106, 262, 
+    107, 262, 108, 262, 109, 262, 110, 262, 112, 262, 113, 262, 114, 262, 
+    115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 
+    122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 
+    72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 
+    80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 
+    88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 
+    102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 
+    109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 
     116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
     116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 
-    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73
-    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81
-    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89
-    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262
-    103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262
-    110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262
-    117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66
-    262, 68, 262, 69, 262, 70, 262, 71, 262, 74, 262, 75, 262, 76, 262, 77
-    262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 262, 85, 262, 86
-    262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101
-    262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108
-    262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115
-    262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122
-    262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71, 262, 73, 262, 74
-    262, 75, 262, 76, 262, 77, 262, 79, 262, 83, 262, 84, 262, 85, 262, 86
-    262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 
+    262, 66, 262, 68, 262, 69, 262, 70, 262, 71, 262, 74, 262, 75, 262, 76
+    262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 262, 85
+    262, 86, 262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100
+    262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107
+    262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114
+    262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121
+    262, 122, 262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71, 262, 73
+    262, 74, 262, 75, 262, 76, 262, 77, 262, 79, 262, 83, 262, 84, 262, 85
+    262, 86, 262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100
+    262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107
+    262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114
+    262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121
+    262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71
+    262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79
+    262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87
+    262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 
     262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 
     262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 
     262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 
     262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 
     262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 
     262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 
@@ -3494,153 +3737,146 @@ static const unsigned short decomp_data[] = {
     262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 
     106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 
     113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 
     262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 
     106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 
     113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 
-    120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 
-    262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 
-    262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 
-    262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 
-    262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 
-    262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 
-    262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 
-    262, 121, 262, 122, 262, 305, 262, 567, 262, 913, 262, 914, 262, 915, 
-    262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 
-    262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 
-    262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 
-    262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 
-    262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 
-    262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 
-    262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 
-    262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 
-    262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 
-    262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 
-    262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 
-    262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 
-    262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 
-    262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 
-    262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 
-    262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 
-    262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 
-    262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 
-    262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 
-    262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 
-    262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 
-    262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 
-    262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 
-    262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 
-    262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 
-    262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 
-    262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 
-    262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 
-    262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 
-    262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 
-    262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 
-    262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 
-    262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 
-    262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 
-    262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 
-    262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 
-    262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 
-    262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 
-    262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 
-    262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 
-    262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 
-    262, 988, 262, 989, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 
-    262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 
-    262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 
-    262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 
-    262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 
-    262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 
-    262, 54, 262, 55, 262, 56, 262, 57, 262, 1575, 262, 1576, 262, 1580, 262, 
-    1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 
-    262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 
-    1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 
-    262, 1584, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1722, 262, 
-    1697, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262, 1610, 
+    120, 262, 121, 262, 122, 262, 305, 262, 567, 262, 913, 262, 914, 262, 
+    915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 
+    922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 
+    929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 
+    936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 
+    949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 
+    956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 
+    963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 
+    8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 
+    913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 
+    920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 
+    927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 
+    934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 
+    947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 
+    954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 
+    961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 
+    968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 
+    1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 
+    918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 
+    925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 
+    932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 
+    945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 
+    952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 
+    959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 
+    966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 
+    1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, 
+    916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 
+    923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 
+    1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 
+    937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 
+    950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 
+    957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 
+    964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 
+    1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 
+    914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 
+    921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 
+    928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 
+    935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 
+    948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 
+    955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 
+    962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 
+    969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 
+    982, 262, 988, 262, 989, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 
+    262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 
+    262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 
+    262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 
+    262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 
+    262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 
+    262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 1575, 262, 1576, 262, 
+    1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 
     262, 1603, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 
     262, 1603, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 
-    1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 
-    262, 1590, 262, 1594, 262, 1580, 262, 1581, 262, 1610, 262, 1604, 262, 
-    1606, 262, 1587, 262, 1593, 262, 1589, 262, 1602, 262, 1588, 262, 1582, 
-    262, 1590, 262, 1594, 262, 1722, 262, 1647, 262, 1576, 262, 1580, 262, 
-    1607, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1605, 262, 1606, 
-    262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 
-    1578, 262, 1579, 262, 1582, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 
-    262, 1697, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1607, 262, 
+    1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 
+    262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 
+    1722, 262, 1697, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 
+    262, 1610, 262, 1603, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 
+    1593, 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 
+    262, 1582, 262, 1590, 262, 1594, 262, 1580, 262, 1581, 262, 1610, 262, 
+    1604, 262, 1606, 262, 1587, 262, 1593, 262, 1589, 262, 1602, 262, 1588, 
+    262, 1582, 262, 1590, 262, 1594, 262, 1722, 262, 1647, 262, 1576, 262, 
+    1580, 262, 1607, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1605, 
+    262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 
+    1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1592, 262, 1594, 
+    262, 1646, 262, 1697, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 
+    1607, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 
+    262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 
+    1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 
+    262, 1590, 262, 1592, 262, 1594, 262, 1576, 262, 1580, 262, 1583, 262, 
     1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 
     262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 
     1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 
     1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 
     262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 
     1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 
-    262, 1592, 262, 1594, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 
-    1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 
-    262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 
-    1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 
-    262, 1594, 514, 48, 46, 514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 
-    44, 514, 52, 44, 514, 53, 44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 
-    57, 44, 770, 40, 65, 41, 770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 
-    41, 770, 40, 69, 41, 770, 40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 
-    770, 40, 73, 41, 770, 40, 74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 
-    40, 77, 41, 770, 40, 78, 41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 
-    81, 41, 770, 40, 82, 41, 770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 
-    41, 770, 40, 86, 41, 770, 40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 
-    770, 40, 90, 41, 770, 12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68, 
-    519, 87, 90, 266, 65, 266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266, 
-    71, 266, 72, 266, 73, 266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266, 
-    79, 266, 80, 266, 81, 266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266, 
-    87, 266, 88, 266, 89, 266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68, 
-    522, 83, 83, 778, 80, 80, 86, 522, 87, 67, 515, 77, 67, 515, 77, 68, 522, 
-    68, 74, 522, 12411, 12363, 522, 12467, 12467, 266, 12469, 266, 25163, 
-    266, 23383, 266, 21452, 266, 12487, 266, 20108, 266, 22810, 266, 35299, 
-    266, 22825, 266, 20132, 266, 26144, 266, 28961, 266, 26009, 266, 21069, 
-    266, 24460, 266, 20877, 266, 26032, 266, 21021, 266, 32066, 266, 29983, 
-    266, 36009, 266, 22768, 266, 21561, 266, 28436, 266, 25237, 266, 25429, 
-    266, 19968, 266, 19977, 266, 36938, 266, 24038, 266, 20013, 266, 21491, 
-    266, 25351, 266, 36208, 266, 25171, 266, 31105, 266, 31354, 266, 21512, 
-    266, 28288, 266, 26377, 266, 26376, 266, 30003, 266, 21106, 266, 21942, 
-    770, 12308, 26412, 12309, 770, 12308, 19977, 12309, 770, 12308, 20108, 
-    12309, 770, 12308, 23433, 12309, 770, 12308, 28857, 12309, 770, 12308, 
-    25171, 12309, 770, 12308, 30423, 12309, 770, 12308, 21213, 12309, 770, 
-    12308, 25943, 12309, 263, 24471, 263, 21487, 256, 20029, 256, 20024, 256, 
-    20033, 256, 55360, 56610, 256, 20320, 256, 20398, 256, 20411, 256, 20482, 
-    256, 20602, 256, 20633, 256, 20711, 256, 20687, 256, 13470, 256, 55361, 
-    56890, 256, 20813, 256, 20820, 256, 20836, 256, 20855, 256, 55361, 56604, 
-    256, 13497, 256, 20839, 256, 20877, 256, 55361, 56651, 256, 20887, 256, 
-    20900, 256, 20172, 256, 20908, 256, 20917, 256, 55396, 56799, 256, 20981, 
-    256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, 21106, 256, 21111, 
-    256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, 21242, 256, 21253, 
-    256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, 21338, 256, 21363, 
-    256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, 55362, 56876, 256, 
-    28784, 256, 21450, 256, 21471, 256, 55362, 57187, 256, 21483, 256, 21489, 
-    256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, 21666, 
-    256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, 21892, 
-    256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, 22022, 
-    256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, 22478, 
-    256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, 22700, 
-    256, 55365, 56548, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, 
-    22818, 256, 22882, 256, 55365, 57000, 256, 55365, 57066, 256, 23020, 256, 
-    23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256, 
-    23304, 256, 23358, 256, 23358, 256, 55366, 56776, 256, 23491, 256, 23512, 
-    256, 23527, 256, 23539, 256, 55366, 57112, 256, 23551, 256, 23558, 256, 
-    24403, 256, 23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, 
-    23693, 256, 55367, 56804, 256, 23875, 256, 55367, 56806, 256, 23918, 256, 
-    23915, 256, 23932, 256, 24033, 256, 24034, 256, 14383, 256, 24061, 256, 
-    24104, 256, 24125, 256, 24169, 256, 14434, 256, 55368, 56707, 256, 14460, 
-    256, 24240, 256, 24243, 256, 24246, 256, 24266, 256, 55400, 57234, 256, 
-    24318, 256, 55368, 57137, 256, 55368, 57137, 256, 33281, 256, 24354, 256, 
-    24354, 256, 14535, 256, 55372, 57016, 256, 55384, 56794, 256, 24418, 256, 
-    24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, 256, 
-    24705, 256, 14650, 256, 14620, 256, 24724, 256, 55369, 57044, 256, 24775, 
-    256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, 
-    256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, 
-    256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, 
-    256, 55370, 57100, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 
-    25572, 256, 55370, 57329, 256, 25634, 256, 25541, 256, 25513, 256, 14894, 
-    256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935, 
-    256, 25964, 256, 55372, 56330, 256, 26083, 256, 26360, 256, 26185, 256, 
-    15129, 256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 
-    26368, 256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 
-    26401, 256, 26462, 256, 26451, 256, 55372, 57283, 256, 15177, 256, 26618, 
-    256, 26501, 256, 26706, 256, 26757, 256, 55373, 56429, 256, 26766, 256, 
-    26655, 256, 26900, 256, 15261, 256, 26946, 256, 27043, 256, 27114, 256, 
-    27304, 256, 55373, 56995, 256, 27355, 256, 15384, 256, 27425, 256, 55374, 
-    56487, 256, 27476, 256, 15438, 256, 27506, 256, 27551, 256, 27578, 256, 
-    27579, 256, 55374, 56973, 256, 55367, 56587, 256, 55374, 57082, 256, 
+    262, 1592, 262, 1594, 514, 48, 46, 514, 48, 44, 514, 49, 44, 514, 50, 44, 
+    514, 51, 44, 514, 52, 44, 514, 53, 44, 514, 54, 44, 514, 55, 44, 514, 56, 
+    44, 514, 57, 44, 770, 40, 65, 41, 770, 40, 66, 41, 770, 40, 67, 41, 770, 
+    40, 68, 41, 770, 40, 69, 41, 770, 40, 70, 41, 770, 40, 71, 41, 770, 40, 
+    72, 41, 770, 40, 73, 41, 770, 40, 74, 41, 770, 40, 75, 41, 770, 40, 76, 
+    41, 770, 40, 77, 41, 770, 40, 78, 41, 770, 40, 79, 41, 770, 40, 80, 41, 
+    770, 40, 81, 41, 770, 40, 82, 41, 770, 40, 83, 41, 770, 40, 84, 41, 770, 
+    40, 85, 41, 770, 40, 86, 41, 770, 40, 87, 41, 770, 40, 88, 41, 770, 40, 
+    89, 41, 770, 40, 90, 41, 770, 12308, 83, 12309, 263, 67, 263, 82, 519, 
+    67, 68, 519, 87, 90, 266, 65, 266, 66, 266, 67, 266, 68, 266, 69, 266, 
+    70, 266, 71, 266, 72, 266, 73, 266, 74, 266, 75, 266, 76, 266, 77, 266, 
+    78, 266, 79, 266, 80, 266, 81, 266, 82, 266, 83, 266, 84, 266, 85, 266, 
+    86, 266, 87, 266, 88, 266, 89, 266, 90, 522, 72, 86, 522, 77, 86, 522, 
+    83, 68, 522, 83, 83, 778, 80, 80, 86, 522, 87, 67, 515, 77, 67, 515, 77, 
+    68, 522, 68, 74, 522, 12411, 12363, 522, 12467, 12467, 266, 12469, 266, 
+    25163, 266, 23383, 266, 21452, 266, 12487, 266, 20108, 266, 22810, 266, 
+    35299, 266, 22825, 266, 20132, 266, 26144, 266, 28961, 266, 26009, 266, 
+    21069, 266, 24460, 266, 20877, 266, 26032, 266, 21021, 266, 32066, 266, 
+    29983, 266, 36009, 266, 22768, 266, 21561, 266, 28436, 266, 25237, 266, 
+    25429, 266, 19968, 266, 19977, 266, 36938, 266, 24038, 266, 20013, 266, 
+    21491, 266, 25351, 266, 36208, 266, 25171, 266, 31105, 266, 31354, 266, 
+    21512, 266, 28288, 266, 26377, 266, 26376, 266, 30003, 266, 21106, 266, 
+    21942, 770, 12308, 26412, 12309, 770, 12308, 19977, 12309, 770, 12308, 
+    20108, 12309, 770, 12308, 23433, 12309, 770, 12308, 28857, 12309, 770, 
+    12308, 25171, 12309, 770, 12308, 30423, 12309, 770, 12308, 21213, 12309, 
+    770, 12308, 25943, 12309, 263, 24471, 263, 21487, 256, 20029, 256, 20024, 
+    256, 20033, 256, 55360, 56610, 256, 20320, 256, 20398, 256, 20411, 256, 
+    20482, 256, 20602, 256, 20633, 256, 20711, 256, 20687, 256, 13470, 256, 
+    55361, 56890, 256, 20813, 256, 20820, 256, 20836, 256, 20855, 256, 55361, 
+    56604, 256, 13497, 256, 20839, 256, 20877, 256, 55361, 56651, 256, 20887, 
+    256, 20900, 256, 20172, 256, 20908, 256, 20917, 256, 55396, 56799, 256, 
+    20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, 21106, 256, 
+    21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, 21242, 256, 
+    21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, 21338, 256, 
+    21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, 55362, 56876, 
+    256, 28784, 256, 21450, 256, 21471, 256, 55362, 57187, 256, 21483, 256, 
+    21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, 
+    21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, 
+    21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, 
+    22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, 
+    22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, 
+    22700, 256, 55365, 56548, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 
+    256, 22818, 256, 22882, 256, 55365, 57000, 256, 55365, 57066, 256, 23020, 
+    256, 23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 
+    256, 23304, 256, 23358, 256, 23358, 256, 55366, 56776, 256, 23491, 256, 
+    23512, 256, 23527, 256, 23539, 256, 55366, 57112, 256, 23551, 256, 23558, 
+    256, 24403, 256, 23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 
+    256, 23693, 256, 55367, 56804, 256, 23875, 256, 55367, 56806, 256, 23918, 
+    256, 23915, 256, 23932, 256, 24033, 256, 24034, 256, 14383, 256, 24061, 
+    256, 24104, 256, 24125, 256, 24169, 256, 14434, 256, 55368, 56707, 256, 
+    14460, 256, 24240, 256, 24243, 256, 24246, 256, 24266, 256, 55400, 57234, 
+    256, 24318, 256, 55368, 57137, 256, 55368, 57137, 256, 33281, 256, 24354, 
+    256, 24354, 256, 14535, 256, 55372, 57016, 256, 55384, 56794, 256, 24418, 
+    256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, 
+    256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, 55369, 57044, 256, 
+    24775, 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 
+    24974, 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 
+    25078, 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 
+    25424, 256, 55370, 57100, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 
+    256, 25572, 256, 55370, 57329, 256, 25634, 256, 25541, 256, 25513, 256, 
+    14894, 256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 
+    25935, 256, 25964, 256, 55372, 56330, 256, 26083, 256, 26360, 256, 26185, 
+    256, 15129, 256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 
+    256, 26368, 256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 
+    256, 26401, 256, 26462, 256, 26451, 256, 55372, 57283, 256, 15177, 256, 
+    26618, 256, 26501, 256, 26706, 256, 26757, 256, 55373, 56429, 256, 26766, 
+    256, 26655, 256, 26900, 256, 15261, 256, 26946, 256, 27043, 256, 27114, 
+    256, 27304, 256, 55373, 56995, 256, 27355, 256, 15384, 256, 27425, 256, 
+    55374, 56487, 256, 27476, 256, 15438, 256, 27506, 256, 27551, 256, 27578, 
+    256, 27579, 256, 55374, 56973, 256, 55367, 56587, 256, 55374, 57082, 256, 
     27726, 256, 55375, 56508, 256, 27839, 256, 27853, 256, 27751, 256, 27926, 
     256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, 28037, 
     256, 55375, 56606, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, 
     27726, 256, 55375, 56508, 256, 27839, 256, 27853, 256, 27751, 256, 27926, 
     256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, 28037, 
     256, 55375, 56606, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, 
@@ -3704,14 +3940,14 @@ static const unsigned short decomp_data[] = {
 #define DECOMP_SHIFT2 4
 static const unsigned char decomp_index0[] = {
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
 #define DECOMP_SHIFT2 4
 static const unsigned char decomp_index0[] = {
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5, 5, 5, 5, 5, 
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 14, 15, 5, 5, 5, 5, 16, 5
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 16, 5, 5, 5, 5, 17, 18
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18
-    5, 5, 5, 5, 5, 19, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 19, 20
+    5, 5, 5, 5, 5, 21, 22, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
-    21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+    23, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
@@ -3793,36 +4029,41 @@ static const unsigned short decomp_index1[] = {
     216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 
     230, 231, 232, 233, 234, 235, 236, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 
     230, 231, 232, 233, 234, 235, 236, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 
-    0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 
-    241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 
-    255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 
-    269, 0, 0, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 0, 
-    282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 
-    296, 297, 298, 299, 300, 301, 302, 303, 304, 0, 305, 306, 307, 308, 309, 
-    310, 311, 312, 0, 0, 313, 0, 314, 0, 315, 316, 317, 318, 319, 320, 321, 
-    322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 
-    336, 337, 338, 339, 340, 341, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 
-    344, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 
+    0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 243, 244, 245, 246, 247, 
+    248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 
+    262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 0, 0, 272, 273, 274, 
+    275, 276, 277, 278, 279, 280, 281, 282, 283, 0, 284, 285, 286, 287, 288, 
+    289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 
+    303, 304, 305, 306, 0, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 315, 
+    0, 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 
+    329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 
+    343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, 0, 0, 0, 0, 0, 0, 
+    347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 346, 347, 0, 0, 0, 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 0, 0, 0, 0, 353, 354, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 
-    364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 
-    378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 
-    392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 
-    406, 407, 408, 409, 410, 411, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 
-    416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 
+    365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 
+    379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 
+    393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 
+    407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 426, 427, 428, 429, 430, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 
-    433, 434, 435, 436, 437, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 440, 441, 442, 443, 444, 445, 
-    446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 
-    460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 0, 0, 0, 
+    0, 0, 0, 0, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 432, 433, 434, 435, 0, 436, 0, 
+    0, 437, 0, 0, 0, 0, 0, 0, 438, 439, 440, 441, 442, 443, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 445, 
+    446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 
+    460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 
+    474, 475, 476, 477, 0, 0, 0, 0, 0, 0, 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 unsigned short decomp_index2[] = {
 };
 
 static const unsigned short decomp_index2[] = {
@@ -4078,577 +4319,599 @@ static const unsigned short decomp_index2[] = {
     6513, 6516, 6519, 6523, 6527, 6530, 6533, 6536, 6539, 6542, 6545, 6548, 
     6551, 6554, 6558, 6562, 6566, 6570, 6574, 6578, 6582, 6586, 6590, 6594, 
     6598, 6602, 6606, 6610, 6614, 6618, 6622, 6626, 6630, 6634, 6638, 6642, 
     6513, 6516, 6519, 6523, 6527, 6530, 6533, 6536, 6539, 6542, 6545, 6548, 
     6551, 6554, 6558, 6562, 6566, 6570, 6574, 6578, 6582, 6586, 6590, 6594, 
     6598, 6602, 6606, 6610, 6614, 6618, 6622, 6626, 6630, 6634, 6638, 6642, 
-    6646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 6648, 6650, 0, 0, 0, 0, 0, 0, 6652, 6654, 6656, 6658, 6660, 6662, 
-    6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, 
-    6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710, 
-    6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, 
-    6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758, 
-    6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 
-    6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, 
-    6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, 
-    6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, 
-    6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, 
-    6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 
-    6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, 
-    6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, 
-    6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, 
-    6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, 
-    7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, 
-    7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, 
-    7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, 
-    7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, 
-    7096, 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118, 
-    7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142, 
-    7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 
-    7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 7188, 7190, 
-    0, 0, 7192, 0, 7194, 0, 0, 7196, 7198, 7200, 7202, 7204, 7206, 7208, 
-    7210, 7212, 7214, 0, 7216, 0, 7218, 0, 0, 7220, 7222, 0, 0, 0, 7224, 
-    7226, 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, 7248, 
-    7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270, 7272, 
-    7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, 7296, 
-    7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318, 7320, 
-    7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, 7344, 
-    7346, 7348, 7350, 7352, 7354, 7356, 7359, 0, 0, 7361, 7363, 7365, 7367, 
-    7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, 7385, 7387, 7389, 7391, 
-    7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, 7409, 7411, 7413, 7415, 
-    7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, 7433, 7435, 7437, 7439, 
-    7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, 7457, 7459, 7461, 7463, 
-    7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, 7481, 7483, 7485, 7487, 
-    7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, 7505, 7507, 7509, 7511, 
-    7513, 7515, 7517, 7519, 7521, 7523, 7525, 7527, 7529, 7531, 7533, 7535, 
-    7537, 7539, 7541, 7543, 7545, 7547, 7549, 7551, 7554, 7557, 7560, 7562, 
-    7564, 7566, 7569, 7572, 7575, 7577, 0, 0, 0, 0, 0, 0, 7579, 7582, 7585, 
-    7588, 7592, 7596, 7599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7602, 7605, 
-    7608, 7611, 7614, 0, 0, 0, 0, 0, 7617, 0, 7620, 7623, 7625, 7627, 7629, 
-    7631, 7633, 7635, 7637, 7639, 7641, 7643, 7646, 7649, 7652, 7655, 7658, 
-    7661, 7664, 7667, 7670, 7673, 7676, 7679, 0, 7682, 7685, 7688, 7691, 
-    7694, 0, 7697, 0, 7700, 7703, 0, 7706, 7709, 0, 7712, 7715, 7718, 7721, 
-    7724, 7727, 7730, 7733, 7736, 7739, 7742, 7744, 7746, 7748, 7750, 7752, 
-    7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 
-    7778, 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 
-    7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 
-    7826, 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 
-    7850, 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 
-    7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 
-    7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 
-    7922, 7924, 7926, 7928, 7930, 7932, 7934, 7936, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 7938, 7940, 7942, 7944, 7946, 7948, 7950, 
-    7952, 7954, 7956, 7958, 7960, 7962, 7964, 7966, 7968, 7970, 7972, 7974, 
-    7976, 7978, 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 
-    8008, 8011, 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8040, 
-    8042, 8044, 8046, 8049, 8052, 8055, 8058, 8061, 8064, 8067, 8070, 8073, 
-    8076, 8079, 8082, 8085, 8088, 8091, 8094, 8097, 8100, 8103, 8106, 8109, 
-    8112, 8115, 8118, 8121, 8124, 8127, 8130, 8133, 8136, 8139, 8142, 8145, 
-    8148, 8151, 8154, 8157, 8160, 8163, 8166, 8169, 8172, 8175, 8178, 8181, 
-    8184, 8187, 8190, 8193, 8196, 8199, 8202, 8205, 8208, 8211, 8214, 8217, 
-    8220, 8223, 8226, 8229, 8232, 8235, 8238, 8241, 8244, 8247, 8250, 8253, 
-    8256, 8259, 8262, 8265, 8268, 8271, 8274, 8277, 8280, 8283, 8286, 8289, 
-    8292, 8295, 8298, 8301, 8304, 8307, 8310, 8313, 8316, 8319, 8322, 8325, 
-    8328, 8332, 8336, 8340, 8344, 8348, 8352, 8355, 8358, 8361, 8364, 8367, 
-    8370, 8373, 8376, 8379, 8382, 8385, 8388, 8391, 8394, 8397, 8400, 8403, 
-    8406, 8409, 8412, 8415, 8418, 8421, 8424, 8427, 8430, 8433, 8436, 8439, 
-    8442, 8445, 8448, 8451, 8454, 8457, 8460, 8463, 8466, 8469, 8472, 8475, 
-    8478, 8481, 8484, 8487, 8490, 8493, 8496, 8499, 8502, 8505, 8508, 8511, 
-    8514, 8517, 8520, 8523, 8526, 8529, 8532, 8535, 8538, 8541, 8544, 8547, 
-    8550, 8553, 8556, 8559, 8562, 8565, 8568, 8571, 8574, 8577, 8580, 8583, 
-    8586, 8589, 8592, 8595, 8598, 8601, 8604, 8607, 8610, 8613, 8616, 8619, 
-    8622, 8625, 8628, 8631, 8634, 8637, 8640, 8643, 8646, 8649, 8652, 8655, 
-    8658, 8661, 8664, 8667, 8670, 8673, 8676, 8679, 8682, 8685, 8688, 8691, 
-    8694, 8697, 8700, 8703, 8706, 8709, 8712, 8715, 8718, 8721, 8724, 8727, 
-    8730, 8733, 8736, 8739, 8742, 8745, 8748, 8751, 8754, 8757, 8760, 8763, 
-    8766, 8769, 8772, 8775, 8778, 8782, 8786, 8790, 8793, 8796, 8799, 8802, 
-    8805, 8808, 8811, 8814, 8817, 8820, 8823, 8826, 8829, 8832, 8835, 8838, 
-    8841, 8844, 8847, 8850, 8853, 8856, 8859, 8862, 8865, 8868, 8871, 8874, 
-    8877, 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8907, 8910, 
-    8913, 8916, 8919, 8922, 8925, 8928, 8931, 8934, 8937, 8940, 8943, 8946, 
-    8949, 8952, 8955, 8958, 8961, 8964, 8967, 8970, 8973, 8976, 8979, 8982, 
-    8985, 8988, 8991, 8994, 8997, 9000, 9003, 9006, 0, 0, 9009, 9013, 9017, 
-    9021, 9025, 9029, 9033, 9037, 9041, 9045, 9049, 9053, 9057, 9061, 9065, 
-    9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9105, 9109, 9113, 
-    9117, 9121, 9125, 9129, 9133, 9137, 9141, 9145, 9149, 9153, 9157, 9161, 
-    9165, 9169, 9173, 9177, 9181, 9185, 9189, 9193, 9197, 9201, 9205, 9209, 
-    9213, 9217, 9221, 9225, 9229, 9233, 9237, 9241, 9245, 9249, 9253, 9257, 
-    9261, 0, 0, 9265, 9269, 9273, 9277, 9281, 9285, 9289, 9293, 9297, 9301, 
-    9305, 9309, 9313, 9317, 9321, 9325, 9329, 9333, 9337, 9341, 9345, 9349, 
-    9353, 9357, 9361, 9365, 9369, 9373, 9377, 9381, 9385, 9389, 9393, 9397, 
-    9401, 9405, 9409, 9413, 9417, 9421, 9425, 9429, 9433, 9437, 9441, 9445, 
-    9449, 9453, 9457, 9461, 9465, 9469, 9473, 9477, 0, 0, 0, 0, 0, 0, 0, 0, 
-    9481, 9485, 9489, 9494, 9499, 9504, 9509, 9514, 9519, 9524, 9528, 9547, 
-    9556, 0, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, 9573, 9575, 9577, 
-    9579, 0, 0, 0, 0, 0, 0, 9581, 9583, 9585, 9587, 9589, 9591, 9593, 9595, 
-    9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 9619, 
-    9621, 0, 0, 9623, 9625, 9627, 9629, 9631, 9633, 9635, 9637, 9639, 9641, 
-    9643, 9645, 0, 9647, 9649, 9651, 9653, 9655, 9657, 9659, 9661, 9663, 
-    9665, 9667, 9669, 9671, 9673, 9675, 9677, 9679, 9681, 9683, 0, 9685, 
-    9687, 9689, 9691, 0, 0, 0, 0, 9693, 9696, 9699, 0, 9702, 0, 9705, 9708, 
-    9711, 9714, 9717, 9720, 9723, 9726, 9729, 9732, 9735, 9737, 9739, 9741, 
-    9743, 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 
-    9767, 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 
-    9791, 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 
-    9815, 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 
-    9839, 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 
-    9863, 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 
-    9887, 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9909, 
-    9911, 9913, 9915, 9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 9933, 
-    9935, 9937, 9939, 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 
-    9959, 9961, 9963, 9965, 9967, 9969, 9972, 9975, 9978, 9981, 9984, 9987, 
-    9990, 0, 0, 0, 0, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 
-    10009, 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 
-    10029, 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 
-    10049, 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 
-    10069, 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 
-    10089, 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 
-    10109, 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 
-    10129, 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 
-    10149, 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 
-    10169, 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 
-    10189, 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 
-    10209, 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 
-    10229, 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 
-    10249, 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 
-    10269, 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 
-    10289, 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 
-    10309, 10311, 10313, 10315, 10317, 10319, 10321, 10323, 10325, 10327, 
-    10329, 10331, 10333, 10335, 10337, 10339, 10341, 10343, 10345, 10347, 
-    10349, 10351, 10353, 10355, 10357, 10359, 10361, 10363, 10365, 10367, 
-    10369, 10371, 0, 0, 0, 10373, 10375, 10377, 10379, 10381, 10383, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6646, 6648, 0, 0, 6650, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6652, 6654, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6656, 6658, 6660, 
+    6662, 6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 
+    6686, 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 
+    6710, 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 
+    6734, 6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 
+    6758, 6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 
+    6782, 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 
+    6806, 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 
+    6830, 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 
+    6854, 6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 
+    6878, 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 
+    6902, 6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 
+    6926, 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 
+    6950, 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 
+    6974, 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 
+    6998, 7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 
+    7022, 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 
+    7046, 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 
+    7070, 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 
+    7094, 7096, 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 
+    7118, 7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 
+    7142, 7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 
+    7166, 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 7188, 
+    7190, 7192, 7194, 7196, 7198, 7200, 7202, 0, 0, 7204, 0, 7206, 0, 0, 
+    7208, 7210, 7212, 7214, 7216, 7218, 7220, 7222, 7224, 7226, 0, 7228, 0, 
+    7230, 0, 0, 7232, 7234, 0, 0, 0, 7236, 7238, 7240, 7242, 7244, 7246, 
+    7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270, 
+    7272, 7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, 
+    7296, 7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318, 
+    7320, 7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, 
+    7344, 7346, 7348, 7350, 7352, 7354, 7356, 7358, 7360, 7362, 7364, 7366, 
+    7368, 7371, 0, 0, 7373, 7375, 7377, 7379, 7381, 7383, 7385, 7387, 7389, 
+    7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, 7409, 7411, 7413, 
+    7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, 7433, 7435, 7437, 
+    7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, 7457, 7459, 7461, 
+    7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, 7481, 7483, 7485, 
+    7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, 7505, 7507, 7509, 
+    7511, 7513, 7515, 7517, 7519, 7521, 7523, 7525, 7527, 7529, 7531, 7533, 
+    7535, 7537, 7539, 7541, 7543, 7545, 7547, 7549, 7551, 7553, 7555, 7557, 
+    7559, 7561, 7563, 7566, 7569, 7572, 7574, 7576, 7578, 7581, 7584, 7587, 
+    7589, 0, 0, 0, 0, 0, 0, 7591, 7594, 7597, 7600, 7604, 7608, 7611, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7614, 7617, 7620, 7623, 7626, 0, 0, 0, 0, 
+    0, 7629, 0, 7632, 7635, 7637, 7639, 7641, 7643, 7645, 7647, 7649, 7651, 
+    7653, 7655, 7658, 7661, 7664, 7667, 7670, 7673, 7676, 7679, 7682, 7685, 
+    7688, 7691, 0, 7694, 7697, 7700, 7703, 7706, 0, 7709, 0, 7712, 7715, 0, 
+    7718, 7721, 0, 7724, 7727, 7730, 7733, 7736, 7739, 7742, 7745, 7748, 
+    7751, 7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 
+    7776, 7778, 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 
+    7800, 7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 
+    7824, 7826, 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 
+    7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 
+    7872, 7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 
+    7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 
+    7920, 7922, 7924, 7926, 7928, 7930, 7932, 7934, 7936, 7938, 7940, 7942, 
+    7944, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    7950, 7952, 7954, 7956, 7958, 7960, 7962, 7964, 7966, 7968, 7970, 7972, 
+    7974, 7976, 7978, 7980, 7982, 7984, 7986, 7988, 7990, 7992, 7994, 7996, 
+    7999, 8002, 8005, 8008, 8011, 8014, 8017, 8020, 8023, 8026, 8029, 8032, 
+    8035, 8038, 8041, 8044, 8047, 8050, 8052, 8054, 8056, 8058, 8061, 8064, 
+    8067, 8070, 8073, 8076, 8079, 8082, 8085, 8088, 8091, 8094, 8097, 8100, 
+    8103, 8106, 8109, 8112, 8115, 8118, 8121, 8124, 8127, 8130, 8133, 8136, 
+    8139, 8142, 8145, 8148, 8151, 8154, 8157, 8160, 8163, 8166, 8169, 8172, 
+    8175, 8178, 8181, 8184, 8187, 8190, 8193, 8196, 8199, 8202, 8205, 8208, 
+    8211, 8214, 8217, 8220, 8223, 8226, 8229, 8232, 8235, 8238, 8241, 8244, 
+    8247, 8250, 8253, 8256, 8259, 8262, 8265, 8268, 8271, 8274, 8277, 8280, 
+    8283, 8286, 8289, 8292, 8295, 8298, 8301, 8304, 8307, 8310, 8313, 8316, 
+    8319, 8322, 8325, 8328, 8331, 8334, 8337, 8340, 8344, 8348, 8352, 8356, 
+    8360, 8364, 8367, 8370, 8373, 8376, 8379, 8382, 8385, 8388, 8391, 8394, 
+    8397, 8400, 8403, 8406, 8409, 8412, 8415, 8418, 8421, 8424, 8427, 8430, 
+    8433, 8436, 8439, 8442, 8445, 8448, 8451, 8454, 8457, 8460, 8463, 8466, 
+    8469, 8472, 8475, 8478, 8481, 8484, 8487, 8490, 8493, 8496, 8499, 8502, 
+    8505, 8508, 8511, 8514, 8517, 8520, 8523, 8526, 8529, 8532, 8535, 8538, 
+    8541, 8544, 8547, 8550, 8553, 8556, 8559, 8562, 8565, 8568, 8571, 8574, 
+    8577, 8580, 8583, 8586, 8589, 8592, 8595, 8598, 8601, 8604, 8607, 8610, 
+    8613, 8616, 8619, 8622, 8625, 8628, 8631, 8634, 8637, 8640, 8643, 8646, 
+    8649, 8652, 8655, 8658, 8661, 8664, 8667, 8670, 8673, 8676, 8679, 8682, 
+    8685, 8688, 8691, 8694, 8697, 8700, 8703, 8706, 8709, 8712, 8715, 8718, 
+    8721, 8724, 8727, 8730, 8733, 8736, 8739, 8742, 8745, 8748, 8751, 8754, 
+    8757, 8760, 8763, 8766, 8769, 8772, 8775, 8778, 8781, 8784, 8787, 8790, 
+    8794, 8798, 8802, 8805, 8808, 8811, 8814, 8817, 8820, 8823, 8826, 8829, 
+    8832, 8835, 8838, 8841, 8844, 8847, 8850, 8853, 8856, 8859, 8862, 8865, 
+    8868, 8871, 8874, 8877, 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 
+    8904, 8907, 8910, 8913, 8916, 8919, 8922, 8925, 8928, 8931, 8934, 8937, 
+    8940, 8943, 8946, 8949, 8952, 8955, 8958, 8961, 8964, 8967, 8970, 8973, 
+    8976, 8979, 8982, 8985, 8988, 8991, 8994, 8997, 9000, 9003, 9006, 9009, 
+    9012, 9015, 9018, 0, 0, 9021, 9025, 9029, 9033, 9037, 9041, 9045, 9049, 
+    9053, 9057, 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 
+    9101, 9105, 9109, 9113, 9117, 9121, 9125, 9129, 9133, 9137, 9141, 9145, 
+    9149, 9153, 9157, 9161, 9165, 9169, 9173, 9177, 9181, 9185, 9189, 9193, 
+    9197, 9201, 9205, 9209, 9213, 9217, 9221, 9225, 9229, 9233, 9237, 9241, 
+    9245, 9249, 9253, 9257, 9261, 9265, 9269, 9273, 0, 0, 9277, 9281, 9285, 
+    9289, 9293, 9297, 9301, 9305, 9309, 9313, 9317, 9321, 9325, 9329, 9333, 
+    9337, 9341, 9345, 9349, 9353, 9357, 9361, 9365, 9369, 9373, 9377, 9381, 
+    9385, 9389, 9393, 9397, 9401, 9405, 9409, 9413, 9417, 9421, 9425, 9429, 
+    9433, 9437, 9441, 9445, 9449, 9453, 9457, 9461, 9465, 9469, 9473, 9477, 
+    9481, 9485, 9489, 0, 0, 0, 0, 0, 0, 0, 0, 9493, 9497, 9501, 9506, 9511, 
+    9516, 9521, 9526, 9531, 9536, 9540, 9559, 9568, 0, 0, 0, 9573, 9575, 
+    9577, 9579, 9581, 9583, 9585, 9587, 9589, 9591, 0, 0, 0, 0, 0, 0, 9593, 
+    9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 
+    9619, 9621, 9623, 9625, 9627, 9629, 9631, 9633, 0, 0, 9635, 9637, 9639, 
+    9641, 9643, 9645, 9647, 9649, 9651, 9653, 9655, 9657, 0, 9659, 9661, 
+    9663, 9665, 9667, 9669, 9671, 9673, 9675, 9677, 9679, 9681, 9683, 9685, 
+    9687, 9689, 9691, 9693, 9695, 0, 9697, 9699, 9701, 9703, 0, 0, 0, 0, 
+    9705, 9708, 9711, 0, 9714, 0, 9717, 9720, 9723, 9726, 9729, 9732, 9735, 
+    9738, 9741, 9744, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 
+    9765, 9767, 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 
+    9789, 9791, 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 
+    9813, 9815, 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 
+    9837, 9839, 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 
+    9861, 9863, 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 
+    9885, 9887, 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 
+    9909, 9911, 9913, 9915, 9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 
+    9933, 9935, 9937, 9939, 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 
+    9957, 9959, 9961, 9963, 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 
+    9981, 9984, 9987, 9990, 9993, 9996, 9999, 10002, 0, 0, 0, 0, 10005, 
+    10007, 10009, 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 
+    10027, 10029, 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 
+    10047, 10049, 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 
+    10067, 10069, 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 
+    10087, 10089, 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 
+    10107, 10109, 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 
+    10127, 10129, 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 
+    10147, 10149, 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 
+    10167, 10169, 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 
+    10187, 10189, 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 
+    10207, 10209, 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 
+    10227, 10229, 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 
+    10247, 10249, 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 
+    10267, 10269, 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 
+    10287, 10289, 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 
+    10307, 10309, 10311, 10313, 10315, 10317, 10319, 10321, 10323, 10325, 
+    10327, 10329, 10331, 10333, 10335, 10337, 10339, 10341, 10343, 10345, 
+    10347, 10349, 10351, 10353, 10355, 10357, 10359, 10361, 10363, 10365, 
+    10367, 10369, 10371, 10373, 10375, 10377, 10379, 10381, 10383, 0, 0, 0, 
     10385, 10387, 10389, 10391, 10393, 10395, 0, 0, 10397, 10399, 10401, 
     10385, 10387, 10389, 10391, 10393, 10395, 0, 0, 10397, 10399, 10401, 
-    10403, 10405, 10407, 0, 0, 10409, 10411, 10413, 0, 0, 0, 10415, 10417, 
-    10419, 10421, 10423, 10425, 10427, 0, 10429, 10431, 10433, 10435, 10437, 
-    10439, 10441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10443, 0, 10448, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 10458, 10463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 10468, 10473, 10478, 10483, 10488, 10493, 10498, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10503, 10508, 10513, 10518, 
-    10523, 10528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10533, 10535, 
-    10537, 10539, 10541, 10543, 10545, 10547, 10549, 10551, 10553, 10555, 
-    10557, 10559, 10561, 10563, 10565, 10567, 10569, 10571, 10573, 10575, 
-    10577, 10579, 10581, 10583, 10585, 10587, 10589, 10591, 10593, 10595, 
-    10597, 10599, 10601, 10603, 10605, 10607, 10609, 10611, 10613, 10615, 
-    10617, 10619, 10621, 10623, 10625, 10627, 10629, 10631, 10633, 10635, 
-    10637, 10639, 10641, 10643, 10645, 10647, 10649, 10651, 10653, 10655, 
-    10657, 10659, 10661, 10663, 10665, 10667, 10669, 10671, 10673, 10675, 
-    10677, 10679, 10681, 10683, 10685, 10687, 10689, 10691, 10693, 10695, 
-    10697, 10699, 10701, 0, 10703, 10705, 10707, 10709, 10711, 10713, 10715, 
-    10717, 10719, 10721, 10723, 10725, 10727, 10729, 10731, 10733, 10735, 
-    10737, 10739, 10741, 10743, 10745, 10747, 10749, 10751, 10753, 10755, 
-    10757, 10759, 10761, 10763, 10765, 10767, 10769, 10771, 10773, 10775, 
-    10777, 10779, 10781, 10783, 10785, 10787, 10789, 10791, 10793, 10795, 
-    10797, 10799, 10801, 10803, 10805, 10807, 10809, 10811, 10813, 10815, 
-    10817, 10819, 10821, 10823, 10825, 10827, 10829, 10831, 10833, 10835, 
-    10837, 10839, 10841, 10843, 0, 10845, 10847, 0, 0, 10849, 0, 0, 10851, 
-    10853, 0, 0, 10855, 10857, 10859, 10861, 0, 10863, 10865, 10867, 10869, 
-    10871, 10873, 10875, 10877, 10879, 10881, 10883, 10885, 0, 10887, 0, 
-    10889, 10891, 10893, 10895, 10897, 10899, 10901, 0, 10903, 10905, 10907, 
-    10909, 10911, 10913, 10915, 10917, 10919, 10921, 10923, 10925, 10927, 
-    10929, 10931, 10933, 10935, 10937, 10939, 10941, 10943, 10945, 10947, 
-    10949, 10951, 10953, 10955, 10957, 10959, 10961, 10963, 10965, 10967, 
-    10969, 10971, 10973, 10975, 10977, 10979, 10981, 10983, 10985, 10987, 
-    10989, 10991, 10993, 10995, 10997, 10999, 11001, 11003, 11005, 11007, 
-    11009, 11011, 11013, 11015, 11017, 11019, 11021, 11023, 11025, 11027, 
-    11029, 11031, 0, 11033, 11035, 11037, 11039, 0, 0, 11041, 11043, 11045, 
-    11047, 11049, 11051, 11053, 11055, 0, 11057, 11059, 11061, 11063, 11065, 
-    11067, 11069, 0, 11071, 11073, 11075, 11077, 11079, 11081, 11083, 11085, 
-    11087, 11089, 11091, 11093, 11095, 11097, 11099, 11101, 11103, 11105, 
-    11107, 11109, 11111, 11113, 11115, 11117, 11119, 11121, 11123, 11125, 0, 
-    11127, 11129, 11131, 11133, 0, 11135, 11137, 11139, 11141, 11143, 0, 
-    11145, 0, 0, 0, 11147, 11149, 11151, 11153, 11155, 11157, 11159, 0, 
-    11161, 11163, 11165, 11167, 11169, 11171, 11173, 11175, 11177, 11179, 
-    11181, 11183, 11185, 11187, 11189, 11191, 11193, 11195, 11197, 11199, 
-    11201, 11203, 11205, 11207, 11209, 11211, 11213, 11215, 11217, 11219, 
-    11221, 11223, 11225, 11227, 11229, 11231, 11233, 11235, 11237, 11239, 
-    11241, 11243, 11245, 11247, 11249, 11251, 11253, 11255, 11257, 11259, 
-    11261, 11263, 11265, 11267, 11269, 11271, 11273, 11275, 11277, 11279, 
-    11281, 11283, 11285, 11287, 11289, 11291, 11293, 11295, 11297, 11299, 
-    11301, 11303, 11305, 11307, 11309, 11311, 11313, 11315, 11317, 11319, 
-    11321, 11323, 11325, 11327, 11329, 11331, 11333, 11335, 11337, 11339, 
-    11341, 11343, 11345, 11347, 11349, 11351, 11353, 11355, 11357, 11359, 
-    11361, 11363, 11365, 11367, 11369, 11371, 11373, 11375, 11377, 11379, 
-    11381, 11383, 11385, 11387, 11389, 11391, 11393, 11395, 11397, 11399, 
-    11401, 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 
-    11421, 11423, 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 
-    11441, 11443, 11445, 11447, 11449, 11451, 11453, 11455, 11457, 11459, 
-    11461, 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 
-    11481, 11483, 11485, 11487, 11489, 11491, 11493, 11495, 11497, 11499, 
-    11501, 11503, 11505, 11507, 11509, 11511, 11513, 11515, 11517, 11519, 
-    11521, 11523, 11525, 11527, 11529, 11531, 11533, 11535, 11537, 11539, 
-    11541, 11543, 11545, 11547, 11549, 11551, 11553, 11555, 11557, 11559, 
-    11561, 11563, 11565, 11567, 11569, 11571, 11573, 11575, 11577, 11579, 
-    11581, 11583, 11585, 11587, 11589, 11591, 11593, 11595, 11597, 11599, 
-    11601, 11603, 11605, 11607, 11609, 11611, 11613, 11615, 11617, 11619, 
-    11621, 11623, 11625, 11627, 11629, 11631, 11633, 11635, 11637, 11639, 
-    11641, 11643, 11645, 11647, 11649, 11651, 11653, 11655, 11657, 11659, 
-    11661, 11663, 11665, 11667, 11669, 11671, 11673, 11675, 11677, 11679, 
-    11681, 11683, 11685, 11687, 11689, 11691, 11693, 11695, 11697, 11699, 
-    11701, 11703, 11705, 11707, 11709, 11711, 11713, 11715, 11717, 11719, 
-    11721, 11723, 11725, 11727, 11729, 11731, 11733, 11735, 11737, 11739, 
-    11741, 11743, 11745, 11747, 11749, 11751, 11753, 11755, 11757, 11759, 
-    11761, 11763, 11765, 11767, 11769, 11771, 11773, 11775, 11777, 11779, 
-    11781, 11783, 11785, 11787, 11789, 11791, 11793, 11795, 11797, 11799, 
-    11801, 11803, 11805, 11807, 11809, 11811, 11813, 11815, 11817, 11819, 
-    11821, 11823, 11825, 11827, 11829, 11831, 11833, 11835, 11837, 11839, 0, 
-    0, 11841, 11843, 11845, 11847, 11849, 11851, 11853, 11855, 11857, 11859, 
-    11861, 11863, 11865, 11867, 11869, 11871, 11873, 11875, 11877, 11879, 
-    11881, 11883, 11885, 11887, 11889, 11891, 11893, 11895, 11897, 11899, 
-    11901, 11903, 11905, 11907, 11909, 11911, 11913, 11915, 11917, 11919, 
-    11921, 11923, 11925, 11927, 11929, 11931, 11933, 11935, 11937, 11939, 
-    11941, 11943, 11945, 11947, 11949, 11951, 11953, 11955, 11957, 11959, 
-    11961, 11963, 11965, 11967, 11969, 11971, 11973, 11975, 11977, 11979, 
-    11981, 11983, 11985, 11987, 11989, 11991, 11993, 11995, 11997, 11999, 
-    12001, 12003, 12005, 12007, 12009, 12011, 12013, 12015, 12017, 12019, 
-    12021, 12023, 12025, 12027, 12029, 12031, 12033, 12035, 12037, 12039, 
-    12041, 12043, 12045, 12047, 12049, 12051, 12053, 12055, 12057, 12059, 
-    12061, 12063, 12065, 12067, 12069, 12071, 12073, 12075, 12077, 12079, 
-    12081, 12083, 12085, 12087, 12089, 12091, 12093, 12095, 12097, 12099, 
-    12101, 12103, 12105, 12107, 12109, 12111, 12113, 12115, 12117, 12119, 
-    12121, 12123, 12125, 12127, 12129, 12131, 12133, 12135, 12137, 12139, 
-    12141, 12143, 12145, 12147, 12149, 12151, 12153, 12155, 12157, 12159, 
-    12161, 12163, 12165, 12167, 12169, 12171, 12173, 12175, 12177, 12179, 
-    12181, 12183, 12185, 12187, 12189, 12191, 12193, 12195, 12197, 12199, 
-    12201, 12203, 12205, 12207, 12209, 12211, 12213, 12215, 12217, 12219, 
-    12221, 12223, 12225, 12227, 12229, 12231, 12233, 12235, 12237, 12239, 
-    12241, 12243, 12245, 12247, 12249, 12251, 12253, 12255, 12257, 12259, 
-    12261, 12263, 12265, 12267, 12269, 12271, 12273, 12275, 12277, 12279, 
-    12281, 12283, 12285, 12287, 12289, 12291, 12293, 12295, 12297, 12299, 
-    12301, 12303, 12305, 12307, 12309, 12311, 12313, 12315, 12317, 12319, 
-    12321, 12323, 12325, 12327, 12329, 12331, 12333, 12335, 12337, 12339, 
-    12341, 12343, 12345, 12347, 12349, 12351, 12353, 12355, 12357, 12359, 
-    12361, 12363, 12365, 12367, 12369, 12371, 12373, 12375, 12377, 12379, 
-    12381, 12383, 12385, 12387, 12389, 12391, 12393, 12395, 12397, 12399, 
-    12401, 12403, 12405, 12407, 12409, 12411, 12413, 12415, 12417, 12419, 
-    12421, 12423, 0, 0, 12425, 12427, 12429, 12431, 12433, 12435, 12437, 
-    12439, 12441, 12443, 12445, 12447, 12449, 12451, 12453, 12455, 12457, 
-    12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 
-    12479, 12481, 12483, 12485, 12487, 12489, 12491, 12493, 12495, 12497, 
-    12499, 12501, 12503, 12505, 12507, 12509, 12511, 12513, 12515, 12517, 
-    12519, 12521, 12523, 12525, 12527, 12529, 12531, 0, 12533, 12535, 12537, 
-    12539, 12541, 12543, 12545, 12547, 12549, 12551, 12553, 12555, 12557, 
-    12559, 12561, 12563, 12565, 12567, 12569, 12571, 12573, 12575, 12577, 
-    12579, 12581, 12583, 12585, 0, 12587, 12589, 0, 12591, 0, 0, 12593, 0, 
-    12595, 12597, 12599, 12601, 12603, 12605, 12607, 12609, 12611, 12613, 0, 
-    12615, 12617, 12619, 12621, 0, 12623, 0, 12625, 0, 0, 0, 0, 0, 0, 12627, 
-    0, 0, 0, 0, 12629, 0, 12631, 0, 12633, 0, 12635, 12637, 12639, 0, 12641, 
-    12643, 0, 12645, 0, 0, 12647, 0, 12649, 0, 12651, 0, 12653, 0, 12655, 0, 
-    12657, 12659, 0, 12661, 0, 0, 12663, 12665, 12667, 12669, 0, 12671, 
-    12673, 12675, 12677, 12679, 12681, 12683, 0, 12685, 12687, 12689, 12691, 
-    0, 12693, 12695, 12697, 12699, 0, 12701, 0, 12703, 12705, 12707, 12709, 
-    12711, 12713, 12715, 12717, 12719, 12721, 0, 12723, 12725, 12727, 12729, 
-    12731, 12733, 12735, 12737, 12739, 12741, 12743, 12745, 12747, 12749, 
-    12751, 12753, 12755, 0, 0, 0, 0, 0, 12757, 12759, 12761, 0, 12763, 12765, 
-    12767, 12769, 12771, 0, 12773, 12775, 12777, 12779, 12781, 12783, 12785, 
-    12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, 12803, 12805, 0, 
-    0, 0, 0, 12807, 12810, 12813, 12816, 12819, 12822, 12825, 12828, 12831, 
-    12834, 12837, 0, 0, 0, 0, 0, 12840, 12844, 12848, 12852, 12856, 12860, 
-    12864, 12868, 12872, 12876, 12880, 12884, 12888, 12892, 12896, 12900, 
-    12904, 12908, 12912, 12916, 12920, 12924, 12928, 12932, 12936, 12940, 
-    12944, 12948, 12950, 12952, 12955, 0, 12958, 12960, 12962, 12964, 12966, 
-    12968, 12970, 12972, 12974, 12976, 12978, 12980, 12982, 12984, 12986, 
-    12988, 12990, 12992, 12994, 12996, 12998, 13000, 13002, 13004, 13006, 
-    13008, 13010, 13013, 13016, 13019, 13022, 13026, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 13029, 13032, 0, 0, 0, 0, 13035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 13038, 13041, 13044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    13046, 13048, 13050, 13052, 13054, 13056, 13058, 13060, 13062, 13064, 
-    13066, 13068, 13070, 13072, 13074, 13076, 13078, 13080, 13082, 13084, 
-    13086, 13088, 13090, 13092, 13094, 13096, 13098, 13100, 13102, 13104, 
-    13106, 13108, 13110, 13112, 13114, 13116, 13118, 13120, 13122, 13124, 
-    13126, 13128, 13130, 0, 0, 0, 0, 0, 13132, 13136, 13140, 13144, 13148, 
-    13152, 13156, 13160, 13164, 0, 0, 0, 0, 0, 0, 0, 13168, 13170, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13172, 13174, 13176, 13178, 13181, 
-    13183, 13185, 13187, 13189, 13191, 13193, 13195, 13197, 13199, 13202, 
-    13204, 13206, 13208, 13210, 13213, 13215, 13217, 13219, 13222, 13224, 
-    13226, 13228, 13230, 13232, 13235, 13237, 13239, 13241, 13243, 13245, 
-    13247, 13249, 13251, 13253, 13255, 13257, 13259, 13261, 13263, 13265, 
-    13267, 13269, 13271, 13273, 13275, 13277, 13279, 13281, 13284, 13286, 
-    13288, 13290, 13293, 13295, 13297, 13299, 13301, 13303, 13305, 13307, 
-    13309, 13311, 13313, 13315, 13317, 13319, 13321, 13323, 13325, 13327, 
-    13329, 13331, 13333, 13335, 13337, 13339, 13341, 13343, 13345, 13347, 
-    13349, 13351, 13353, 13355, 13357, 13360, 13362, 13364, 13366, 13368, 
-    13370, 13372, 13375, 13378, 13380, 13382, 13384, 13386, 13388, 13390, 
-    13392, 13394, 13396, 13398, 13401, 13403, 13405, 13407, 13409, 13412, 
-    13414, 13416, 13418, 13420, 13422, 13424, 13426, 13428, 13430, 13433, 
-    13435, 13438, 13440, 13442, 13444, 13446, 13448, 13450, 13452, 13454, 
-    13456, 13458, 13460, 13463, 13465, 13467, 13469, 13471, 13473, 13476, 
-    13478, 13481, 13484, 13486, 13488, 13490, 13492, 13495, 13498, 13500, 
-    13502, 13504, 13506, 13508, 13510, 13512, 13514, 13516, 13518, 13520, 
-    13523, 13525, 13527, 13529, 13531, 13533, 13535, 13537, 13539, 13541, 
-    13543, 13545, 13547, 13549, 13551, 13553, 13555, 13557, 13559, 13561, 
-    13564, 13566, 13568, 13570, 13572, 13574, 13577, 13579, 13581, 13583, 
-    13585, 13587, 13589, 13591, 13593, 13595, 13597, 13599, 13602, 13604, 
-    13606, 13608, 13610, 13612, 13614, 13616, 13618, 13620, 13622, 13624, 
-    13626, 13628, 13630, 13632, 13634, 13636, 13638, 13641, 13643, 13645, 
-    13647, 13649, 13651, 13654, 13656, 13658, 13660, 13662, 13664, 13666, 
-    13668, 13670, 13673, 13675, 13677, 13679, 13682, 13684, 13686, 13688, 
-    13690, 13692, 13694, 13697, 13700, 13703, 13705, 13708, 13710, 13712, 
-    13714, 13716, 13718, 13720, 13722, 13724, 13726, 13728, 13731, 13733, 
-    13735, 13737, 13739, 13741, 13743, 13746, 13748, 13750, 13753, 13756, 
-    13758, 13760, 13762, 13764, 13766, 13768, 13770, 13772, 13774, 13777, 
-    13779, 13782, 13784, 13787, 13789, 13791, 13793, 13796, 13798, 13800, 
-    13803, 13806, 13808, 13810, 13812, 13814, 13816, 13818, 13820, 13822, 
-    13824, 13826, 13828, 13830, 13832, 13835, 13837, 13840, 13842, 13845, 
-    13847, 13850, 13853, 13856, 13858, 13860, 13862, 13865, 13868, 13871, 
-    13874, 13876, 13878, 13880, 13882, 13884, 13886, 13888, 13890, 13893, 
-    13895, 13897, 13899, 13901, 13904, 13906, 13909, 13912, 13914, 13916, 
-    13918, 13920, 13922, 13924, 13927, 13930, 13933, 13935, 13937, 13940, 
-    13942, 13944, 13946, 13949, 13951, 13953, 13955, 13957, 13959, 13962, 
-    13964, 13966, 13968, 13970, 13972, 13974, 13977, 13980, 13982, 13985, 
-    13987, 13990, 13992, 13994, 13996, 13999, 14002, 14004, 14007, 14009, 
-    14012, 14014, 14016, 14018, 14020, 14022, 14024, 14027, 14030, 14033, 
-    14036, 14038, 14040, 14042, 14044, 14046, 14048, 14050, 14052, 14054, 
-    14056, 14058, 14060, 14063, 14065, 14067, 14069, 14071, 14073, 14075, 
-    14077, 14079, 14081, 14083, 14085, 14087, 14090, 14093, 14096, 14098, 
-    14100, 14102, 14104, 14107, 14109, 14112, 14114, 14116, 14119, 14122, 
-    14124, 14126, 14128, 14130, 14132, 14134, 14136, 14138, 14140, 14142, 
-    14144, 14146, 14148, 14150, 14152, 14154, 14156, 14158, 14160, 14163, 
-    14165, 14167, 14169, 14171, 14173, 14176, 14179, 14181, 14183, 14185, 
-    14187, 14189, 14191, 14194, 14196, 14198, 14200, 14202, 14205, 14208, 
-    14210, 14212, 14214, 14217, 14219, 14221, 14224, 14227, 14229, 14231, 
-    14233, 14236, 14238, 14240, 14242, 14244, 14246, 14248, 14250, 14253, 
-    14255, 14257, 14259, 14262, 14264, 14266, 14268, 14270, 14273, 14276, 
-    14278, 14280, 14282, 14285, 14287, 14290, 14292, 14294, 14296, 14299, 
-    14301, 14303, 14305, 14307, 14309, 14311, 14313, 14316, 14318, 14320, 
-    14322, 14324, 14326, 14328, 14331, 14333, 14336, 14339, 14342, 14344, 
-    14346, 14348, 14350, 14352, 14354, 14356, 14358, 0, 0, 
+    10403, 10405, 10407, 0, 0, 10409, 10411, 10413, 10415, 10417, 10419, 0, 
+    0, 10421, 10423, 10425, 0, 0, 0, 10427, 10429, 10431, 10433, 10435, 
+    10437, 10439, 0, 10441, 10443, 10445, 10447, 10449, 10451, 10453, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 10455, 0, 10460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 10465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    10470, 10475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10480, 10485, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10490, 10495, 0, 10500, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 10505, 10510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 10515, 10520, 10525, 10530, 10535, 10540, 10545, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10550, 10555, 10560, 
+    10565, 10570, 10575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10580, 
+    10582, 10584, 10586, 10588, 10590, 10592, 10594, 10596, 10598, 10600, 
+    10602, 10604, 10606, 10608, 10610, 10612, 10614, 10616, 10618, 10620, 
+    10622, 10624, 10626, 10628, 10630, 10632, 10634, 10636, 10638, 10640, 
+    10642, 10644, 10646, 10648, 10650, 10652, 10654, 10656, 10658, 10660, 
+    10662, 10664, 10666, 10668, 10670, 10672, 10674, 10676, 10678, 10680, 
+    10682, 10684, 10686, 10688, 10690, 10692, 10694, 10696, 10698, 10700, 
+    10702, 10704, 10706, 10708, 10710, 10712, 10714, 10716, 10718, 10720, 
+    10722, 10724, 10726, 10728, 10730, 10732, 10734, 10736, 10738, 10740, 
+    10742, 10744, 10746, 10748, 0, 10750, 10752, 10754, 10756, 10758, 10760, 
+    10762, 10764, 10766, 10768, 10770, 10772, 10774, 10776, 10778, 10780, 
+    10782, 10784, 10786, 10788, 10790, 10792, 10794, 10796, 10798, 10800, 
+    10802, 10804, 10806, 10808, 10810, 10812, 10814, 10816, 10818, 10820, 
+    10822, 10824, 10826, 10828, 10830, 10832, 10834, 10836, 10838, 10840, 
+    10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, 10860, 
+    10862, 10864, 10866, 10868, 10870, 10872, 10874, 10876, 10878, 10880, 
+    10882, 10884, 10886, 10888, 10890, 0, 10892, 10894, 0, 0, 10896, 0, 0, 
+    10898, 10900, 0, 0, 10902, 10904, 10906, 10908, 0, 10910, 10912, 10914, 
+    10916, 10918, 10920, 10922, 10924, 10926, 10928, 10930, 10932, 0, 10934, 
+    0, 10936, 10938, 10940, 10942, 10944, 10946, 10948, 0, 10950, 10952, 
+    10954, 10956, 10958, 10960, 10962, 10964, 10966, 10968, 10970, 10972, 
+    10974, 10976, 10978, 10980, 10982, 10984, 10986, 10988, 10990, 10992, 
+    10994, 10996, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 
+    11014, 11016, 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 
+    11034, 11036, 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 
+    11054, 11056, 11058, 11060, 11062, 11064, 11066, 11068, 11070, 11072, 
+    11074, 11076, 11078, 0, 11080, 11082, 11084, 11086, 0, 0, 11088, 11090, 
+    11092, 11094, 11096, 11098, 11100, 11102, 0, 11104, 11106, 11108, 11110, 
+    11112, 11114, 11116, 0, 11118, 11120, 11122, 11124, 11126, 11128, 11130, 
+    11132, 11134, 11136, 11138, 11140, 11142, 11144, 11146, 11148, 11150, 
+    11152, 11154, 11156, 11158, 11160, 11162, 11164, 11166, 11168, 11170, 
+    11172, 0, 11174, 11176, 11178, 11180, 0, 11182, 11184, 11186, 11188, 
+    11190, 0, 11192, 0, 0, 0, 11194, 11196, 11198, 11200, 11202, 11204, 
+    11206, 0, 11208, 11210, 11212, 11214, 11216, 11218, 11220, 11222, 11224, 
+    11226, 11228, 11230, 11232, 11234, 11236, 11238, 11240, 11242, 11244, 
+    11246, 11248, 11250, 11252, 11254, 11256, 11258, 11260, 11262, 11264, 
+    11266, 11268, 11270, 11272, 11274, 11276, 11278, 11280, 11282, 11284, 
+    11286, 11288, 11290, 11292, 11294, 11296, 11298, 11300, 11302, 11304, 
+    11306, 11308, 11310, 11312, 11314, 11316, 11318, 11320, 11322, 11324, 
+    11326, 11328, 11330, 11332, 11334, 11336, 11338, 11340, 11342, 11344, 
+    11346, 11348, 11350, 11352, 11354, 11356, 11358, 11360, 11362, 11364, 
+    11366, 11368, 11370, 11372, 11374, 11376, 11378, 11380, 11382, 11384, 
+    11386, 11388, 11390, 11392, 11394, 11396, 11398, 11400, 11402, 11404, 
+    11406, 11408, 11410, 11412, 11414, 11416, 11418, 11420, 11422, 11424, 
+    11426, 11428, 11430, 11432, 11434, 11436, 11438, 11440, 11442, 11444, 
+    11446, 11448, 11450, 11452, 11454, 11456, 11458, 11460, 11462, 11464, 
+    11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, 11482, 11484, 
+    11486, 11488, 11490, 11492, 11494, 11496, 11498, 11500, 11502, 11504, 
+    11506, 11508, 11510, 11512, 11514, 11516, 11518, 11520, 11522, 11524, 
+    11526, 11528, 11530, 11532, 11534, 11536, 11538, 11540, 11542, 11544, 
+    11546, 11548, 11550, 11552, 11554, 11556, 11558, 11560, 11562, 11564, 
+    11566, 11568, 11570, 11572, 11574, 11576, 11578, 11580, 11582, 11584, 
+    11586, 11588, 11590, 11592, 11594, 11596, 11598, 11600, 11602, 11604, 
+    11606, 11608, 11610, 11612, 11614, 11616, 11618, 11620, 11622, 11624, 
+    11626, 11628, 11630, 11632, 11634, 11636, 11638, 11640, 11642, 11644, 
+    11646, 11648, 11650, 11652, 11654, 11656, 11658, 11660, 11662, 11664, 
+    11666, 11668, 11670, 11672, 11674, 11676, 11678, 11680, 11682, 11684, 
+    11686, 11688, 11690, 11692, 11694, 11696, 11698, 11700, 11702, 11704, 
+    11706, 11708, 11710, 11712, 11714, 11716, 11718, 11720, 11722, 11724, 
+    11726, 11728, 11730, 11732, 11734, 11736, 11738, 11740, 11742, 11744, 
+    11746, 11748, 11750, 11752, 11754, 11756, 11758, 11760, 11762, 11764, 
+    11766, 11768, 11770, 11772, 11774, 11776, 11778, 11780, 11782, 11784, 
+    11786, 11788, 11790, 11792, 11794, 11796, 11798, 11800, 11802, 11804, 
+    11806, 11808, 11810, 11812, 11814, 11816, 11818, 11820, 11822, 11824, 
+    11826, 11828, 11830, 11832, 11834, 11836, 11838, 11840, 11842, 11844, 
+    11846, 11848, 11850, 11852, 11854, 11856, 11858, 11860, 11862, 11864, 
+    11866, 11868, 11870, 11872, 11874, 11876, 11878, 11880, 11882, 11884, 
+    11886, 0, 0, 11888, 11890, 11892, 11894, 11896, 11898, 11900, 11902, 
+    11904, 11906, 11908, 11910, 11912, 11914, 11916, 11918, 11920, 11922, 
+    11924, 11926, 11928, 11930, 11932, 11934, 11936, 11938, 11940, 11942, 
+    11944, 11946, 11948, 11950, 11952, 11954, 11956, 11958, 11960, 11962, 
+    11964, 11966, 11968, 11970, 11972, 11974, 11976, 11978, 11980, 11982, 
+    11984, 11986, 11988, 11990, 11992, 11994, 11996, 11998, 12000, 12002, 
+    12004, 12006, 12008, 12010, 12012, 12014, 12016, 12018, 12020, 12022, 
+    12024, 12026, 12028, 12030, 12032, 12034, 12036, 12038, 12040, 12042, 
+    12044, 12046, 12048, 12050, 12052, 12054, 12056, 12058, 12060, 12062, 
+    12064, 12066, 12068, 12070, 12072, 12074, 12076, 12078, 12080, 12082, 
+    12084, 12086, 12088, 12090, 12092, 12094, 12096, 12098, 12100, 12102, 
+    12104, 12106, 12108, 12110, 12112, 12114, 12116, 12118, 12120, 12122, 
+    12124, 12126, 12128, 12130, 12132, 12134, 12136, 12138, 12140, 12142, 
+    12144, 12146, 12148, 12150, 12152, 12154, 12156, 12158, 12160, 12162, 
+    12164, 12166, 12168, 12170, 12172, 12174, 12176, 12178, 12180, 12182, 
+    12184, 12186, 12188, 12190, 12192, 12194, 12196, 12198, 12200, 12202, 
+    12204, 12206, 12208, 12210, 12212, 12214, 12216, 12218, 12220, 12222, 
+    12224, 12226, 12228, 12230, 12232, 12234, 12236, 12238, 12240, 12242, 
+    12244, 12246, 12248, 12250, 12252, 12254, 12256, 12258, 12260, 12262, 
+    12264, 12266, 12268, 12270, 12272, 12274, 12276, 12278, 12280, 12282, 
+    12284, 12286, 12288, 12290, 12292, 12294, 12296, 12298, 12300, 12302, 
+    12304, 12306, 12308, 12310, 12312, 12314, 12316, 12318, 12320, 12322, 
+    12324, 12326, 12328, 12330, 12332, 12334, 12336, 12338, 12340, 12342, 
+    12344, 12346, 12348, 12350, 12352, 12354, 12356, 12358, 12360, 12362, 
+    12364, 12366, 12368, 12370, 12372, 12374, 12376, 12378, 12380, 12382, 
+    12384, 12386, 12388, 12390, 12392, 12394, 12396, 12398, 12400, 12402, 
+    12404, 12406, 12408, 12410, 12412, 12414, 12416, 12418, 12420, 12422, 
+    12424, 12426, 12428, 12430, 12432, 12434, 12436, 12438, 12440, 12442, 
+    12444, 12446, 12448, 12450, 12452, 12454, 12456, 12458, 12460, 12462, 
+    12464, 12466, 12468, 12470, 0, 0, 12472, 12474, 12476, 12478, 12480, 
+    12482, 12484, 12486, 12488, 12490, 12492, 12494, 12496, 12498, 12500, 
+    12502, 12504, 12506, 12508, 12510, 12512, 12514, 12516, 12518, 12520, 
+    12522, 12524, 12526, 12528, 12530, 12532, 12534, 12536, 12538, 12540, 
+    12542, 12544, 12546, 12548, 12550, 12552, 12554, 12556, 12558, 12560, 
+    12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, 12578, 0, 12580, 
+    12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, 12598, 12600, 
+    12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, 12618, 12620, 
+    12622, 12624, 12626, 12628, 12630, 12632, 0, 12634, 12636, 0, 12638, 0, 
+    0, 12640, 0, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, 
+    12658, 12660, 0, 12662, 12664, 12666, 12668, 0, 12670, 0, 12672, 0, 0, 0, 
+    0, 0, 0, 12674, 0, 0, 0, 0, 12676, 0, 12678, 0, 12680, 0, 12682, 12684, 
+    12686, 0, 12688, 12690, 0, 12692, 0, 0, 12694, 0, 12696, 0, 12698, 0, 
+    12700, 0, 12702, 0, 12704, 12706, 0, 12708, 0, 0, 12710, 12712, 12714, 
+    12716, 0, 12718, 12720, 12722, 12724, 12726, 12728, 12730, 0, 12732, 
+    12734, 12736, 12738, 0, 12740, 12742, 12744, 12746, 0, 12748, 0, 12750, 
+    12752, 12754, 12756, 12758, 12760, 12762, 12764, 12766, 12768, 0, 12770, 
+    12772, 12774, 12776, 12778, 12780, 12782, 12784, 12786, 12788, 12790, 
+    12792, 12794, 12796, 12798, 12800, 12802, 0, 0, 0, 0, 0, 12804, 12806, 
+    12808, 0, 12810, 12812, 12814, 12816, 12818, 0, 12820, 12822, 12824, 
+    12826, 12828, 12830, 12832, 12834, 12836, 12838, 12840, 12842, 12844, 
+    12846, 12848, 12850, 12852, 0, 0, 0, 0, 12854, 12857, 12860, 12863, 
+    12866, 12869, 12872, 12875, 12878, 12881, 12884, 0, 0, 0, 0, 0, 12887, 
+    12891, 12895, 12899, 12903, 12907, 12911, 12915, 12919, 12923, 12927, 
+    12931, 12935, 12939, 12943, 12947, 12951, 12955, 12959, 12963, 12967, 
+    12971, 12975, 12979, 12983, 12987, 12991, 12995, 12997, 12999, 13002, 0, 
+    13005, 13007, 13009, 13011, 13013, 13015, 13017, 13019, 13021, 13023, 
+    13025, 13027, 13029, 13031, 13033, 13035, 13037, 13039, 13041, 13043, 
+    13045, 13047, 13049, 13051, 13053, 13055, 13057, 13060, 13063, 13066, 
+    13069, 13073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13076, 13079, 0, 0, 0, 0, 
+    13082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13085, 13088, 13091, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13093, 13095, 13097, 13099, 13101, 
+    13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, 
+    13123, 13125, 13127, 13129, 13131, 13133, 13135, 13137, 13139, 13141, 
+    13143, 13145, 13147, 13149, 13151, 13153, 13155, 13157, 13159, 13161, 
+    13163, 13165, 13167, 13169, 13171, 13173, 13175, 13177, 0, 0, 0, 0, 0, 
+    13179, 13183, 13187, 13191, 13195, 13199, 13203, 13207, 13211, 0, 0, 0, 
+    0, 0, 0, 0, 13215, 13217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    13219, 13221, 13223, 13225, 13228, 13230, 13232, 13234, 13236, 13238, 
+    13240, 13242, 13244, 13246, 13249, 13251, 13253, 13255, 13257, 13260, 
+    13262, 13264, 13266, 13269, 13271, 13273, 13275, 13277, 13279, 13282, 
+    13284, 13286, 13288, 13290, 13292, 13294, 13296, 13298, 13300, 13302, 
+    13304, 13306, 13308, 13310, 13312, 13314, 13316, 13318, 13320, 13322, 
+    13324, 13326, 13328, 13331, 13333, 13335, 13337, 13340, 13342, 13344, 
+    13346, 13348, 13350, 13352, 13354, 13356, 13358, 13360, 13362, 13364, 
+    13366, 13368, 13370, 13372, 13374, 13376, 13378, 13380, 13382, 13384, 
+    13386, 13388, 13390, 13392, 13394, 13396, 13398, 13400, 13402, 13404, 
+    13407, 13409, 13411, 13413, 13415, 13417, 13419, 13422, 13425, 13427, 
+    13429, 13431, 13433, 13435, 13437, 13439, 13441, 13443, 13445, 13448, 
+    13450, 13452, 13454, 13456, 13459, 13461, 13463, 13465, 13467, 13469, 
+    13471, 13473, 13475, 13477, 13480, 13482, 13485, 13487, 13489, 13491, 
+    13493, 13495, 13497, 13499, 13501, 13503, 13505, 13507, 13510, 13512, 
+    13514, 13516, 13518, 13520, 13523, 13525, 13528, 13531, 13533, 13535, 
+    13537, 13539, 13542, 13545, 13547, 13549, 13551, 13553, 13555, 13557, 
+    13559, 13561, 13563, 13565, 13567, 13570, 13572, 13574, 13576, 13578, 
+    13580, 13582, 13584, 13586, 13588, 13590, 13592, 13594, 13596, 13598, 
+    13600, 13602, 13604, 13606, 13608, 13611, 13613, 13615, 13617, 13619, 
+    13621, 13624, 13626, 13628, 13630, 13632, 13634, 13636, 13638, 13640, 
+    13642, 13644, 13646, 13649, 13651, 13653, 13655, 13657, 13659, 13661, 
+    13663, 13665, 13667, 13669, 13671, 13673, 13675, 13677, 13679, 13681, 
+    13683, 13685, 13688, 13690, 13692, 13694, 13696, 13698, 13701, 13703, 
+    13705, 13707, 13709, 13711, 13713, 13715, 13717, 13720, 13722, 13724, 
+    13726, 13729, 13731, 13733, 13735, 13737, 13739, 13741, 13744, 13747, 
+    13750, 13752, 13755, 13757, 13759, 13761, 13763, 13765, 13767, 13769, 
+    13771, 13773, 13775, 13778, 13780, 13782, 13784, 13786, 13788, 13790, 
+    13793, 13795, 13797, 13800, 13803, 13805, 13807, 13809, 13811, 13813, 
+    13815, 13817, 13819, 13821, 13824, 13826, 13829, 13831, 13834, 13836, 
+    13838, 13840, 13843, 13845, 13847, 13850, 13853, 13855, 13857, 13859, 
+    13861, 13863, 13865, 13867, 13869, 13871, 13873, 13875, 13877, 13879, 
+    13882, 13884, 13887, 13889, 13892, 13894, 13897, 13900, 13903, 13905, 
+    13907, 13909, 13912, 13915, 13918, 13921, 13923, 13925, 13927, 13929, 
+    13931, 13933, 13935, 13937, 13940, 13942, 13944, 13946, 13948, 13951, 
+    13953, 13956, 13959, 13961, 13963, 13965, 13967, 13969, 13971, 13974, 
+    13977, 13980, 13982, 13984, 13987, 13989, 13991, 13993, 13996, 13998, 
+    14000, 14002, 14004, 14006, 14009, 14011, 14013, 14015, 14017, 14019, 
+    14021, 14024, 14027, 14029, 14032, 14034, 14037, 14039, 14041, 14043, 
+    14046, 14049, 14051, 14054, 14056, 14059, 14061, 14063, 14065, 14067, 
+    14069, 14071, 14074, 14077, 14080, 14083, 14085, 14087, 14089, 14091, 
+    14093, 14095, 14097, 14099, 14101, 14103, 14105, 14107, 14110, 14112, 
+    14114, 14116, 14118, 14120, 14122, 14124, 14126, 14128, 14130, 14132, 
+    14134, 14137, 14140, 14143, 14145, 14147, 14149, 14151, 14154, 14156, 
+    14159, 14161, 14163, 14166, 14169, 14171, 14173, 14175, 14177, 14179, 
+    14181, 14183, 14185, 14187, 14189, 14191, 14193, 14195, 14197, 14199, 
+    14201, 14203, 14205, 14207, 14210, 14212, 14214, 14216, 14218, 14220, 
+    14223, 14226, 14228, 14230, 14232, 14234, 14236, 14238, 14241, 14243, 
+    14245, 14247, 14249, 14252, 14255, 14257, 14259, 14261, 14264, 14266, 
+    14268, 14271, 14274, 14276, 14278, 14280, 14283, 14285, 14287, 14289, 
+    14291, 14293, 14295, 14297, 14300, 14302, 14304, 14306, 14309, 14311, 
+    14313, 14315, 14317, 14320, 14323, 14325, 14327, 14329, 14332, 14334, 
+    14337, 14339, 14341, 14343, 14346, 14348, 14350, 14352, 14354, 14356, 
+    14358, 14360, 14363, 14365, 14367, 14369, 14371, 14373, 14375, 14378, 
+    14380, 14383, 14386, 14389, 14391, 14393, 14395, 14397, 14399, 14401, 
+    14403, 14405, 0, 0, 
 };
 
 /* NFC pairs */
 #define COMP_SHIFT1 2
 #define COMP_SHIFT2 1
 static const unsigned short comp_index0[] = {
 };
 
 /* NFC pairs */
 #define COMP_SHIFT1 2
 #define COMP_SHIFT2 1
 static const unsigned short comp_index0[] = {
-    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 
-    0, 0, 0, 0, 7, 0, 8, 9, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 13, 14, 15, 16, 
-    0, 0, 0, 17, 18, 19, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 
-    0, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 0, 0, 0, 33, 0, 0, 0, 0, 
-    0, 0, 34, 35, 36, 37, 0, 0, 0, 38, 39, 40, 41, 0, 0, 0, 42, 0, 43, 0, 0, 
-    0, 0, 44, 45, 46, 47, 0, 0, 0, 48, 49, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 
-    0, 52, 53, 54, 55, 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 
-    0, 63, 64, 65, 66, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 
-    71, 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, 75, 76, 77, 78, 0, 0, 0, 
-    79, 80, 81, 0, 0, 0, 0, 82, 0, 83, 84, 0, 0, 0, 85, 86, 87, 0, 0, 0, 0, 
-    88, 89, 90, 91, 0, 0, 0, 92, 93, 94, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 
-    97, 98, 99, 0, 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, 105, 106, 107, 
-    0, 0, 0, 108, 109, 0, 0, 0, 0, 0, 110, 111, 112, 113, 0, 0, 0, 114, 115, 
-    116, 117, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 120, 121, 122, 123, 0, 0, 0, 
-    124, 125, 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 129, 130, 131, 0, 
-    0, 0, 132, 133, 134, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 0, 139, 140, 
-    141, 142, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 146, 147, 0, 0, 0, 0, 
-    148, 0, 0, 0, 0, 0, 0, 149, 150, 151, 0, 0, 0, 0, 152, 153, 154, 155, 0, 
-    0, 0, 156, 0, 0, 157, 0, 0, 0, 158, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 
-    0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 
-    0, 164, 165, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 
-    0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 
-    172, 173, 0, 0, 0, 0, 0, 174, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 
-    177, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 
-    181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, 185, 
-    0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 189, 
-    0, 0, 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 0, 
-    0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 197, 0, 0, 
-    0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 
-    0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 
-    0, 0, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 
-    0, 207, 208, 209, 0, 0, 0, 0, 210, 211, 212, 0, 0, 0, 0, 213, 214, 215, 
-    0, 0, 0, 0, 216, 217, 218, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 
-    0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 
-    0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 
-    0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 230, 0, 231, 0, 
-    0, 0, 232, 233, 0, 0, 0, 0, 0, 234, 235, 0, 236, 0, 0, 0, 237, 238, 0, 0, 
-    0, 0, 0, 239, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 243, 0, 0, 
-    0, 0, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 
-    0, 0, 0, 249, 250, 0, 251, 0, 0, 0, 252, 253, 0, 0, 0, 0, 0, 254, 255, 0, 
-    256, 0, 0, 0, 257, 258, 0, 259, 0, 0, 0, 260, 261, 0, 0, 0, 0, 0, 0, 262, 
-    0, 0, 0, 0, 0, 263, 264, 0, 265, 0, 0, 0, 266, 267, 0, 268, 0, 0, 0, 269, 
-    0, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 
-    0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 
-    0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 
-    0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 
-    0, 0, 0, 284, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 
-    0, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 
-    0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 
-    294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 297, 
-    298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 
-    0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 
-    0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 
-    0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 0, 311, 0, 
-    0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 
-    0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 
-    0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 
-    0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 
-    0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 
-    0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 
-    0, 331, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 
-    0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 
-    338, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 
-    0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 
-    0, 0, 0, 0, 0, 345, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 
-    0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 
-    0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 
-    0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 
-    0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 
-    0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 
-    0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 
-    370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 
-    0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 
-    0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 
-    0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 
-    385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 388, 
-    0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 
-    0, 0, 392, 0, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 
-    0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 
-    0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 
-    404, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 
-    0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 
-    413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 
-    418, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 0, 423, 0, 0, 
-    0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 
-    0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 
-    0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 
-    0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 
-    438, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 
-    0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 
-    0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, 
-    0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 
-    0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 
-    0, 0, 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 
-    0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 
-    462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 
-    0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 
-    0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 
-    0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 
-    0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 
-    0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 
-    0, 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 
-    484, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 
-    0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 
-    493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 
-    0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 
-    0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 
-    0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 
-    0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 
-    0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 
-    0, 512, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 
-    515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 
-    0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 
-    0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 
-    0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 
-    0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 
-    0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 
-    0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 
-    537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 
-    0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 
+    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 
+    5, 6, 7, 0, 0, 0, 0, 8, 0, 9, 10, 0, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 0, 
+    15, 16, 17, 0, 0, 0, 0, 18, 19, 20, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 
+    23, 24, 25, 26, 0, 0, 0, 0, 27, 28, 29, 30, 0, 0, 0, 0, 31, 32, 33, 34, 
+    0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 37, 38, 39, 0, 0, 0, 40, 41, 42, 
+    43, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 0, 47, 48, 49, 50, 0, 0, 0, 51, 
+    52, 53, 54, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 57, 58, 59, 60, 0, 0, 
+    0, 0, 61, 62, 63, 0, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 0, 68, 69, 70, 71, 
+    0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 
+    0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 0, 84, 
+    85, 86, 0, 0, 0, 0, 0, 87, 88, 0, 89, 0, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 
+    0, 93, 94, 95, 0, 0, 0, 0, 96, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 
+    0, 0, 101, 102, 0, 103, 0, 0, 0, 0, 104, 105, 106, 107, 0, 0, 0, 0, 108, 
+    109, 110, 111, 0, 0, 0, 0, 112, 113, 0, 0, 0, 0, 0, 114, 115, 116, 117, 
+    0, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 
+    125, 126, 127, 128, 0, 0, 0, 129, 130, 131, 132, 0, 0, 0, 0, 133, 134, 0, 
+    0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 0, 139, 140, 141, 142, 0, 0, 0, 
+    0, 0, 143, 144, 145, 0, 0, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0, 150, 0, 
+    151, 0, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 
+    156, 157, 158, 0, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 0, 163, 0, 0, 0, 
+    164, 0, 0, 0, 165, 166, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 
+    0, 0, 0, 0, 0, 0, 169, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 
+    172, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 
+    0, 0, 177, 178, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 
+    0, 0, 0, 181, 182, 183, 0, 0, 0, 0, 0, 184, 185, 0, 0, 0, 0, 0, 0, 186, 
+    0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 
+    190, 0, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 
+    0, 194, 195, 0, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 
+    0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 0, 203, 
+    204, 0, 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 
+    208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 
+    0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 
+    0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 
+    0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 
+    0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 0, 223, 224, 225, 0, 0, 0, 0, 
+    0, 226, 227, 228, 0, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, 0, 232, 0, 
+    0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 
+    0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 
+    0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 
+    241, 0, 0, 0, 0, 0, 0, 242, 0, 243, 244, 0, 0, 0, 0, 245, 246, 0, 0, 0, 
+    0, 0, 247, 0, 248, 0, 249, 0, 0, 0, 250, 251, 252, 0, 0, 0, 0, 0, 253, 0, 
+    254, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, 257, 258, 0, 0, 0, 0, 0, 
+    259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 
+    0, 0, 264, 265, 266, 0, 267, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 270, 0, 
+    271, 272, 0, 0, 0, 0, 273, 274, 0, 275, 0, 0, 0, 276, 0, 277, 0, 0, 0, 0, 
+    0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 0, 283, 284, 0, 
+    285, 0, 0, 0, 286, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 
+    0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 
+    0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 
+    0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 
+    0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 
+    0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, 
+    0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 
+    0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 
+    311, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 
+    0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 
+    0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 
+    0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 323, 0, 
+    0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 
+    0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 
+    0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 
+    0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 0, 
+    338, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 
+    0, 341, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 
+    0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 
+    0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 350, 0, 
+    0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 
+    0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 
+    356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 
+    0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 
+    0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 
+    0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 368, 
+    0, 0, 0, 0, 0, 0, 369, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 
+    372, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 
+    0, 375, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 379, 
+    0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 
+    382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 385, 0, 
+    0, 386, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 
+    0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 
+    0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 0, 
+    0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 
+    0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 
+    403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 
+    0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 
+    0, 0, 410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 
+    0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 
+    0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 420, 0, 
+    0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 0, 
+    0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 
+    0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 
+    433, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 
+    0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 
+    442, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 
+    0, 445, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 
+    449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 
+    0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 455, 0, 
+    0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 
+    0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 
+    0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 
+    0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 
+    0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 
+    0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 474, 0, 
+    0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 
+    0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 
+    480, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 
+    0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 
+    0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 
+    0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 
+    0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 
+    0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 
+    497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 
+    0, 500, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 
+    0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 
+    0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    508, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 
+    0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 
+    0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 
+    0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 
+    0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 522, 
+    0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 
+    525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 
+    0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 
+    0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 
+    0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 
+    0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 539, 
+    0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 
+    542, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 
+    0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 
+    0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 
+    0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 
+    0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 556, 
+    0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 
+    559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 
+    0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 564, 
 };
 
 static const unsigned short comp_index1[] = {
 };
 
 static const unsigned short comp_index1[] = {
-    0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 0, 
-    11, 12, 0, 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, 16, 0, 0, 17, 18, 0, 19, 0, 
-    20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, 24, 0, 25, 26, 0, 27, 0, 
-    0, 28, 29, 30, 31, 32, 33, 34, 0, 35, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 
-    39, 40, 41, 42, 43, 0, 44, 0, 0, 0, 0, 45, 0, 0, 46, 0, 47, 0, 48, 0, 0, 
-    49, 0, 50, 0, 51, 0, 0, 0, 52, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 
-    61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 67, 
-    0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 70, 0, 71, 72, 0, 73, 0, 0, 74, 0, 0, 75, 
-    76, 0, 0, 0, 77, 78, 0, 79, 0, 80, 0, 0, 81, 0, 82, 83, 0, 84, 0, 0, 85, 
-    86, 87, 88, 89, 90, 91, 0, 92, 0, 0, 93, 94, 0, 0, 95, 96, 0, 0, 97, 0, 
-    98, 99, 0, 100, 0, 101, 0, 0, 102, 0, 0, 103, 104, 0, 105, 0, 106, 0, 0, 
-    107, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, 0, 111, 0, 112, 113, 0, 114, 0, 
-    0, 115, 116, 117, 118, 119, 120, 121, 0, 122, 123, 0, 124, 125, 0, 0, 0, 
-    0, 126, 0, 0, 127, 0, 0, 0, 128, 129, 0, 130, 131, 0, 0, 0, 0, 0, 0, 132, 
-    133, 134, 135, 136, 137, 0, 0, 0, 138, 0, 0, 0, 139, 140, 0, 141, 0, 142, 
-    0, 0, 143, 0, 0, 0, 0, 144, 0, 0, 145, 146, 147, 148, 149, 150, 151, 0, 
-    152, 153, 0, 154, 0, 0, 0, 155, 156, 0, 0, 0, 0, 157, 0, 0, 158, 159, 0, 
-    160, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 166, 
-    167, 0, 168, 0, 0, 169, 170, 171, 172, 173, 174, 175, 0, 176, 0, 177, 
-    178, 179, 0, 0, 0, 0, 0, 0, 180, 181, 182, 183, 184, 0, 185, 0, 0, 0, 0, 
-    186, 0, 0, 187, 0, 188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 193, 0, 0, 
-    194, 195, 196, 197, 198, 199, 200, 0, 201, 0, 0, 202, 203, 0, 0, 0, 0, 
-    204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 
-    210, 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 213, 0, 214, 215, 0, 216, 0, 0, 
-    217, 0, 0, 218, 219, 0, 0, 0, 220, 221, 0, 222, 0, 223, 0, 0, 224, 0, 
-    225, 226, 0, 227, 0, 0, 228, 229, 230, 231, 232, 233, 234, 0, 235, 0, 0, 
-    236, 237, 0, 0, 238, 239, 0, 0, 240, 0, 241, 242, 0, 243, 0, 244, 0, 0, 
-    245, 0, 0, 246, 247, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 
-    0, 253, 0, 0, 254, 0, 255, 256, 0, 257, 0, 0, 258, 259, 260, 261, 262, 
-    263, 264, 0, 265, 266, 0, 267, 268, 0, 0, 0, 0, 269, 0, 0, 270, 0, 0, 0, 
-    271, 272, 0, 273, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 277, 278, 
-    279, 280, 281, 0, 0, 0, 282, 0, 0, 0, 283, 284, 0, 285, 0, 286, 0, 0, 
-    287, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 291, 292, 0, 0, 
-    293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 0, 
-    299, 300, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 303, 304, 0, 0, 305, 0, 0, 0, 
-    306, 0, 307, 308, 0, 0, 309, 0, 310, 0, 0, 0, 311, 0, 312, 0, 0, 313, 0, 
-    0, 314, 315, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 0, 319, 0, 320, 
-    0, 321, 0, 0, 0, 322, 323, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 326, 327, 0, 
-    0, 328, 0, 0, 0, 329, 0, 330, 331, 0, 0, 332, 0, 333, 0, 0, 0, 334, 0, 
-    335, 0, 0, 336, 0, 0, 337, 338, 0, 0, 339, 0, 0, 0, 340, 341, 0, 0, 342, 
-    0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 
-    347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 350, 351, 0, 0, 0, 352, 0, 0, 
-    0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 356, 357, 0, 0, 358, 0, 0, 
-    0, 359, 0, 0, 0, 360, 361, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 364, 365, 0, 
-    0, 366, 0, 0, 0, 367, 0, 0, 0, 368, 369, 0, 0, 370, 0, 0, 0, 371, 0, 0, 
-    0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, 
-    0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 381, 0, 0, 
-    382, 0, 383, 0, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 0, 387, 
-    388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 392, 393, 0, 0, 0, 394, 
-    395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 398, 0, 399, 400, 0, 0, 0, 401, 
-    402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 
-    407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 
-    413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, 417, 418, 0, 0, 0, 419, 
-    0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 423, 424, 0, 425, 426, 
-    0, 0, 0, 427, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 
-    432, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 
-    437, 0, 0, 438, 0, 0, 0, 439, 0, 0, 440, 441, 442, 0, 0, 0, 443, 0, 444, 
-    445, 0, 0, 446, 447, 0, 0, 0, 448, 449, 0, 450, 451, 452, 0, 0, 0, 0, 0, 
-    0, 453, 0, 0, 454, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 
-    0, 459, 0, 0, 460, 461, 462, 0, 0, 0, 463, 0, 464, 465, 0, 0, 466, 467, 
-    0, 0, 0, 468, 469, 0, 470, 471, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 
-    475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 
-    480, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 0, 
-    485, 0, 0, 0, 486, 0, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 
-    490, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 493, 494, 0, 0, 0, 495, 0, 0, 
-    0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 499, 500, 0, 0, 0, 0, 0, 0, 
-    501, 502, 0, 0, 0, 0, 0, 0, 503, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 507, 
-    0, 0, 508, 0, 0, 0, 0, 509, 510, 0, 0, 511, 0, 0, 0, 0, 512, 513, 0, 0, 
-    0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 
-    0, 519, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 
-    524, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 
-    529, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 532, 0, 533, 534, 0, 0, 535, 
-    536, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 
-    0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 
-    0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 0, 0, 
-    0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, 
-    0, 557, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 0, 0, 562, 
-    0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 567, 0, 
-    0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 0, 572, 
-    0, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 
-    0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 
-    0, 583, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 
-    588, 0, 589, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 593, 0, 
-    0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 
-    0, 599, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 
-    0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 
-    0, 609, 0, 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 
-    614, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 
-    619, 0, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 
-    624, 0, 0, 0, 625, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 
-    629, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 634, 
-    0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 639, 0, 
-    0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 
-    0, 645, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 
-    650, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 0, 
-    655, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 0, 
-    660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 664, 0, 0, 0, 
-    665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 
-    670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, 0, 
-    675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 
-    680, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 
-    685, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 
-    690, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 
-    695, 0, 0, 0, 696, 0, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 
-    700, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 
-    705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 
-    710, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 714, 0, 0, 0, 
-    715, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 
-    720, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, 0, 
-    725, 0, 0, 0, 726, 
+    0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5, 6, 7, 8, 9, 10, 
+    0, 11, 12, 0, 13, 0, 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 
+    0, 17, 18, 0, 19, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 23, 0, 0, 24, 0, 
+    25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 33, 34, 0, 35, 0, 36, 37, 38, 0, 0, 
+    0, 0, 0, 39, 0, 0, 0, 40, 41, 42, 43, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 
+    0, 46, 0, 47, 0, 48, 0, 0, 49, 0, 50, 0, 51, 0, 0, 52, 53, 54, 55, 56, 
+    57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 64, 0, 0, 
+    65, 0, 66, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 70, 0, 71, 
+    72, 0, 73, 0, 74, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 77, 78, 0, 79, 0, 80, 
+    0, 0, 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, 90, 91, 0, 
+    92, 0, 0, 93, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 96, 0, 0, 97, 0, 98, 99, 0, 
+    100, 0, 101, 0, 0, 102, 0, 103, 104, 0, 105, 0, 106, 0, 0, 107, 0, 108, 
+    0, 0, 0, 109, 0, 110, 0, 0, 111, 0, 112, 113, 0, 114, 0, 0, 0, 0, 0, 115, 
+    116, 117, 118, 119, 120, 121, 0, 122, 123, 0, 124, 125, 0, 0, 0, 126, 0, 
+    0, 127, 0, 0, 128, 129, 0, 130, 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 
+    134, 135, 136, 137, 0, 0, 0, 138, 0, 0, 139, 140, 0, 141, 0, 142, 0, 0, 
+    143, 0, 0, 0, 0, 144, 0, 145, 146, 147, 148, 149, 150, 151, 0, 152, 153, 
+    0, 154, 0, 0, 155, 0, 0, 0, 0, 156, 157, 0, 0, 0, 0, 0, 158, 159, 0, 160, 
+    0, 161, 162, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 166, 167, 0, 168, 0, 
+    169, 170, 171, 172, 173, 174, 175, 0, 176, 0, 177, 178, 179, 0, 0, 0, 0, 
+    0, 180, 0, 0, 0, 181, 182, 183, 184, 0, 185, 186, 0, 0, 0, 0, 0, 187, 0, 
+    188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, 
+    199, 200, 0, 201, 0, 0, 202, 203, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 
+    0, 206, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 210, 0, 211, 0, 0, 0, 
+    0, 212, 0, 0, 213, 0, 214, 215, 0, 216, 0, 217, 0, 0, 218, 219, 0, 0, 0, 
+    0, 0, 0, 220, 221, 0, 222, 0, 223, 0, 0, 224, 0, 225, 226, 0, 227, 0, 0, 
+    0, 0, 0, 228, 229, 230, 231, 232, 233, 234, 0, 235, 0, 0, 236, 0, 0, 0, 
+    237, 0, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 241, 242, 0, 243, 0, 244, 0, 
+    0, 245, 0, 0, 0, 0, 0, 246, 247, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 
+    0, 252, 0, 253, 0, 0, 254, 0, 255, 256, 0, 257, 0, 258, 259, 260, 261, 
+    262, 263, 264, 0, 265, 266, 0, 267, 268, 0, 0, 0, 269, 0, 0, 270, 0, 0, 
+    0, 0, 0, 0, 271, 272, 0, 273, 274, 0, 0, 0, 275, 0, 276, 0, 0, 0, 277, 
+    278, 279, 280, 281, 0, 0, 0, 282, 0, 0, 283, 284, 0, 285, 0, 286, 0, 0, 
+    287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 292, 
+    0, 0, 293, 0, 0, 0, 0, 294, 295, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 
+    0, 298, 0, 0, 299, 300, 0, 0, 301, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 304, 
+    0, 0, 305, 0, 0, 306, 0, 307, 308, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 
+    0, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 314, 315, 0, 0, 316, 0, 0, 
+    0, 0, 317, 318, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 0, 321, 0, 0, 
+    322, 323, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 327, 0, 0, 328, 0, 
+    0, 329, 0, 330, 331, 0, 0, 0, 0, 0, 332, 333, 0, 0, 0, 0, 0, 0, 334, 0, 
+    335, 0, 0, 336, 0, 0, 0, 0, 0, 337, 338, 0, 0, 339, 0, 0, 340, 341, 0, 0, 
+    342, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 
+    0, 347, 0, 0, 348, 0, 0, 349, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 
+    352, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 356, 357, 0, 0, 
+    358, 0, 0, 0, 359, 0, 0, 360, 361, 0, 0, 362, 0, 0, 0, 363, 0, 0, 364, 
+    365, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 369, 0, 0, 370, 0, 0, 0, 371, 0, 
+    0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 376, 0, 
+    0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 0, 0, 0, 381, 
+    0, 382, 0, 383, 384, 0, 0, 0, 0, 0, 0, 385, 386, 0, 0, 0, 0, 0, 0, 387, 
+    0, 0, 0, 388, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 391, 0, 392, 393, 0, 0, 
+    0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 
+    399, 400, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 0, 0, 
+    0, 0, 405, 0, 0, 406, 0, 0, 0, 0, 407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 
+    410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 
+    0, 415, 416, 0, 417, 418, 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 421, 0, 0, 
+    422, 0, 0, 423, 0, 0, 0, 424, 0, 425, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 
+    0, 428, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, 0, 433, 
+    0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 436, 437, 0, 0, 438, 0, 0, 
+    439, 0, 440, 441, 0, 0, 0, 442, 0, 0, 443, 0, 444, 445, 0, 446, 447, 0, 
+    0, 448, 0, 0, 0, 449, 0, 450, 451, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 
+    454, 455, 0, 456, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 459, 0, 460, 461, 0, 
+    0, 0, 462, 0, 0, 463, 0, 464, 465, 0, 466, 467, 0, 0, 468, 0, 0, 0, 469, 
+    0, 470, 471, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, 0, 474, 475, 0, 476, 477, 
+    0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 
+    482, 0, 0, 0, 483, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 
+    487, 488, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 493, 
+    0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 497, 0, 0, 0, 
+    498, 499, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 502, 0, 503, 0, 0, 0, 504, 0, 
+    0, 0, 505, 0, 0, 506, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 509, 510, 0, 0, 
+    0, 0, 0, 511, 0, 0, 0, 512, 513, 0, 514, 0, 0, 0, 0, 515, 0, 0, 516, 0, 
+    0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 519, 0, 0, 520, 0, 0, 521, 0, 0, 0, 
+    0, 0, 0, 522, 0, 0, 523, 0, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 
+    0, 0, 527, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, 
+    0, 532, 533, 534, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 537, 0, 0, 538, 
+    0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 542, 543, 0, 0, 
+    0, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 548, 0, 
+    0, 549, 0, 0, 550, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 553, 0, 0, 0, 0, 
+    0, 554, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 
+    559, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, 0, 0, 
+    564, 0, 0, 565, 0, 0, 0, 0, 0, 566, 567, 0, 0, 0, 0, 0, 568, 0, 0, 569, 
+    0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 0, 
+    0, 0, 575, 0, 0, 0, 0, 0, 576, 577, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 
+    580, 0, 0, 0, 0, 0, 0, 581, 0, 0, 582, 0, 0, 583, 0, 0, 584, 0, 0, 0, 0, 
+    585, 0, 0, 0, 0, 0, 586, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 589, 0, 
+    590, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 
+    0, 595, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 0, 598, 599, 0, 0, 0, 0, 0, 
+    600, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 605, 
+    0, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 608, 0, 0, 609, 0, 0, 0, 0, 0, 0, 
+    610, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 613, 0, 614, 0, 0, 0, 0, 615, 0, 
+    0, 0, 0, 0, 616, 0, 0, 617, 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 0, 620, 
+    0, 0, 621, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 
+    626, 0, 0, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 0, 0, 
+    0, 631, 0, 632, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 635, 0, 0, 636, 0, 
+    0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, 0, 
+    641, 0, 0, 642, 0, 0, 643, 0, 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, 
+    0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 0, 651, 0, 0, 
+    652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 
+    0, 0, 657, 0, 0, 658, 0, 0, 659, 0, 0, 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, 
+    662, 0, 0, 663, 0, 0, 664, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 667, 
+    0, 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 0, 672, 0, 0, 
+    0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 0, 676, 0, 0, 677, 0, 0, 0, 
+    0, 0, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 681, 0, 0, 0, 0, 0, 0, 682, 0, 
+    0, 683, 0, 0, 684, 0, 0, 685, 0, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 
+    688, 0, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 0, 692, 0, 0, 693, 
+    0, 0, 0, 0, 0, 0, 694, 0, 0, 695, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 0, 
+    698, 0, 0, 699, 0, 0, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 
+    0, 0, 704, 0, 0, 705, 0, 0, 0, 0, 0, 0, 706, 0, 0, 707, 0, 0, 708, 0, 0, 
+    709, 0, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 
+    0, 0, 714, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 0, 0, 0, 0, 0, 718, 0, 0, 
+    719, 0, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 723, 0, 0, 
+    724, 0, 0, 725, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 728, 729, 0, 0, 730, 0, 
+    0, 0, 0, 0, 0, 731, 
 };
 
 static const unsigned int comp_data[] = {
 };
 
 static const unsigned int comp_data[] = {
@@ -4749,6 +5012,6 @@ static const unsigned int comp_data[] = {
     12480, 0, 12482, 0, 12485, 0, 12487, 0, 12489, 0, 12496, 12497, 12499, 
     12500, 12502, 12503, 12505, 12506, 12508, 12509, 12535, 0, 12536, 0, 
     12537, 0, 12538, 0, 12542, 0, 69786, 0, 69788, 0, 69803, 0, 0, 69934, 0, 
     12480, 0, 12482, 0, 12485, 0, 12487, 0, 12489, 0, 12496, 12497, 12499, 
     12500, 12502, 12503, 12505, 12506, 12508, 12509, 12535, 0, 12536, 0, 
     12537, 0, 12538, 0, 12542, 0, 69786, 0, 69788, 0, 69803, 0, 0, 69934, 0, 
-    69935, 
+    69935, 70475, 70476, 70844, 70843, 70846, 0, 0, 71098, 0, 71099, 
 };
 
 };
 
index 7be4b04..a2c59da 100644 (file)
@@ -32,8 +32,6 @@
 #define HB_UNICODE_PRIVATE_HH
 
 #include "hb-private.hh"
 #define HB_UNICODE_PRIVATE_HH
 
 #include "hb-private.hh"
-
-#include "hb-unicode.h"
 #include "hb-object-private.hh"
 
 
 #include "hb-object-private.hh"
 
 
@@ -104,57 +102,70 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
   }
 
 
   }
 
 
-  unsigned int
+  inline unsigned int
   modified_combining_class (hb_codepoint_t unicode)
   {
   modified_combining_class (hb_codepoint_t unicode)
   {
+    /* XXX This hack belongs to the Myanmar shaper. */
+    if (unlikely (unicode == 0x1037u)) unicode = 0x103Au;
+
+    /* XXX This hack belongs to the SEA shaper (for Tai Tham):
+     * Reorder SAKOT to ensure it comes after any tone marks. */
+    if (unlikely (unicode == 0x1A60u)) return 254;
+
+    /* XXX This hack belongs to the Tibetan shaper:
+     * Reorder PADMA to ensure it comes after any vowel marks. */
+    if (unlikely (unicode == 0x0FC6u)) return 254;
+
     return _hb_modified_combining_class[combining_class (unicode)];
   }
 
     return _hb_modified_combining_class[combining_class (unicode)];
   }
 
-  inline hb_bool_t
+  static inline hb_bool_t
   is_variation_selector (hb_codepoint_t unicode)
   {
   is_variation_selector (hb_codepoint_t unicode)
   {
-    return unlikely (hb_in_ranges<hb_codepoint_t> (unicode,
-                                                  0x180B, 0x180D, /* MONGOLIAN FREE VARIATION SELECTOR ONE..THREE */
-                                                  0xFE00, 0xFE0F, /* VARIATION SELECTOR-1..16 */
-                                                  0xE0100, 0xE01EF));  /* VARIATION SELECTOR-17..256 */
+    /* U+180B..180D MONGOLIAN FREE VARIATION SELECTORs are handled in the
+     * Arabic shaper.  No need to match them here. */
+    return unlikely (hb_in_ranges (unicode,
+                                  0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
+                                  0xE0100u, 0xE01EFu));  /* VARIATION SELECTOR-17..256 */
   }
 
   /* Default_Ignorable codepoints:
    *
   }
 
   /* Default_Ignorable codepoints:
    *
-   * Note that as of Oct 2012 (Unicode 6.2), U+180E MONGOLIAN VOWEL SEPARATOR
-   * is NOT Default_Ignorable, but it really behaves in a way that it should
-   * be.  That has been reported to the Unicode Technical Committee for
-   * consideration.  As such, we include it here, since Uniscribe removes it.
-   *
-   * Gathered from:
-   * http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:DI:]&abb=on&ucd=on&esc=on
-   *
-   * Last updated to the page with the following versions:
-   * Version 3.6; ICU version: 50.0.1.0; Unicode version: 6.1.0.0
-   *
-   * 4,167 Code Points
-   *
-   * [\u00AD\u034F\u115F\u1160\u17B4\u17B5\u180B-\u180D\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8\U0001D173-\U0001D17A\U000E0000-\U000E0FFF]
+   * Note: While U+115F, U+1160, U+3164 and U+FFA0 are Default_Ignorable,
+   * we do NOT want to hide them, as the way Uniscribe has implemented them
+   * is with regular spacing glyphs, and that's the way fonts are made to work.
+   * As such, we make exceptions for those four.
    *
    *
-   * 00AD ;SOFT HYPHEN
-   * 034F ;COMBINING GRAPHEME JOINER
-   * 115F ;HANGUL CHOSEONG FILLER
-   * 1160 ;HANGUL JUNGSEONG FILLER
-   * 17B4 ;KHMER VOWEL INHERENT AQ
-   * 17B5 ;KHMER VOWEL INHERENT AA
-   * 180B..180D ;MONGOLIAN FREE VARIATION SELECTOR THREE
-   * 200B..200F ;RIGHT-TO-LEFT MARK
-   * 202A..202E ;RIGHT-TO-LEFT OVERRIDE
-   * 2060..206F ;NOMINAL DIGIT SHAPES
-   * 3164 ;HANGUL FILLER
-   * FE00..FE0F ;VARIATION SELECTOR-16
-   * FEFF ;ZERO WIDTH NO-BREAK SPACE
-   * FFA0 ;HALFWIDTH HANGUL FILLER
-   * FFF0..FFF8 ;<unassigned-FFF8>
-   * 1D173..1D17A ;MUSICAL SYMBOL END PHRASE
-   * E0000..E0FFF ;<unassigned-E0FFF>
+   * Unicode 7.0:
+   * $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
+   * 00AD          # Cf       SOFT HYPHEN
+   * 034F          # Mn       COMBINING GRAPHEME JOINER
+   * 061C          # Cf       ARABIC LETTER MARK
+   * 115F..1160    # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+   * 17B4..17B5    # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+   * 180B..180D    # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+   * 180E          # Cf       MONGOLIAN VOWEL SEPARATOR
+   * 200B..200F    # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+   * 202A..202E    # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+   * 2060..2064    # Cf   [5] WORD JOINER..INVISIBLE PLUS
+   * 2065          # Cn       <reserved-2065>
+   * 2066..206F    # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+   * 3164          # Lo       HANGUL FILLER
+   * FE00..FE0F    # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+   * FEFF          # Cf       ZERO WIDTH NO-BREAK SPACE
+   * FFA0          # Lo       HALFWIDTH HANGUL FILLER
+   * FFF0..FFF8    # Cn   [9] <reserved-FFF0>..<reserved-FFF8>
+   * 1BCA0..1BCA3  # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+   * 1D173..1D17A  # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+   * E0000         # Cn       <reserved-E0000>
+   * E0001         # Cf       LANGUAGE TAG
+   * E0002..E001F  # Cn  [30] <reserved-E0002>..<reserved-E001F>
+   * E0020..E007F  # Cf  [96] TAG SPACE..CANCEL TAG
+   * E0080..E00FF  # Cn [128] <reserved-E0080>..<reserved-E00FF>
+   * E0100..E01EF  # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+   * E01F0..E0FFF  # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
    */
    */
-  inline hb_bool_t
+  static inline hb_bool_t
   is_default_ignorable (hb_codepoint_t ch)
   {
     hb_codepoint_t plane = ch >> 16;
   is_default_ignorable (hb_codepoint_t ch)
   {
     hb_codepoint_t plane = ch >> 16;
@@ -163,17 +174,16 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
       /* BMP */
       hb_codepoint_t page = ch >> 8;
       switch (page) {
       /* BMP */
       hb_codepoint_t page = ch >> 8;
       switch (page) {
-       case 0x00: return unlikely (ch == 0x00AD);
-       case 0x03: return unlikely (ch == 0x034F);
-       case 0x11: return hb_in_range<hb_codepoint_t> (ch, 0x115F, 0x1160);
-       case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4, 0x17B5);
-       case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180B, 0x180E);
-       case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F,
-                                                           0x202A, 0x202E,
-                                                           0x2060, 0x206F);
-       case 0x31: return unlikely (ch == 0x3164);
-       case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00, 0xFE0F) || ch == 0xFEFF;
-       case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0, 0xFFF8) || ch == 0xFFA0;
+       case 0x00: return unlikely (ch == 0x00ADu);
+       case 0x03: return unlikely (ch == 0x034Fu);
+       case 0x06: return unlikely (ch == 0x061Cu);
+       case 0x17: return hb_in_range (ch, 0x17B4u, 0x17B5u);
+       case 0x18: return hb_in_range (ch, 0x180Bu, 0x180Eu);
+       case 0x20: return hb_in_ranges (ch, 0x200Bu, 0x200Fu,
+                                                           0x202Au, 0x202Eu,
+                                                           0x2060u, 0x206Fu);
+       case 0xFE: return hb_in_range (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
+       case 0xFF: return hb_in_range (ch, 0xFFF0u, 0xFFF8u);
        default: return false;
       }
     }
        default: return false;
       }
     }
@@ -181,8 +191,9 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
     {
       /* Other planes */
       switch (plane) {
     {
       /* Other planes */
       switch (plane) {
-       case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x0001D173, 0x0001D17A);
-       case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0x000E0000, 0x000E0FFF);
+       case 0x01: return hb_in_ranges (ch, 0x1BCA0u, 0x1BCA3u,
+                                           0x1D173u, 0x1D17Au);
+       case 0x0E: return hb_in_range (ch, 0xE0000u, 0xE0FFFu);
        default: return false;
       }
     }
        default: return false;
       }
     }
index 0a3907e..d59dfb2 100644 (file)
@@ -133,7 +133,7 @@ hb_unicode_funcs_get_default (void)
 
 #ifdef HAVE_GLIB
   HB_UNICODE_FUNCS_IMPLEMENT(glib)
 
 #ifdef HAVE_GLIB
   HB_UNICODE_FUNCS_IMPLEMENT(glib)
-#elif defined(HAVE_ICU)
+#elif defined(HAVE_ICU) && defined(HAVE_ICU_BUILTIN)
   HB_UNICODE_FUNCS_IMPLEMENT(icu)
 #elif defined(HAVE_UCDN)
   HB_UNICODE_FUNCS_IMPLEMENT(ucdn)
   HB_UNICODE_FUNCS_IMPLEMENT(icu)
 #elif defined(HAVE_UCDN)
   HB_UNICODE_FUNCS_IMPLEMENT(ucdn)
@@ -146,10 +146,25 @@ hb_unicode_funcs_get_default (void)
 }
 
 #if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
 }
 
 #if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
-#pragma message("Could not find any Unicode functions implementation, you have to provide your own.")
-#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS.")
+#ifdef _MSC_VER
+#pragma message("Could not find any Unicode functions implementation, you have to provide your own")
+#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS")
+#else
+#warning "Could not find any Unicode functions implementation, you have to provide your own"
+#warning "To suppress this warning, define HB_NO_UNICODE_FUNCS"
+#endif
 #endif
 
 #endif
 
+/**
+ * hb_unicode_funcs_create: (Xconstructor)
+ * @parent: (allow-none):
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
 {
 hb_unicode_funcs_t *
 hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
 {
@@ -187,18 +202,45 @@ const hb_unicode_funcs_t _hb_unicode_funcs_nil = {
   }
 };
 
   }
 };
 
+/**
+ * hb_unicode_funcs_get_empty:
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_empty (void)
 {
   return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil);
 }
 
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_empty (void)
 {
   return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil);
 }
 
+/**
+ * hb_unicode_funcs_reference: (skip)
+ * @ufuncs: Unicode functions.
+ *
+ * 
+ *
+ * Return value: (transfer full):
+ *
+ * Since: 1.0
+ **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
 {
   return hb_object_reference (ufuncs);
 }
 
 hb_unicode_funcs_t *
 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
 {
   return hb_object_reference (ufuncs);
 }
 
+/**
+ * hb_unicode_funcs_destroy: (skip)
+ * @ufuncs: Unicode functions.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
 {
 void
 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
 {
@@ -214,6 +256,20 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
   free (ufuncs);
 }
 
   free (ufuncs);
 }
 
+/**
+ * hb_unicode_funcs_set_user_data: (skip)
+ * @ufuncs: Unicode functions.
+ * @key: 
+ * @data: 
+ * @destroy: 
+ * @replace: 
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key,
 hb_bool_t
 hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key,
@@ -224,6 +280,17 @@ hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
   return hb_object_set_user_data (ufuncs, key, data, destroy, replace);
 }
 
   return hb_object_set_user_data (ufuncs, key, data, destroy, replace);
 }
 
+/**
+ * hb_unicode_funcs_get_user_data: (skip)
+ * @ufuncs: Unicode functions.
+ * @key: 
+ *
+ * 
+ *
+ * Return value: (transfer none):
+ *
+ * Since: 1.0
+ **/
 void *
 hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key)
 void *
 hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key)
@@ -232,21 +299,49 @@ hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
 }
 
 
 }
 
 
+/**
+ * hb_unicode_funcs_make_immutable:
+ * @ufuncs: Unicode functions.
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
 {
 void
 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
 {
-  if (hb_object_is_inert (ufuncs))
+  if (unlikely (hb_object_is_inert (ufuncs)))
     return;
 
   ufuncs->immutable = true;
 }
 
     return;
 
   ufuncs->immutable = true;
 }
 
+/**
+ * hb_unicode_funcs_is_immutable:
+ * @ufuncs: Unicode functions.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
 {
   return ufuncs->immutable;
 }
 
 hb_bool_t
 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
 {
   return ufuncs->immutable;
 }
 
+/**
+ * hb_unicode_funcs_get_parent:
+ * @ufuncs: Unicode functions.
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs)
 {
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs)
 {
@@ -294,6 +389,19 @@ hb_unicode_##name (hb_unicode_funcs_t *ufuncs,                                     \
 HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
 #undef HB_UNICODE_FUNC_IMPLEMENT
 
 HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
 #undef HB_UNICODE_FUNC_IMPLEMENT
 
+/**
+ * hb_unicode_compose:
+ * @ufuncs: Unicode functions.
+ * @a: 
+ * @b: 
+ * @ab: (out):
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
                    hb_codepoint_t      a,
 hb_bool_t
 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
                    hb_codepoint_t      a,
@@ -303,6 +411,19 @@ hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
   return ufuncs->compose (a, b, ab);
 }
 
   return ufuncs->compose (a, b, ab);
 }
 
+/**
+ * hb_unicode_decompose:
+ * @ufuncs: Unicode functions.
+ * @ab: 
+ * @a: (out):
+ * @b: (out):
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 hb_bool_t
 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
                      hb_codepoint_t      ab,
 hb_bool_t
 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
                      hb_codepoint_t      ab,
@@ -312,6 +433,18 @@ hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
   return ufuncs->decompose (ab, a, b);
 }
 
   return ufuncs->decompose (ab, a, b);
 }
 
+/**
+ * hb_unicode_decompose_compatibility:
+ * @ufuncs: Unicode functions.
+ * @u: 
+ * @decomposed: (out):
+ *
+ * 
+ *
+ * Return value: 
+ *
+ * Since: 1.0
+ **/
 unsigned int
 hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
                                    hb_codepoint_t      u,
 unsigned int
 hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
                                    hb_codepoint_t      u,
index 2e10d98..1c4e097 100644 (file)
@@ -248,7 +248,7 @@ typedef hb_bool_t                   (*hb_unicode_decompose_func_t)          (hb_unicode_funcs_t *ufuncs,
 
 /**
  * hb_unicode_decompose_compatibility_func_t:
 
 /**
  * hb_unicode_decompose_compatibility_func_t:
- * @ufuncs: Unicode function structure
+ * @ufuncs: Unicode function structure
  * @u: codepoint to decompose
  * @decomposed: address of codepoint array (of length %HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into
  * @user_data: user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()
  * @u: codepoint to decompose
  * @decomposed: address of codepoint array (of length %HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into
  * @user_data: user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()
@@ -274,44 +274,132 @@ typedef unsigned int                     (*hb_unicode_decompose_compatibility_func_t)    (hb_unicode_
 
 /* setters */
 
 
 /* setters */
 
+/**
+ * hb_unicode_funcs_set_combining_class_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
-                                          hb_unicode_combining_class_func_t combining_class_func,
+                                          hb_unicode_combining_class_func_t func,
                                           void *user_data, hb_destroy_func_t destroy);
 
                                           void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_eastasian_width_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
-                                          hb_unicode_eastasian_width_func_t eastasian_width_func,
+                                          hb_unicode_eastasian_width_func_t func,
                                           void *user_data, hb_destroy_func_t destroy);
 
                                           void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_general_category_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
-                                           hb_unicode_general_category_func_t general_category_func,
+                                           hb_unicode_general_category_func_t func,
                                            void *user_data, hb_destroy_func_t destroy);
 
                                            void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_mirroring_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
-                                    hb_unicode_mirroring_func_t mirroring_func,
+                                    hb_unicode_mirroring_func_t func,
                                     void *user_data, hb_destroy_func_t destroy);
 
                                     void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_script_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
-                                 hb_unicode_script_func_t script_func,
+                                 hb_unicode_script_func_t func,
                                  void *user_data, hb_destroy_func_t destroy);
 
                                  void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_compose_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
-                                  hb_unicode_compose_func_t compose_func,
+                                  hb_unicode_compose_func_t func,
                                   void *user_data, hb_destroy_func_t destroy);
 
                                   void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_decompose_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
-                                    hb_unicode_decompose_func_t decompose_func,
+                                    hb_unicode_decompose_func_t func,
                                     void *user_data, hb_destroy_func_t destroy);
 
                                     void *user_data, hb_destroy_func_t destroy);
 
+/**
+ * hb_unicode_funcs_set_decompose_compatibility_func:
+ * @ufuncs: a Unicode function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified):
+ * @user_data:
+ * @destroy:
+ *
+ * 
+ *
+ * Since: 1.0
+ **/
 void
 hb_unicode_funcs_set_decompose_compatibility_func (hb_unicode_funcs_t *ufuncs,
 void
 hb_unicode_funcs_set_decompose_compatibility_func (hb_unicode_funcs_t *ufuncs,
-                                                  hb_unicode_decompose_compatibility_func_t decompose_compatibility_func,
+                                                  hb_unicode_decompose_compatibility_func_t func,
                                                   void *user_data, hb_destroy_func_t destroy);
 
 /* accessors */
                                                   void *user_data, hb_destroy_func_t destroy);
 
 /* accessors */
index 2f01c28..74ae3a3 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2011,2012  Google, Inc.
+ * Copyright © 2011,2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  * Google Author(s): Behdad Esfahbod
  */
 
  * Google Author(s): Behdad Esfahbod
  */
 
-#define _WIN32_WINNT 0x0600
-#define WIN32_LEAN_AND_MEAN
-
 #define HB_SHAPER uniscribe
 #include "hb-shaper-impl-private.hh"
 
 #include <windows.h>
 #include <usp10.h>
 #define HB_SHAPER uniscribe
 #include "hb-shaper-impl-private.hh"
 
 #include <windows.h>
 #include <usp10.h>
+#include <rpc.h>
 
 #include "hb-uniscribe.h"
 
 
 #include "hb-uniscribe.h"
 
+#include "hb-open-file-private.hh"
 #include "hb-ot-name-table.hh"
 #include "hb-ot-tag.h"
 
 #include "hb-ot-name-table.hh"
 #include "hb-ot-tag.h"
 
 #endif
 
 
 #endif
 
 
-/*
-DWORD GetFontData(
-  __in   HDC hdc,
-  __in   DWORD dwTable,
-  __in   DWORD dwOffset,
-  __out  LPVOID lpvBuffer,
-  __in   DWORD cbData
+typedef HRESULT (WINAPI *SIOT) /*ScriptItemizeOpenType*/(
+  const WCHAR *pwcInChars,
+  int cInChars,
+  int cMaxItems,
+  const SCRIPT_CONTROL *psControl,
+  const SCRIPT_STATE *psState,
+  SCRIPT_ITEM *pItems,
+  OPENTYPE_TAG *pScriptTags,
+  int *pcItems
+);
+
+typedef HRESULT (WINAPI *SSOT) /*ScriptShapeOpenType*/(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  int cChars,
+  int cMaxGlyphs,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  WORD *pwOutGlyphs,
+  SCRIPT_GLYPHPROP *pOutGlyphProps,
+  int *pcGlyphs
+);
+
+typedef HRESULT (WINAPI *SPOT) /*ScriptPlaceOpenType*/(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  int cChars,
+  const WORD *pwGlyphs,
+  const SCRIPT_GLYPHPROP *pGlyphProps,
+  int cGlyphs,
+  int *piAdvance,
+  GOFFSET *pGoffset,
+  ABC *pABC
 );
 );
-*/
 
 
 
 
+/* Fallback implementations. */
+
+static HRESULT WINAPI
+hb_ScriptItemizeOpenType(
+  const WCHAR *pwcInChars,
+  int cInChars,
+  int cMaxItems,
+  const SCRIPT_CONTROL *psControl,
+  const SCRIPT_STATE *psState,
+  SCRIPT_ITEM *pItems,
+  OPENTYPE_TAG *pScriptTags,
+  int *pcItems
+)
+{
+{
+  return ScriptItemize (pwcInChars,
+                       cInChars,
+                       cMaxItems,
+                       psControl,
+                       psState,
+                       pItems,
+                       pcItems);
+}
+}
+
+static HRESULT WINAPI
+hb_ScriptShapeOpenType(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  int cChars,
+  int cMaxGlyphs,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  WORD *pwOutGlyphs,
+  SCRIPT_GLYPHPROP *pOutGlyphProps,
+  int *pcGlyphs
+)
+{
+  SCRIPT_VISATTR *psva = (SCRIPT_VISATTR *) pOutGlyphProps;
+  return ScriptShape (hdc,
+                     psc,
+                     pwcChars,
+                     cChars,
+                     cMaxGlyphs,
+                     psa,
+                     pwOutGlyphs,
+                     pwLogClust,
+                     psva,
+                     pcGlyphs);
+}
+
+static HRESULT WINAPI
+hb_ScriptPlaceOpenType(
+  HDC hdc,
+  SCRIPT_CACHE *psc,
+  SCRIPT_ANALYSIS *psa,
+  OPENTYPE_TAG tagScript,
+  OPENTYPE_TAG tagLangSys,
+  int *rcRangeChars,
+  TEXTRANGE_PROPERTIES **rpRangeProperties,
+  int cRanges,
+  const WCHAR *pwcChars,
+  WORD *pwLogClust,
+  SCRIPT_CHARPROP *pCharProps,
+  int cChars,
+  const WORD *pwGlyphs,
+  const SCRIPT_GLYPHPROP *pGlyphProps,
+  int cGlyphs,
+  int *piAdvance,
+  GOFFSET *pGoffset,
+  ABC *pABC
+)
+{
+  SCRIPT_VISATTR *psva = (SCRIPT_VISATTR *) pGlyphProps;
+  return ScriptPlace (hdc,
+                     psc,
+                     pwGlyphs,
+                     cGlyphs,
+                     psva,
+                     psa,
+                     piAdvance,
+                     pGoffset,
+                     pABC);
+}
+
+
+struct hb_uniscribe_shaper_funcs_t {
+  SIOT ScriptItemizeOpenType;
+  SSOT ScriptShapeOpenType;
+  SPOT ScriptPlaceOpenType;
+
+  inline void init (void)
+  {
+    HMODULE hinstLib;
+    this->ScriptItemizeOpenType = NULL;
+    this->ScriptShapeOpenType   = NULL;
+    this->ScriptPlaceOpenType   = NULL;
+
+    hinstLib = GetModuleHandle (TEXT ("usp10.dll"));
+    if (hinstLib)
+    {
+      this->ScriptItemizeOpenType = (SIOT) GetProcAddress (hinstLib, "ScriptItemizeOpenType");
+      this->ScriptShapeOpenType   = (SSOT) GetProcAddress (hinstLib, "ScriptShapeOpenType");
+      this->ScriptPlaceOpenType   = (SPOT) GetProcAddress (hinstLib, "ScriptPlaceOpenType");
+    }
+    if (!this->ScriptItemizeOpenType ||
+       !this->ScriptShapeOpenType   ||
+       !this->ScriptPlaceOpenType)
+    {
+      DEBUG_MSG (UNISCRIBE, NULL, "OpenType versions of functions not found; falling back.");
+      this->ScriptItemizeOpenType = hb_ScriptItemizeOpenType;
+      this->ScriptShapeOpenType   = hb_ScriptShapeOpenType;
+      this->ScriptPlaceOpenType   = hb_ScriptPlaceOpenType;
+    }
+  }
+};
+static hb_uniscribe_shaper_funcs_t *uniscribe_funcs;
+
+static inline void
+free_uniscribe_funcs (void)
+{
+  free (uniscribe_funcs);
+}
+
+static hb_uniscribe_shaper_funcs_t *
+hb_uniscribe_shaper_get_funcs (void)
+{
+retry:
+  hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) hb_atomic_ptr_get (&uniscribe_funcs);
+
+  if (unlikely (!funcs))
+  {
+    funcs = (hb_uniscribe_shaper_funcs_t *) calloc (1, sizeof (hb_uniscribe_shaper_funcs_t));
+    if (unlikely (!funcs))
+      return NULL;
+
+    funcs->init ();
+
+    if (!hb_atomic_ptr_cmpexch (&uniscribe_funcs, NULL, funcs)) {
+      free (funcs);
+      goto retry;
+    }
+
+#ifdef HB_USE_ATEXIT
+    atexit (free_uniscribe_funcs); /* First person registers atexit() callback. */
+#endif
+  }
+
+  return funcs;
+}
+
+
+struct active_feature_t {
+  OPENTYPE_FEATURE_RECORD rec;
+  unsigned int order;
+
+  static int cmp (const active_feature_t *a, const active_feature_t *b) {
+    return a->rec.tagFeature < b->rec.tagFeature ? -1 : a->rec.tagFeature > b->rec.tagFeature ? 1 :
+          a->order < b->order ? -1 : a->order > b->order ? 1 :
+          a->rec.lParameter < b->rec.lParameter ? -1 : a->rec.lParameter > b->rec.lParameter ? 1 :
+          0;
+  }
+  bool operator== (const active_feature_t *f) {
+    return cmp (this, f) == 0;
+  }
+};
+
+struct feature_event_t {
+  unsigned int index;
+  bool start;
+  active_feature_t feature;
+
+  static int cmp (const feature_event_t *a, const feature_event_t *b) {
+    return a->index < b->index ? -1 : a->index > b->index ? 1 :
+          a->start < b->start ? -1 : a->start > b->start ? 1 :
+          active_feature_t::cmp (&a->feature, &b->feature);
+  }
+};
+
+struct range_record_t {
+  TEXTRANGE_PROPERTIES props;
+  unsigned int index_first; /* == start */
+  unsigned int index_last;  /* == end - 1 */
+};
+
 HB_SHAPER_DATA_ENSURE_DECLARE(uniscribe, face)
 HB_SHAPER_DATA_ENSURE_DECLARE(uniscribe, font)
 
 HB_SHAPER_DATA_ENSURE_DECLARE(uniscribe, face)
 HB_SHAPER_DATA_ENSURE_DECLARE(uniscribe, font)
 
@@ -65,8 +297,133 @@ HB_SHAPER_DATA_ENSURE_DECLARE(uniscribe, font)
 
 struct hb_uniscribe_shaper_face_data_t {
   HANDLE fh;
 
 struct hb_uniscribe_shaper_face_data_t {
   HANDLE fh;
+  hb_uniscribe_shaper_funcs_t *funcs;
+  wchar_t face_name[LF_FACESIZE];
 };
 
 };
 
+/* face_name should point to a wchar_t[LF_FACESIZE] object. */
+static void
+_hb_generate_unique_face_name (wchar_t *face_name, unsigned int *plen)
+{
+  /* We'll create a private name for the font from a UUID using a simple,
+   * somewhat base64-like encoding scheme */
+  const char *enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-";
+  UUID id;
+  UuidCreate ((UUID*) &id);
+  ASSERT_STATIC (2 + 3 * (16/2) < LF_FACESIZE);
+  unsigned int name_str_len = 0;
+  face_name[name_str_len++] = 'F';
+  face_name[name_str_len++] = '_';
+  unsigned char *p = (unsigned char *) &id;
+  for (unsigned int i = 0; i < 16; i += 2)
+  {
+    /* Spread the 16 bits from two bytes of the UUID across three chars of face_name,
+     * using the bits in groups of 5,5,6 to select chars from enc.
+     * This will generate 24 characters; with the 'F_' prefix we already provided,
+     * the name will be 26 chars (plus the NUL terminator), so will always fit within
+     * face_name (LF_FACESIZE = 32). */
+    face_name[name_str_len++] = enc[p[i] >> 3];
+    face_name[name_str_len++] = enc[((p[i] << 2) | (p[i + 1] >> 6)) & 0x1f];
+    face_name[name_str_len++] = enc[p[i + 1] & 0x3f];
+  }
+  face_name[name_str_len] = 0;
+  if (plen)
+    *plen = name_str_len;
+}
+
+/* Destroys blob. */
+static hb_blob_t *
+_hb_rename_font (hb_blob_t *blob, wchar_t *new_name)
+{
+  /* Create a copy of the font data, with the 'name' table replaced by a
+   * table that names the font with our private F_* name created above.
+   * For simplicity, we just append a new 'name' table and update the
+   * sfnt directory; the original table is left in place, but unused.
+   *
+   * The new table will contain just 5 name IDs: family, style, unique,
+   * full, PS. All of them point to the same name data with our unique name.
+   */
+
+  blob = OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (blob);
+
+  unsigned int length, new_length, name_str_len;
+  const char *orig_sfnt_data = hb_blob_get_data (blob, &length);
+
+  _hb_generate_unique_face_name (new_name, &name_str_len);
+
+  static const uint16_t name_IDs[] = { 1, 2, 3, 4, 6 };
+
+  unsigned int name_table_length = OT::name::min_size +
+                                   ARRAY_LENGTH (name_IDs) * OT::NameRecord::static_size +
+                                   name_str_len * 2; /* for name data in UTF16BE form */
+  unsigned int name_table_offset = (length + 3) & ~3;
+
+  new_length = name_table_offset + ((name_table_length + 3) & ~3);
+  void *new_sfnt_data = calloc (1, new_length);
+  if (!new_sfnt_data)
+  {
+    hb_blob_destroy (blob);
+    return NULL;
+  }
+
+  memcpy(new_sfnt_data, orig_sfnt_data, length);
+
+  OT::name &name = OT::StructAtOffset<OT::name> (new_sfnt_data, name_table_offset);
+  name.format.set (0);
+  name.count.set (ARRAY_LENGTH (name_IDs));
+  name.stringOffset.set (name.get_size ());
+  for (unsigned int i = 0; i < ARRAY_LENGTH (name_IDs); i++)
+  {
+    OT::NameRecord &record = name.nameRecord[i];
+    record.platformID.set (3);
+    record.encodingID.set (1);
+    record.languageID.set (0x0409u); /* English */
+    record.nameID.set (name_IDs[i]);
+    record.length.set (name_str_len * 2);
+    record.offset.set (0);
+  }
+
+  /* Copy string data from new_name, converting wchar_t to UTF16BE. */
+  unsigned char *p = &OT::StructAfter<unsigned char> (name);
+  for (unsigned int i = 0; i < name_str_len; i++)
+  {
+    *p++ = new_name[i] >> 8;
+    *p++ = new_name[i] & 0xff;
+  }
+
+  /* Adjust name table entry to point to new name table */
+  const OT::OpenTypeFontFile &file = * (OT::OpenTypeFontFile *) (new_sfnt_data);
+  unsigned int face_count = file.get_face_count ();
+  for (unsigned int face_index = 0; face_index < face_count; face_index++)
+  {
+    /* Note: doing multiple edits (ie. TTC) can be unsafe.  There may be
+     * toe-stepping.  But we don't really care. */
+    const OT::OpenTypeFontFace &face = file.get_face (face_index);
+    unsigned int index;
+    if (face.find_table_index (HB_OT_TAG_name, &index))
+    {
+      OT::TableRecord &record = const_cast<OT::TableRecord &> (face.get_table (index));
+      record.checkSum.set_for_data (&name, name_table_length);
+      record.offset.set (name_table_offset);
+      record.length.set (name_table_length);
+    }
+    else if (face_index == 0) /* Fail if first face doesn't have 'name' table. */
+    {
+      free (new_sfnt_data);
+      hb_blob_destroy (blob);
+      return NULL;
+    }
+  }
+
+  /* The checkSumAdjustment field in the 'head' table is now wrong,
+   * but that doesn't actually seem to cause any problems so we don't
+   * bother. */
+
+  hb_blob_destroy (blob);
+  return hb_blob_create ((const char *) new_sfnt_data, new_length,
+                        HB_MEMORY_MODE_WRITABLE, NULL, free);
+}
+
 hb_uniscribe_shaper_face_data_t *
 _hb_uniscribe_shaper_face_data_create (hb_face_t *face)
 {
 hb_uniscribe_shaper_face_data_t *
 _hb_uniscribe_shaper_face_data_create (hb_face_t *face)
 {
@@ -74,16 +431,30 @@ _hb_uniscribe_shaper_face_data_create (hb_face_t *face)
   if (unlikely (!data))
     return NULL;
 
   if (unlikely (!data))
     return NULL;
 
+  data->funcs = hb_uniscribe_shaper_get_funcs ();
+  if (unlikely (!data->funcs))
+  {
+    free (data);
+    return NULL;
+  }
+
   hb_blob_t *blob = hb_face_reference_blob (face);
   hb_blob_t *blob = hb_face_reference_blob (face);
-  unsigned int blob_length;
-  const char *blob_data = hb_blob_get_data (blob, &blob_length);
-  if (unlikely (!blob_length))
+  if (unlikely (!hb_blob_get_length (blob)))
     DEBUG_MSG (UNISCRIBE, face, "Face has empty blob");
 
     DEBUG_MSG (UNISCRIBE, face, "Face has empty blob");
 
+  blob = _hb_rename_font (blob, data->face_name);
+  if (unlikely (!blob))
+  {
+    free (data);
+    return NULL;
+  }
+
   DWORD num_fonts_installed;
   DWORD num_fonts_installed;
-  data->fh = AddFontMemResourceEx ((void *) blob_data, blob_length, 0, &num_fonts_installed);
-  hb_blob_destroy (blob);
-  if (unlikely (!data->fh)) {
+  data->fh = AddFontMemResourceEx ((void *) hb_blob_get_data (blob, NULL),
+                                  hb_blob_get_length (blob),
+                                  0, &num_fonts_installed);
+  if (unlikely (!data->fh))
+  {
     DEBUG_MSG (UNISCRIBE, face, "Face AddFontMemResourceEx() failed");
     free (data);
     return NULL;
     DEBUG_MSG (UNISCRIBE, face, "Face AddFontMemResourceEx() failed");
     free (data);
     return NULL;
@@ -119,26 +490,10 @@ populate_log_font (LOGFONTW  *lf,
   lf->lfHeight = -font->y_scale;
   lf->lfCharSet = DEFAULT_CHARSET;
 
   lf->lfHeight = -font->y_scale;
   lf->lfCharSet = DEFAULT_CHARSET;
 
-  hb_blob_t *blob = OT::Sanitizer<OT::name>::sanitize (hb_face_reference_table (font->face, HB_TAG ('n','a','m','e')));
-  const OT::name *name_table = OT::Sanitizer<OT::name>::lock_instance (blob);
-  unsigned int len = name_table->get_name (3, 1, 0x409, 4,
-                                          lf->lfFaceName,
-                                          sizeof (lf->lfFaceName[0]) * LF_FACESIZE)
-                                         / sizeof (lf->lfFaceName[0]);
-  hb_blob_destroy (blob);
-
-  if (unlikely (!len)) {
-    DEBUG_MSG (UNISCRIBE, NULL, "Didn't find English name table entry");
-    return false;
-  }
-  if (unlikely (len >= LF_FACESIZE)) {
-    DEBUG_MSG (UNISCRIBE, NULL, "Font name too long");
-    return false;
-  }
+  hb_face_t *face = font->face;
+  hb_uniscribe_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
 
 
-  for (unsigned int i = 0; i < len; i++)
-    lf->lfFaceName[i] = hb_be_uint16 (lf->lfFaceName[i]);
-  lf->lfFaceName[len] = 0;
+  memcpy (lf->lfFaceName, face_data->face_name, sizeof (lf->lfFaceName));
 
   return true;
 }
 
   return true;
 }
@@ -240,6 +595,126 @@ _hb_uniscribe_shape (hb_shape_plan_t    *shape_plan,
   hb_face_t *face = font->face;
   hb_uniscribe_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
   hb_uniscribe_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
   hb_face_t *face = font->face;
   hb_uniscribe_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
   hb_uniscribe_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
+  hb_uniscribe_shaper_funcs_t *funcs = face_data->funcs;
+
+  /*
+   * Set up features.
+   */
+  hb_auto_array_t<OPENTYPE_FEATURE_RECORD> feature_records;
+  hb_auto_array_t<range_record_t> range_records;
+  if (num_features)
+  {
+    /* Sort features by start/end events. */
+    hb_auto_array_t<feature_event_t> feature_events;
+    for (unsigned int i = 0; i < num_features; i++)
+    {
+      active_feature_t feature;
+      feature.rec.tagFeature = hb_uint32_swap (features[i].tag);
+      feature.rec.lParameter = features[i].value;
+      feature.order = i;
+
+      feature_event_t *event;
+
+      event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = features[i].start;
+      event->start = true;
+      event->feature = feature;
+
+      event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = features[i].end;
+      event->start = false;
+      event->feature = feature;
+    }
+    feature_events.qsort ();
+    /* Add a strategic final event. */
+    {
+      active_feature_t feature;
+      feature.rec.tagFeature = 0;
+      feature.rec.lParameter = 0;
+      feature.order = num_features + 1;
+
+      feature_event_t *event = feature_events.push ();
+      if (unlikely (!event))
+       goto fail_features;
+      event->index = 0; /* This value does magic. */
+      event->start = false;
+      event->feature = feature;
+    }
+
+    /* Scan events and save features for each range. */
+    hb_auto_array_t<active_feature_t> active_features;
+    unsigned int last_index = 0;
+    for (unsigned int i = 0; i < feature_events.len; i++)
+    {
+      feature_event_t *event = &feature_events[i];
+
+      if (event->index != last_index)
+      {
+        /* Save a snapshot of active features and the range. */
+       range_record_t *range = range_records.push ();
+       if (unlikely (!range))
+         goto fail_features;
+
+       unsigned int offset = feature_records.len;
+
+       active_features.qsort ();
+       for (unsigned int j = 0; j < active_features.len; j++)
+       {
+         if (!j || active_features[j].rec.tagFeature != feature_records[feature_records.len - 1].tagFeature)
+         {
+           OPENTYPE_FEATURE_RECORD *feature = feature_records.push ();
+           if (unlikely (!feature))
+             goto fail_features;
+           *feature = active_features[j].rec;
+         }
+         else
+         {
+           /* Overrides value for existing feature. */
+           feature_records[feature_records.len - 1].lParameter = active_features[j].rec.lParameter;
+         }
+       }
+
+       /* Will convert to pointer after all is ready, since feature_records.array
+        * may move as we grow it. */
+       range->props.potfRecords = reinterpret_cast<OPENTYPE_FEATURE_RECORD *> (offset);
+       range->props.cotfRecords = feature_records.len - offset;
+       range->index_first = last_index;
+       range->index_last  = event->index - 1;
+
+       last_index = event->index;
+      }
+
+      if (event->start) {
+        active_feature_t *feature = active_features.push ();
+       if (unlikely (!feature))
+         goto fail_features;
+       *feature = event->feature;
+      } else {
+        active_feature_t *feature = active_features.find (&event->feature);
+       if (feature)
+         active_features.remove (feature - active_features.array);
+      }
+    }
+
+    if (!range_records.len) /* No active feature found. */
+      goto fail_features;
+
+    /* Fixup the pointers. */
+    for (unsigned int i = 0; i < range_records.len; i++)
+    {
+      range_record_t *range = &range_records[i];
+      range->props.potfRecords = feature_records.array + reinterpret_cast<uintptr_t> (range->props.potfRecords);
+    }
+  }
+  else
+  {
+  fail_features:
+    num_features = 0;
+  }
 
 #define FAIL(...) \
   HB_STMT_START { \
 
 #define FAIL(...) \
   HB_STMT_START { \
@@ -252,42 +727,61 @@ _hb_uniscribe_shape (hb_shape_plan_t    *shape_plan,
 retry:
 
   unsigned int scratch_size;
 retry:
 
   unsigned int scratch_size;
-  char *scratch = (char *) buffer->get_scratch_buffer (&scratch_size);
-
-  /* Allocate char buffers; they all fit */
+  hb_buffer_t::scratch_buffer_t *scratch = buffer->get_scratch_buffer (&scratch_size);
 
 #define ALLOCATE_ARRAY(Type, name, len) \
   Type *name = (Type *) scratch; \
 
 #define ALLOCATE_ARRAY(Type, name, len) \
   Type *name = (Type *) scratch; \
-  scratch += (len) * sizeof ((name)[0]); \
-  scratch_size -= (len) * sizeof ((name)[0]);
+  { \
+    unsigned int _consumed = DIV_CEIL ((len) * sizeof (Type), sizeof (*scratch)); \
+    assert (_consumed <= scratch_size); \
+    scratch += _consumed; \
+    scratch_size -= _consumed; \
+  }
 
 #define utf16_index() var1.u32
 
 
 #define utf16_index() var1.u32
 
-  WCHAR *pchars = (WCHAR *) scratch;
+  ALLOCATE_ARRAY (WCHAR, pchars, buffer->len * 2);
+
   unsigned int chars_len = 0;
   unsigned int chars_len = 0;
-  for (unsigned int i = 0; i < buffer->len; i++) {
+  for (unsigned int i = 0; i < buffer->len; i++)
+  {
     hb_codepoint_t c = buffer->info[i].codepoint;
     buffer->info[i].utf16_index() = chars_len;
     hb_codepoint_t c = buffer->info[i].codepoint;
     buffer->info[i].utf16_index() = chars_len;
-    if (likely (c < 0x10000))
+    if (likely (c <= 0xFFFFu))
       pchars[chars_len++] = c;
       pchars[chars_len++] = c;
-    else if (unlikely (c >= 0x110000))
-      pchars[chars_len++] = 0xFFFD;
+    else if (unlikely (c > 0x10FFFFu))
+      pchars[chars_len++] = 0xFFFDu;
     else {
     else {
-      pchars[chars_len++] = 0xD800 + ((c - 0x10000) >> 10);
-      pchars[chars_len++] = 0xDC00 + ((c - 0x10000) & ((1 << 10) - 1));
+      pchars[chars_len++] = 0xD800u + ((c - 0x10000u) >> 10);
+      pchars[chars_len++] = 0xDC00u + ((c - 0x10000u) & ((1 << 10) - 1));
     }
   }
 
     }
   }
 
-  ALLOCATE_ARRAY (WCHAR, wchars, chars_len);
   ALLOCATE_ARRAY (WORD, log_clusters, chars_len);
   ALLOCATE_ARRAY (SCRIPT_CHARPROP, char_props, chars_len);
 
   ALLOCATE_ARRAY (WORD, log_clusters, chars_len);
   ALLOCATE_ARRAY (SCRIPT_CHARPROP, char_props, chars_len);
 
-  /* On Windows, we don't care about alignment...*/
-  unsigned int glyphs_size = scratch_size / (sizeof (WORD) +
-                                            sizeof (SCRIPT_GLYPHPROP) +
-                                            sizeof (int) +
-                                            sizeof (GOFFSET) +
-                                            sizeof (uint32_t));
+  if (num_features)
+  {
+    /* Need log_clusters to assign features. */
+    chars_len = 0;
+    for (unsigned int i = 0; i < buffer->len; i++)
+    {
+      hb_codepoint_t c = buffer->info[i].codepoint;
+      unsigned int cluster = buffer->info[i].cluster;
+      log_clusters[chars_len++] = cluster;
+      if (hb_in_range (c, 0x10000u, 0x10FFFFu))
+       log_clusters[chars_len++] = cluster; /* Surrogates. */
+    }
+  }
+
+  /* The -2 in the following is to compensate for possible
+   * alignment needed after the WORD array.  sizeof(WORD) == 2. */
+  unsigned int glyphs_size = (scratch_size * sizeof (int) - 2)
+                          / (sizeof (WORD) +
+                             sizeof (SCRIPT_GLYPHPROP) +
+                             sizeof (int) +
+                             sizeof (GOFFSET) +
+                             sizeof (uint32_t));
 
   ALLOCATE_ARRAY (WORD, glyphs, glyphs_size);
   ALLOCATE_ARRAY (SCRIPT_GLYPHPROP, glyph_props, glyphs_size);
 
   ALLOCATE_ARRAY (WORD, glyphs, glyphs_size);
   ALLOCATE_ARRAY (SCRIPT_GLYPHPROP, glyph_props, glyphs_size);
@@ -295,6 +789,14 @@ retry:
   ALLOCATE_ARRAY (GOFFSET, offsets, glyphs_size);
   ALLOCATE_ARRAY (uint32_t, vis_clusters, glyphs_size);
 
   ALLOCATE_ARRAY (GOFFSET, offsets, glyphs_size);
   ALLOCATE_ARRAY (uint32_t, vis_clusters, glyphs_size);
 
+  /* Note:
+   * We can't touch the contents of glyph_props.  Our fallback
+   * implementations of Shape and Place functions use that buffer
+   * by casting it to a different type.  It works because they
+   * both agree about it, but if we want to access it here we
+   * need address that issue first.
+   */
+
 #undef ALLOCATE_ARRAY
 
 #define MAX_ITEMS 256
 #undef ALLOCATE_ARRAY
 
 #define MAX_ITEMS 256
@@ -312,62 +814,96 @@ retry:
   bidi_state.uBidiLevel = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
   bidi_state.fOverrideDirection = 1;
 
   bidi_state.uBidiLevel = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
   bidi_state.fOverrideDirection = 1;
 
-  hr = ScriptItemizeOpenType (wchars,
-                             chars_len,
-                             MAX_ITEMS,
-                             &bidi_control,
-                             &bidi_state,
-                             items,
-                             script_tags,
-                             &item_count);
+  hr = funcs->ScriptItemizeOpenType (pchars,
+                                    chars_len,
+                                    MAX_ITEMS,
+                                    &bidi_control,
+                                    &bidi_state,
+                                    items,
+                                    script_tags,
+                                    &item_count);
   if (unlikely (FAILED (hr)))
     FAIL ("ScriptItemizeOpenType() failed: 0x%08xL", hr);
 
 #undef MAX_ITEMS
 
   if (unlikely (FAILED (hr)))
     FAIL ("ScriptItemizeOpenType() failed: 0x%08xL", hr);
 
 #undef MAX_ITEMS
 
-  int *range_char_counts = NULL;
-  TEXTRANGE_PROPERTIES **range_properties = NULL;
-  int range_count = 0;
-  if (num_features) {
-    /* TODO setup ranges */
-  }
-
   OPENTYPE_TAG language_tag = hb_uint32_swap (hb_ot_tag_from_language (buffer->props.language));
   OPENTYPE_TAG language_tag = hb_uint32_swap (hb_ot_tag_from_language (buffer->props.language));
+  hb_auto_array_t<TEXTRANGE_PROPERTIES*> range_properties;
+  hb_auto_array_t<int> range_char_counts;
 
   unsigned int glyphs_offset = 0;
   unsigned int glyphs_len;
   bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
 
   unsigned int glyphs_offset = 0;
   unsigned int glyphs_len;
   bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
-  for (unsigned int j = 0; j < item_count; j++)
+  for (unsigned int i = 0; i < item_count; i++)
   {
   {
-    unsigned int i = backward ? item_count - 1 - j : j;
     unsigned int chars_offset = items[i].iCharPos;
     unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
 
     unsigned int chars_offset = items[i].iCharPos;
     unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
 
+    if (num_features)
+    {
+      range_properties.shrink (0);
+      range_char_counts.shrink (0);
+
+      range_record_t *last_range = &range_records[0];
+
+      for (unsigned int k = chars_offset; k < chars_offset + item_chars_len; k++)
+      {
+       range_record_t *range = last_range;
+       while (log_clusters[k] < range->index_first)
+         range--;
+       while (log_clusters[k] > range->index_last)
+         range++;
+       if (!range_properties.len ||
+           &range->props != range_properties[range_properties.len - 1])
+       {
+         TEXTRANGE_PROPERTIES **props = range_properties.push ();
+         int *c = range_char_counts.push ();
+         if (unlikely (!props || !c))
+         {
+           range_properties.shrink (0);
+           range_char_counts.shrink (0);
+           break;
+         }
+         *props = &range->props;
+         *c = 1;
+       }
+       else
+       {
+         range_char_counts[range_char_counts.len - 1]++;
+       }
+
+       last_range = range;
+      }
+    }
+
+    /* Asking for glyphs in logical order circumvents at least
+     * one bug in Uniscribe. */
+    items[i].a.fLogicalOrder = true;
+
   retry_shape:
   retry_shape:
-    hr = ScriptShapeOpenType (font_data->hdc,
-                             &font_data->script_cache,
-                             &items[i].a,
-                             script_tags[i],
-                             language_tag,
-                             range_char_counts,
-                             range_properties,
-                             range_count,
-                             wchars + chars_offset,
-                             item_chars_len,
-                             glyphs_size - glyphs_offset,
-                             /* out */
-                             log_clusters + chars_offset,
-                             char_props + chars_offset,
-                             glyphs + glyphs_offset,
-                             glyph_props + glyphs_offset,
-                             (int *) &glyphs_len);
+    hr = funcs->ScriptShapeOpenType (font_data->hdc,
+                                    &font_data->script_cache,
+                                    &items[i].a,
+                                    script_tags[i],
+                                    language_tag,
+                                    range_char_counts.array,
+                                    range_properties.array,
+                                    range_properties.len,
+                                    pchars + chars_offset,
+                                    item_chars_len,
+                                    glyphs_size - glyphs_offset,
+                                    /* out */
+                                    log_clusters + chars_offset,
+                                    char_props + chars_offset,
+                                    glyphs + glyphs_offset,
+                                    glyph_props + glyphs_offset,
+                                    (int *) &glyphs_len);
 
     if (unlikely (items[i].a.fNoGlyphIndex))
       FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
     if (unlikely (hr == E_OUTOFMEMORY))
     {
 
     if (unlikely (items[i].a.fNoGlyphIndex))
       FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
     if (unlikely (hr == E_OUTOFMEMORY))
     {
-      buffer->ensure (buffer->allocated * 2);
-      if (buffer->in_error)
+      if (unlikely (!buffer->ensure (buffer->allocated * 2)))
        FAIL ("Buffer resize failed");
       goto retry;
     }
        FAIL ("Buffer resize failed");
       goto retry;
     }
@@ -386,28 +922,36 @@ retry:
     for (unsigned int j = chars_offset; j < chars_offset + item_chars_len; j++)
       log_clusters[j] += glyphs_offset;
 
     for (unsigned int j = chars_offset; j < chars_offset + item_chars_len; j++)
       log_clusters[j] += glyphs_offset;
 
-    hr = ScriptPlaceOpenType (font_data->hdc,
-                             &font_data->script_cache,
-                             &items[i].a,
-                             script_tags[i],
-                             language_tag,
-                             range_char_counts,
-                             range_properties,
-                             range_count,
-                             wchars + chars_offset,
-                             log_clusters + chars_offset,
-                             char_props + chars_offset,
-                             item_chars_len,
-                             glyphs + glyphs_offset,
-                             glyph_props + glyphs_offset,
-                             glyphs_len,
-                             /* out */
-                             advances + glyphs_offset,
-                             offsets + glyphs_offset,
-                             NULL);
+    hr = funcs->ScriptPlaceOpenType (font_data->hdc,
+                                    &font_data->script_cache,
+                                    &items[i].a,
+                                    script_tags[i],
+                                    language_tag,
+                                    range_char_counts.array,
+                                    range_properties.array,
+                                    range_properties.len,
+                                    pchars + chars_offset,
+                                    log_clusters + chars_offset,
+                                    char_props + chars_offset,
+                                    item_chars_len,
+                                    glyphs + glyphs_offset,
+                                    glyph_props + glyphs_offset,
+                                    glyphs_len,
+                                    /* out */
+                                    advances + glyphs_offset,
+                                    offsets + glyphs_offset,
+                                    NULL);
     if (unlikely (FAILED (hr)))
       FAIL ("ScriptPlaceOpenType() failed: 0x%08xL", hr);
 
     if (unlikely (FAILED (hr)))
       FAIL ("ScriptPlaceOpenType() failed: 0x%08xL", hr);
 
+    if (DEBUG_ENABLED (UNISCRIBE))
+      fprintf (stderr, "Item %d RTL %d LayoutRTL %d LogicalOrder %d ScriptTag %c%c%c%c\n",
+              i,
+              items[i].a.fRTL,
+              items[i].a.fLayoutRTL,
+              items[i].a.fLogicalOrder,
+              HB_UNTAG (hb_uint32_swap (script_tags[i])));
+
     glyphs_offset += glyphs_len;
   }
   glyphs_len = glyphs_offset;
     glyphs_offset += glyphs_len;
   }
   glyphs_len = glyphs_offset;
@@ -422,20 +966,13 @@ retry:
     uint32_t *p = &vis_clusters[log_clusters[buffer->info[i].utf16_index()]];
     *p = MIN (*p, buffer->info[i].cluster);
   }
     uint32_t *p = &vis_clusters[log_clusters[buffer->info[i].utf16_index()]];
     *p = MIN (*p, buffer->info[i].cluster);
   }
-  if (!backward) {
-    for (unsigned int i = 1; i < glyphs_len; i++)
-      if (vis_clusters[i] == -1)
-       vis_clusters[i] = vis_clusters[i - 1];
-  } else {
-    for (int i = glyphs_len - 2; i >= 0; i--)
-      if (vis_clusters[i] == -1)
-       vis_clusters[i] = vis_clusters[i + 1];
-  }
+  for (unsigned int i = 1; i < glyphs_len; i++)
+    if (vis_clusters[i] == -1)
+      vis_clusters[i] = vis_clusters[i - 1];
 
 #undef utf16_index
 
 
 #undef utf16_index
 
-  buffer->ensure (glyphs_len);
-  if (buffer->in_error)
+  if (unlikely (!buffer->ensure (glyphs_len)))
     FAIL ("Buffer in error");
 
 #undef FAIL
     FAIL ("Buffer in error");
 
 #undef FAIL
@@ -464,10 +1001,13 @@ retry:
 
     /* TODO vertical */
     pos->x_advance = info->mask;
 
     /* TODO vertical */
     pos->x_advance = info->mask;
-    pos->x_offset = info->var1.u32;
+    pos->x_offset = backward ? -info->var1.u32 : info->var1.u32;
     pos->y_offset = info->var2.u32;
   }
 
     pos->y_offset = info->var2.u32;
   }
 
+  if (backward)
+    hb_buffer_reverse (buffer);
+
   /* Wow, done! */
   return true;
 }
   /* Wow, done! */
   return true;
 }
index 51887c8..001ab38 100644 (file)
@@ -29,9 +29,6 @@
 
 #include "hb.h"
 
 
 #include "hb.h"
 
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0600
-#endif
 #include <windows.h>
 
 HB_BEGIN_DECLS
 #include <windows.h>
 
 HB_BEGIN_DECLS
index b9a6519..0b798a0 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2011,2012  Google, Inc.
+ * Copyright © 2011,2012,2014  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
 
 #include "hb-private.hh"
 
 
 #include "hb-private.hh"
 
+template <typename T, bool validate=true> struct hb_utf_t;
+
 
 /* UTF-8 */
 
 
 /* UTF-8 */
 
-#define HB_UTF8_COMPUTE(Char, Mask, Len) \
-  if (Char < 128) { Len = 1; Mask = 0x7f; } \
-  else if ((Char & 0xe0) == 0xc0) { Len = 2; Mask = 0x1f; } \
-  else if ((Char & 0xf0) == 0xe0) { Len = 3; Mask = 0x0f; } \
-  else if ((Char & 0xf8) == 0xf0) { Len = 4; Mask = 0x07; } \
-  else Len = 0;
-
-static inline const uint8_t *
-hb_utf_next (const uint8_t *text,
-            const uint8_t *end,
-            hb_codepoint_t *unicode)
+template <>
+struct hb_utf_t<uint8_t, true>
 {
 {
-  hb_codepoint_t c = *text, mask;
-  unsigned int len;
-
-  /* TODO check for overlong sequences? */
-
-  HB_UTF8_COMPUTE (c, mask, len);
-  if (unlikely (!len || (unsigned int) (end - text) < len)) {
-    *unicode = -1;
-    return text + 1;
-  } else {
-    hb_codepoint_t result;
-    unsigned int i;
-    result = c & mask;
-    for (i = 1; i < len; i++)
+  static inline const uint8_t *
+  next (const uint8_t *text,
+       const uint8_t *end,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
+  {
+    /* Written to only accept well-formed sequences.
+     * Based on ideas from ICU's U8_NEXT.
+     * Generates one "replacement" for each ill-formed byte. */
+
+    hb_codepoint_t c = *text++;
+
+    if (c > 0x7Fu)
+    {
+      if (hb_in_range (c, 0xC2u, 0xDFu)) /* Two-byte */
       {
       {
-       if (unlikely ((text[i] & 0xc0) != 0x80))
-         {
-           *unicode = -1;
-           return text + 1;
-         }
-       result <<= 6;
-       result |= (text[i] & 0x3f);
+       unsigned int t1;
+       if (likely (text < end &&
+                   (t1 = text[0] - 0x80u) <= 0x3Fu))
+       {
+         c = ((c&0x1Fu)<<6) | t1;
+         text++;
+       }
+       else
+         goto error;
       }
       }
-    *unicode = result;
-    return text + len;
-  }
-}
+      else if (hb_in_range (c, 0xE0u, 0xEFu)) /* Three-byte */
+      {
+       unsigned int t1, t2;
+       if (likely (1 < end - text &&
+                   (t1 = text[0] - 0x80u) <= 0x3Fu &&
+                   (t2 = text[1] - 0x80u) <= 0x3Fu))
+       {
+         c = ((c&0xFu)<<12) | (t1<<6) | t2;
+         if (unlikely (c < 0x0800u || hb_in_range (c, 0xD800u, 0xDFFFu)))
+           goto error;
+         text += 2;
+       }
+       else
+         goto error;
+      }
+      else if (hb_in_range (c, 0xF0u, 0xF4u)) /* Four-byte */
+      {
+       unsigned int t1, t2, t3;
+       if (likely (2 < end - text &&
+                   (t1 = text[0] - 0x80u) <= 0x3Fu &&
+                   (t2 = text[1] - 0x80u) <= 0x3Fu &&
+                   (t3 = text[2] - 0x80u) <= 0x3Fu))
+       {
+         c = ((c&0x7u)<<18) | (t1<<12) | (t2<<6) | t3;
+         if (unlikely (!hb_in_range (c, 0x10000u, 0x10FFFFu)))
+           goto error;
+         text += 3;
+       }
+       else
+         goto error;
+      }
+      else
+       goto error;
+    }
 
 
-static inline const uint8_t *
-hb_utf_prev (const uint8_t *text,
-            const uint8_t *start,
-            hb_codepoint_t *unicode)
-{
-  const uint8_t *end = text--;
-  while (start < text && (*text & 0xc0) == 0x80 && end - text < 4)
-    text--;
+    *unicode = c;
+    return text;
+
+  error:
+    *unicode = replacement;
+    return text;
+  }
 
 
-  hb_codepoint_t c = *text, mask;
-  unsigned int len;
+  static inline const uint8_t *
+  prev (const uint8_t *text,
+       const uint8_t *start,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
+  {
+    const uint8_t *end = text--;
+    while (start < text && (*text & 0xc0) == 0x80 && end - text < 4)
+      text--;
 
 
-  /* TODO check for overlong sequences? */
+    if (likely (next (text, end, unicode, replacement) == end))
+      return text;
 
 
-  HB_UTF8_COMPUTE (c, mask, len);
-  if (unlikely (!len || (unsigned int) (end - text) != len)) {
-    *unicode = -1;
+    *unicode = replacement;
     return end - 1;
     return end - 1;
-  } else {
-    hb_codepoint_t result;
-    unsigned int i;
-    result = c & mask;
-    for (i = 1; i < len; i++)
-      {
-       result <<= 6;
-       result |= (text[i] & 0x3f);
-      }
-    *unicode = result;
-    return text;
   }
   }
-}
-
 
 
-static inline unsigned int
-hb_utf_strlen (const uint8_t *text)
-{
-  return strlen ((const char *) text);
-}
+  static inline unsigned int
+  strlen (const uint8_t *text)
+  {
+    return ::strlen ((const char *) text);
+  }
+};
 
 
 /* UTF-16 */
 
 
 
 /* UTF-16 */
 
-static inline const uint16_t *
-hb_utf_next (const uint16_t *text,
-            const uint16_t *end,
-            hb_codepoint_t *unicode)
+template <>
+struct hb_utf_t<uint16_t, true>
 {
 {
-  hb_codepoint_t c = *text++;
-
-  if (unlikely (hb_in_range<hb_codepoint_t> (c, 0xd800, 0xdbff)))
+  static inline const uint16_t *
+  next (const uint16_t *text,
+       const uint16_t *end,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
   {
   {
-    /* high surrogate */
-    hb_codepoint_t l;
-    if (text < end && ((l = *text), likely (hb_in_range<hb_codepoint_t> (l, 0xdc00, 0xdfff))))
+    hb_codepoint_t c = *text++;
+
+    if (likely (!hb_in_range (c, 0xD800u, 0xDFFFu)))
     {
     {
-      /* low surrogate */
-      *unicode = (c << 10) + l - ((0xd800 << 10) - 0x10000 + 0xdc00);
-       text++;
-    } else
-      *unicode = -1;
-  } else
-    *unicode = c;
+      *unicode = c;
+      return text;
+    }
 
 
-  return text;
-}
+    if (likely (hb_in_range (c, 0xD800u, 0xDBFFu)))
+    {
+      /* High-surrogate in c */
+      hb_codepoint_t l;
+      if (text < end && ((l = *text), likely (hb_in_range (l, 0xDC00u, 0xDFFFu))))
+      {
+       /* Low-surrogate in l */
+       *unicode = (c << 10) + l - ((0xD800u << 10) - 0x10000u + 0xDC00u);
+        text++;
+        return text;
+      }
+    }
 
 
-static inline const uint16_t *
-hb_utf_prev (const uint16_t *text,
-            const uint16_t *start,
-            hb_codepoint_t *unicode)
-{
-  hb_codepoint_t c = *--text;
+    /* Lonely / out-of-order surrogate. */
+    *unicode = replacement;
+    return text;
+  }
 
 
-  if (unlikely (hb_in_range<hb_codepoint_t> (c, 0xdc00, 0xdfff)))
+  static inline const uint16_t *
+  prev (const uint16_t *text,
+       const uint16_t *start,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
   {
   {
-    /* low surrogate */
-    hb_codepoint_t h;
-    if (start < text && ((h = *(text - 1)), likely (hb_in_range<hb_codepoint_t> (h, 0xd800, 0xdbff))))
+    const uint16_t *end = text--;
+    hb_codepoint_t c = *text;
+
+    if (likely (!hb_in_range (c, 0xD800u, 0xDFFFu)))
     {
     {
-      /* high surrogate */
-      *unicode = (h << 10) + c - ((0xd800 << 10) - 0x10000 + 0xdc00);
-       text--;
-    } else
-      *unicode = -1;
-  } else
-    *unicode = c;
+      *unicode = c;
+      return text;
+    }
 
 
-  return text;
-}
+    if (likely (start < text && hb_in_range (c, 0xDC00u, 0xDFFFu)))
+      text--;
 
 
+    if (likely (next (text, end, unicode, replacement) == end))
+      return text;
 
 
-static inline unsigned int
-hb_utf_strlen (const uint16_t *text)
-{
-  unsigned int l = 0;
-  while (*text++) l++;
-  return l;
-}
+    *unicode = replacement;
+    return end - 1;
+  }
+
+
+  static inline unsigned int
+  strlen (const uint16_t *text)
+  {
+    unsigned int l = 0;
+    while (*text++) l++;
+    return l;
+  }
+};
 
 
 /* UTF-32 */
 
 
 
 /* UTF-32 */
 
-static inline const uint32_t *
-hb_utf_next (const uint32_t *text,
-            const uint32_t *end HB_UNUSED,
-            hb_codepoint_t *unicode)
+template <bool validate>
+struct hb_utf_t<uint32_t, validate>
 {
 {
-  *unicode = *text++;
-  return text;
-}
-
-static inline const uint32_t *
-hb_utf_prev (const uint32_t *text,
-            const uint32_t *start HB_UNUSED,
-            hb_codepoint_t *unicode)
-{
-  *unicode = *--text;
-  return text;
-}
+  static inline const uint32_t *
+  next (const uint32_t *text,
+       const uint32_t *end HB_UNUSED,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
+  {
+    hb_codepoint_t c = *text++;
+    if (validate && unlikely (c > 0x10FFFFu || hb_in_range (c, 0xD800u, 0xDFFFu)))
+      goto error;
+    *unicode = c;
+    return text;
 
 
-static inline unsigned int
-hb_utf_strlen (const uint32_t *text)
-{
-  unsigned int l = 0;
-  while (*text++) l++;
-  return l;
-}
+  error:
+    *unicode = replacement;
+    return text;
+  }
+
+  static inline const uint32_t *
+  prev (const uint32_t *text,
+       const uint32_t *start HB_UNUSED,
+       hb_codepoint_t *unicode,
+       hb_codepoint_t replacement)
+  {
+    next (text - 1, text, unicode, replacement);
+    return text - 1;
+  }
+
+  static inline unsigned int
+  strlen (const uint32_t *text)
+  {
+    unsigned int l = 0;
+    while (*text++) l++;
+    return l;
+  }
+};
 
 
 #endif /* HB_UTF_PRIVATE_HH */
 
 
 #endif /* HB_UTF_PRIVATE_HH */
index ebe0401..e1a5f61 100644 (file)
@@ -38,12 +38,12 @@ HB_BEGIN_DECLS
 
 #define HB_VERSION_MAJOR 0
 #define HB_VERSION_MINOR 9
 
 #define HB_VERSION_MAJOR 0
 #define HB_VERSION_MINOR 9
-#define HB_VERSION_MICRO 12
+#define HB_VERSION_MICRO 35
 
 
-#define HB_VERSION_STRING "0.9.12"
+#define HB_VERSION_STRING "0.9.35"
 
 
-#define HB_VERSION_CHECK(major,minor,micro) \
-       ((major)*10000+(minor)*100+(micro) >= \
+#define HB_VERSION_ATLEAST(major,minor,micro) \
+       ((major)*10000+(minor)*100+(micro) <= \
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
@@ -56,9 +56,9 @@ const char *
 hb_version_string (void);
 
 hb_bool_t
 hb_version_string (void);
 
 hb_bool_t
-hb_version_check (unsigned int major,
-                 unsigned int minor,
-                 unsigned int micro);
+hb_version_atleast (unsigned int major,
+                   unsigned int minor,
+                   unsigned int micro);
 
 
 HB_END_DECLS
 
 
 HB_END_DECLS
index 43634f9..2517160 100644 (file)
@@ -42,8 +42,8 @@ HB_BEGIN_DECLS
 
 #define HB_VERSION_STRING "@HB_VERSION@"
 
 
 #define HB_VERSION_STRING "@HB_VERSION@"
 
-#define HB_VERSION_CHECK(major,minor,micro) \
-       ((major)*10000+(minor)*100+(micro) >= \
+#define HB_VERSION_ATLEAST(major,minor,micro) \
+       ((major)*10000+(minor)*100+(micro) <= \
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
@@ -56,9 +56,9 @@ const char *
 hb_version_string (void);
 
 hb_bool_t
 hb_version_string (void);
 
 hb_bool_t
-hb_version_check (unsigned int major,
-                 unsigned int minor,
-                 unsigned int micro);
+hb_version_atleast (unsigned int major,
+                   unsigned int minor,
+                   unsigned int micro);
 
 
 HB_END_DECLS
 
 
 HB_END_DECLS
index 4f1f65f..e0f88e2 100644 (file)
 #endif
 
 
 #endif
 
 
-#include "hb-unicode-private.hh"
-
-#if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
-#ifdef _MSC_VER
-#pragma message("Could not find any Unicode functions implementation, you have to provide your own")
-#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS")
-#else
-#warning "Could not find any Unicode functions implementation, you have to provide your own"
-#warning "To suppress this warning, define HB_NO_UNICODE_FUNCS"
-#endif
-#endif
index 52c479c..c5a938a 100644 (file)
--- a/src/hb.h
+++ b/src/hb.h
@@ -31,6 +31,8 @@
 #include "hb-blob.h"
 #include "hb-buffer.h"
 #include "hb-common.h"
 #include "hb-blob.h"
 #include "hb-buffer.h"
 #include "hb-common.h"
+#include "hb-deprecated.h"
+#include "hb-face.h"
 #include "hb-font.h"
 #include "hb-set.h"
 #include "hb-shape.h"
 #include "hb-font.h"
 #include "hb-set.h"
 #include "hb-shape.h"
index b362744..f9708cc 100644 (file)
@@ -131,8 +131,11 @@ main (int argc, char **argv)
            else
              printf ("      Language System %2d of %2d: %.4s\n", n_langsys, num_langsys,
                      (const char *)script.get_lang_sys_tag (n_langsys));
            else
              printf ("      Language System %2d of %2d: %.4s\n", n_langsys, num_langsys,
                      (const char *)script.get_lang_sys_tag (n_langsys));
-           if (langsys.get_required_feature_index () == Index::NOT_FOUND_INDEX)
+           if (!langsys.has_required_feature ())
              printf ("        No required feature\n");
              printf ("        No required feature\n");
+           else
+             printf ("        Required feature index: %d\n",
+                     langsys.get_required_feature_index ());
 
            int num_features = langsys.get_feature_count ();
            printf ("        %d feature(s) found in language system\n", num_features);
 
            int num_features = langsys.get_feature_count ();
            printf ("        %d feature(s) found in language system\n", num_features);
@@ -147,11 +150,10 @@ main (int argc, char **argv)
        printf ("    %d feature(s) found in table\n", num_features);
        for (int n_feature = 0; n_feature < num_features; n_feature++) {
          const Feature &feature = g.get_feature (n_feature);
        printf ("    %d feature(s) found in table\n", num_features);
        for (int n_feature = 0; n_feature < num_features; n_feature++) {
          const Feature &feature = g.get_feature (n_feature);
-         printf ("    Feature %2d of %2d: %.4s; %d lookup(s)\n", n_feature, num_features,
-                 (const char *)g.get_feature_tag(n_feature),
-                 feature.get_lookup_count());
-
          int num_lookups = feature.get_lookup_count ();
          int num_lookups = feature.get_lookup_count ();
+         printf ("    Feature %2d of %2d: %c%c%c%c\n", n_feature, num_features,
+                 HB_UNTAG(g.get_feature_tag(n_feature)));
+
          printf ("        %d lookup(s) found in feature\n", num_lookups);
          for (int n_lookup = 0; n_lookup < num_lookups; n_lookup++) {
            printf ("        Lookup index %2d of %2d: %d\n", n_lookup, num_lookups,
          printf ("        %d lookup(s) found in feature\n", num_lookups);
          for (int n_lookup = 0; n_lookup < num_lookups; n_lookup++) {
            printf ("        Lookup index %2d of %2d: %d\n", n_lookup, num_lookups,
@@ -170,7 +172,7 @@ main (int argc, char **argv)
        }
        break;
 
        }
        break;
 
-      case GDEF::Tag:
+      case GDEF::tableTag:
        {
 
        const GDEF &gdef = *CastP<GDEF> (font_data + table.offset);
        {
 
        const GDEF &gdef = *CastP<GDEF> (font_data + table.offset);
diff --git a/src/test-buffer-serialize.cc b/src/test-buffer-serialize.cc
new file mode 100644 (file)
index 0000000..18c46e9
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright © 2010,2011,2013  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "hb.h"
+#ifdef HAVE_FREETYPE
+#include "hb-ft.h"
+#endif
+
+#ifdef HAVE_GLIB
+# include <glib.h>
+# if !GLIB_CHECK_VERSION (2, 22, 0)
+#  define g_mapped_file_unref g_mapped_file_free
+# endif
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  hb_blob_t *blob = NULL;
+
+  if (argc != 2) {
+    fprintf (stderr, "usage: %s font-file\n", argv[0]);
+    exit (1);
+  }
+
+  /* Create the blob */
+  {
+    const char *font_data;
+    unsigned int len;
+    hb_destroy_func_t destroy;
+    void *user_data;
+    hb_memory_mode_t mm;
+
+#ifdef HAVE_GLIB
+    GMappedFile *mf = g_mapped_file_new (argv[1], false, NULL);
+    font_data = g_mapped_file_get_contents (mf);
+    len = g_mapped_file_get_length (mf);
+    destroy = (hb_destroy_func_t) g_mapped_file_unref;
+    user_data = (void *) mf;
+    mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+#else
+    FILE *f = fopen (argv[1], "rb");
+    fseek (f, 0, SEEK_END);
+    len = ftell (f);
+    fseek (f, 0, SEEK_SET);
+    font_data = (const char *) malloc (len);
+    if (!font_data) len = 0;
+    len = fread ((char *) font_data, 1, len, f);
+    destroy = free;
+    user_data = (void *) font_data;
+    fclose (f);
+    mm = HB_MEMORY_MODE_WRITABLE;
+#endif
+
+    blob = hb_blob_create (font_data, len, mm, user_data, destroy);
+  }
+
+  hb_face_t *face = hb_face_create (blob, 0 /* first face */);
+  hb_blob_destroy (blob);
+  blob = NULL;
+
+  unsigned int upem = hb_face_get_upem (face);
+  hb_font_t *font = hb_font_create (face);
+  hb_face_destroy (face);
+  hb_font_set_scale (font, upem, upem);
+#ifdef HAVE_FREETYPE
+  hb_ft_font_set_funcs (font);
+#endif
+
+  hb_buffer_t *buf;
+  buf = hb_buffer_create ();
+
+  bool ret = true;
+  char line[BUFSIZ], out[BUFSIZ];
+  while (fgets (line, sizeof(line), stdin) != 0)
+  {
+    hb_buffer_clear_contents (buf);
+
+    const char *p = line;
+    while (hb_buffer_deserialize_glyphs (buf,
+                                        p, -1, &p,
+                                        font,
+                                        HB_BUFFER_SERIALIZE_FORMAT_JSON))
+      ;
+    if (*p && *p != '\n')
+      ret = false;
+
+    hb_buffer_serialize_glyphs (buf, 0, hb_buffer_get_length (buf),
+                               out, sizeof (out), NULL,
+                               font, HB_BUFFER_SERIALIZE_FORMAT_JSON,
+                               HB_BUFFER_SERIALIZE_FLAG_DEFAULT);
+    puts (out);
+  }
+
+  hb_buffer_destroy (buf);
+
+  hb_font_destroy (font);
+
+  return !ret;
+}
index 947b566..35d9e3c 100644 (file)
 #include "hb-ot.h"
 
 #ifdef HAVE_GLIB
 #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>
 #endif
 #include <stdlib.h>
 #include <stdio.h>
index 4731e26..8ea87cd 100644 (file)
 #include "hb-ot.h"
 
 #ifdef HAVE_GLIB
 #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>
 #endif
 #include <stdlib.h>
 #include <stdio.h>
index 22108b8..a8fe046 100644 (file)
 #include "hb.h"
 
 #ifdef HAVE_GLIB
 #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>
 #endif
 #include <stdlib.h>
 #include <stdio.h>
@@ -100,6 +103,7 @@ main (int argc, char **argv)
   hb_buffer_t *buffer = hb_buffer_create ();
 
   hb_buffer_add_utf8 (buffer, "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\x95", -1, 0, -1);
   hb_buffer_t *buffer = hb_buffer_create ();
 
   hb_buffer_add_utf8 (buffer, "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\x95", -1, 0, -1);
+  hb_buffer_guess_segment_properties (buffer);
 
   hb_shape (font, buffer, NULL, 0);
 
 
   hb_shape (font, buffer, NULL, 0);
 
diff --git a/test-driver b/test-driver
new file mode 100755 (executable)
index 0000000..32bf39e
--- /dev/null
@@ -0,0 +1,127 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2012-06-27.10; # UTC
+
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+# TODO: better error handling in option parsing (in particular, ensure
+# TODO: $log_file, $trs_file and $test_name are defined).
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+  esac
+  shift
+done
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='\e[0;31m' # Red.
+  grn='\e[0;32m' # Green.
+  lgn='\e[1;32m' # Light green.
+  blu='\e[1;34m' # Blue.
+  mgn='\e[0;35m' # Magenta.
+  std='\e[m'     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  estatus=1
+fi
+
+case $estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
index 89dce40..ce251b6 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # Process this file with automake to produce Makefile.in
 VPATH = @srcdir@
 
 # Process this file with automake to produce Makefile.in
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -36,39 +80,71 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = test
 build_triplet = @build@
 host_triplet = @host@
 subdir = test
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 SOURCES =
 DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
        distdir
        distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -135,6 +211,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -143,22 +220,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -188,6 +277,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -292,22 +382,25 @@ clean-libtool:
        -rm -rf .libs _libs
 
 # This directory's subdirectories are mostly independent; you can cd
        -rm -rf .libs _libs
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -322,57 +415,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -388,12 +436,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -405,15 +448,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -422,6 +461,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -458,13 +512,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -585,22 +636,20 @@ ps-am:
 
 uninstall-am:
 
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-       install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am check check-am clean clean-generic clean-libtool \
-       ctags ctags-recursive distclean distclean-generic \
-       distclean-libtool distclean-tags distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs installdirs-am maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-am uninstall uninstall-am
 
 
 -include $(top_srcdir)/git.mk
 
 
 -include $(top_srcdir)/git.mk
index 237f92c..4ff14fa 100644 (file)
@@ -7,8 +7,8 @@ DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
 if HAVE_GLIB
 MAINTAINERCLEANFILES =
 
 if HAVE_GLIB
-AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS) $(GTHREAD_CFLAGS)
-LDADD = $(top_builddir)/src/libharfbuzz.la $(GLIB_LIBS) $(GTHREAD_LIBS)
+AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS)
+LDADD = $(top_builddir)/src/libharfbuzz.la $(GLIB_LIBS)
 
 EXTRA_DIST += hb-test.h
 
 
 EXTRA_DIST += hb-test.h
 
@@ -28,11 +28,13 @@ TEST_PROGS = \
        $(NULL)
 
 test_unicode_CPPFLAGS = $(AM_CPPFLAGS)
        $(NULL)
 
 test_unicode_CPPFLAGS = $(AM_CPPFLAGS)
+test_unicode_LDADD = $(LDADD)
 if HAVE_GLIB
 test_unicode_CPPFLAGS += $(GLIB_CFLAGS)
 endif
 if HAVE_ICU
 test_unicode_CPPFLAGS += $(ICU_CFLAGS)
 if HAVE_GLIB
 test_unicode_CPPFLAGS += $(GLIB_CFLAGS)
 endif
 if HAVE_ICU
 test_unicode_CPPFLAGS += $(ICU_CFLAGS)
+test_unicode_LDADD += $(top_builddir)/src/libharfbuzz-icu.la
 endif
 
 
 endif
 
 
@@ -67,7 +69,7 @@ TESTS_ENVIRONMENT = \
        G_DEBUG=gc-friendly \
        G_SLICE=always-malloc \
        srcdir=$(srcdir) \
        G_DEBUG=gc-friendly \
        G_SLICE=always-malloc \
        srcdir=$(srcdir) \
-       $(ENV)
+       $(NULL)
 
 
 # check-tool: Run tests under $(TOOL)
 
 
 # check-tool: Run tests under $(TOOL)
@@ -95,8 +97,8 @@ VALGRIND_FLAGS = \
        $(EXTRA_VALGRIND_FLAGS)
 #      Can't do for now: --show-reachable=yes
 CLEANFILES +=  log-valgrind.txt
        $(EXTRA_VALGRIND_FLAGS)
 #      Can't do for now: --show-reachable=yes
 CLEANFILES +=  log-valgrind.txt
-valgrind_verbose = $(valgrind_verbose_$(V))
-valgrind_verbose_ = $(valgrind_verbose_$(AM_DEFAULT_VERBOSITY))
+valgrind_verbose = $(valgrind_verbose_@AM_V@)
+valgrind_verbose_ = $(valgrind_verbose_@AM_DEFAULT_V@)
 valgrind_verbose_0 = | \
        grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0'
 # TODO: The following check does not fail if valgrind finds error.  It should.
 valgrind_verbose_0 = | \
        grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0'
 # TODO: The following check does not fail if valgrind finds error.  It should.
index 5fe8529..6faa95f 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # Process this file with automake to produce Makefile.in
 
 VPATH = @srcdir@
 # Process this file with automake to produce Makefile.in
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -40,26 +84,28 @@ host_triplet = @host@
 @HAVE_GLIB_TRUE@check_PROGRAMS = $(am__EXEEXT_3)
 @HAVE_GLIB_TRUE@noinst_PROGRAMS = $(am__EXEEXT_3)
 @HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_2 = $(ICU_CFLAGS)
 @HAVE_GLIB_TRUE@check_PROGRAMS = $(am__EXEEXT_3)
 @HAVE_GLIB_TRUE@noinst_PROGRAMS = $(am__EXEEXT_3)
 @HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_2 = $(ICU_CFLAGS)
-@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_3 = \
+@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_3 = $(top_builddir)/src/libharfbuzz-icu.la
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_4 = \
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ test-ot-tag \
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(NULL)
 
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ test-ot-tag \
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(NULL)
 
-@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_4 = $(ICU_CFLAGS)
 @HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_5 = $(ICU_CFLAGS)
 @HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_5 = $(ICU_CFLAGS)
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_6 = $(FREETYPE_CFLAGS)
+@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__append_6 = $(ICU_CFLAGS)
 @HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_7 = $(FREETYPE_CFLAGS)
 @HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_7 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_8 = $(FREETYPE_CFLAGS)
 @HAVE_GLIB_TRUE@TESTS = $(am__EXEEXT_3)
 #      Can't do for now: --show-reachable=yes
 @HAVE_GLIB_TRUE@TESTS = $(am__EXEEXT_3)
 #      Can't do for now: --show-reachable=yes
-@HAVE_GLIB_TRUE@am__append_8 = log-valgrind.txt symbols-tested.txt \
+@HAVE_GLIB_TRUE@am__append_9 = log-valgrind.txt symbols-tested.txt \
 @HAVE_GLIB_TRUE@       symbols-exported.txt symbols-untested.txt
 subdir = test/api
 @HAVE_GLIB_TRUE@       symbols-exported.txt symbols-untested.txt
 subdir = test/api
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp $(top_srcdir)/test-driver
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -83,28 +129,29 @@ test_blob_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 @HAVE_GLIB_TRUE@test_blob_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 am__DEPENDENCIES_1 =
 @HAVE_GLIB_TRUE@test_blob_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+am__v_lt_1 = 
 test_buffer_SOURCES = test-buffer.c
 test_buffer_OBJECTS = test-buffer.$(OBJEXT)
 test_buffer_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_buffer_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_buffer_SOURCES = test-buffer.c
 test_buffer_OBJECTS = test-buffer.$(OBJEXT)
 test_buffer_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_buffer_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_c_SOURCES = test-c.c
 test_c_OBJECTS = test_c-test-c.$(OBJEXT)
 test_c_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_c_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_c_SOURCES = test-c.c
 test_c_OBJECTS = test_c-test-c.$(OBJEXT)
 test_c_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_c_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_common_SOURCES = test-common.c
 test_common_OBJECTS = test-common.$(OBJEXT)
 test_common_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_common_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_common_SOURCES = test-common.c
 test_common_OBJECTS = test-common.$(OBJEXT)
 test_common_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_common_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 am__test_cplusplus_SOURCES_DIST = test-cplusplus.cc
 @HAVE_GLIB_TRUE@am_test_cplusplus_OBJECTS =  \
 @HAVE_GLIB_TRUE@       test_cplusplus-test-cplusplus.$(OBJEXT)
 am__test_cplusplus_SOURCES_DIST = test-cplusplus.cc
 @HAVE_GLIB_TRUE@am_test_cplusplus_OBJECTS =  \
 @HAVE_GLIB_TRUE@       test_cplusplus-test-cplusplus.$(OBJEXT)
@@ -112,49 +159,62 @@ test_cplusplus_OBJECTS = $(am_test_cplusplus_OBJECTS)
 test_cplusplus_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_cplusplus_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_cplusplus_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_cplusplus_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_font_SOURCES = test-font.c
 test_font_OBJECTS = test-font.$(OBJEXT)
 test_font_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_font_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_font_SOURCES = test-font.c
 test_font_OBJECTS = test-font.$(OBJEXT)
 test_font_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_font_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_object_SOURCES = test-object.c
 test_object_OBJECTS = test-object.$(OBJEXT)
 test_object_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_object_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_object_SOURCES = test-object.c
 test_object_OBJECTS = test-object.$(OBJEXT)
 test_object_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_object_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_ot_tag_SOURCES = test-ot-tag.c
 test_ot_tag_OBJECTS = test-ot-tag.$(OBJEXT)
 test_ot_tag_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_ot_tag_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_ot_tag_SOURCES = test-ot-tag.c
 test_ot_tag_OBJECTS = test-ot-tag.$(OBJEXT)
 test_ot_tag_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_ot_tag_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_set_SOURCES = test-set.c
 test_set_OBJECTS = test-set.$(OBJEXT)
 test_set_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_set_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_set_SOURCES = test-set.c
 test_set_OBJECTS = test-set.$(OBJEXT)
 test_set_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_set_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_shape_SOURCES = test-shape.c
 test_shape_OBJECTS = test-shape.$(OBJEXT)
 test_shape_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_shape_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_shape_SOURCES = test-shape.c
 test_shape_OBJECTS = test-shape.$(OBJEXT)
 test_shape_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_shape_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 test_unicode_SOURCES = test-unicode.c
 test_unicode_OBJECTS = test_unicode-test-unicode.$(OBJEXT)
 test_unicode_SOURCES = test-unicode.c
 test_unicode_OBJECTS = test_unicode-test-unicode.$(OBJEXT)
-test_unicode_LDADD = $(LDADD)
-@HAVE_GLIB_TRUE@test_unicode_DEPENDENCIES =  \
+@HAVE_GLIB_TRUE@am__DEPENDENCIES_2 =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@test_unicode_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+@HAVE_GLIB_TRUE@       $(am__append_3)
 test_version_SOURCES = test-version.c
 test_version_OBJECTS = test-version.$(OBJEXT)
 test_version_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_version_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 test_version_SOURCES = test-version.c
 test_version_OBJECTS = test-version.$(OBJEXT)
 test_version_LDADD = $(LDADD)
 @HAVE_GLIB_TRUE@test_version_DEPENDENCIES =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -167,17 +227,16 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
@@ -186,17 +245,16 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX   " $@;
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 SOURCES = test-blob.c test-buffer.c test-c.c test-common.c \
        $(test_cplusplus_SOURCES) test-font.c test-object.c \
        test-ot-tag.c test-set.c test-shape.c test-unicode.c \
 SOURCES = test-blob.c test-buffer.c test-c.c test-common.c \
        $(test_cplusplus_SOURCES) test-font.c test-object.c \
        test-ot-tag.c test-set.c test-shape.c test-unicode.c \
@@ -205,10 +263,234 @@ DIST_SOURCES = test-blob.c test-buffer.c test-c.c test-common.c \
        $(am__test_cplusplus_SOURCES_DIST) test-font.c test-object.c \
        test-ot-tag.c test-set.c test-shape.c test-unicode.c \
        test-version.c
        $(am__test_cplusplus_SOURCES_DIST) test-font.c test-object.c \
        test-ot-tag.c test-set.c test-shape.c test-unicode.c \
        test-version.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 ETAGS = etags
 CTAGS = ctags
-am__tty_colors = \
-red=; grn=; lgn=; blu=; std=
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -247,6 +529,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -255,22 +538,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -300,6 +595,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -364,31 +660,32 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
 EXTRA_DIST = $(am__append_1)
 top_srcdir = @top_srcdir@
 NULL = 
 EXTRA_DIST = $(am__append_1)
-CLEANFILES = $(am__append_8)
+CLEANFILES = $(am__append_9)
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
-@HAVE_GLIB_TRUE@AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS) $(GTHREAD_CFLAGS)
-@HAVE_GLIB_TRUE@LDADD = $(top_builddir)/src/libharfbuzz.la $(GLIB_LIBS) $(GTHREAD_LIBS)
+@HAVE_GLIB_TRUE@AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS)
+@HAVE_GLIB_TRUE@LDADD = $(top_builddir)/src/libharfbuzz.la $(GLIB_LIBS)
 
 # Tests for header compilation
 @HAVE_GLIB_TRUE@TEST_PROGS = test-blob test-buffer test-common \
 @HAVE_GLIB_TRUE@       test-font test-object test-set test-shape \
 @HAVE_GLIB_TRUE@       test-unicode test-version $(NULL) \
 
 # Tests for header compilation
 @HAVE_GLIB_TRUE@TEST_PROGS = test-blob test-buffer test-common \
 @HAVE_GLIB_TRUE@       test-font test-object test-set test-shape \
 @HAVE_GLIB_TRUE@       test-unicode test-version $(NULL) \
-@HAVE_GLIB_TRUE@       $(am__append_3) test-c test-cplusplus $(NULL)
+@HAVE_GLIB_TRUE@       $(am__append_4) test-c test-cplusplus $(NULL)
 @HAVE_GLIB_TRUE@test_unicode_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS) \
 @HAVE_GLIB_TRUE@       $(am__append_2)
 @HAVE_GLIB_TRUE@test_unicode_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS) \
 @HAVE_GLIB_TRUE@       $(am__append_2)
+@HAVE_GLIB_TRUE@test_unicode_LDADD = $(LDADD) $(am__append_3)
 @HAVE_GLIB_TRUE@test_cplusplus_SOURCES = test-cplusplus.cc
 @HAVE_GLIB_TRUE@test_cplusplus_SOURCES = test-cplusplus.cc
-@HAVE_GLIB_TRUE@test_c_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_4) \
-@HAVE_GLIB_TRUE@       $(am__append_6)
+@HAVE_GLIB_TRUE@test_c_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_5) \
+@HAVE_GLIB_TRUE@       $(am__append_7)
 @HAVE_GLIB_TRUE@test_cplusplus_CPPFLAGS = $(AM_CPPFLAGS) \
 @HAVE_GLIB_TRUE@test_cplusplus_CPPFLAGS = $(AM_CPPFLAGS) \
-@HAVE_GLIB_TRUE@       $(am__append_5) $(am__append_7)
+@HAVE_GLIB_TRUE@       $(am__append_6) $(am__append_8)
 @HAVE_GLIB_TRUE@TESTS_ENVIRONMENT = \
 @HAVE_GLIB_TRUE@       MALLOC_CHECK_=2 \
 @HAVE_GLIB_TRUE@       MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) \
 @HAVE_GLIB_TRUE@       G_DEBUG=gc-friendly \
 @HAVE_GLIB_TRUE@       G_SLICE=always-malloc \
 @HAVE_GLIB_TRUE@       srcdir=$(srcdir) \
 @HAVE_GLIB_TRUE@TESTS_ENVIRONMENT = \
 @HAVE_GLIB_TRUE@       MALLOC_CHECK_=2 \
 @HAVE_GLIB_TRUE@       MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) \
 @HAVE_GLIB_TRUE@       G_DEBUG=gc-friendly \
 @HAVE_GLIB_TRUE@       G_SLICE=always-malloc \
 @HAVE_GLIB_TRUE@       srcdir=$(srcdir) \
-@HAVE_GLIB_TRUE@       $(ENV)
+@HAVE_GLIB_TRUE@       $(NULL)
 
 
 # check-gtester: Run tests under gtester
 
 
 # check-gtester: Run tests under gtester
@@ -400,15 +697,15 @@ MAINTAINERCLEANFILES =
 @HAVE_GLIB_TRUE@       --track-origins=yes \
 @HAVE_GLIB_TRUE@       --leak-check=yes
 
 @HAVE_GLIB_TRUE@       --track-origins=yes \
 @HAVE_GLIB_TRUE@       --leak-check=yes
 
-@HAVE_GLIB_TRUE@valgrind_verbose = $(valgrind_verbose_$(V))
-@HAVE_GLIB_TRUE@valgrind_verbose_ = $(valgrind_verbose_$(AM_DEFAULT_VERBOSITY))
+@HAVE_GLIB_TRUE@valgrind_verbose = $(valgrind_verbose_@AM_V@)
+@HAVE_GLIB_TRUE@valgrind_verbose_ = $(valgrind_verbose_@AM_DEFAULT_V@)
 @HAVE_GLIB_TRUE@valgrind_verbose_0 = | \
 @HAVE_GLIB_TRUE@       grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0'
 
 all: all-am
 
 .SUFFIXES:
 @HAVE_GLIB_TRUE@valgrind_verbose_0 = | \
 @HAVE_GLIB_TRUE@       grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0'
 
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cc .lo .o .obj
+.SUFFIXES: .c .cc .lo .log .o .obj .test .test$(EXEEXT) .trs
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -457,39 +754,51 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
+
 test-blob$(EXEEXT): $(test_blob_OBJECTS) $(test_blob_DEPENDENCIES) $(EXTRA_test_blob_DEPENDENCIES) 
        @rm -f test-blob$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_blob_OBJECTS) $(test_blob_LDADD) $(LIBS)
 test-blob$(EXEEXT): $(test_blob_OBJECTS) $(test_blob_DEPENDENCIES) $(EXTRA_test_blob_DEPENDENCIES) 
        @rm -f test-blob$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_blob_OBJECTS) $(test_blob_LDADD) $(LIBS)
+
 test-buffer$(EXEEXT): $(test_buffer_OBJECTS) $(test_buffer_DEPENDENCIES) $(EXTRA_test_buffer_DEPENDENCIES) 
        @rm -f test-buffer$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_buffer_OBJECTS) $(test_buffer_LDADD) $(LIBS)
 test-buffer$(EXEEXT): $(test_buffer_OBJECTS) $(test_buffer_DEPENDENCIES) $(EXTRA_test_buffer_DEPENDENCIES) 
        @rm -f test-buffer$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_buffer_OBJECTS) $(test_buffer_LDADD) $(LIBS)
+
 test-c$(EXEEXT): $(test_c_OBJECTS) $(test_c_DEPENDENCIES) $(EXTRA_test_c_DEPENDENCIES) 
        @rm -f test-c$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_c_OBJECTS) $(test_c_LDADD) $(LIBS)
 test-c$(EXEEXT): $(test_c_OBJECTS) $(test_c_DEPENDENCIES) $(EXTRA_test_c_DEPENDENCIES) 
        @rm -f test-c$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_c_OBJECTS) $(test_c_LDADD) $(LIBS)
+
 test-common$(EXEEXT): $(test_common_OBJECTS) $(test_common_DEPENDENCIES) $(EXTRA_test_common_DEPENDENCIES) 
        @rm -f test-common$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_common_OBJECTS) $(test_common_LDADD) $(LIBS)
 test-common$(EXEEXT): $(test_common_OBJECTS) $(test_common_DEPENDENCIES) $(EXTRA_test_common_DEPENDENCIES) 
        @rm -f test-common$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_common_OBJECTS) $(test_common_LDADD) $(LIBS)
+
 test-cplusplus$(EXEEXT): $(test_cplusplus_OBJECTS) $(test_cplusplus_DEPENDENCIES) $(EXTRA_test_cplusplus_DEPENDENCIES) 
        @rm -f test-cplusplus$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_cplusplus_OBJECTS) $(test_cplusplus_LDADD) $(LIBS)
 test-cplusplus$(EXEEXT): $(test_cplusplus_OBJECTS) $(test_cplusplus_DEPENDENCIES) $(EXTRA_test_cplusplus_DEPENDENCIES) 
        @rm -f test-cplusplus$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_cplusplus_OBJECTS) $(test_cplusplus_LDADD) $(LIBS)
+
 test-font$(EXEEXT): $(test_font_OBJECTS) $(test_font_DEPENDENCIES) $(EXTRA_test_font_DEPENDENCIES) 
        @rm -f test-font$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_font_OBJECTS) $(test_font_LDADD) $(LIBS)
 test-font$(EXEEXT): $(test_font_OBJECTS) $(test_font_DEPENDENCIES) $(EXTRA_test_font_DEPENDENCIES) 
        @rm -f test-font$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_font_OBJECTS) $(test_font_LDADD) $(LIBS)
+
 test-object$(EXEEXT): $(test_object_OBJECTS) $(test_object_DEPENDENCIES) $(EXTRA_test_object_DEPENDENCIES) 
        @rm -f test-object$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_object_OBJECTS) $(test_object_LDADD) $(LIBS)
 test-object$(EXEEXT): $(test_object_OBJECTS) $(test_object_DEPENDENCIES) $(EXTRA_test_object_DEPENDENCIES) 
        @rm -f test-object$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_object_OBJECTS) $(test_object_LDADD) $(LIBS)
+
 test-ot-tag$(EXEEXT): $(test_ot_tag_OBJECTS) $(test_ot_tag_DEPENDENCIES) $(EXTRA_test_ot_tag_DEPENDENCIES) 
        @rm -f test-ot-tag$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_ot_tag_OBJECTS) $(test_ot_tag_LDADD) $(LIBS)
 test-ot-tag$(EXEEXT): $(test_ot_tag_OBJECTS) $(test_ot_tag_DEPENDENCIES) $(EXTRA_test_ot_tag_DEPENDENCIES) 
        @rm -f test-ot-tag$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_ot_tag_OBJECTS) $(test_ot_tag_LDADD) $(LIBS)
+
 test-set$(EXEEXT): $(test_set_OBJECTS) $(test_set_DEPENDENCIES) $(EXTRA_test_set_DEPENDENCIES) 
        @rm -f test-set$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_set_OBJECTS) $(test_set_LDADD) $(LIBS)
 test-set$(EXEEXT): $(test_set_OBJECTS) $(test_set_DEPENDENCIES) $(EXTRA_test_set_DEPENDENCIES) 
        @rm -f test-set$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_set_OBJECTS) $(test_set_LDADD) $(LIBS)
+
 test-shape$(EXEEXT): $(test_shape_OBJECTS) $(test_shape_DEPENDENCIES) $(EXTRA_test_shape_DEPENDENCIES) 
        @rm -f test-shape$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_shape_OBJECTS) $(test_shape_LDADD) $(LIBS)
 test-shape$(EXEEXT): $(test_shape_OBJECTS) $(test_shape_DEPENDENCIES) $(EXTRA_test_shape_DEPENDENCIES) 
        @rm -f test-shape$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_shape_OBJECTS) $(test_shape_LDADD) $(LIBS)
+
 test-unicode$(EXEEXT): $(test_unicode_OBJECTS) $(test_unicode_DEPENDENCIES) $(EXTRA_test_unicode_DEPENDENCIES) 
        @rm -f test-unicode$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_unicode_OBJECTS) $(test_unicode_LDADD) $(LIBS)
 test-unicode$(EXEEXT): $(test_unicode_OBJECTS) $(test_unicode_DEPENDENCIES) $(EXTRA_test_unicode_DEPENDENCIES) 
        @rm -f test-unicode$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_unicode_OBJECTS) $(test_unicode_LDADD) $(LIBS)
+
 test-version$(EXEEXT): $(test_version_OBJECTS) $(test_version_DEPENDENCIES) $(EXTRA_test_version_DEPENDENCIES) 
        @rm -f test-version$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_version_OBJECTS) $(test_version_LDADD) $(LIBS)
 test-version$(EXEEXT): $(test_version_OBJECTS) $(test_version_DEPENDENCIES) $(EXTRA_test_version_DEPENDENCIES) 
        @rm -f test-version$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_version_OBJECTS) $(test_version_LDADD) $(LIBS)
@@ -518,14 +827,14 @@ distclean-compile:
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -603,26 +912,15 @@ mostlyclean-libtool:
 clean-libtool:
        -rm -rf .libs _libs
 
 clean-libtool:
        -rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -634,15 +932,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -651,102 +945,264 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-check-TESTS: $(TESTS)
-       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-       srcdir=$(srcdir); export srcdir; \
-       list=' $(TESTS) '; \
-       $(am__tty_colors); \
-       if test -n "$$list"; then \
-         for tst in $$list; do \
-           if test -f ./$$tst; then dir=./; \
-           elif test -f $$tst; then dir=; \
-           else dir="$(srcdir)/"; fi; \
-           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-             all=`expr $$all + 1`; \
-             case " $(XFAIL_TESTS) " in \
-             *[\ \     ]$$tst[\ \      ]*) \
-               xpass=`expr $$xpass + 1`; \
-               failed=`expr $$failed + 1`; \
-               col=$$red; res=XPASS; \
-             ;; \
-             *) \
-               col=$$grn; res=PASS; \
-             ;; \
-             esac; \
-           elif test $$? -ne 77; then \
-             all=`expr $$all + 1`; \
-             case " $(XFAIL_TESTS) " in \
-             *[\ \     ]$$tst[\ \      ]*) \
-               xfail=`expr $$xfail + 1`; \
-               col=$$lgn; res=XFAIL; \
-             ;; \
-             *) \
-               failed=`expr $$failed + 1`; \
-               col=$$red; res=FAIL; \
-             ;; \
-             esac; \
-           else \
-             skip=`expr $$skip + 1`; \
-             col=$$blu; res=SKIP; \
-           fi; \
-           echo "$${col}$$res$${std}: $$tst"; \
-         done; \
-         if test "$$all" -eq 1; then \
-           tests="test"; \
-           All=""; \
-         else \
-           tests="tests"; \
-           All="All "; \
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
          fi; \
          fi; \
-         if test "$$failed" -eq 0; then \
-           if test "$$xfail" -eq 0; then \
-             banner="$$All$$all $$tests passed"; \
-           else \
-             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
-             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
-           fi; \
-         else \
-           if test "$$xpass" -eq 0; then \
-             banner="$$failed of $$all $$tests failed"; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       else \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
            else \
            else \
-             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
-             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
            fi; \
            fi; \
-         fi; \
-         dashes="$$banner"; \
-         skipped=""; \
-         if test "$$skip" -ne 0; then \
-           if test "$$skip" -eq 1; then \
-             skipped="($$skip test was not run)"; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
            else \
            else \
-             skipped="($$skip tests were not run)"; \
+             color_start= color_end=; \
            fi; \
            fi; \
-           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-             dashes="$$skipped"; \
-         fi; \
-         report=""; \
-         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-           report="Please report to $(PACKAGE_BUGREPORT)"; \
-           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-             dashes="$$report"; \
-         fi; \
-         dashes=`echo "$$dashes" | sed s/./=/g`; \
-         if test "$$failed" -eq 0; then \
-           col="$$grn"; \
-         else \
-           col="$$red"; \
-         fi; \
-         echo "$${col}$$dashes$${std}"; \
-         echo "$${col}$$banner$${std}"; \
-         test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
-         test -z "$$report" || echo "$${col}$$report$${std}"; \
-         echo "$${col}$$dashes$${std}"; \
-         test "$$failed" -eq 0; \
-       else :; fi
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+test-blob.log: test-blob$(EXEEXT)
+       @p='test-blob$(EXEEXT)'; \
+       b='test-blob'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-buffer.log: test-buffer$(EXEEXT)
+       @p='test-buffer$(EXEEXT)'; \
+       b='test-buffer'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-common.log: test-common$(EXEEXT)
+       @p='test-common$(EXEEXT)'; \
+       b='test-common'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-font.log: test-font$(EXEEXT)
+       @p='test-font$(EXEEXT)'; \
+       b='test-font'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-object.log: test-object$(EXEEXT)
+       @p='test-object$(EXEEXT)'; \
+       b='test-object'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-set.log: test-set$(EXEEXT)
+       @p='test-set$(EXEEXT)'; \
+       b='test-set'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-shape.log: test-shape$(EXEEXT)
+       @p='test-shape$(EXEEXT)'; \
+       b='test-shape'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-unicode.log: test-unicode$(EXEEXT)
+       @p='test-unicode$(EXEEXT)'; \
+       b='test-unicode'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-version.log: test-version$(EXEEXT)
+       @p='test-version$(EXEEXT)'; \
+       b='test-version'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-ot-tag.log: test-ot-tag$(EXEEXT)
+       @p='test-ot-tag$(EXEEXT)'; \
+       b='test-ot-tag'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-c.log: test-c$(EXEEXT)
+       @p='test-c$(EXEEXT)'; \
+       b='test-c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-cplusplus.log: test-cplusplus$(EXEEXT)
+       @p='test-cplusplus$(EXEEXT)'; \
+       b='test-cplusplus'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -804,6 +1260,9 @@ install-strip:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
@@ -890,19 +1349,20 @@ uninstall-am:
 
 .MAKE: check-am install-am install-strip
 
 
 .MAKE: check-am install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
        clean-checkPROGRAMS clean-generic clean-libtool \
        clean-checkPROGRAMS clean-generic clean-libtool \
-       clean-noinstPROGRAMS ctags distclean distclean-compile \
-       distclean-generic distclean-libtool distclean-tags distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags uninstall uninstall-am
+       clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+       uninstall-am
 
 
 # check-tool: Run tests under $(TOOL)
 
 
 # check-tool: Run tests under $(TOOL)
index 8655f41..4d41218 100644 (file)
@@ -76,9 +76,6 @@ srcdir (void)
 static inline void
 hb_test_init (int *argc, char ***argv)
 {
 static inline void
 hb_test_init (int *argc, char ***argv)
 {
-#if !GLIB_CHECK_VERSION(2,32,0)
-  g_thread_init (NULL);
-#endif
   g_test_init (argc, argv, NULL);
 }
 
   g_test_init (argc, argv, NULL);
 }
 
index 0e65e2f..bbb7e2e 100644 (file)
@@ -262,16 +262,61 @@ static void
 test_blob_subblob (fixture_t *fixture, gconstpointer user_data)
 {
   hb_blob_t *b = fixture->blob;
 test_blob_subblob (fixture_t *fixture, gconstpointer user_data)
 {
   hb_blob_t *b = fixture->blob;
+  hb_memory_mode_t mm = GPOINTER_TO_INT (user_data);
+  unsigned int len;
+  const char *data;
+  char *data_writable;
+  unsigned int i;
 
 
-  fixture->len -= 2;
-  fixture->data++;
-  fixture->blob = hb_blob_create_sub_blob (b, 1, fixture->len);
+  if (mm == HB_MEMORY_MODE_DUPLICATE) {
+    g_assert_cmpint (fixture->freed, ==, 1);
+    fixture->data = (char *) hb_blob_get_data (b, NULL);
+  } else {
+    g_assert_cmpint (fixture->freed, ==, 0);
+  }
+  fixture->blob = hb_blob_create_sub_blob (b, 1, fixture->len - 2);
   hb_blob_destroy (b);
   hb_blob_destroy (b);
+  b = fixture->blob;
 
 
-  test_blob (fixture, user_data);
+  /* A sub-blob is always created READONLY. */
 
 
-  fixture->data--;
-  fixture->len += 2;
+  g_assert (b);
+
+  len = hb_blob_get_length (b);
+  g_assert_cmpint (len, ==, fixture->len - 2);
+
+  data = hb_blob_get_data (b, &len);
+  g_assert_cmpint (len, ==, fixture->len - 2);
+  g_assert (data == fixture->data + 1);
+
+  data_writable = hb_blob_get_data_writable (b, &len);
+  g_assert_cmpint (len, ==, fixture->len - 2);
+  g_assert (data_writable);
+  if (mm == HB_MEMORY_MODE_READONLY)
+    g_assert (0 == memcmp (data_writable, fixture->data + 1, fixture->len - 2));
+  g_assert (data_writable != data);
+  g_assert_cmpint (fixture->freed, ==, 1);
+
+  data = hb_blob_get_data (b, &len);
+  g_assert_cmpint (len, ==, fixture->len - 2);
+  g_assert (data == data_writable);
+
+  memset (data_writable, 0, fixture->len - 2);
+
+  /* Now, make it immutable and watch get_data_writable() fail */
+
+  g_assert (!hb_blob_is_immutable (b));
+  hb_blob_make_immutable (b);
+  g_assert (hb_blob_is_immutable (b));
+
+  data_writable = hb_blob_get_data_writable (b, &len);
+  g_assert (!data_writable);
+  g_assert_cmpint (len, ==, 0);
+
+  data = hb_blob_get_data (b, &len);
+  g_assert_cmpint (len, ==, fixture->len - 2);
+  for (i = 0; i < len; i++)
+    g_assert ('\0' == data[i]);
 }
 
 
 }
 
 
index 82fdaae..17607f1 100644 (file)
@@ -110,7 +110,6 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
-  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
 
 
   /* test property changes are retained */
 
 
   /* test property changes are retained */
@@ -131,9 +130,11 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
   hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
+  hb_buffer_set_replacement_codepoint (b, (unsigned int) -1);
+  g_assert (hb_buffer_get_replacement_codepoint (b) == (unsigned int) -1);
 
 
 
 
-  /* test clear clears all properties but unicode_funcs */
+  /* test clear_contents clears all these properties: */
 
   hb_buffer_clear_contents (b);
 
 
   hb_buffer_clear_contents (b);
 
@@ -141,7 +142,11 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
   g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
-  g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
+
+  /* but not these: */
+
+  g_assert (hb_buffer_get_flags (b) != HB_BUFFER_FLAGS_DEFAULT);
+  g_assert (hb_buffer_get_replacement_codepoint (b) != HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
 
 
   /* test reset clears all properties */
 
 
   /* test reset clears all properties */
@@ -158,6 +163,9 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
   hb_buffer_set_flags (b, HB_BUFFER_FLAG_BOT);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAG_BOT);
 
+  hb_buffer_set_replacement_codepoint (b, (unsigned int) -1);
+  g_assert (hb_buffer_get_replacement_codepoint (b) == (unsigned int) -1);
+
   hb_buffer_reset (b);
 
   g_assert (hb_buffer_get_unicode_funcs (b) == hb_unicode_funcs_get_default ());
   hb_buffer_reset (b);
 
   g_assert (hb_buffer_get_unicode_funcs (b) == hb_unicode_funcs_get_default ());
@@ -165,6 +173,7 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data)
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
   g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID);
   g_assert (hb_buffer_get_language (b) == NULL);
   g_assert (hb_buffer_get_flags (b) == HB_BUFFER_FLAGS_DEFAULT);
+  g_assert (hb_buffer_get_replacement_codepoint (b) == HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
 }
 
 static void
 }
 
 static void
@@ -374,6 +383,7 @@ test_buffer_utf8_conversion (void)
   unsigned int bytes, chars, i, j, len;
 
   b = hb_buffer_create ();
   unsigned int bytes, chars, i, j, len;
 
   b = hb_buffer_create ();
+  hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1);
 
   for (i = 0; i < G_N_ELEMENTS (utf8_conversion_tests); i++)
   {
 
   for (i = 0; i < G_N_ELEMENTS (utf8_conversion_tests); i++)
   {
@@ -388,7 +398,7 @@ test_buffer_utf8_conversion (void)
     for (chars = 0; test->codepoints[chars]; chars++)
       ;
 
     for (chars = 0; test->codepoints[chars]; chars++)
       ;
 
-    hb_buffer_reset (b);
+    hb_buffer_clear_contents (b);
     hb_buffer_add_utf8 (b, test->utf8, bytes,  1, bytes - 2);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
     hb_buffer_add_utf8 (b, test->utf8, bytes,  1, bytes - 2);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
@@ -449,11 +459,15 @@ static const utf8_validity_test_t utf8_validity_tests[] = {
   { "\x7f", -1, 1, TRUE },
   { "\xdf\xbf", -1, 2, TRUE },
   { "\xef\xbf\xbf", -1, 0, TRUE },
   { "\x7f", -1, 1, TRUE },
   { "\xdf\xbf", -1, 2, TRUE },
   { "\xef\xbf\xbf", -1, 0, TRUE },
-  { "\xf7\xbf\xbf\xbf", -1, 0, TRUE },
+  { "\xf4\x8f\xbf\xbf", -1, 0, TRUE },
+  { "\xf4\x90\xbf\xbf", -1, 0, FALSE },
+  { "\xf7\xbf\xbf\xbf", -1, 0, FALSE },
   { "\xfb\xbf\xbf\xbf\xbf", -1, 0, FALSE },
   { "\xfd\xbf\xbf\xbf\xbf\xbf", -1, 0, FALSE },
   /* other boundary conditions */
   { "\xed\x9f\xbf", -1, 3, TRUE },
   { "\xfb\xbf\xbf\xbf\xbf", -1, 0, FALSE },
   { "\xfd\xbf\xbf\xbf\xbf\xbf", -1, 0, FALSE },
   /* other boundary conditions */
   { "\xed\x9f\xbf", -1, 3, TRUE },
+  { "\xed\xa0\x80", -1, 0, FALSE },
+  { "\xed\xbf\xbf", -1, 0, FALSE },
   { "\xee\x80\x80", -1, 3, TRUE },
   { "\xef\xbf\xbd", -1, 3, TRUE },
   { "\xf4\x8f\xbf\xbf", -1, 0, TRUE },
   { "\xee\x80\x80", -1, 3, TRUE },
   { "\xef\xbf\xbd", -1, 3, TRUE },
   { "\xf4\x8f\xbf\xbf", -1, 0, TRUE },
@@ -610,8 +624,6 @@ static const utf8_validity_test_t utf8_validity_tests[] = {
   /* impossible bytes */
   { "\x20\xfe\x20", -1, 1, FALSE },
   { "\x20\xff\x20", -1, 1, FALSE },
   /* impossible bytes */
   { "\x20\xfe\x20", -1, 1, FALSE },
   { "\x20\xff\x20", -1, 1, FALSE },
-#if 0
-  /* XXX fix these, or document that we don't detect them? */
   /* overlong sequences */
   { "\x20\xc0\xaf\x20", -1, 1, FALSE },
   { "\x20\xe0\x80\xaf\x20", -1, 1, FALSE },
   /* overlong sequences */
   { "\x20\xc0\xaf\x20", -1, 1, FALSE },
   { "\x20\xe0\x80\xaf\x20", -1, 1, FALSE },
@@ -644,6 +656,7 @@ static const utf8_validity_test_t utf8_validity_tests[] = {
   { "\x20\xed\xae\x80\xed\xbf\xbf\x20", -1, 1, FALSE },
   { "\x20\xed\xaf\xbf\xed\xb0\x80\x20", -1, 1, FALSE },
   { "\x20\xed\xaf\xbf\xed\xbf\xbf\x20", -1, 1, FALSE },
   { "\x20\xed\xae\x80\xed\xbf\xbf\x20", -1, 1, FALSE },
   { "\x20\xed\xaf\xbf\xed\xb0\x80\x20", -1, 1, FALSE },
   { "\x20\xed\xaf\xbf\xed\xbf\xbf\x20", -1, 1, FALSE },
+#if 0 /* We don't consider U+FFFE / U+FFFF and similar invalid. */
   { "\x20\xef\xbf\xbe\x20", -1, 1, FALSE },
   { "\x20\xef\xbf\xbf\x20", -1, 1, FALSE },
 #endif
   { "\x20\xef\xbf\xbe\x20", -1, 1, FALSE },
   { "\x20\xef\xbf\xbf\x20", -1, 1, FALSE },
 #endif
@@ -657,6 +670,7 @@ test_buffer_utf8_validity (void)
   unsigned int i;
 
   b = hb_buffer_create ();
   unsigned int i;
 
   b = hb_buffer_create ();
+  hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1);
 
   for (i = 0; i < G_N_ELEMENTS (utf8_validity_tests); i++)
   {
 
   for (i = 0; i < G_N_ELEMENTS (utf8_validity_tests); i++)
   {
@@ -675,7 +689,7 @@ test_buffer_utf8_validity (void)
     else
       segment_bytes = test->max_len;
 
     else
       segment_bytes = test->max_len;
 
-    hb_buffer_reset (b);
+    hb_buffer_clear_contents (b);
     hb_buffer_add_utf8 (b, test->utf8, text_bytes,  0, segment_bytes);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
     hb_buffer_add_utf8 (b, test->utf8, text_bytes,  0, segment_bytes);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
@@ -704,7 +718,8 @@ static const utf16_conversion_test_t utf16_conversion_tests[] = {
   {{0x41, 0xD800, 0xDF02}, {-1}},
   {{0x41, 0x61, 0xD800, 0xDF02}, {0x61, -1}},
   {{0x41, 0xD800, 0x61, 0xDF02}, {-1, 0x61}},
   {{0x41, 0xD800, 0xDF02}, {-1}},
   {{0x41, 0x61, 0xD800, 0xDF02}, {0x61, -1}},
   {{0x41, 0xD800, 0x61, 0xDF02}, {-1, 0x61}},
-  {{0x41, 0x61}, {}}
+  {{0x41, 0xDF00, 0x61}, {-1}},
+  {{0x41, 0x61}, {0}}
 };
 
 static void
 };
 
 static void
@@ -714,6 +729,7 @@ test_buffer_utf16_conversion (void)
   unsigned int i;
 
   b = hb_buffer_create ();
   unsigned int i;
 
   b = hb_buffer_create ();
+  hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1);
 
   for (i = 0; i < G_N_ELEMENTS (utf16_conversion_tests); i++)
   {
 
   for (i = 0; i < G_N_ELEMENTS (utf16_conversion_tests); i++)
   {
@@ -728,7 +744,7 @@ test_buffer_utf16_conversion (void)
     for (chars = 0; test->codepoints[chars]; chars++)
       ;
 
     for (chars = 0; test->codepoints[chars]; chars++)
       ;
 
-    hb_buffer_reset (b);
+    hb_buffer_clear_contents (b);
     hb_buffer_add_utf16 (b, test->utf16, u_len,  1, u_len - 2);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
     hb_buffer_add_utf16 (b, test->utf16, u_len,  1, u_len - 2);
 
     glyphs = hb_buffer_get_glyph_infos (b, &len);
@@ -740,6 +756,61 @@ test_buffer_utf16_conversion (void)
   hb_buffer_destroy (b);
 }
 
   hb_buffer_destroy (b);
 }
 
+
+typedef struct {
+  const uint32_t utf32[8];
+  const uint32_t codepoints[8];
+} utf32_conversion_test_t;
+
+/* note: we skip the first and last item from utf32 when adding to buffer */
+static const utf32_conversion_test_t utf32_conversion_tests[] = {
+  {{0x41, 0x004D, 0x0430, 0x4E8C, 0xD800, 0xDF02, 0x61} , {0x004D, 0x0430, 0x4E8C, -3, -3}},
+  {{0x41, 0x004D, 0x0430, 0x4E8C, 0x10302, 0x61} , {0x004D, 0x0430, 0x4E8C, 0x10302}},
+  {{0x41, 0xD800, 0xDF02, 0x61}, {-3, -3}},
+  {{0x41, 0xD800, 0xDF02}, {-3}},
+  {{0x41, 0x61, 0xD800, 0xDF02}, {0x61, -3}},
+  {{0x41, 0xD800, 0x61, 0xDF02}, {-3, 0x61}},
+  {{0x41, 0xDF00, 0x61}, {-3}},
+  {{0x41, 0x10FFFF, 0x61}, {0x10FFFF}},
+  {{0x41, 0x110000, 0x61}, {-3}},
+  {{0x41, 0x61}, {0}}
+};
+
+static void
+test_buffer_utf32_conversion (void)
+{
+  hb_buffer_t *b;
+  unsigned int i;
+
+  b = hb_buffer_create ();
+  hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -3);
+
+  for (i = 0; i < G_N_ELEMENTS (utf32_conversion_tests); i++)
+  {
+    const utf32_conversion_test_t *test = &utf32_conversion_tests[i];
+    unsigned int u_len, chars, j, len;
+    hb_glyph_info_t *glyphs;
+
+    g_test_message ("UTF-32 test #%d", i);
+
+    for (u_len = 0; test->utf32[u_len]; u_len++)
+      ;
+    for (chars = 0; test->codepoints[chars]; chars++)
+      ;
+
+    hb_buffer_clear_contents (b);
+    hb_buffer_add_utf32 (b, test->utf32, u_len,  1, u_len - 2);
+
+    glyphs = hb_buffer_get_glyph_infos (b, &len);
+    g_assert_cmpint (len, ==, chars);
+    for (j = 0; j < chars; j++)
+      g_assert_cmphex (glyphs[j].codepoint, ==, test->codepoints[j]);
+  }
+
+  hb_buffer_destroy (b);
+}
+
+
 static void
 test_empty (hb_buffer_t *b)
 {
 static void
 test_empty (hb_buffer_t *b)
 {
@@ -806,6 +877,7 @@ main (int argc, char **argv)
   hb_test_add (test_buffer_utf8_conversion);
   hb_test_add (test_buffer_utf8_validity);
   hb_test_add (test_buffer_utf16_conversion);
   hb_test_add (test_buffer_utf8_conversion);
   hb_test_add (test_buffer_utf8_validity);
   hb_test_add (test_buffer_utf16_conversion);
+  hb_test_add (test_buffer_utf32_conversion);
   hb_test_add (test_buffer_empty);
 
   return hb_test_run();
   hb_test_add (test_buffer_empty);
 
   return hb_test_run();
index 25a38e5..6e8602f 100644 (file)
 #include <hb-uniscribe.h>
 #endif
 
 #include <hb-uniscribe.h>
 #endif
 
+#ifdef HAVE_CORETEXT
+#include <hb-coretext.h>
+#endif
+
 int
 main (int argc, char **argv)
 {
 int
 main (int argc, char **argv)
 {
index 40540c4..6b6a503 100644 (file)
@@ -136,7 +136,6 @@ _test_font_nil_funcs (hb_font_t *font)
   g_assert (!hb_font_get_glyph (font, 17, 2, &glyph));
   g_assert_cmpint (glyph, ==, 0);
 
   g_assert (!hb_font_get_glyph (font, 17, 2, &glyph));
   g_assert_cmpint (glyph, ==, 0);
 
-  x = 13;
   x = hb_font_get_glyph_h_kerning (font, 17, 19);
   g_assert_cmpint (x, ==, 0);
 }
   x = hb_font_get_glyph_h_kerning (font, 17, 19);
   g_assert_cmpint (x, ==, 0);
 }
index 79e2bbf..b667c7d 100644 (file)
@@ -195,17 +195,21 @@ test_ot_tag_language (void)
 
   test_language_two_way ("ZHH", "zh-hk"); /* Chinese (Hong Kong) */
 
 
   test_language_two_way ("ZHH", "zh-hk"); /* Chinese (Hong Kong) */
 
+  test_tag_from_language ("ZHS", "zh"); /* Chinese */
   test_tag_from_language ("ZHS", "zh-cn"); /* Chinese (China) */
   test_tag_from_language ("ZHS", "zh-sg"); /* Chinese (Singapore) */
   test_tag_from_language ("ZHT", "zh-mo"); /* Chinese (Macao) */
   test_tag_from_language ("ZHT", "zh-tw"); /* Chinese (Taiwan) */
   test_tag_from_language ("ZHS", "zh-cn"); /* Chinese (China) */
   test_tag_from_language ("ZHS", "zh-sg"); /* Chinese (Singapore) */
   test_tag_from_language ("ZHT", "zh-mo"); /* Chinese (Macao) */
   test_tag_from_language ("ZHT", "zh-tw"); /* Chinese (Taiwan) */
+  test_tag_from_language ("ZHS", "zh-Hans"); /* Chinese (Simplified) */
+  test_tag_from_language ("ZHT", "zh-Hant"); /* Chinese (Traditional) */
+  test_tag_from_language ("ZHS", "zh-xx"); /* Chinese (Other) */
 
   test_tag_from_language ("ZHS", "zh"); /* Chinese */
   test_tag_from_language ("ZHS", "zh-xx");
 
 
   test_tag_from_language ("ZHS", "zh"); /* Chinese */
   test_tag_from_language ("ZHS", "zh-xx");
 
-  test_tag_to_language ("ZHS", "zh-x-hbotzhs");
-  test_tag_to_language ("ZHT", "zh-x-hbotzht");
-  test_tag_to_language ("ZHP", "zh-x-hbotzhp");
+  test_tag_to_language ("ZHS", "zh-Hans");
+  test_tag_to_language ("ZHT", "zh-Hant");
+  test_tag_to_language ("ZHP", "x-hbotzhp");
 
   test_language_two_way ("ABC", "x-hbotabc");
   test_tag_from_language ("ABC", "asdf-asdf-wer-x-hbotabc-zxc");
 
   test_language_two_way ("ABC", "x-hbotabc");
   test_tag_from_language ("ABC", "asdf-asdf-wer-x-hbotabc-zxc");
index b9e7ef8..9634951 100644 (file)
 static void
 test_empty (hb_set_t *s)
 {
 static void
 test_empty (hb_set_t *s)
 {
-  hb_codepoint_t next = (hb_codepoint_t) -1;
+  hb_codepoint_t next = HB_SET_VALUE_INVALID;
   g_assert_cmpint (hb_set_get_population (s), ==, 0);
   g_assert_cmpint (hb_set_get_population (s), ==, 0);
-  g_assert_cmpint (hb_set_get_min (s), ==, (hb_codepoint_t) -1);
-  g_assert_cmpint (hb_set_get_max (s), ==, (hb_codepoint_t) -1);
+  g_assert_cmpint (hb_set_get_min (s), ==, HB_SET_VALUE_INVALID);
+  g_assert_cmpint (hb_set_get_max (s), ==, HB_SET_VALUE_INVALID);
   g_assert (!hb_set_has (s, 13));
   g_assert (!hb_set_next (s, &next));
   g_assert (!hb_set_has (s, 13));
   g_assert (!hb_set_next (s, &next));
-  g_assert_cmpint (next, ==, (hb_codepoint_t) -1);
+  g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
+  g_assert (hb_set_is_empty (s));
 }
 
 static void
 test_not_empty (hb_set_t *s)
 {
 }
 
 static void
 test_not_empty (hb_set_t *s)
 {
-  hb_codepoint_t next = (hb_codepoint_t) -1;
+  hb_codepoint_t next = HB_SET_VALUE_INVALID;
   g_assert_cmpint (hb_set_get_population (s), !=, 0);
   g_assert_cmpint (hb_set_get_population (s), !=, 0);
-  g_assert_cmpint (hb_set_get_min (s), !=, (hb_codepoint_t) -1);
-  g_assert_cmpint (hb_set_get_max (s), !=, (hb_codepoint_t) -1);
+  g_assert_cmpint (hb_set_get_min (s), !=, HB_SET_VALUE_INVALID);
+  g_assert_cmpint (hb_set_get_max (s), !=, HB_SET_VALUE_INVALID);
   g_assert (hb_set_next (s, &next));
   g_assert (hb_set_next (s, &next));
-  g_assert_cmpint (next, !=, (hb_codepoint_t) -1);
+  g_assert_cmpint (next, !=, HB_SET_VALUE_INVALID);
 }
 
 static void
 }
 
 static void
@@ -64,6 +65,10 @@ test_set_basic (void)
   hb_set_clear (s);
   test_empty (s);
 
   hb_set_clear (s);
   test_empty (s);
 
+  hb_set_add (s, 33000);
+  test_not_empty (s);
+  hb_set_clear (s);
+
   hb_set_add_range (s, 10, 29);
   test_not_empty (s);
   g_assert (hb_set_has (s, 13));
   hb_set_add_range (s, 10, 29);
   test_not_empty (s);
   g_assert (hb_set_has (s, 13));
@@ -86,6 +91,8 @@ test_set_basic (void)
   hb_set_del_range (s, 10, 18);
   test_not_empty (s);
   g_assert (!hb_set_has (s, 13));
   hb_set_del_range (s, 10, 18);
   test_not_empty (s);
   g_assert (!hb_set_has (s, 13));
+
+  hb_set_destroy (s);
 }
 
 static void
 }
 
 static void
@@ -147,6 +154,8 @@ test_set_algebra (void)
   g_assert (hb_set_has (s, 12));
   g_assert (!hb_set_has (s, 13));
   g_assert (hb_set_has (s, 19));
   g_assert (hb_set_has (s, 12));
   g_assert (!hb_set_has (s, 13));
   g_assert (hb_set_has (s, 19));
+
+  hb_set_destroy (s);
 }
 
 static void
 }
 
 static void
@@ -162,7 +171,7 @@ test_set_iter (void)
 
   test_not_empty (s);
 
 
   test_not_empty (s);
 
-  next = (hb_codepoint_t) -1;
+  next = HB_SET_VALUE_INVALID;
   g_assert (hb_set_next (s, &next));
   g_assert_cmpint (next, ==, 6);
   g_assert (hb_set_next (s, &next));
   g_assert (hb_set_next (s, &next));
   g_assert_cmpint (next, ==, 6);
   g_assert (hb_set_next (s, &next));
@@ -177,9 +186,9 @@ test_set_iter (void)
   g_assert (hb_set_next (s, &next));
   g_assert_cmpint (next, ==, 20005);
   g_assert (!hb_set_next (s, &next));
   g_assert (hb_set_next (s, &next));
   g_assert_cmpint (next, ==, 20005);
   g_assert (!hb_set_next (s, &next));
-  g_assert_cmpint (next, ==, 20005);
+  g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
 
 
-  first = last = (hb_codepoint_t) -1;
+  first = last = HB_SET_VALUE_INVALID;
   g_assert (hb_set_next_range (s, &first, &last));
   g_assert_cmpint (first, ==, 6);
   g_assert_cmpint (last,  ==, 6);
   g_assert (hb_set_next_range (s, &first, &last));
   g_assert_cmpint (first, ==, 6);
   g_assert_cmpint (last,  ==, 6);
@@ -190,8 +199,10 @@ test_set_iter (void)
   g_assert_cmpint (first, ==, 20005);
   g_assert_cmpint (last,  ==, 20005);
   g_assert (!hb_set_next_range (s, &first, &last));
   g_assert_cmpint (first, ==, 20005);
   g_assert_cmpint (last,  ==, 20005);
   g_assert (!hb_set_next_range (s, &first, &last));
-  g_assert_cmpint (first, ==, 20005);
-  g_assert_cmpint (last,  ==, 20005);
+  g_assert_cmpint (first, ==, HB_SET_VALUE_INVALID);
+  g_assert_cmpint (last,  ==, HB_SET_VALUE_INVALID);
+
+  hb_set_destroy (s);
 }
 
 static void
 }
 
 static void
@@ -221,6 +232,8 @@ test_set_empty (void)
   test_empty (b);
 
   g_assert (!hb_set_allocation_successful (b));
   test_empty (b);
 
   g_assert (!hb_set_allocation_successful (b));
+
+  hb_set_destroy (b);
 }
 
 int
 }
 
 int
index 96c61dd..88f12e7 100644 (file)
@@ -351,7 +351,7 @@ static const test_pair_t script_tests[] =
   {   0x07B1, HB_SCRIPT_THAANA },
   {   0x0E31, HB_SCRIPT_THAI },
   {   0x0FD4, HB_SCRIPT_TIBETAN },
   {   0x07B1, HB_SCRIPT_THAANA },
   {   0x0E31, HB_SCRIPT_THAI },
   {   0x0FD4, HB_SCRIPT_TIBETAN },
-  {   0x1401, HB_SCRIPT_CANADIAN_ABORIGINAL },
+  {   0x1401, HB_SCRIPT_CANADIAN_SYLLABICS },
   {   0xA015, HB_SCRIPT_YI },
   {   0x1700, HB_SCRIPT_TAGALOG },
   {   0x1720, HB_SCRIPT_HANUNOO },
   {   0xA015, HB_SCRIPT_YI },
   {   0x1700, HB_SCRIPT_TAGALOG },
   {   0x1720, HB_SCRIPT_HANUNOO },
index 4c9bd37..e6378b6 100644 (file)
@@ -46,27 +46,28 @@ test_version (void)
   g_free (s);
   g_assert (0 == strcmp (HB_VERSION_STRING, hb_version_string ()));
 
   g_free (s);
   g_assert (0 == strcmp (HB_VERSION_STRING, hb_version_string ()));
 
-  g_assert (HB_VERSION_CHECK (major, minor, micro));
-  g_assert (HB_VERSION_CHECK (major+1, minor, micro));
-  g_assert (HB_VERSION_CHECK (major, minor+1, micro));
-  g_assert (HB_VERSION_CHECK (major, minor, micro+1));
+  g_assert (HB_VERSION_ATLEAST (major, minor, micro));
   if (major)
   if (major)
-    g_assert (!HB_VERSION_CHECK (major-1, minor, micro));
+    g_assert (HB_VERSION_ATLEAST (major-1, minor, micro));
   if (minor)
   if (minor)
-    g_assert (!HB_VERSION_CHECK (major, minor-1, micro));
+    g_assert (HB_VERSION_ATLEAST (major, minor-1, micro));
   if (micro)
   if (micro)
-    g_assert (!HB_VERSION_CHECK (major, minor, micro-1));
+    g_assert (HB_VERSION_ATLEAST (major, minor, micro-1));
+  g_assert (!HB_VERSION_ATLEAST (major+1, minor, micro));
+  g_assert (!HB_VERSION_ATLEAST (major, minor+1, micro));
+  g_assert (!HB_VERSION_ATLEAST (major, minor, micro+1));
+  g_assert (!HB_VERSION_ATLEAST (major, minor, micro+1));
 
 
-  g_assert (hb_version_check (major, minor, micro));
-  g_assert (hb_version_check (major+1, minor, micro));
-  g_assert (hb_version_check (major, minor+1, micro));
-  g_assert (hb_version_check (major, minor, micro+1));
+  g_assert (hb_version_atleast (major, minor, micro));
   if (major)
   if (major)
-    g_assert (!hb_version_check (major-1, minor, micro));
+    g_assert (hb_version_atleast (major-1, minor, micro));
   if (minor)
   if (minor)
-    g_assert (!hb_version_check (major, minor-1, micro));
+    g_assert (hb_version_atleast (major, minor-1, micro));
   if (micro)
   if (micro)
-    g_assert (!hb_version_check (major, minor, micro-1));
+    g_assert (hb_version_atleast (major, minor, micro-1));
+  g_assert (!hb_version_atleast (major+1, minor, micro));
+  g_assert (!hb_version_atleast (major, minor+1, micro));
+  g_assert (!hb_version_atleast (major, minor, micro+1));
 }
 
 int
 }
 
 int
index 4fb762c..e2dcc98 100644 (file)
@@ -7,7 +7,7 @@ DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
 manifests:
 MAINTAINERCLEANFILES =
 
 manifests:
-       @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts"
+       @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts" "$(srcdir)/tests"
 
 EXTRA_DIST += \
        hb-diff \
 
 EXTRA_DIST += \
        hb-diff \
@@ -20,6 +20,11 @@ EXTRA_DIST += \
        hb-unicode-decode \
        hb-unicode-encode \
        hb-unicode-prettyname \
        hb-unicode-decode \
        hb-unicode-encode \
        hb-unicode-prettyname \
+       record-test.sh \
+       run-tests.sh \
+       texts/in-tree \
+       fonts/sha1sum \
+       $(TESTS) \
        $(NULL)
 
 # TODO Figure out Python stuff
        $(NULL)
 
 # TODO Figure out Python stuff
@@ -30,6 +35,39 @@ CLEANFILES += \
        hb_test_tools.py[co] \
        $(NULL)
 
        hb_test_tools.py[co] \
        $(NULL)
 
+TESTS = \
+       tests/arabic-fallback-shaping.tests \
+       tests/arabic-feature-order.tests \
+       tests/context-matching.tests \
+       tests/hangul-jamo.tests \
+       tests/indic-old-spec.tests \
+       tests/indic-pref-blocking.tests \
+       tests/mongolian-variation-selector.tests \
+       tests/zero-width-marks.tests \
+       $(NULL)
+
+TEST_EXTENSIONS = \
+       .tests \
+       $(NULL)
+
+AM_TESTS_ENVIRONMENT = \
+       EXEEXT="$(EXEEXT)"; \
+       export EXEEXT; \
+       srcdir="$(srcdir)"; \
+       export srcdir; \
+       builddir="$(builddir)"; \
+       export builddir; \
+       $(NULL)
+
+if AUTOMAKE_OLDER_THAN_1_13
+TESTS_ENVIRONMENT = \
+       $(AM_TESTS_ENVIRONMENT) \
+       $(TESTS_LOG_COMPILER) \
+       $(NULL)
+endif
+
+TESTS_LOG_COMPILER = sh $(srcdir)/run-tests.sh
+
 .PHONY: manifests
 
 -include $(top_srcdir)/git.mk
 .PHONY: manifests
 
 -include $(top_srcdir)/git.mk
index bf1bbee..e5f1224 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # Process this file with automake to produce Makefile.in
 VPATH = @srcdir@
 
 # Process this file with automake to produce Makefile.in
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -35,28 +79,249 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+TESTS = tests/arabic-fallback-shaping.tests \
+       tests/arabic-feature-order.tests tests/context-matching.tests \
+       tests/hangul-jamo.tests tests/indic-old-spec.tests \
+       tests/indic-pref-blocking.tests \
+       tests/mongolian-variation-selector.tests \
+       tests/zero-width-marks.tests $(am__EXEEXT_1)
 subdir = test/shaping
 subdir = test/shaping
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/test-driver
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+am__EXEEXT_1 =
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.tests.log=.log)
+TESTS_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TESTS_LOG_COMPILE = $(TESTS_LOG_COMPILER) $(AM_TESTS_LOG_FLAGS) \
+       $(TESTS_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -95,6 +360,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -103,22 +369,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -148,6 +426,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -216,13 +495,35 @@ NULL =
 EXTRA_DIST = hb-diff hb-diff-colorize hb-diff-filter-failures \
        hb-diff-ngrams hb-diff-stat hb-manifest-read \
        hb-manifest-update hb-unicode-decode hb-unicode-encode \
 EXTRA_DIST = hb-diff hb-diff-colorize hb-diff-filter-failures \
        hb-diff-ngrams hb-diff-stat hb-manifest-read \
        hb-manifest-update hb-unicode-decode hb-unicode-encode \
-       hb-unicode-prettyname $(NULL) hb_test_tools.py $(NULL)
+       hb-unicode-prettyname record-test.sh run-tests.sh \
+       texts/in-tree fonts/sha1sum $(TESTS) $(NULL) hb_test_tools.py \
+       $(NULL)
 CLEANFILES = hb_test_tools.py[co] $(NULL)
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
 CLEANFILES = hb_test_tools.py[co] $(NULL)
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
+TEST_EXTENSIONS = \
+       .tests \
+       $(NULL)
+
+AM_TESTS_ENVIRONMENT = \
+       EXEEXT="$(EXEEXT)"; \
+       export EXEEXT; \
+       srcdir="$(srcdir)"; \
+       export srcdir; \
+       builddir="$(builddir)"; \
+       export builddir; \
+       $(NULL)
+
+@AUTOMAKE_OLDER_THAN_1_13_TRUE@TESTS_ENVIRONMENT = \
+@AUTOMAKE_OLDER_THAN_1_13_TRUE@        $(AM_TESTS_ENVIRONMENT) \
+@AUTOMAKE_OLDER_THAN_1_13_TRUE@        $(TESTS_LOG_COMPILER) \
+@AUTOMAKE_OLDER_THAN_1_13_TRUE@        $(NULL)
+
+TESTS_LOG_COMPILER = sh $(srcdir)/run-tests.sh
 all: all-am
 
 .SUFFIXES:
 all: all-am
 
 .SUFFIXES:
+.SUFFIXES: .log .tests .tests$(EXEEXT) .trs
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -259,12 +560,168 @@ mostlyclean-libtool:
 
 clean-libtool:
        -rm -rf .libs _libs
 
 clean-libtool:
        -rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       else \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+.tests.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TESTS_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.tests$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TESTS_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -297,6 +754,7 @@ distdir: $(DISTFILES)
          fi; \
        done
 check-am: all-am
          fi; \
        done
 check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
 all-am: Makefile
 installdirs:
 check: check-am
 all-am: Makefile
 installdirs:
@@ -320,6 +778,9 @@ install-strip:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
@@ -399,22 +860,24 @@ ps-am:
 
 uninstall-am:
 
 
 uninstall-am:
 
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-       distclean distclean-generic distclean-libtool distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs maintainer-clean \
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
        maintainer-clean-generic mostlyclean mostlyclean-generic \
        maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \
+       uninstall uninstall-am
 
 
 manifests:
 
 
 manifests:
-       @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts"
+       @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts" "$(srcdir)/tests"
 
 .PHONY: manifests
 
 
 .PHONY: manifests
 
diff --git a/test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf b/test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf
new file mode 100644 (file)
index 0000000..70c0c0a
Binary files /dev/null and b/test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf differ
diff --git a/test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf b/test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf
new file mode 100644 (file)
index 0000000..fc22649
Binary files /dev/null and b/test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf differ
diff --git a/test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf b/test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf
new file mode 100644 (file)
index 0000000..14defeb
Binary files /dev/null and b/test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf differ
diff --git a/test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf b/test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
new file mode 100644 (file)
index 0000000..dfaead7
Binary files /dev/null and b/test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf differ
diff --git a/test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf b/test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
new file mode 100644 (file)
index 0000000..746fc60
Binary files /dev/null and b/test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf differ
diff --git a/test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf b/test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
new file mode 100644 (file)
index 0000000..bbe2237
Binary files /dev/null and b/test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf differ
diff --git a/test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf b/test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf
new file mode 100644 (file)
index 0000000..27efd7c
Binary files /dev/null and b/test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf differ
diff --git a/test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf b/test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf
new file mode 100644 (file)
index 0000000..b728b27
Binary files /dev/null and b/test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf differ
diff --git a/test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf b/test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf
new file mode 100644 (file)
index 0000000..2cbb67a
Binary files /dev/null and b/test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf differ
diff --git a/test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf b/test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf
new file mode 100644 (file)
index 0000000..875c699
Binary files /dev/null and b/test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf differ
diff --git a/test/shaping/fonts/sha1sum/MANIFEST b/test/shaping/fonts/sha1sum/MANIFEST
new file mode 100644 (file)
index 0000000..c51639b
--- /dev/null
@@ -0,0 +1,18 @@
+226bc2deab3846f1a682085f70c67d0421014144.ttf
+270b89df543a7e48e206a2d830c0e10e5265c630.ttf
+37033cc5cf37bb223d7355153016b6ccece93b28.ttf
+4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
+57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
+757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
+7e14e7883ed152baa158b80e207b66114c823a8b.ttf
+813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf
+8454d22037f892e76614e1645d066689a0200e61.ttf
+8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf
+a919b33197965846f21074b24e30250d67277bce.ttf
+bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf
+bb9473d2403488714043bcfb946c9f78b86ad627.ttf
+d629e7fedc0b350222d7987345fe61613fa3929a.ttf
+df768b9c257e0c9c35786c47cae15c46571d56be.ttf
+e207635780b42f898d58654b65098763e340f5c7.ttf
+ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf
+f499fbc23865022234775c43503bba2e63978fe1.ttf
diff --git a/test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf b/test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf
new file mode 100644 (file)
index 0000000..d2f116e
Binary files /dev/null and b/test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf differ
diff --git a/test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf b/test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf
new file mode 100644 (file)
index 0000000..fba200f
Binary files /dev/null and b/test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf differ
diff --git a/test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf b/test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf
new file mode 100644 (file)
index 0000000..b16dae6
Binary files /dev/null and b/test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf differ
diff --git a/test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf b/test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf
new file mode 100644 (file)
index 0000000..e674a78
Binary files /dev/null and b/test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf differ
diff --git a/test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf b/test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf
new file mode 100644 (file)
index 0000000..c6d8b18
Binary files /dev/null and b/test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf differ
diff --git a/test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf b/test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf
new file mode 100644 (file)
index 0000000..d91df57
Binary files /dev/null and b/test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf differ
diff --git a/test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf b/test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf
new file mode 100644 (file)
index 0000000..629c470
Binary files /dev/null and b/test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf differ
diff --git a/test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf b/test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf
new file mode 100644 (file)
index 0000000..3c60593
Binary files /dev/null and b/test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf differ
index ccb0e1c..7674fdf 100644 (file)
@@ -405,7 +405,7 @@ class Unicode:
 
        @staticmethod
        def decode (s):
 
        @staticmethod
        def decode (s):
-               return '<' + u','.join ("U+%04X" % ord (u) for u in unicode (s, 'utf-8')).encode ('utf-8') + '>'
+               return u','.join ("U+%04X" % ord (u) for u in unicode (s, 'utf-8')).encode ('utf-8')
 
        @staticmethod
        def parse (s):
 
        @staticmethod
        def parse (s):
diff --git a/test/shaping/record-test.sh b/test/shaping/record-test.sh
new file mode 100755 (executable)
index 0000000..a69157f
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+dir=`mktemp --directory`
+
+hb_shape=$1
+shift
+fontfile=$1
+shift
+hb_shape="$hb_shape $@"
+unicodes=`./hb-unicode-decode`
+text=`./hb-unicode-encode "$unicodes"`
+glyphs=`echo "$text" | $hb_shape "$fontfile"`
+
+cp "$fontfile" "$dir/font.ttf"
+pyftsubset \
+       --glyph-names \
+       "$dir/font.ttf" \
+       --text="$text"
+if ! test -s "$dir/font.ttf.subset"; then
+       echo "Subsetter didn't produce nonempty subset font in $dir/font.ttf.subset" >&2
+       exit 2
+fi
+
+# Verify that subset font produces same glyphs!
+glyphs_subset=`echo "$text" | $hb_shape "$dir/font.ttf.subset"`
+
+if ! test "x$glyphs" = "x$glyphs_subset"; then
+       echo "Subset font produced different glyphs!" >&2
+       echo "Perhaps font doesn't have glyph names; checking visually..." >&2
+       hb_view=${hb_shape/shape/view}
+       echo "$text" | $hb_view "$dir/font.ttf" --output-format=png --output-file="$dir/orig.png"
+       echo "$text" | $hb_view "$dir/font.ttf.subset" --output-format=png --output-file="$dir/subset.png"
+       if ! cmp "$dir/orig.png" "$dir/subset.png"; then
+               echo "Images differ.  Please inspect $dir/*.png." >&2
+               echo "$glyphs"
+               echo "$glyphs_subset"
+               exit 2
+       fi
+       echo "Yep; all good." >&2
+       rm -f "$dir/orig.png"
+       rm -f "$dir/subset.png"
+       glyphs=$glyphs_subset
+fi
+
+sha1sum=`sha1sum "$dir/font.ttf.subset" | cut -d' ' -f1`
+subset="fonts/sha1sum/$sha1sum.ttf"
+mv "$dir/font.ttf.subset" "$subset"
+
+echo "$subset:$unicodes:$glyphs"
+
+rm -f "$dir/font.ttf"
+rmdir "$dir"
diff --git a/test/shaping/run-tests.sh b/test/shaping/run-tests.sh
new file mode 100755 (executable)
index 0000000..a2cdf32
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+test "x$srcdir" = x && srcdir=.
+test "x$builddir" = x && builddir=.
+test "x$top_builddir" = x && top_builddir=../..
+
+hb_shape=$top_builddir/util/hb-shape$EXEEXT
+
+fails=0
+
+if test $# = 0; then
+       set /dev/stdin
+fi
+
+IFS=:
+for f in "$@"; do
+       echo "Running tests in $f"
+       while read fontfile unicodes glyphs_expected; do
+               echo "Testing $fontfile:$unicodes"
+               glyphs=`$srcdir/hb-unicode-encode "$unicodes" | $hb_shape "$srcdir/$fontfile"`
+               if ! test "x$glyphs" = "x$glyphs_expected"; then
+                       echo "Actual:   $glyphs" >&2
+                       echo "Expected: $glyphs_expected" >&2
+                       fails=$((fails+1))
+               fi
+       done < "$f"
+done
+
+if test $fails != 0; then
+       echo "$fails tests failed."
+       exit 1
+else
+       echo "All tests passed."
+fi
diff --git a/test/shaping/tests/arabic-fallback-shaping.tests b/test/shaping/tests/arabic-fallback-shaping.tests
new file mode 100644 (file)
index 0000000..0240448
--- /dev/null
@@ -0,0 +1 @@
+fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf:U+0633,U+064F,U+0644,U+064E,U+0651,U+0627,U+0651,U+0650,U+0645,U+062A,U+06CC:[uni06CC.fina=10+1655|uni062A.medi=9+868|uni0645.init=8+1098|uni0650=2@208,0+0|uni0651=2@272,768+0|uni064E=2@944,1216+0|uni0651=2@1008,768+0|uni06440627.fina=2+1470|uni064F=0@576,-32+0|uni0633.init=0+1585]
diff --git a/test/shaping/tests/arabic-feature-order.tests b/test/shaping/tests/arabic-feature-order.tests
new file mode 100644 (file)
index 0000000..3e3cf6a
--- /dev/null
@@ -0,0 +1,3 @@
+fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf:U+1820,U+180B:[uni2048.E81A=0+1550]
+fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf:U+1820,U+180B:[uni2048.E81A=0+1550]
+fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf:U+0644,U+0644,U+0647:[Lellah=0+1503]
diff --git a/test/shaping/tests/context-matching.tests b/test/shaping/tests/context-matching.tests
new file mode 100644 (file)
index 0000000..4c7d25f
--- /dev/null
@@ -0,0 +1,3 @@
+fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf:U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+1212|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
+fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf:U+0915,U+093F,U+0915,U+093F:[ivowelsign03deva=0+530|kadeva=0+1561|ivowelsign03deva=2+530|kadeva=2+1561]
+fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf:U+09B0,U+09CD,U+09A5,U+09CD,U+09AF,U+09C0:[gid1=0+1320|gid13=0+523|gid18=0+545]
diff --git a/test/shaping/tests/hangul-jamo.tests b/test/shaping/tests/hangul-jamo.tests
new file mode 100644 (file)
index 0000000..7c1ef6b
--- /dev/null
@@ -0,0 +1,11 @@
+[gid64252=0+920|gid64568=0+0]
+[gid3=0+920|gid4=0+0]
+win/util/hb-view.exe --viewr uniscribe
+[gid64252=0+920|gid64568=0+0]
+[gid3=0+920|gid4=0+0]
+win/util/hb-shape.exe --shaper uniscribe
+win/util/hb-view.exe --viewr uniscribe
+[gid64252=0+920|gid64568=0+0]
+[gid3=0+920|gid4=0+0]
+fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf:U+115F,U+11A2:[gid3=0+920|gid4=0+0]
+fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf:U+11A2:[gid1=0+920]
diff --git a/test/shaping/tests/indic-old-spec.tests b/test/shaping/tests/indic-old-spec.tests
new file mode 100644 (file)
index 0000000..96e8cdd
--- /dev/null
@@ -0,0 +1,2 @@
+fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf:U+0C9A,U+0CCD,U+0C9A,U+0CCD:[U0C9A_U0CCD.haln=0+1066|U0C9A_0CCD.blwf=0+0]
+fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf:U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D:[glyph201=0+1183|U0D4D=0+0]
diff --git a/test/shaping/tests/indic-pref-blocking.tests b/test/shaping/tests/indic-pref-blocking.tests
new file mode 100644 (file)
index 0000000..260980a
--- /dev/null
@@ -0,0 +1,2 @@
+fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf:U+0D2F,U+0D4D,U+0D30,U+0D46:[evowelsignmlym=0+1465|rapostmlym=0+499|yamlym=0+2120]
+fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf:U+0D2F,U+0D4D,U+0D30,U+0D46:[yamlym=0+2120|viramamlym=0+0|evowelsignmlym=0+1465|ramlym=0+1507]
diff --git a/test/shaping/tests/mongolian-variation-selector.tests b/test/shaping/tests/mongolian-variation-selector.tests
new file mode 100644 (file)
index 0000000..6b7e94a
--- /dev/null
@@ -0,0 +1,3 @@
+fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf:U+1826,U+180B,U+1826:[uni1826.E85E_ue.init1=0+599|uni1826.E856_ue.fina=2+750]
+fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf:U+1820,U+180B:[uni1820.E821_a.isol1=0+1199]
+fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf:U+183A,U+1823,U+182E,U+182B,U+1822,U+1826,U+180B,U+1832,U+180B,U+1827,U+1837,U+0020,U+182D,U+182D,U+180B,U+0020,U+182D,U+180C,U+0020,U+182D,U+180D,U+200D,U+0020,U+182D,U+200D,U+182D,U+180B,U+200D,U+0020,U+182D,U+180C,U+200D,U+0020,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+200D,U+182D,U+180B,U+200D,U+0020,U+200D,U+182D,U+180C,U+200D,U+0020,U+200D,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+182D,U+180B,U+0020,U+200D,U+182D,U+180C,U+0020,U+1820,U+200C,U+182D,U+1820,U+1837,U+0020,U+1830,U+1824,U+1837,U+200D,U+200D,U+182D,U+1820,U+200D,U+0020,U+200D,U+182D,U+1824,U+182F,U+1822,U+0020,U+182A,U+1820,U+1822,U+182D,U+180E,U+1820,U+202F,U+1836,U+1822,U+1828:[uni183A1823.E971_ko.init=0+950|uni182E.E904_m.medi=2+400|uni182B1822.E8A6_pi.medi=3+1150|uni1826.E854_ue.medi1=5+1100|uni1832.E916_t.medi1=7+1000|uni1827.E85C_ee.medi=9+750|uni1837.E931_r.fina=10+750|space=11+500|uni182D.E8E2_g.init=12+1000|uni182D.E8E8_g.fina1=13+1250|space=15+500|uni182D.EA1B_g.isol2=16+1000|space=18+500|uni182D.EA1E_g.init3=19+650|space=21+0|space=22+500|uni182D.E8E2_g.init=23+1000|space=24+0|uni182D.E8E5_g.medi1=25+800|space=27+0|space=28+500|uni182D.EA1D_g.init2=29+950|space=31+0|space=32+500|uni182D.EA1E_g.init3=33+650|space=35+0|space=36+500|space=37+0|uni182D.E8E4_g.medi=38+800|space=39+0|space=40+0|uni182D.E8E5_g.medi1=41+800|space=43+0|space=44+500|space=45+0|uni182D.E8E6_g.medi2=46+650|space=48+0|space=49+500|space=50+0|uni182D.E8E6_g.medi2=51+650|space=53+0|space=54+500|space=55+0|uni182D.E8E4_g.medi=56+800|space=57+0|uni182D.E8E8_g.fina1=58+1250|space=60+500|space=61+0|uni182D.E8E9_g.fina2=62+1050|space=64+500|uni1820.E820_a.isol=65+1550|space=66+0|uni182D.E8E2_g.init=67+1000|uni1820.E823_a.medi=68+400|uni1837.E931_r.fina=69+750|space=70+500|uni1830.E90B_s.init=71+850|uni1824.E844_u.medi=72+600|uni1837.E930_r.medi=73+600|space=74+0|space=75+0|uni182D.E8E5_g.medi1=76+800|uni1820.E823_a.medi=77+400|space=78+0|space=79+500|space=80+0|uni182D.E8E5_g.medi1=81+800|uni1824.E844_u.medi=82+600|uni182F.E908_l.medi=83+400|uni1822.E837_i.fina=84+600|space=85+500|uni182A1820.E875_ba.init=86+1000|uni1822.E836_i.medi2=88+1000|uni182D.E8E8_g.fina1=89+1250|space=90+0|uni1820.E827_a.fina2=91+600|uni202F.nobreak=92+500|uni1836.E92B_y.init1=93+500|uni1822.E834_i.medi=94+500|uni1828.E866_n.fina=95+850]
diff --git a/test/shaping/tests/zero-width-marks.tests b/test/shaping/tests/zero-width-marks.tests
new file mode 100644 (file)
index 0000000..be7ec96
--- /dev/null
@@ -0,0 +1,2 @@
+fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf:U+1030:[circledash=0+636|u1030.med=0@-162,0+0]
+fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf:U+05E0,U+05B8,U+0591,U+05DA,U+05B0:[uni05DA05B0=3+991|uni2009=0+200|uni0591=0@75,0+0|uni05B8=0@495,0+0|uni05E0=0+683]
diff --git a/test/shaping/texts/in-tree/MANIFEST b/test/shaping/texts/in-tree/MANIFEST
new file mode 100644 (file)
index 0000000..f7a7a96
--- /dev/null
@@ -0,0 +1,9 @@
+shaper-arabic
+shaper-default
+shaper-hangul
+shaper-hebrew
+shaper-indic
+shaper-myanmar
+shaper-sea
+shaper-thai
+shaper-tibetan
diff --git a/test/shaping/texts/in-tree/shaper-arabic/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/MANIFEST
new file mode 100644 (file)
index 0000000..eb8f9ec
--- /dev/null
@@ -0,0 +1,6 @@
+script-arabic
+script-mandaic
+script-mongolian
+script-nko
+script-phags-pa
+script-syriac
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/MANIFEST
new file mode 100644 (file)
index 0000000..62e050d
--- /dev/null
@@ -0,0 +1,3 @@
+language-persian
+language-urdu
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/MANIFEST
new file mode 100644 (file)
index 0000000..a6ac235
--- /dev/null
@@ -0,0 +1 @@
+mehran.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt
new file mode 100755 (executable)
index 0000000..4be0786
--- /dev/null
@@ -0,0 +1,8 @@
+‫دَر فارسی گَچْ‌پَژْ هست. این «ی» فارسی است.‬\r
+‫حرف «ع» را به چٰهار شکلِ «ع‍» و «‍ع‍» و «‍ع» و «‌ع‌» می‌توان نشان داد.‬\r
+‫تشخیصِ اِعْ‌ًٌَُراب ناهمخوان از وظایف حروفْ‌چین است.‬\r
+‫دو اِعراب همخوان مانند « َ» و « ّ» به شکل « َّ» باهم ترکیب می‌شوند.‬\r
+‫لازم است حروف‌چین رفتار درستی با کشیدهٔ یونی‌کدی داشته باشد.‬\r
+‫مثلاً بتواند کلـمهٔ «پیِٓـــــــچ» یا حروف «ــٖٓـ» را به درستی نمایش دهد.‬\r
+‫حرف «لام» و «الف» باید به شکل لیگاتوری نمایش داده شوند.‬\r
+‫کلمهٔ «بَلَاٰ» از آزمون‌های سطح پائین حروف‌چین است.‬
\ No newline at end of file
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/MANIFEST
new file mode 100644 (file)
index 0000000..0c0a6f3
--- /dev/null
@@ -0,0 +1 @@
+crulp
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/MANIFEST
new file mode 100644 (file)
index 0000000..5786e7b
--- /dev/null
@@ -0,0 +1 @@
+ligatures
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt
new file mode 100644 (file)
index 0000000..6b59920
--- /dev/null
@@ -0,0 +1,601 @@
+با
+پا
+تا
+ٹا
+ثا
+جا
+چا
+حا
+خا
+سا
+شا
+صا
+ضا
+طا
+عا
+غا
+فا
+قا
+کا
+گا
+لا
+ما
+نا
+ہا
+ھا
+یا
+تب
+ٹب
+جب
+چب
+حب
+سب
+شب
+صب
+طب
+عب
+قب
+کب
+لب
+نب
+ہب
+ھب
+ئب
+یب
+بب
+غب
+رب
+تپ
+جپ
+چپ
+ٹپ
+شپ
+غپ
+کپ
+گپ
+لپ
+مپ
+نپ
+ہپ
+ھپ
+ئپ
+یپ
+پت
+تت
+ثت
+چت
+حت
+خت
+ست
+شت
+صت
+ضت
+طت
+ظت
+عت
+غت
+فت
+قت
+کت
+گت
+لت
+مت
+نت
+ہت
+ھت
+ئت
+یت
+ٹت
+جت
+بت
+پٹ
+ٹٹ
+جٹ
+چٹ
+سٹ
+غٹ
+فٹ
+کٹ
+گٹ
+لٹ
+مٹ
+نٹ
+ہٹ
+ھٹ
+ئٹ
+یٹ
+شٹ
+تٹ
+بٹ
+حث
+عث
+لث
+نث
+ئث
+یث
+بث
+پج
+تج
+جج
+حج
+سج
+کج
+لج
+نج
+ہج
+ھج
+ئج
+یج
+گج
+بج
+پچ
+جچ
+سچ
+کچ
+مچ
+نچ
+ئچ
+تچ
+چچ
+خچ
+غچ
+یچ
+گچ
+ٹچ
+بچ
+تح
+جح
+صح
+ضح
+لح
+مح
+نح
+یح
+شح
+فح
+ئح
+بح
+ٹخ
+چخ
+سخ
+لخ
+مخ
+نخ
+ئخ
+یخ
+پخ
+بخ
+پد
+تد
+جد
+چد
+حد
+خد
+سد
+شد
+صد
+ضد
+عد
+غد
+فد
+قد
+کد
+گد
+لد
+مد
+ند
+ہد
+ئد
+ید
+بد
+پڈ
+ٹڈ
+جڈ
+چڈ
+سڈ
+گڈ
+لڈ
+مڈ
+نڈ
+ہڈ
+ئڈ
+یڈ
+کڈ
+تڈ
+بڈ
+پذ
+تذ
+جذ
+حذ
+خذ
+شذ
+عذ
+غذ
+فذ
+قذ
+کذ
+لذ
+مذ
+نذ
+ہذ
+ئذ
+یذ
+گذ
+بذ
+پر
+تر
+ٹر
+ثر
+جر
+چر
+حر
+خر
+سر
+شر
+صر
+ضر
+طر
+ظر
+عر
+غر
+فر
+قر
+کر
+گر
+لر
+مر
+نر
+ہر
+ئر
+یر
+بر
+پڑ
+تڑ
+جڑ
+چڑ
+سڑ
+غڑ
+کڑ
+گڑ
+لڑ
+مڑ
+ہڑ
+ھڑ
+یڑ
+نڑ
+بڑ
+پز
+تز
+جز
+حز
+خز
+سز
+عز
+فز
+قز
+کز
+گز
+لز
+مز
+نز
+ہز
+ئز
+یز
+ٹز
+ٹز
+غز
+بز
+پژ
+کژ
+مژ
+نژ
+ہژ
+یژ
+پس
+تس
+ٹس
+جس
+چس
+خس
+حس
+فس
+قس
+کس
+گس
+لس
+مس
+نس
+ہس
+ئس
+یس
+ھس
+عس
+سس
+بس
+تش
+ٹش
+جش
+چش
+خش
+حش
+فش
+قش
+کش
+گش
+لش
+مش
+نش
+ہش
+ئش
+یش
+ھش
+عش
+شش
+بش
+قص
+لص
+نص
+ئص
+یص
+خص
+بص
+فض
+قض
+مض
+ئض
+یض
+غض
+کض
+بض
+خط
+سط
+قط
+ئط
+یط
+جع
+شع
+ضع
+طع
+فع
+قع
+لع
+مع
+نع
+ئع
+یع
+سع
+کع
+بع
+لغ
+یغ
+بغ
+تف
+حف
+سف
+شف
+صف
+طف
+عف
+غف
+فف
+قف
+لف
+نف
+ہف
+ئف
+یف
+خف
+کف
+گف
+بف
+چق
+حق
+سق
+شق
+طق
+فق
+لق
+مق
+نق
+ہق
+ئق
+یق
+بق
+پک
+تک
+ٹک
+جک
+چک
+سک
+شک
+فک
+کک
+لک
+مک
+ہک
+ھک
+ئک
+یک
+حک
+بک
+پگ
+تگ
+جگ
+چگ
+سگ
+لگ
+نگ
+یگ
+ہگ
+مگ
+گگ
+بگ
+پل
+تل
+ٹل
+لل
+مل
+نل
+ہل
+ھل
+ئل
+یل
+خل
+ثل
+بل
+تم
+ٹم
+ثم
+جم
+چم
+خم
+سم
+شم
+صم
+ضم
+عم
+غم
+فم
+قم
+کم
+گم
+لم
+نم
+ہم
+ھم
+ئم
+یم
+بم
+پن
+تن
+ٹن
+جن
+چن
+خن
+شن
+طن
+ظن
+عن
+فن
+قن
+کن
+گن
+لن
+من
+نن
+ہن
+ھن
+ئن
+ین
+غن
+بن
+یں
+پو
+تو
+ٹو
+ثو
+جو
+چو
+حو
+خو
+سو
+ضو
+عو
+غو
+فو
+قو
+کو
+گو
+لو
+مو
+نو
+ہو
+ھو
+ئو
+یو
+بو
+ئہ
+یئہ
+بی
+پی
+تی
+ٹی
+ثی
+جی
+چی
+حی
+خی
+سی
+شی
+صی
+ضی
+طی
+ظی
+عی
+غی
+فی
+قی
+کی
+گی
+لی
+می
+نی
+ہی
+ھی
+ئی
+بے
+پے
+تے
+ٹے
+ثے
+جے
+چے
+سے
+شے
+صے
+طے
+غے
+فے
+قے
+کے
+گے
+لے
+مے
+نے
+ہے
+ھے
+ئے
+خے
+حے
+ضے
+عے
+پہ
+تہ
+ثہ
+جہ
+چہ
+خہ
+سہ
+شہ
+صہ
+ضہ
+طہ
+عہ
+غہ
+فہ
+قہ
+کہ
+گہ
+لہ
+مہ
+یہ
+ہہ
+ٹہ
+بہ
+تھ
+ٹھ
+جھ
+چھ
+کھ
+گھ
+بھ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt
new file mode 100644 (file)
index 0000000..4da97d2
--- /dev/null
@@ -0,0 +1,3415 @@
+ببا
+بپا
+بتا
+بٹا
+بجا
+بچا
+بحا
+بخا
+بسا
+بشا
+بصا
+بضا
+بطا
+بظا
+بعا
+بغا
+بفا
+بقا
+بکا
+بگا
+بلا
+بما
+بنا
+بیا
+بہا
+بھا
+پتا
+پٹا
+پجا
+پچا
+پکا
+پسا
+پشا
+پکا
+پگا
+پلا
+پنا
+پیا
+پہا
+پھا
+تبا
+تپا
+تتا
+تٹا
+تجا
+تچا
+تحا
+تخا
+تسا
+تشا
+تصا
+تضا
+تطا
+تعا
+تغا
+تفا
+تقا
+تکا
+تگا
+تلا
+تما
+تنا
+تیا
+تہا
+تھا
+ٹبا
+ٹپا
+ٹتا
+ٹچا
+ٹکا
+ٹگا
+ٹلا
+ٹما
+ٹما
+ٹنا
+ٹیا
+ٹھا
+ثبا
+ثقا
+ثلا
+ثما
+ثنا
+ثیا
+جبا
+جپا
+جتا
+جٹا
+ججا
+جچا
+جحا
+جسا
+جغا
+جفا
+فکا
+جگا
+جلا
+جما
+جنا
+جیا
+جہا
+جھا
+چبا
+چپا
+چتا
+چٹا
+چچا
+چخا
+چخا
+چسا
+چغا
+چقا
+چکا
+چگا
+چلا
+چما
+چنا
+چیا
+چہا
+چھا
+حبا
+حجا
+حسا
+حشا
+حصا
+حضا
+حظا
+چغا
+حفا
+ھقا
+حکا
+حلا
+حما
+حنا
+حیا
+خبا
+ختا
+خٹا
+خجا
+خچا
+خحا
+خسا
+خشا
+خصا
+خضا
+خطا
+خفا
+خلا
+خما
+خنا
+خیا
+خہا
+سبا
+سپا
+ستا
+سٹا
+سجا
+سچا
+سحا
+سخا
+سسا
+سعا
+سفا
+سقا
+سکا
+سگا
+سلا
+سما
+سنا
+سیا
+سہا
+شبا
+شپا
+شتا
+شجا
+شچا
+شحا
+شخا
+شطا
+شعا
+شغا
+شفا
+شقا
+شکا
+شگا
+شما
+شنا
+شیا
+شہا
+صبا
+صحا
+صغا
+صفا
+صلا
+صما
+صنا
+صیا
+ضحا
+ضخا
+ضعا
+ضغا
+ضلا
+ضما
+ضیا
+طبا
+طپا
+طحا
+طعا
+طغا
+طفا
+طلا
+طما
+طنا
+طیا
+طہا
+ظلا
+ظہا
+عبا
+عتا
+عجا
+عسا
+عشا
+عصا
+عضا
+عطا
+عظا
+عفا
+عقا
+عکا
+علا
+عما
+عنا
+عیا
+غبا
+غپا
+غٹا
+غچا
+غسا
+غفا
+غلا
+غما
+غنا
+غیا
+فتا
+فٹا
+فجا
+فحا
+فسا
+فشا
+فصا
+فضا
+فطا
+فظا
+فعا
+فغا
+فقا
+فکا
+فگا
+فلا
+فما
+فنا
+فیا
+فہا
+قبا
+قتا
+قحا
+قسا
+قصا
+قضا
+قطا
+قعا
+قفا
+قلا
+قما
+قنا
+قیا
+قہا
+کبا
+کپا
+کتا
+کٹا
+کثا
+کجا
+کچا
+کحا
+کسا
+کشا
+کعا
+کفا
+ککا
+کگا
+کلا
+کما
+کنا
+کیا
+کہا
+کھا
+گبا
+گپا
+گتا
+گٹا
+گجا
+گچا
+گسا
+گلا
+گما
+گنا
+گیا
+گہا
+گھا
+لبا
+لپا
+لتا
+لٹا
+لثا
+لجا
+لچا
+لحا
+لخا
+لسا
+لشا
+لصا
+لطا
+لعا
+لغا
+لفا
+لقا
+لکا
+لگا
+لما
+لنا
+لیا
+لہا
+لھا
+مبا
+مپا
+متا
+مٹا
+مثا
+مجا
+مچا
+محا
+مخا
+مسا
+مشا
+مصا
+مضا
+مطا
+مظا
+معا
+مغا
+مفا
+مقا
+مکا
+مگا
+ملا
+مما
+منا
+میا
+مہا
+نبا
+نپا
+نتا
+نٹا
+نثا
+نجا
+نچا
+نحا
+نخا
+نسا
+نشا
+نصا
+نضا
+نظا
+نعا
+نفا
+نقا
+نکا
+نگا
+نلا
+مہا
+نبا
+نپا
+نتا
+نٹا
+نثا
+نجا
+نچا
+نحا
+نخا
+نسا
+نشا
+نصا
+نضا
+نما
+ننا
+نیا
+نہا
+نھا
+ئبا
+ئپا
+ئشا
+ئعا
+ئکا
+ئگا
+ئنا
+ئیا
+یبا
+یپا
+یتا
+یٹا
+یثا
+یجا
+یحا
+یخا
+یسا
+یشا
+یصا
+یضا
+یطا
+یعا
+یغا
+یفا
+یقا
+یکا
+یگا
+یلا
+یما
+ینا
+یئم
+یہا
+ہبا
+ہپا
+ہتا
+ہٹا
+ہجا
+ہچا
+ہسا
+ہشا
+ہفا
+ہقا
+ہکا
+ہگا
+ہلا
+ہما
+ہنا
+ہیا
+ھبا
+ھپا
+ھتا
+ھٹا
+ھجا
+ھسا
+ھکا
+ھگا
+ھلا
+ھما
+ھنا
+ھیا
+ھہا
+بلب
+بیب
+پھب
+تعب
+تکب
+تیب
+جست
+جلب
+جیب
+چھب
+حجب
+حسب
+حلب
+خطب
+سبب
+سلب
+سیب
+شعب
+شغب
+شیب
+صعب
+صلب
+طلب
+طیب
+عجب
+عصب
+عضب
+عقب
+عنب
+عیب
+ضصب
+غضب
+غلب
+غیب
+قطب
+قعب
+قلب
+قیب
+کتب
+کسب
+کعب
+کلب
+کیب
+کھب
+لطب
+لعب
+لقب
+لیب
+لہب
+محب
+مشب
+مطب
+نسب
+نصب
+نقب
+نیب
+یشب
+ینب
+ہیب
+بشپ
+پمپ
+پنپ
+پیپ
+تھپ
+ٹھپ
+جمپ
+جیپ
+جھپ
+چیپ
+چھپ
+سلپ
+سیپ
+فلپ
+کلپ
+کیپ
+کھپ
+گیپ
+گھپ
+لمپ
+لیپ
+میپ
+یمپ
+ینپ
+بپت
+بچت
+بخت
+بست
+بشت
+بعت
+بقت
+بنت
+بیت
+بہت
+بھت
+پتت
+پخت
+پست
+پشت
+پیت
+تبت
+تپت
+تحت
+تختتست
+تشت
+تمت
+تنت
+تیت
+ٹکت
+ثبت
+ثلت
+جست
+جعت
+جفت
+جگت
+جنت
+جیت
+جہت
+چپت
+چست
+چشت
+چکت
+چلت
+چنت
+چیت
+چھت
+حبت
+حجت
+حشت
+حفت
+حلت
+حمت
+حیت
+خست
+خشت
+کصت
+خفت
+خلت
+سبت
+سچت
+سخت
+سست
+سعت
+سفت
+سقت
+سکت
+سلت
+سمت
+سنت
+سیت
+شست
+شصت
+شفت
+شیت
+صحت
+صفت
+صلت
+صمت
+صیت
+ضیت
+طشت
+طفت
+طیت
+ظبت
+عفت
+علت
+عیت
+غبت
+غلت
+غیت
+فظت
+فعت
+فقت
+فیت
+قبت
+قعب
+قلت
+قیت
+کبت
+کپت
+کھت
+کشت
+کعت
+کلت
+کیت
+کھت
+گپت
+گست
+گشت
+گفت
+گمت
+گنت
+گیت
+لپت
+لجت
+لحت
+لخت
+لست
+لشت
+لغت
+لفت
+لگت
+للت
+لیت
+مست
+مشت
+معت
+مفت
+مکت
+ملت
+منت
+میت
+مہت
+نپت
+نست
+نعت
+نفت
+نکت
+نگت
+نیت
+ئیت
+یست
+یشت
+یعت
+یقت
+یمت
+ینت
+ہست
+ہشت
+ہفت
+ہمت
+ہیت
+ھست
+بجٹ
+بکٹ
+بلٹ
+بنٹ
+بیٹ
+بھٹ
+پسٹ
+پلٹ
+پیٹ
+پھٹ
+ٹسٹ
+ٹکٹ
+ٹنٹ
+ٹھٹ
+جسٹ
+جمٹ
+جنٹ
+جیٹ
+جھٹ
+چپٹ
+چکٹ
+چمٹ
+چنٹ
+چھٹ
+سٹٹ
+سکٹ
+سمٹ
+سیٹ
+شسٹ
+شفٹ
+شمٹ
+شیٹ
+فسٹ
+کپٹ
+کسٹ
+کشٹ
+کیٹ
+کھٹ
+گسٹ
+گشٹ
+گفٹ
+گلٹ
+گمٹ
+گیٹ
+گھٹ
+لپٹ
+لسٹ
+لشٹ
+لفٹ
+لنٹ
+لیٹ
+لہٹ
+مسٹ
+مشٹ
+مکٹ
+ملٹ
+منٹ
+میٹ
+نبٹ
+نپٹ
+نجٹ
+نسٹ
+نکٹ
+نگٹ
+نمٹ
+نیٹ
+یبٹ
+ئسٹ
+ئلٹ
+ئنٹ
+یبٹ
+یسٹ
+یکٹ
+ینٹ
+ہیٹ
+ھیٹ
+بحث
+بعث
+ثلث
+خبث
+شیث
+عبث
+نبث
+نیث
+بنج
+بیج
+بھج
+پنج
+پیج
+تہج
+تھج
+ٹیپ
+جھج
+سلج
+سیج
+سہج
+کنج
+کیج
+کھج
+گنج
+گیج
+لحج
+لنج
+لیج
+منج
+میج
+نپج
+نہج
+ینج
+ہپج
+بنچ
+بیچ
+بھچ
+پنچ
+پیچ
+پھچ
+تھچ
+ٹیج
+جکچ
+چمچ
+کلچ
+کیچ
+کھچ
+گھچ
+لنچ
+لیچ
+میچ
+نیچ
+ہیچ
+بیح
+جیح
+سطح
+سلح
+شیح
+صبح
+صلح
+صیح
+ضیح
+فتح
+فصح
+قبح
+لیح
+مسح
+ملح
+میخ
+نضح
+نفخ
+بطخ
+بلخ
+بیخ
+پٹخ
+تلخ
+تیخ
+ٹپخ
+چپخ
+چٹخ
+چیخ
+سیخ
+شیخ
+فسخ
+گٹخ
+مسخ
+مطخ
+ملخ
+میخ
+نسخ
+نفخ
+بتد
+بجد
+بحد
+بخد
+بسد
+بصد
+بضد
+بعد
+بغد
+بقد
+بگد
+بلد
+بمد
+بند
+بید
+بہد
+بھد
+پند
+پید
+پھد
+تبد
+تجد
+تحد
+تخد
+تسد
+تشد
+تصد
+تعد
+تقد
+تکد
+تمد
+تند
+تہد
+ثمد
+جسد
+جعد
+جلد
+جند
+جید
+جہد
+چغد
+چلد
+چند
+چید
+چھد
+حبد
+حسد
+حقد
+حمد
+حید
+ختہ
+خضد
+خلد
+خمد
+خند
+سبد
+ستد
+سجد
+سشد
+سعد
+سقد
+سمد
+سند
+سید
+شبد
+ششد
+شند
+شید
+شہد
+صفد
+صمد
+صند
+صید
+ضفد
+ضید
+عبد
+عتد
+عضد
+عقد
+عمد
+عند
+عید
+عہد
+غند
+غید
+فصد
+فعد
+فقد
+فند
+فید
+فہد
+قتد
+قصد
+قعد
+قند
+قید
+کند
+کید
+کھد
+گبد
+گلد
+گند
+گید
+لبد
+لحد
+لضد
+لعد
+لقد
+لکد
+لگد
+لمد
+لند
+لید
+مبد
+متد
+مجد
+محد
+محد
+مسد
+مشد
+مصد
+معد
+مقد
+مکد
+مگد
+ممد
+مند
+مید
+مہد
+نبد
+نتد
+نخد
+نسد
+نصد
+نعد
+نقد
+نگد
+نمد
+نند
+نہد
+ئمد
+ئند
+ئید
+یکد
+یگد
+یلد
+یند
+ہبد
+ہتد
+ہلد
+ہمد
+ہند
+ہید
+ھگد
+ھند
+بلڈ
+بنڈ
+بیڈ
+پگڈ
+پنڈ
+پیڈ
+پھڈ
+تکڈ
+تگڈ
+تنڈ
+ٹنڈ
+ٹھڈ
+جنڈ
+جھڈ
+چلڈ
+چنڈ
+سٹڈ
+سنڈ
+سیڈ
+شلڈ
+شیڈ
+غنڈ
+ئیڈ
+فنڈ
+فیڈ
+کبڈ
+کمڈ
+کنڈ
+کیڈ
+کھڈ
+گٹڈ
+کلڈ
+گنڈ
+گیڈ
+لنڈ
+لیڈ
+مکڈ
+مگڈ
+منڈ
+میڈ
+نیڈ
+ئٹڈ
+ئلڈ
+ئیڈ
+یجڈ
+یلڈ
+ینڈ
+ہلڈ
+ہنڈ
+ہیڈ
+ھنڈ
+بتذ
+پھڈ
+تبذ
+تحذ
+تعذ
+تغذ
+تکذ
+تلذ
+تہذ
+ٹھڈ
+جعد
+حبذ
+عتذ
+کیڈ
+لبذ
+لحز
+لقذ
+مبذ
+متذ
+مجذ
+محذ
+مخذ
+معذ
+مکذ
+ملذ
+منذ
+مہذ
+ہکذ
+ہگذ
+ببر
+بتر
+بٹر
+بجر
+بحر
+بخر
+بسر
+بشر
+بصر
+بطر
+بغر
+بفر
+بقر
+بکر
+بگر
+بلر
+بمر
+بنر
+بیر
+بہر
+بھر
+پتر
+پٹر
+پچر
+پسر
+پنر
+پیر
+پہر
+پھر
+تبر
+تپر
+تتر
+تٹر
+تجر
+تحر
+تخر
+تسر
+تشر
+تصر
+تضر
+تعر
+تغر
+تفر
+تقر
+تکر
+تگر
+تمر
+تنر
+تیر
+تہر
+تھر
+ٹبر
+ٹٹر
+ٹخر
+ٹسر
+ٹکر
+ٹمر
+ٹنر
+ٹیڈ
+ٹہر
+ٹھر
+ثمر
+ثیر
+جبر
+جتر
+جغر
+جفر
+جکر
+جگر
+جمر
+جنر
+جیر
+جہر
+جھر
+چپر
+چتر
+چٹر
+چسر
+چشر
+چفر
+چقر
+چکر
+چمر
+چنر
+چیر
+چہر
+چھر
+حتر
+حجر
+حسر
+حشر
+حصر
+حضر
+حفر
+حقر
+حمر
+حیر
+خبر
+ختر
+خچر
+خسر
+خشر
+خصر
+خضر
+خطر
+خفر
+خگر
+خمر
+خیر
+سپر
+ستر
+سٹر
+سجر
+سچر
+سحر
+سسر
+سطر
+سفر
+سقر
+سکر
+سگر
+سمر
+سیر
+سہر
+شبر
+شپر
+شتر
+شٹر
+شجر
+شطر
+شعر
+شغر
+شکر
+شگر
+شمر
+شیر
+شہر
+صبر
+صحر
+صطر
+صعر
+صغر
+صفر
+صہر
+ضطر
+طبر
+طغر
+طنز
+طیر
+طہر
+ظفر
+ظہر
+عبر
+عتر
+عسر
+عشر
+عصر
+عطر
+عفر
+عقر
+عکر
+عمر
+غٹر
+غفر
+غیر
+فتر
+فٹر
+فجر
+فخر
+فسر
+فشر
+فطر
+فغر
+ففر
+فقر
+فکر
+فلر
+فنر
+فیر
+فہر
+قبر
+قتر
+قشر
+قصر
+قطر
+قعر
+قلر
+قمر
+قیر
+قہر
+کبر
+کتر
+کٹر
+کثر
+کجر
+کچر
+کسر
+کثر
+کفر
+ککر
+کگر
+کلر
+کمر
+کیر
+کہر
+کھر
+گبر
+گٹر
+گجر
+گگر
+گلر
+گمر
+گنر
+گیر
+گہر
+گھر
+لبر
+لتر
+لٹر
+لجر
+لچر
+لھر
+لخر
+لشر
+لضر
+لطر
+لعر
+لغر
+لفر
+لقر
+لکر
+لگر
+لمر
+لنر
+لیر
+لہر
+مبر
+مپر
+متر
+مٹر
+مجر
+مچر
+محر
+مخر
+مسر
+مشر
+مصر
+مضر
+مطر
+معر
+مغر
+مفر
+مقر
+مکر
+مگر
+ملر
+ممر
+منر
+میر
+مہر
+نبر
+نتر
+نٹر
+نثر
+نجر
+نحر
+نخر
+نسر
+نشر
+نصر
+نظر
+نعر
+نفر
+نقر
+نکر
+نگر
+نمر
+نئر
+نیر
+نہر
+ئبر
+ئٹر
+ئکر
+ئمر
+ئنر
+ئیر
+ئہر
+یبر
+یپر
+یٹر
+یثر
+یجر
+یچر
+یخر
+یسر
+یشر
+یفر
+یکر
+یگر
+یلر
+یمر
+ینر
+یئر
+یہر
+ہبر
+ہتر
+ہٹر
+ہجر
+ہچر
+ہکر
+ہلر
+ہمر
+ہنر
+ہیر
+ھبر
+ھچر
+ھگر
+گیر
+بگڑ
+بنڑ
+بیڑ
+بھڑ
+پبڑ
+پٹڑ
+پجڑ
+پکڑ
+پگڑ
+پلڑ
+پیڑ
+پھڑ
+تپڑ
+تکڑ
+تگڑ
+تلڑ
+تیڑ
+تھڑ
+ٹکڑ
+ٹیر
+ٹھڑ
+جبڑ
+جکڑ
+جھڑ
+چبڑ
+چبڑ
+چپڑ
+چچڑ
+چسڑ
+چکڑ
+چمڑ
+چیڑ
+چھڑ
+سپڑ
+سکڑ
+سیڑ
+کبڑ
+کپڑ
+کچڑ
+ککڑ
+کلڑ
+کنڑ
+کیڑ
+کھڑ
+گپڑ
+گیڑ
+گھڑ
+لبڑ
+لپڑ
+لکڑ
+لگڑ
+لٹر
+لہڑ
+لھڑ
+مپڑ
+مسڑ
+مکڑ
+منڑ
+میڑ
+نبڑ
+نپڑ
+نتڑ
+نچڑ
+نسڑ
+نکڑ
+نگڑ
+نیڑ
+نہڑ
+ئیڑ
+یکڑ
+یہڑ
+ہبڑ
+ہپڑ
+ہیڑ
+ہجڑ
+ہلڑ
+ہمڑ
+ہنڑ
+ہیڑ
+ھبڑ
+ھکڑ
+ھگڑ
+ھیڑ
+بجز
+بلز
+بیز
+بہز
+پیز
+تجز
+تحز
+تعز
+تغز
+تنز
+تیز
+ٹیڑ
+چکز
+چیز
+حمز
+حیز
+خیز
+خنز
+سبز
+سلز
+سیز
+شلز
+شیز
+شہز
+طنز
+عتز
+عجز
+غمز
+فلز
+فیز
+قلز
+کبز
+کمز
+کنز
+کیز
+گلز
+گیز
+لتز
+لجز
+لحز
+لعز
+لغز
+لقز
+لنز
+لیز
+متز
+محز
+مخز
+مسز
+معز
+مغز
+ملز
+ممز
+منز
+میز
+نتز
+نغز
+نگز
+نلز
+نیز
+ئلز
+ئنز
+ئیز
+یگز
+یلز
+یمز
+ہتز
+ہلز
+ہمز
+ہیز
+لگژ
+بکس
+بلس
+بنس
+بیس
+بھس
+پٹس
+پنس
+پیس
+پھس
+تٹس
+تحس
+تکس
+تیس
+تہس
+ٹپس
+ٹکس
+ٹلس
+ٹنس
+ٹیز
+ٹھس
+جنس
+جیس
+چکس
+چیس
+حبس
+خمس
+خیس
+سٹس
+سمس
+سیس
+شپس
+شمس
+طلس
+طیس
+عکس
+فلس
+فنس
+فیس
+قفس
+قیس
+کتیس
+کلس
+کنس
+کھس
+گلس
+گیس
+گھس
+لپس
+لٹس
+لکس
+لمس
+لنس
+لیس
+مکس
+مگس
+ملس
+منس
+میس
+نٹس
+نجس
+نحس
+نسس
+نفس
+نکس
+ینس
+ئٹس
+ئنس
+ئیس
+یبس
+یٹس
+یسس
+یشس
+یکس
+یلس
+ینس
+ٹیس
+جیش
+حبش
+خفش
+سپش
+ستش
+شیش
+طپش
+طیش
+عطش
+عیش
+فحش
+فلش
+کشش
+کفش
+کنش
+کیش
+کفش
+کنش
+لکش
+منش
+میش
+نجش
+نعش
+نقش
+نگش
+نمش
+نیش
+ئیش
+یشش
+یعش
+ینش
+ہفش
+ہیش
+حصص
+حفص
+حیص
+شخص
+قصص
+نقص
+بعض
+بغض
+بیض
+حیض
+غیض
+فیض
+قبض
+محض
+میض
+نبض
+نقض
+بخط
+خبط
+خلط
+سبط
+سقط
+شخط
+ضبط
+غلط
+غیط
+فقط
+قحط
+قسط
+لخط
+لفط
+لقط
+حفظ
+غیظ
+لحظ
+لفظ
+بمع
+بیع
+تبع
+تسع
+تفع
+جمع
+جیع
+سبع
+سجع
+سمع
+سیع
+شجع
+شمع
+صطع
+صنع
+صیع
+ضلع
+ضیع
+طبع
+طمع
+فیع
+قطع
+قلع
+قمع
+قیع
+منع
+نطع
+نفع
+تیغ
+میغ
+نیغ
+بلف
+بیف
+تلف
+جیف
+چیف
+حلف
+حیف
+خلف
+خیف
+سقف
+سلف
+سیف
+شغف
+شلف
+صحف
+صنف
+صیف
+ضعف
+ضیف
+عطف
+علف
+قیف
+کتف
+کشف
+کلف
+کنف
+کیف
+کہف
+گلف
+لصف
+کطف
+کیف
+نجف
+نصف
+نیف
+بحق
+بلق
+بہق
+بھق
+پتق
+پھق
+تتق
+ثیق
+جلق
+حلق
+حمق
+حیق
+خلق
+سبق
+شفق
+شلق
+ضیق
+طبق
+عشق
+عمق
+فتق
+فسق
+سیق
+قلق
+قیق
+لحق
+لیق
+مشق
+نبق
+نسق
+نطق
+نیق
+بتک
+بٹک
+بچک
+بطک
+بلک
+بنک
+بیک
+بہک
+بھک
+پٹک
+پچک
+پلک
+پنک
+پیک
+پھک
+تپک
+تتک
+تشک
+تلک
+تنک
+تیک
+تھک
+ٹپک
+ٹسک
+ٹنک
+ٹیش
+ٹھک
+جبک
+جھک
+چبک
+چپک
+چٹک
+چسک
+چشک
+چلک
+چمک
+چنک
+چیک
+چہک
+چھک
+ختک
+خٹک
+خسک
+خشک
+خنک
+سبک
+ستک
+سٹک
+سسک
+سلک
+سمک
+سنک
+شلک
+ضحک
+غٹک
+غلک
+کبک
+کتک
+کٹک
+کسک
+کفک
+کلک
+کمک
+کنک
+کیک
+گٹک
+گجک
+گلک
+گمک
+گہم
+لپک
+لٹک
+لچل
+للک
+لنک
+لیک
+لہک
+مٹک
+مچک
+محک
+مسک
+مشک
+ملک
+میک
+مہک
+نسک
+نمک
+نیک
+ئیک
+یبک
+یپک
+یشک
+یفک
+یمک
+ینک
+ہبک
+ہتک
+ہچک
+ہلک
+ہمک
+ہنک
+کیک
+ھجک
+ھچک
+ھسک
+ھلک
+ھمک
+ھنک
+بنگ
+بیگ
+بھگ
+پلگ
+پنگ
+تنگ
+ٹنگ
+ٹیک
+جلگ
+جنگ
+چنگ
+خنگ
+سلگ
+سنگ
+سیگ
+شنگ
+کنگ
+کھگ
+گمگ
+گنگ
+لنگ
+لیگ
+منگ
+میگ
+ننگ
+نیگ
+ئنگ
+ینگ
+ہلگ
+ہنگ
+ہیگ
+ھنگ
+ببل
+بچل
+بحل
+بخل
+بصل
+بطل
+بعل
+بغل
+بقل
+بکل
+بگل
+بیل
+بہل
+بھل
+پبل
+پپل
+پتل
+پٹل
+پگل
+پیل
+پہل
+پھلتکل
+تیل
+تھل
+ٹکل
+ٹیگ
+ٹہل
+ثقل
+ثیل
+جبل
+جعل
+جکل
+جگل
+جمل
+جیل
+جہل
+جھل
+چبل
+چپل
+چغل
+چکل
+چمل
+چیل
+چہل
+چھل
+حبل
+حصل
+حلل
+حمل
+حیل
+خجل
+خلل
+خیل
+سبل
+ستل
+سٹل
+سجل
+سچل
+سفل
+سکل
+سگل
+سنل
+سیل
+سہل
+شطل
+شغل
+شکل
+شگل
+شیل
+صصل
+صنل
+صیل
+طبل
+طفل
+عسل
+عضل
+عقل
+علل
+عمل
+عیل
+غسل
+فحل
+فصل
+فضل
+فعل
+فیل
+قبل
+قتل
+قفل
+قیل
+کبل
+کپل
+کتل
+کچل
+کحل
+کسل
+کشل
+کفل
+کمل
+کیل
+کہل
+کھل
+گپل
+گٹل
+گسل
+گھل
+لعل
+لغل
+لیل
+مٹل
+مثل
+مچل
+محل
+مخل
+مضل
+مغل
+ملل
+میل
+نبل
+نپل
+نچل
+نحل
+نخل
+نسل
+نشل
+نصل
+نعل
+نفل
+نقل
+نکل
+نگل
+نیل
+ئبل
+ئٹل
+ئفل
+ئقل
+ئنل
+ئیل
+یشل
+یکل
+یگل
+ینل
+ہبل
+ہیل
+ھیل
+بسم
+بکم
+بلم
+بیم
+بہم
+پتم
+پٹم
+پچم
+پسم
+پشم
+پنم
+پیم
+پتم
+تخم
+تیم
+تھم
+ٹیل
+ثیم
+جسم
+جنم
+جیم
+جھم
+چشم
+چلم
+چھم
+حجم
+حشم
+حضم
+حکم
+حلم
+حیم
+ختم
+حشم
+خیم
+ستم
+سقم
+سکم
+سلم
+سیم
+سہم
+ششم
+شکم
+شلم
+شیم
+صنم
+طعم
+ظلم
+عجم
+عظم
+علم
+عیم
+غلم
+فلم
+فیم
+قسم
+قلم
+قیم
+کٹم
+کسم
+کلم
+کیم
+کھم
+گلم
+گیم
+گھم
+لبم
+لحم
+لکم
+لیم
+مسم
+مغم
+منم
+میم
+مہم
+نجم
+نظم
+نعم
+نکم
+نگم
+نیم
+نہم
+ئٹم
+یتم
+یٹم
+یشم
+یغم
+یکم
+ینم
+یئم
+ہضم
+ہمم
+ہیم
+ھکم
+کیم
+بٹن
+بچن
+بشن
+بطن
+بین
+بہن
+بھن
+پتن
+پٹن
+پشن
+پمن
+پین
+پہن
+پھن
+تپن
+تکن
+تلن
+تمن
+تین
+تہن
+تھن
+ٹپن
+ٹسن
+ٹفن
+ٹیم
+ٹھن
+ثمن
+ثین
+جبن
+جتن
+جشن
+جگن
+جلن
+جمن
+جین
+جھن
+چپن
+چکن
+چلن
+چمن
+چین
+چھن
+حسن
+حصن
+حین
+ختن
+خین
+سپن
+ستن
+سٹن
+سجن
+سخن
+سشن
+سقن
+سمن
+سنن
+سین
+سہن
+شکن
+شگن
+شمن
+شین
+صحن
+ضمن
+ضین
+طعن
+طین
+عین
+غبن
+غین
+فتن
+فٹن
+فگن
+فمن
+فین
+قطن
+قین
+کجن
+کچن
+کشن
+کفن
+کلن
+کین
+کہن
+کھن
+گگن
+گین
+گہن
+گھن
+لبن
+لٹن
+لجن
+لحن
+لسن
+لعن
+لفن
+لگن
+لمن
+لنن
+لین
+لہن
+لھن
+متن
+مٹن
+محن
+مسن
+مشن
+مکن
+مگن
+ملن
+منن
+مین
+نجن
+نشنر
+نگن
+نمن
+نین
+نہن
+ئین
+یپن
+یجن
+یشن
+یکن
+یگن
+یلن
+یمن
+ہمن
+ہین
+بیں
+پیں
+ٹیں
+ثین
+جیں
+چیں
+حیں
+خیں
+سیں
+شیں
+عیں
+کیں
+گیں
+لیں
+میں
+نیں
+ئیں
+ہیں
+ھیں
+ببو
+بپو
+بتو
+بٹو
+بجو
+پچو
+پسو
+پشو
+پکو
+پگو
+پلو
+پنو
+پئو
+پیو
+پھو
+تبو
+تپو
+تجو
+تچو
+تحو
+تخو
+تسو
+تشو
+تصو
+تضو
+تطو
+تعو
+تفو
+تقو
+تکو
+تگو
+تلو
+تمو
+تنو
+تیو
+تہو
+تھو
+ٹپو
+ٹٹو
+ٹچو
+ٹسو
+ٹشو
+ٹکو
+ٹلو
+ٹنو
+ٹیز
+ٹہو
+ٹھو
+ثبو
+ثپو
+ثتو
+ثمو
+جبو
+جپو
+جتو
+جٹو
+ججو
+جچو
+جسو
+جعو
+جلو
+جمو
+جنو
+جئو
+جیو
+جھو
+چبو
+چپو
+چتو
+چٹو
+چچو
+چخو
+چسو
+چقو
+چکو
+چگو
+چلو
+چمو
+چنو
+چیو
+چھو
+حبو
+حتو
+حثو
+حشو
+حصو
+حضو
+حظو
+حقو
+حکو
+حلو
+حنو
+حیو
+ختو
+خسو
+خشو
+خصو
+خضو
+خطو
+خلو
+خمو
+خنو
+خیو
+سبو
+سپو
+ستو
+سٹو
+سجو
+سچو
+سحو
+سشو
+سطو
+سعو
+سفو
+سقو
+سکو
+سگو
+سلو
+سمو
+سنو
+سیو
+سہو
+شبو
+شپو
+شتو
+ششو
+شعو
+شفو
+شقو
+شکو
+شگو
+شلو
+شمو
+شنو
+شیو
+شہو
+صبو
+صتو
+صحو
+صعو
+صفو
+صلو
+صنو
+ضتو
+ضحو
+ضعو
+طبو
+طفو
+طلو
+طنو
+طیو
+طہو
+ظتو
+ظلو
+ظنو
+ظہو
+عبو
+عتو
+عجو
+عشو
+عضو
+عطو
+عظو
+عفو
+عقو
+علو
+عمو
+عنو
+عیو
+غفو
+غلو
+غمو
+غنو
+غیو
+فتو
+فٹو
+فجو
+فحو
+فسو
+فصو
+فضو
+فظو
+فعو
+فقو
+فلو
+فنو
+فیو
+فہو
+قبو
+قپو
+قتو
+قسو
+قشو
+قصو
+قطو
+قعو
+قفو
+قلو
+قمو
+قنو
+قیو
+قہو
+کبو
+کتو
+کتو
+کٹو
+کچو
+کسو
+کشو
+کفو
+کلو
+کمو
+کنو
+کیو
+کہو
+کھو
+کو
+گپو
+گتو
+گٹو
+گجو
+گلو
+گمو
+گنو
+گئو
+گیو
+گہو
+گھو
+لبو
+لپو
+لتو
+لٹو
+لثو
+لجو
+لچو
+لحو
+لخو
+لسو
+لشو
+لصو
+لضو
+لطو
+لعو
+لغو
+لفو
+لقو
+لکو
+لگو
+للو
+لمو
+لنو
+لیو
+لہو
+لھو
+مپو
+متو
+مٹو
+مجو
+مچو
+جحو
+مخو
+مسو
+مشو
+مصو
+مطو
+مغو
+مقو
+مکو
+مگو
+ملو
+ممو
+منو
+مئو
+میو
+مہو
+مھو
+نبو
+نپو
+نتو
+نٹو
+نجو
+نچو
+نحو
+نخو
+نسو
+نشو
+نصو
+نطو
+نظو
+نعو
+نفو
+نقو
+نکو
+نگو
+نلو
+نمو
+ننو
+نیو
+نہو
+نھو
+ئبو
+ئپو
+ئتو
+ئٹو
+ئخو
+خشو
+ئفو
+ئقو
+ئکو
+ئلو
+ئنو
+ئیو
+یبو
+یپو
+یتو
+یٹو
+یثو
+یجو
+یخو
+یسو
+یشو
+یضو
+یعو
+یفو
+یقو
+یکو
+یگو
+یلو
+یمو
+ینو
+یئو
+یہو
+ہبو
+ہپو
+ہتو
+ہٹو
+ہجو
+ہشو
+ہضو
+ہفو
+ہکو
+ہگو
+ہلو
+ہمو
+ہنو
+ہیو
+ھبو
+ھپو
+ھتو
+ھجو
+ھکو
+ھگو
+ھلو
+ھنو
+ھیو
+مو
+ببی
+بتی
+بٹی
+بجی
+بچی
+بسی
+بطی
+بکی
+بلی
+بنی
+بئ
+بہی
+بھی
+بی
+پتی
+پٹی
+پجی
+پچی
+پخی
+پسی
+پشی
+پکی
+پلی
+پنی
+پئ
+تھی
+تبی
+تپی
+تتی
+تپی
+تجی
+تچی
+تشی
+تقی
+تکی
+تگی
+تلی
+تمی
+تنی
+تئ
+تہی
+تھی
+ٹپی
+ٹتی
+ٹٹی
+ٹچی
+ٹکی
+ٹگی
+ٹلی
+ٹمی
+ٹنی
+ٹھی
+ثتی
+جبی
+جپی
+جتی
+جٹی
+ججی
+جچی
+جعی
+جگی
+جلی
+جمی
+جنی
+جئ
+جہی
+جھی
+چبی
+چپی
+چتی
+چٹی
+چجی
+چچی
+چکی
+چگی
+چلی
+چنی
+چھی
+حبی
+حتی
+حسی
+حشی
+حظی
+حقی
+حلی
+حمی
+حئ
+ختی
+خشی
+خصی
+خطی
+خفی
+خلی
+خمی
+خنی
+خسپی
+ستی
+سٹی
+سجی
+سچی
+سخی
+سی
+سطی
+سعی
+سفی
+سکی
+سگی
+سلی
+سمی
+سنی
+سئ
+سہی
+سی
+شتی
+ششی
+شطی
+شقی
+شکی
+شمی
+شنی
+شہی
+صبی
+صتی
+صفی
+صگی
+صلی
+ضتی
+ضعی
+ظگی
+ضی
+طبی
+طمی
+طنی
+ظتی
+ظمی
+ظنی
+عتی
+عفی
+علی
+عمی
+عنی
+عئ
+غبی
+غپی
+غشی
+غلی
+غمی
+غنی
+فتی
+فجی
+فضی
+فعی
+فقی
+فگی
+فلی
+فمی
+فنی
+قتی
+قشی
+قصی
+قعی
+قلی
+قمی
+کبی
+کپی
+کتی
+کٹی
+کجی
+کچی
+کسی
+کشی
+کلی
+کمی
+کنی
+کہی
+کھی
+گبی
+گپی
+گتی
+گٹی
+گجی
+گچی
+گلی
+گمی
+گنی
+گئ
+گہی
+گھی
+لبی
+لپی
+لتی
+لٹی
+لثیمتی
+لجی
+لچی
+لسی
+لشی
+لعی
+لفی
+لکی
+لگی
+للی
+لمی
+لنی
+لہہ
+لی
+متی
+مٹی
+مجی
+مچی
+م]ی
+مسی
+مشی
+معی
+مکی
+مگی
+ملی
+ممی
+منی
+مہی
+نبی
+نپی
+نتی
+نٹی
+نجی
+نچی
+نسی
+نشی
+نفی
+نقی
+نکی
+نگی
+نلی
+نمی
+نلی
+نئ
+نہی
+نھی
+نی
+ئبی
+ئتی
+ئٹی
+ئچی
+ئسی
+ئشی
+ئقی
+ئکی
+ئلی
+ئمی
+ئنی
+یبی
+ہتی
+ہٹی
+ہفی
+ہکی
+ہگی
+ہلی
+ہمی
+ہنی
+ہئ
+ھپی
+ھتی
+ھجی
+ھکی
+ھگی
+ھلی
+ھنی
+ھئ
+بتے
+بٹے
+بجے
+بچے
+بسے
+بطے
+بعے
+بفے
+بقے
+بکے
+بلے
+بنے
+بۓ
+بہے
+بھے
+پتے
+پٹے
+پجے
+پچے
+پسے
+پشے
+پکے
+پلے
+پنے
+پۓ
+تبے
+تپے
+تتے
+تٹے
+تجے
+تچے
+تسے
+تشے
+تکے
+تگے
+تلے
+تمے
+تنے
+تۓ
+تھے
+ٹپے
+ٹتے
+ٹچے
+ٹکے
+ٹگے
+ٹلے
+ٹنے
+ٹۓ
+ٹھے
+جبے
+جپے
+جتے
+جٹے
+جثے
+جچے
+جسے
+جلے
+جمے
+جنے
+جۓ
+چھے
+حثے
+حصے
+حظے
+حقے
+حلے
+ختے
+حچے
+حطے
+خلے
+خہے
+ستے
+سٹے
+سجے
+سچے
+سطے
+سکے
+سکے
+سلے
+سمے
+سنے
+سۓ
+سہے
+شپے
+شتے
+شقے
+شمے
+شۓ
+صلے
+ضمے
+عشے
+علے
+غصے
+غلے
+فتے
+فٹے
+فسے
+فظے
+فلے
+قبے
+قصے
+قعے
+کپے
+کتے
+کٹے
+کجے
+کچے
+کسے
+کشے
+ککے
+کلے
+کمے
+کنے
+کۓ
+کیے
+کہے
+کھے
+گپے
+گتے
+گٹے
+گجے
+گلے
+گمے
+گنے
+گۓ
+گہے
+گھے
+لبے
+لیے
+لتے
+لٹے
+لثے
+لجے
+لچے
+لحے
+لخے
+لصے
+لعے
+لکے
+لگے
+لمے
+لنے
+لۓ
+لہے
+لھے
+متے
+مٹے
+مچے
+مسے
+مکے
+ملے
+نلے
+ننے
+نۓ
+ئٹے
+ئچے
+ئفے
+ئقے
+ئلے
+یتے
+یجے
+یچے
+یسے
+یشے
+یضے
+یعے
+یفے
+یقے
+یکے
+یگے
+یلے
+یمے
+ینے
+یۓ
+ہبے
+ہتے
+ہٹے
+ہجے
+ہکے
+ہگے
+ہلے
+ہمے
+ہنے
+ہۓ
+ھبے
+ھپے
+ھتے
+ھٹے
+ھجے
+ھکے
+ھگے
+ھلے
+ھمے
+ھۓ
+بتہ
+بچہ
+بحہ
+بطہ
+بعہ
+بغہ
+بقہ
+بلہ
+بیہ
+پتہ
+پٹہ
+پشہ
+پکہ
+پلہ
+پنہ
+پیہ
+تبہ
+تحہ
+تکہ
+تگہ
+تمہ
+تنہ
+تیہ
+تہہ
+ثقہ
+ثیم
+جبہ
+جتہ
+جثہ
+جگہ
+بلہ
+بمہ
+جنہ
+جیہ
+جہہ
+چپہ
+چغہ
+چلہ
+چنہ
+حبہ
+حثہ
+حشہ
+حصہ
+حظہ
+حقہ
+حلہ
+حمہ
+حیہ
+ختہ
+حچہ
+حطہ
+حلہ
+حمہ
+حنہ
+سبہ
+سپہ
+سبہ
+سجہ
+سخہ
+سسہ
+سطہ
+سفہ
+سقہ
+سکہ
+سلہ
+سمہ
+سنہ
+سۂ
+سیہ
+شبہ
+شتہ
+شقہ
+شلہ
+شمہ
+شنہ
+شۂ
+شیہ
+صفہ
+صلہصیہ
+ضمہ
+ظیہ
+طبہ
+طفہ
+طقہطمہ
+طیہ
+طہ
+ظلہ
+ظمہ
+عشہ
+عصہ
+عقہ
+عنہ
+عیہ
+غصہ
+غلہ
+غنہ
+فتہ
+فحہ
+فضہ
+فطہ
+فظہ
+فعہ
+فقہ
+فلہ
+فیہ
+فہہ
+قبہ
+قتہ
+قجہ
+قشہ
+قصہ
+قعہ
+قفہ
+قلہ
+قمہ
+قیہ
+کشہ
+کلہ
+کنہ
+کیہ
+کہہ
+گتہ
+گجہ
+گلہ
+گنہ
+گیہ
+گہہ
+لبہ
+لتہ
+لثہ
+لجہ
+لچہ
+لحہ
+لخہ
+لسہ
+لصہ
+لعہ
+لغہ
+لفہ
+لقہ
+لکہ
+للہ
+لمہ
+لنہ
+لیہ
+لہہ
+لہ
+متہ
+مچہ
+مطہ
+معہ
+مکہ
+ملہ
+منہ
+میہ
+مہہ
+نبہ
+نجہ
+نچہ
+نحہ
+نسہ
+نشہ
+نقہ
+نکہ
+نگہ
+نیہ
+نہہ
+ئبہ
+ئتہ
+ئٹہ
+ئچہ
+ئشہ
+ئفہ
+ئقہ
+ئکہ
+ئلہ
+ئمہ
+ئنہ
+ئیہ
+یبہ
+یجہ
+یچہ
+یحہ
+یشہ
+یضہ
+یعہ
+یفہ
+یقہ
+یکہ
+یگہ
+یلہ
+یمہ
+ینہ
+ہبہ
+ہمہ
+ہنہ
+ہیہ
+بجہھ
+بچھ
+بکھ
+پتھ
+پٹھ
+پچھ
+پکھ
+تتھ
+تجھ
+جتھ
+جٹھ
+چبھ
+چکھ
+سبھ
+سٹھ
+سجھ
+سکھ
+شبھ
+کچھ
+گتھ
+گٹھ
+گچھ
+لتھ
+لجھ
+لچھ
+لکھ
+متھ
+مٹھ
+مجھ
+مچھ
+مکھ
+منھ
+نبھ
+نتھ
+نٹھ
+نجھ
+نچھ
+نکھ
+نگھ
+نبھ
+یچھ
+یکھ
+ہتھ
+ہنھ
+طمۃ
+بی
+سی
+ضی
+بعا
+تا
+سطا
+صلا
+ظتا
+فتا
+قتا
+لبا
+متا
+معا
+ملا
+یتا
+یحا
+یضا
+نیا
+ینا
+ہلا
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt
new file mode 100644 (file)
index 0000000..e5494b7
--- /dev/null
@@ -0,0 +1,6316 @@
+ببیا
+ببھا
+بپتا
+بپھا
+بتتا
+بتخا
+بتسا
+بتغا
+بتلا
+بتما
+بتنا
+بتیا
+بتہا
+بتھا
+بٹتا
+بٹنا
+بٹیا
+بٹھا
+بجتا
+بجما
+بجنا
+بجیا
+بجھا
+بچتا
+بچکا
+بچلا
+بچنا
+بچیا
+بچھا
+بحسا
+بحفا
+بختا
+بخشا
+بخلا
+بخیا
+بستا
+بسٹا
+بسطا
+بسلا
+بسما
+بسنا
+بسیا
+بسہا
+بطحا
+بطخا
+بطلا
+بعضا
+بغیا
+بقضا
+بکتا
+بکسا
+بکشا
+بکلا
+بکما
+بکنا
+بکیا
+بکھا
+بگلا
+بگیا
+بگھا
+بلتا
+بلٹا
+بلحا
+بلطا
+بلغا
+بلفا
+بلقا
+بلکا
+بلگا
+بلما
+بلنا
+بلیا
+بلہا
+بمبا
+بمطا
+بمقا
+بمنا
+بنتا
+بنٹا
+بنجا
+بنکا
+بنگا
+بننا
+بنیا
+بیبا
+بیتا
+بیٹا
+بیجا
+بیچا
+بیسا
+بیشا
+بیضا
+بیطا
+بیعا
+بیکا
+بیگا
+بیلا
+بیما
+بینا
+بہتا
+بہکا
+بہلا
+بہنا
+بہیا
+بھپا
+بھتا
+بھٹا
+بھجا
+بھچا
+بھسا
+بھکا
+بھگا
+بھلا
+بھما
+بھنا
+بھیا
+پبیا
+پپیا
+پتتا
+پتلا
+پتنا
+پتیا
+پتھا
+پٹتا
+پٹخا
+پٹکا
+پٹلا
+پٹنا
+پٹیا
+پٹھا
+پجتا
+پجنا
+پچتا
+پچکا
+پچلا
+پچنا
+پچیا
+پچھا
+پخنا
+پخیا
+پسپا
+پستا
+پسما
+پسنا
+پشتا
+پشیا
+پغما
+پکتا
+پکما
+پکنا
+پکھا
+پگلا
+پلتا
+پلٹا
+پلکا
+پلنا
+پلیا
+پنیا
+پنجا
+پجچا
+پنچا
+پنسا
+پنگا
+پنیا
+پنہا
+پنھا
+پیپا
+پیتا
+پیٹا
+پیجا
+پیچا
+پیخا
+پیسا
+پیشا
+پیغا
+پیکا
+پیلا
+پیما
+پینا
+پہچا
+پہلا
+پہنا
+پہیا
+پھبا
+پھپا
+پھٹا
+پھچا
+پھسا
+پھکا
+پھلا
+تبخا
+تبیا
+تپتا
+تپکا
+تپنا
+تتکا
+تتلا
+تتھا
+تجتا
+تجلا
+تجنا
+تچنا
+تچتا
+تحتا
+تحیا
+تسلا
+تسما
+تشنا
+مملکتو
+تغما
+تغیا
+تفتا
+تقیا
+تکلا
+تکھا
+تگلا
+تلتا
+تلخا
+تللا
+تلنا
+تلیا
+تمبا
+تمثا
+تمغا
+تغیا
+تمنا
+تمہا
+تنبا
+تنتا
+تنکا
+تنگا
+تننا
+تنیا
+تنہا
+تیجا
+تیسا
+تیغا
+تیلا
+تیما
+تیہا
+تھپا
+تھتا
+تھجا
+تھکا
+تھلا
+تھما
+تھنا
+تھیا
+ٹپتا
+ٹپکا
+ٹپنا
+ٹٹیا
+ٹچیا
+ٹخنا
+ٹسکا
+ٹکتا
+ٹکسا
+ٹکلا
+ٹکنا
+ٹکیا
+ٹگلا
+ٹلتا
+ٹلنا
+ٹمنا
+ٹنٹا
+ٹنچا
+ٹنکا
+ٹنگا
+ٹننا
+ٹنیا
+ٹئیا
+ٹیبا
+ٹیپا
+ٹیکا
+ٹیلا
+ٹینا
+ٹہلا
+ٹہنا
+ٹھتا
+ٹھسا
+ٹھکا
+ٹھگا
+ٹھلا
+ٹھبنا
+ٹھیا
+ثعبا
+جبیا
+جبہا
+جبھا
+جپتا
+جپکا
+جپنا
+جتتا
+جتلا
+جتما
+جتنا
+جتیا
+جتہا
+جتھا
+جٹتا
+جٹنا
+جٹھا
+ججما
+جچتا
+جچنا
+جسکا
+جسما
+جفتا
+جفنا
+جکما
+چھپا
+چھٹا
+جگنا
+جگیا
+جگتا
+جلبا
+جلتا
+جلکا
+جلنا
+جلیا
+جمتا
+جلیا
+جمتا
+جمخا
+جمنا
+جنبا
+جنتا
+جنٹا
+جنکا
+جنجا
+جنگا
+جننا
+جنیا
+جیتا
+جیجا
+جیحا
+جیسا
+جیعا
+جیلا
+جینا
+جیہا
+جہتا
+جہلا
+جھبا
+جھپا
+جھتا
+جھجا
+جھکا
+جھلا
+جھما
+جھنا
+چبتا
+چبتا
+چبکا
+چبلا
+چبنا
+چبھا
+چبتا
+چپتا
+چپٹا
+چبکا
+چپلا
+چبپا
+چپنا
+چتتا
+چبھا
+چپتا
+چپکا
+چپلا
+چپنا
+چتتا
+چتلا
+چتنا
+چتھا
+چٹتا
+چٹکا
+چٹلا
+چٹنا
+چٹیا
+چٹھا
+چچکا
+چچیا
+چسپا
+چستا
+چسکا
+چسنا
+چغتا
+چقما
+چکتا
+چکٹا
+چکسا
+چکلا
+چکما
+چکنا
+چکھا
+چگتا
+چگلا
+چگنا
+چلپا
+چلتا
+چلکا
+چلنا
+چلیا
+چمپا
+چمٹا
+چمکا
+چمگا
+چملا
+چمن
+چنبا
+چنتا
+چنگا
+چننا
+چنیا
+چیپا
+چیتا
+چیخا
+چیچا
+چیلا
+چینا
+چہتا
+چہکا
+چہلا
+چھپا
+چھتا
+چھٹا
+چھجا
+چھچا
+چھکا
+چھلا
+چھما
+چھنا
+حتجا
+حتسا
+حتشا
+حتصا
+حتضا
+حتظا
+حتکا
+حتلا
+حتما
+حتیا
+حسنا
+حسنا
+حسیا
+حشیا
+حفظا
+حکما
+حمقا
+حنفا
+حیفا
+ختتا
+ختصا
+ختکا
+ختگا
+ختلا
+ختیا
+خچیا
+خشحا
+خشخا
+خشا
+خشما
+خصتا
+خصما
+خطبا
+خفتا
+خفقا
+خفنا
+خلجا
+خلخا
+خلفا
+خلکا
+خلیا
+خمیا
+خنسا
+خنگا
+خنا
+خنیا
+خیسا
+خیفا
+خیلا
+سبحا
+سبلا
+سبھا
+سپتا
+سپلا
+سپنا
+ستتا
+ستجا
+ستحا
+ستخا
+ستشا
+ستطا
+ستعا
+ستغا
+ستفا
+ستقا
+ستکا
+ستگا
+ستلا
+ستما
+ستنا
+ستیا
+ستہا
+ستھا
+سٹکا
+سٹنا
+سٹیا
+سٹھا
+سجتا
+سجلا
+سجنا
+سجھا
+سچتا
+سچلا
+سچنا
+سختا
+سستا
+سسکا
+سسنا
+سفنا
+سفیا
+سکتا
+سکشا
+سکلا
+سکنا
+سکیا
+سکھا
+سگھا
+سلتا
+سلطا
+سلفا
+سلکا
+سلگا
+سلما
+سلنا
+سلیا
+سمبا
+پنچا
+پنسا
+پنگا
+پننا
+پنیا
+پنہا
+پنھا
+پیپا
+پیتا
+پیچا
+پیخا
+پیسا
+پیشا
+پیغا
+پیکا
+پیلا
+پیما
+پینا
+پہچا
+پہلا
+پہنا
+پہیا
+پھپا
+پھچا
+پھسا
+پھکا
+پھلا
+تبخا
+تبیا
+تپتا
+تتکا
+تتلا
+تتھا
+تجتا
+تجلا
+تچتا
+تچنا
+تحتا
+تحیا
+تسلا
+تسما
+تشنا
+مملکتو
+تغما
+تغیا
+تفتا
+تقیا
+تکلا
+تکھا
+تگلا
+تلتا
+تلخا
+تللا
+تلنا
+تمبا
+تمثا
+تمغا
+تمہا
+تنتا
+تنکا
+تنگا
+تننا
+تنہا
+تیجا
+تیسا
+تیغا
+تیلا
+تیما
+تیہا
+تھپا
+تھتا
+تھجا
+تھکا
+تھلا
+تھما
+تھنا
+تھیا
+ٹپتا
+ٹپکا
+ٹٹیا
+ٹچیا
+ٹخنا
+ٹسکا
+ٹکتا
+ٹکسا
+ٹکلا
+سمپا
+سمٹا
+سمسا
+سمنا
+سمیا
+سنپا
+سنتا
+سنجا
+سنسا
+سنکا
+سنگا
+سننا
+سنیا
+سنہا
+سیپا
+سیتا
+سیٹا
+سیکا
+سیگا
+سیلا
+سیما
+سینا
+سئیا
+سیہا
+سہتا
+سہلا
+سہما
+سہنا
+شبکا
+شبہا
+شتعا
+شتکا
+شتما
+شتیا
+شتہا
+ششکا
+ششما
+شمشا
+شعبا
+شفتا
+شقیا
+شکبا
+شکشا
+شکلا
+شکنا
+شگتا
+شگنا
+شگیا
+شلتا
+شلیا
+شمشا
+شمنا
+شنیا
+شیبا
+شیخا
+شیطا
+شیلا
+شیما
+شہبا
+شہکا
+شہلا
+شہنا
+صطبا
+صطلا
+صفحا
+صفیا
+صفہا
+صلحا
+صمصا
+صمنا
+صنعا
+صہبا
+ضعفا
+ضگیا
+ضلکا
+ضمحا
+ضیحا
+طبقا
+طفلا
+طغیا
+طلبا
+طمنا
+طمیا
+طیبا
+طہما
+ظلما
+ظلہا
+عتبا
+عتصا
+عتقا
+عتکا
+عتلا
+عتما
+عتنا
+عثما
+عصیا
+عضلا
+عطیا
+عقلا
+علما
+علیا
+عنقا
+عنہا
+عیسا
+غپکا
+غثیا
+غصیا
+غلطا
+غلغا
+غلما
+غلیا
+غمنا
+غنیا
+غیبا
+غیلا
+فبہا
+فتتا
+فتخا
+فتگا
+فتنا
+فسطا
+فصحا
+فصلا
+فضلا
+فعلا
+فقہا
+فلپا
+فلما
+فنجا
+فنکا
+فیتا
+فیسا
+فیضا
+فیلا
+فیما
+فیہا
+فہما
+قبلا
+قتبا
+قتصا
+قتضا
+قتلا
+قتیا
+قحطا
+قسما
+قشلا
+قصبا
+قطعا
+قلپا
+قلفا
+قلقا
+قلما
+قلیا
+قمقا
+قیبا
+قیما
+کبجا
+کبلا
+کبھا
+کپتا
+کتسا
+کتشا
+کتفا
+کتکا
+کتلا
+کتنا
+کتیا
+کتھا
+کٹتا
+کٹکا
+کٹنا
+کٹیا
+کٹھا
+کجتا
+کجلا
+کچلا
+کچنا
+کچیا
+کچھا
+کستا
+کسلا
+کسما
+کسنا
+کسیا
+کشتا
+کشٹا
+کشیا
+کفتا
+کفنا
+کفیا
+ککیا
+کلپا
+کلتا
+کلچا
+کلسا
+کلکا
+کلما
+کلنا
+کلیا
+کلہا
+کلھا
+کمبا
+کمپا
+کمتا
+کمکا
+کملا
+کمنا
+کمیا
+کمہا
+کمنی
+کنسا
+کنعا
+کنکا
+کنگا
+کنیا
+کنہا
+کنھا
+کیسا
+کیکا
+کیلا
+کینا
+کیہا
+کہتا
+کہلا
+کہنا
+کھبا
+کھپا
+کھتا
+کھٹا
+کھجا
+کھچا
+کھسا
+کھکا
+کھلا
+کھما
+کھنا
+کھیا
+گبھا
+گپتا
+گمنا
+گپیا
+گپھا
+گتکا
+گتیا
+گتھا
+گٹکا
+گٹھا
+گجیا
+گجھا
+گچھا
+گستا
+گشتا
+گسٹا
+گستا
+گشتا
+گشٹا
+گلبا
+گفتا
+گگلا
+گلتا
+گلشا
+گلفا
+گلکا
+گلنا
+گلیا
+گلہا
+گمتا
+گمگا
+گملا
+گمنا
+گمیا
+گنتا
+گنٹا
+گنجا
+گنگا
+گننا
+گنیا
+گیپا
+گیشا
+گیلا
+گینا
+گیہا
+گہتا
+گہکا
+گہگا
+گہما
+گہنا
+گھپا
+گھتا
+گھٹا
+گھچا
+گھسا
+گیشا
+گھلا
+گھما
+گھنا
+گھیا
+لبخا
+لبفا
+لبقا
+لبنا
+لبیا
+لبھا
+لپٹا
+لپسا
+لپشا
+لپکا
+لپنا
+لپھا
+لتبا
+لتجا
+لتغا
+لتفا
+لتما
+لتیا
+لتہا
+لتھا
+لٹتا
+لٹکا
+لٹنا
+لٹیا
+لٹھا
+لجبا
+لجلا
+لجما
+لجنا
+لجہا
+لجھا
+لچتا
+لچکا
+لچنا
+لچھا
+لحجا
+لحسا
+لحقا
+لخلا
+لستا
+لسٹا
+لسقا
+لسلا
+لسنا
+لشتا
+لشفا
+لشکا
+لصبا
+لصتا
+لصفا
+لطلا
+لعبا
+لعتا
+لعشا
+لعلا
+لعنا
+لعیا
+لغفا
+لغیا
+لفتا
+لفقا
+لفگا
+لفلا
+لفن
+لفیا
+لقتا
+لقضا
+لقفا
+لقما
+لقنا
+لقیا
+لقہا
+لکتا
+لکسا
+لکسا
+لکلا
+لکما
+لکنا
+لکیا
+لکھا
+لگتا
+لگما
+لگنا
+للچا
+للع
+للغا
+للفا
+للقا
+للکا
+لمبا
+لمثا
+لمجا
+لمحا
+لمخا
+لمسا
+لمشا
+لمضا
+لمطا
+لمعا
+لمفا
+لمقا
+لمکا
+لملا
+لمنا
+لمیا
+لنبا
+لنجا
+لنسا
+لنکا
+لنگا
+لنیا
+لنہا
+لنھا
+لیبا
+لیپا
+لیٹا
+لیجا
+لیخا
+لیسا
+لیتا
+لیچا
+لیشا
+لیفا
+لیکا
+لیگا
+لیلا
+لیما
+لینا
+لہٹا
+لہکا
+لہلا
+لہنا
+للہا
+مبنا
+مبیا
+مپنا
+متتا
+متحا
+متجا
+متخا
+متسا
+متصا
+متعا
+متفا
+متشا
+متضا
+متغا
+متقا
+متگا
+متلا
+متما
+متنا
+متیا
+متہا
+متھا
+مٹتا
+مٹکا
+مٹنا
+مٹیا
+مٹھا
+مثقا
+مجلا
+مجید
+مجھا
+مچتا
+مچکا
+مچلا
+مچنا
+محبا
+محتا
+محلا
+مختا
+مستا
+مسکا
+مسلا
+مسما
+مسنا
+مشتا
+مشٹا
+مشعا
+مشغا
+مصبا
+مصفا
+مصلا
+معتا
+معلا
+معما
+معیا
+مغلا
+مفتا
+مقنا
+مقیا
+مقتا
+مکتا
+مکٹا
+مکنا
+مکھا
+مگنا
+ملتا
+ملبا
+ملیا
+ملجا
+ملکا
+ملما
+ملنا
+ملہا
+ممبا
+ممتا
+ممیا
+منتا
+منجا
+منسا
+منشا
+منقا
+منکا
+منیا
+منگا
+مننا
+منہا
+منھا
+میبا
+میتا
+میٹا
+میجا
+میخا
+میسا
+میثا
+میچا
+میشا
+میعا
+میقا
+میکا
+میگا
+میلا
+میما
+مینا
+مہبا
+مہتا
+مہکا
+مہما
+مہنا
+مہیا
+نبٹا
+نبسا
+نبیا
+نبھا
+نپتا
+نپٹا
+نپنا
+نتبا
+نتتا
+نتخا
+نتشا
+نتصا
+نتظا
+نتفا
+نتقا
+نتنا
+نتیا
+نتہا
+نتھا
+نٹتا
+نٹھا
+نثبا
+نثیا
+نجبا
+نجنا
+نجہا
+نجھا
+نچتا
+نچسا
+نچکا
+نچلا
+نچنا
+نچیا
+نچھا
+نحصا
+نحطا
+نخشا
+نخلا
+نستا
+نسقا
+نسنا
+نسیا
+نسکا
+نضبا
+نصفا
+نضما
+نظما
+نعطا
+نعطا
+نعقا
+نعکا
+نعما
+نعنا
+نغما
+نفتا
+نفسا
+نفطا
+نفعا
+نفکا
+نقسا
+نقشا
+نقصا
+نقضا
+نقلا
+نقیا
+نکتا
+نکسا
+نکشا
+نکلا
+نکما
+نکنا
+نکھا
+نگتا
+نگسا
+نگتا
+نگسا
+نگلا
+نگنا
+نگیا
+نگھا
+نلٹا
+نلکا
+نلیا
+نمٹا
+نمنا
+ننکا
+ننگا
+ننیا
+ننھا
+نیپا
+نیتا
+نیچا
+نیسا
+نیشا
+نیفا
+نیکا
+نیگا
+نیلا
+نینا
+نہتا
+نہٹا
+نہضا
+نہلا
+نہما
+ئٹیا
+ئچیا
+ئشگا
+ئشیا
+ئمقا
+ئیسا
+ئیکا
+ئیگا
+یتنا
+یتیا
+یٹنا
+یٹھا
+یحتا
+یختا
+یستا
+کٹھا
+یختا
+یسپا
+یشما
+یشیا
+یغما
+یکبا
+یکتا
+یکجا
+یکسا
+یکیا
+یکھا
+یلٹا
+یلعا
+یلغا
+یلیا
+یمیا
+ینٹا
+ینکا
+ہٹنا
+ینگا
+ینیا
+ہبلا
+ہپتا
+ہتما
+ہٹتا
+ہجہا
+ہچکا
+ہسپا
+ہسکا
+ہشتا
+ہشکا
+ہسیا
+ہفتا
+ہکتا
+ہکلا
+ہکنا
+ہگتا
+ہگنا
+ہلتا
+ہلجا
+ہلسا
+ہلکا
+ہلگا
+ہلنا
+ہلیا
+ہمتا
+ہمچا
+ہمسا
+ہمکا
+ہمنا
+ہمیا
+ہنجا
+ہنسا
+ہنشا
+ہیکا
+ہیکا
+ہنگا
+ہنما
+ہنیا
+ہیٹا
+ہیجا
+ہیگا
+ہیلا
+ہیما
+ہیہا
+ھپتا
+ھپنا
+ہتکا
+ھتگا
+ھتیا
+ھجیا
+ھچکا
+ھسکا
+ھکتا
+ھکنا
+ھلتا
+ھلکا
+ھلنا
+ھمکا
+ھملا
+ھنتا
+ھنسا
+ھنکا
+ھنگا
+ھننا
+ھنیا
+ھیکا
+ھیگا
+ھیلا
+ھیما
+بجیب
+بخیب
+بسبب
+بطیب
+بلمب
+تعجب
+تعصب
+تعقب
+تغلب
+تقلب
+ثعلب
+ثقیب
+جیکب
+چنکب
+حبیب
+حسیب
+حلیب
+خطیب
+سلیب
+شعیب
+شکیب
+صلیب
+طبیب
+ظہیب
+عجیب
+غبغب
+قضیب
+قطیب
+قلیب
+کٹمب
+لبلب
+لبیب
+لطلب
+لعجب
+لعیب
+لغیب
+لقلب
+لکتب
+مجیب
+محب
+مطلب
+مطلب
+مکتب
+مکعب
+منصب
+منیب
+مہلب
+مہیب
+نجیب
+نخشب
+نشیب
+نصیب
+نقیب
+نہیب
+چھیپ
+سٹمپ
+سکیپ
+کیمپ
+کھیپ
+گیلپ
+لچسپ
+لیمپ
+ہلک
+ہیمپ
+بلیت
+بجہت
+بسنت
+بصحت
+بعثت
+بعلت
+بعیت
+بکیت
+بلیت
+بنجو
+بیبت
+بیعت
+بہجت
+بہشت
+بھبت
+بھکت
+بھگت
+بھنت
+بھیت
+پٹیت
+پچیت
+پلیت
+پنگت
+تحیت
+تعنت
+تہمت
+جبلت
+چپیت
+چکنت
+چلنت
+چمپت
+چھیت
+حبیت
+حسنت
+حسیت
+حشمت
+حقیت
+حکمت
+حمیت
+خجلت
+خشیت
+خصلت
+خلقت
+خلیت
+سبقت
+سبیت
+سجیت
+سچیت
+سلیت
+سمبت
+سمیت
+سنگت
+سینت
+شفقت
+شکست
+شگفت
+صحبت
+صلیت
+صنعت
+طلعت
+طینت
+ظلمت
+عجلت
+عصمت
+عظمت
+غفلت
+غلظت
+غیبت
+فصلت
+قسمت
+قعیت
+قفیت
+قلت
+قلیت
+قیمت
+کسبت
+کلفت
+کلیت
+کمیت
+کنشت
+کنیت
+کیست
+کھپت
+کھیت
+گلگت
+لحیت
+لسنت
+لصلت
+لعبت
+لعنت
+لکنت
+لکھت
+لگنت
+لمست
+لمیت
+مثبت
+مچکتی
+محبت
+محنت
+مسکت
+مسیت
+مشقت
+مشیت
+معیت
+منبت
+منت
+منیت
+میت
+مہلت
+مہنت
+مہیت
+نجیت
+نچنت
+نچیت
+نخست
+نسبت
+نسیت
+نشست
+نصفت
+نعمت
+نکبت
+نکہت
+نکھت
+نگشت
+نگہت
+نمنٹ
+نیست
+نہفت
+ئینت
+یکھت
+ینیت
+ہبیت
+ہسیت
+ہلگت
+ہلیت
+ہمیت
+ہنیت
+ہیبت
+ہئیت
+بسکٹ
+بسیٹ
+بگٹٹ
+بیلٹ
+بینٹ
+بھگت
+بھیٹ
+پلیٹ
+پیسٹ
+پیکٹ
+پینٹ
+پھپٹ
+پھکٹ
+پھیٹ
+تلپٹ
+ٹمنٹ
+ٹیسٹ
+ٹینٹ
+ٹھیٹ
+جمنٹ
+جیکٹ
+جھپٹ
+چپیٹ
+چمیٹ
+چیکٹ
+چینٹ
+چھنٹ
+سٹنٹ
+سٹیٹ
+سفیٹ
+سلپٹ
+سلیٹ
+سلہٹ
+سمپٹ
+سمیٹ
+سینٹ
+شلسٹ
+فلیٹ
+فیلٹ
+کسکٹ
+کلسٹ
+کلیٹ
+کمیٹ
+کیسٹ
+منگٹ
+نٹسٹ
+نگھٹ
+نلسٹ
+نمنٹ
+ئجسٹ
+یٹنٹ
+سبید
+یجنٹ
+یکیٹ
+یگیٹ
+یلیٹ
+تحنث
+خبیث
+لبعث
+للیث
+مبحث
+مثلث
+مخنث
+مغیث
+بھیج
+پسیج
+تشنج
+جھنج
+چینج
+چھیج
+خلیج
+ستلج
+سٹیج
+سفنج
+سکنج
+قلنج
+کلنج
+منتج
+منضج
+مہیج
+نٹیج
+نگیج
+نہیج
+بینچ
+بھنچ
+بھیچ
+پہنچ
+بھنچ
+تبیچ
+سپیچ
+سکیچ
+سینچ
+قینچ
+کھپچ
+کھنچ
+کھیچ
+گھنچ
+ملیچ
+صبیح
+صحیح
+فصیح
+قبیح
+لفتح
+مسبح
+مسطح
+مسلح
+مسیح
+مصلح
+مفتح
+ملیح
+بطیخ
+لشیخ
+مسلخ
+مطبخ
+بتکد
+بجند
+بحمد
+بعید
+بعہد
+بقید
+بلند
+بلید
+بیلد
+بیند
+بھگد
+بھند
+بھید
+پسند
+پلند
+پلید
+پنشد
+پیکد
+پیند
+پھبد
+پھپد
+پھلد
+پھند
+تشہد
+تعبد
+تعہد
+تقید
+تمند
+تیند
+تہجد
+تہمد
+ٹھند
+جلند
+جمعد
+جمند
+جیند
+جھند
+چشید
+چقند
+چکند
+چمکد
+چمگد
+چنند
+چنید
+چیند
+چھند
+چھید
+حمید
+خشند
+خمید
+سبکد
+سپید
+سبید
+سپند
+ستبد
+ستعد
+ستقد
+سٹید
+سعید
+سفند
+سفید
+سکند
+سگند
+سمند
+سنگد
+سیند
+شعبد
+شقند
+شمعد
+شمند
+شمید
+شنند
+شنید
+شہید
+صعید
+ضلعد
+عبید
+عقید
+علمد
+عملد
+غمکد
+عملد
+فقید
+فیصد
+قصید
+قلمد
+قلند
+قلید
+کبید
+کتخد
+کشید
+مبتد
+کلند
+کلید
+کمید
+کنند
+کھند
+کھید
+گلبد
+گمشد
+گنبد
+گیند
+لبلد
+لبید
+لتصد
+لتعد
+لجعد
+لحمد
+لخلد
+لسجد
+لسید
+لصمد
+لعبد
+لعہد
+لقصد
+لقعد
+لقند
+لکند
+لکھد
+لمبد
+لمسد
+لمصد
+لمقد
+لمہد
+لہند
+متبد
+متحد
+متعد
+متقد
+متمد
+مجلد
+مجید
+محمد
+مخلد
+مسند
+مشہد
+معبد
+معتد
+مفسد
+مفید
+مقتد
+مقصد
+مقعد
+مقلد
+مقید
+ملحد
+ملید
+منجد
+منعد
+منہد
+میکد
+میند
+مہتد
+نبید
+نٹند
+نجید
+نشید
+نفید
+نکھد
+نگند
+نگہد
+نمکد
+نمند
+نیند
+نہند
+یقعد
+ہلحد
+ہیند
+بلیڈ
+بیکڈ
+بینڈ
+بھنڈ
+پگنڈ
+پلیڈ
+پینڈ
+پھسڈ
+پھلڈ
+تھنڈ
+ٹیچڈ
+ٹینڈ
+ٹھنڈ
+جھلڈ
+جھنڈ
+چینڈ
+چھنڈ
+سپنڈ
+سپیڈ
+سٹیڈ
+سکنڈ
+سلنڈ
+سینڈ
+فیلڈ
+کسنڈ
+کمنڈ
+کنگڈ
+کنیڈ
+کینڈ
+کھمڈ
+کھنڈ
+گینڈ
+گہگڈ
+گھنڈ
+لپنڈ
+لکنڈ
+لمنڈ
+لینڈ
+میکڈ
+محمڈ
+میگڈ
+مینڈ
+نٹنڈ
+نفیڈ
+ئٹیڈ
+ئمنڈ
+ئیٹڈ
+یپنڈ
+یٹنڈ
+یٹیڈ
+یجنڈ
+یشنڈ
+یگیڈ
+ینیڈ
+ہینڈ
+تلمذ
+کتحذ
+لہذ
+مبتذ
+نبیذ
+بپھر
+بتصر
+بتھر
+بٹلر
+بٹیر
+بجکر
+بجھر
+بچکر
+بچھر
+بحیر
+بحیر
+بستر
+بسفر
+بسیر
+بسہر
+بشیر
+بصیر
+بغیر
+بکثر
+بکیر
+بکھر
+بگیر
+بگھر
+بلغر
+بلگر
+بلیر
+بمپر
+بمتر
+بمہر
+بنجر
+بنسر
+بنصر
+بنظر
+بنکر
+بنگر
+بیٹر
+بیسر
+بیکر
+بینر
+بیئر
+بہتر
+بہیر
+بھسر
+بھقر
+بھکر
+بھگر
+بھیر
+پتھر
+پیٹر
+پچھڑ
+پکچر
+پکھر
+پمبر
+پنجر
+پنیر
+پنھر
+پیپر
+پیتر
+پیڑ
+پیسر
+پیشر
+پیکر
+پیلر
+پیہر
+پھسر
+پھیر
+تبحر
+تبصر
+تتہر
+تحیر
+تشتر
+تشکر
+تشنر
+تشہر
+پیٹر
+تعطر
+تغیر
+تفکر
+تفیر
+تکبر
+تکسر
+تکھر
+تلیر
+تمیر
+تنتر
+تنصر
+تنفر
+تیتر
+تیسر
+تہتر
+تھپر
+تھیر
+ٹیٹر
+ٹمبر
+ٹمپر
+ٹنبر
+ٹنگر
+ٹیٹر
+ٹیچر
+ٹیکر
+ٹیلر
+ٹھتر
+ٹھٹر
+ٹھکر
+ٹھمر
+ٹھیر
+ٹھہر
+جیتر
+جتیر
+جسٹر
+جعفر
+جگتر
+جگہر
+جلتر
+جلیر
+جمپر
+جمعر
+جمیر
+جنتر
+جننر
+جنجر
+جیکر
+جیلر
+جھبر
+جھجر
+جھمر
+جھیر
+چبکر
+چپکر
+چتبر
+چتیر
+چتھر
+چٹکر
+چچیر
+چلپر
+چلتر
+چنکر
+چلٹر
+چمبر
+چنبر
+چیکر
+چیئر
+چہیر
+چھپر
+چھتر
+چھیر
+چھنر
+چھہر
+حصیر
+حضیر
+حطیر
+حظیر
+حقیر
+حکمر
+حمیر
+خنصر
+خبیر
+خطیر
+خمیر
+خنجر
+خنصر
+خیبر
+سپیر
+سپہر
+ستبر
+ستتر
+ستخر
+ستغر
+ستفر
+ستقر
+ستکر
+ستمر
+ستھر
+سٹلر
+سٹیر
+سسٹر
+سعیر
+سفیر
+سکتر
+سکھر
+سلفر
+سلہر
+سمبر
+سمیر
+سنتر
+سنٹر
+سنجر
+سنچر
+سنسر
+سنکر
+سنگر
+سنہر
+سفیر
+سکتر
+سکھر
+سلفر
+سلہر
+سمبر
+سمیر
+سنتر
+سنجر
+سنکر
+سیکر
+سنچر
+سنسر
+سنگر
+سنہر
+سیسر
+سیگر
+سیلر
+سیمر
+سینر
+سہسر
+شبگر
+شبیر
+شنجر
+شعیر
+شکیر
+شنجر
+شنکر
+شنگر
+شیفر
+شیکر
+شیئر
+شہپر
+شہیر
+صغیر
+صفیر
+ضمیر
+طبغر
+طستر
+طشتر
+طمطر
+ظہیر
+عبقر
+عبیر
+عبہر
+عبتر
+عسکر
+عسیر
+عشیر
+عمیر
+عنبر
+عنصر
+عنقر
+غفیر
+فطیر
+فقیر
+فلتر
+فلٹر
+فلیر
+فیچر
+فیسر
+قصیر
+قلمر
+قمطر
+قیصر
+کبیر
+کتھر
+کٹلر
+کٹہر
+کٹھر
+کثیر
+کچہر
+کسپر
+کستر
+کسٹر
+کسکر
+کسگر
+کسیر
+کشنر
+کلچر
+کلنسر
+کلیر
+کمبر
+کمتر
+کمسر
+کمیر
+کنٹر
+کنجر
+کنسر
+کنفر
+کنکر
+کنگر
+کئیر
+کیپر
+کیتر
+کیسر
+کیفر
+کیکر
+کیلر
+کیمر
+کیئر
+کہتر
+کھپر
+کھتر
+کھسر
+کھیر
+گبھر
+گٹکر
+گٹھر
+گستر
+گلبر
+گلسر
+گلہر
+گنجر
+گیبر
+گیسر
+گیلر
+گہیر
+گبھر
+گھتر
+گھگر
+گھیر
+لبحر
+لبحر
+لبقر
+لبیر
+لبہر
+لپسر
+لتحر
+لتصر
+لتغر
+لتنر
+لیتر
+لتھر
+لٹیر
+لجبر
+لجیر
+لحجر
+لحشر
+لخمر
+لحمر
+لخیر
+لسٹر
+لشتر
+لشعر
+لشکر
+لصخر
+لعصر
+لعمر
+لفجر
+لفطر
+لفقر
+لقطر
+لقمر
+لکبر
+لکٹر
+لکچر
+لکسر
+لکیر
+لگیر
+لمبر
+لمعر
+لمکر
+لنسر
+لنصر
+لنظر
+لنگر
+لنہر
+لیبر
+لیٹر
+لیجر
+لیحر
+لیسر
+لکیر
+لیگر
+لیئر
+مبشر
+مبصر
+مپیر
+متبر
+متحر
+متشر
+متصر
+متضر
+متفر
+متمر
+متیر
+متہر
+مٹکر
+مثمر
+مجیر
+مچیر
+مچھر
+محتر
+محشر
+محضر
+محقر
+محیر
+مخبر
+مختر
+مخیر
+مستر
+مسٹر
+مسخر
+مسطر
+مسکر
+مسمر
+مسیر
+مسہر
+مشتر
+مشجر
+مشعر
+مشنر
+مشیر
+مضطر
+مضمر
+مظہر
+مظفر
+معبر
+معتر
+معطر
+معمر
+مغفر
+مغیر
+مفتر
+مفسر
+مضطر
+مفکر
+مفلر
+مقبر
+مقشر
+مقطر
+مکسر
+ملٹر
+ملکر
+ملیر
+ممبر
+ممیر
+منبر
+منٹر
+منجر
+منحر
+منخر
+منسر
+منکر
+منتر
+منخر
+منشر
+منصر
+منظر
+منفر
+منگر
+منیر
+منہر
+مئیر
+میٹر
+میجر
+میسر
+میکر
+میشر
+میگر
+میئر
+میہر
+مہتر
+نبتر
+نسٹر
+نبیر
+نبھر
+نبہر
+نتھر
+نٹیر
+نجیر
+نحضر
+نستر
+نسفر
+نسلر
+نسہر
+نشتر
+نصیر
+نضیر
+نظیر
+نفیر
+نکیر
+نکھر
+نگتر
+نگھر
+نمبر
+نمیر
+ننگر
+ننیر
+نیچر
+نیکر
+نیگر
+نیمر
+نئیر
+نیہر
+نہتر
+ئبیر
+ئسچر
+ئسکر
+ئمبر
+ئمنر
+ئمیر
+ئنگر
+ئیٹر
+ئیجر
+ئیگر
+ئیمر
+یتھر
+ییٹر
+یسٹر
+یسیر
+یشنر
+یکٹر
+یکسر
+یکطر
+یمپر
+یمنر
+یمئر
+ینٹر
+ینجر
+ینگر
+ینیر
+ہٹکر
+ہٹلر
+ہسٹر
+ہلبر
+ہمبر
+ہمسر
+ہنٹر
+ہیٹر
+ہیلر
+بتکڑ
+بچھڑ
+بنگڑ
+بنکڑ
+بیہڑ
+بھسٹر
+بھیڑ
+پچھر
+پنجڑ
+پنگڑ
+پنیڑ
+پیکڑ
+پیلڑ
+پینڑ
+پھسڑ
+پھکڑ
+پھگڑ
+پھیڑ
+تیتڑ
+تتہڑ
+تکھڑ
+تگیڑ
+تیلڑ
+تھپڑ
+تھمڑ
+تھیڑ
+جھکڑ
+جھگڑ
+جھلڑ
+چتھڑ
+چیپڑ
+چیچڑ
+چھبڑ
+چھپڑ
+چھکڑ
+چھلڑ
+چھیڑ
+سکیڑ
+سگھڑ
+سیکڑ
+شیخڑ
+غنگڑ
+کچکڑ
+کلچڑ
+کلھڑ
+کنجڑ
+کیچڑ
+کیکڑ
+کھچڑ
+کھیڑ
+گٹھڑ
+گنجڑ
+گیلڑ
+لبھڑ
+لتھڑ
+لکھڑ
+لمبڑ
+کنگڑ
+لیبڑ
+لیجڑ
+لیچڑ
+لیکڑ
+مسیر
+مکھڑ
+نبیڑ
+نبھڑ
+نچسڑ
+نکھڑ
+ہتکڑ
+ہیجڑ
+ہیکڑ
+بعجز
+بلٹز
+بیجز
+بیگز
+بینز
+پلیز
+تمیز
+ٹیمز
+جہیز
+چھیز
+ستلز
+ستمز
+ستیز
+شمیز
+سیلز
+طبعز
+کتحذ
+کنگز
+کنیز
+گلیز
+گیمز
+لمعز
+لیگز
+لیمز
+لینز
+لہمز
+مستز
+معتز
+معجز
+ملتز
+ممیز
+منیز
+منہز
+میگز
+نپلز
+نگیز
+ننگز
+نینز
+ئینز
+یٹمز
+یٹیز
+یشنز
+یلیز
+یمیز
+ہلیز
+ببیس
+بتیس
+بلیس
+بنفس
+بیطس
+بیکس
+بھلس
+بھیس
+پچیس
+پلٹس
+پلیس
+پیپس
+پتیس
+پیٹس
+پیلس
+پینس
+پھپس
+پھلس
+پھنس
+پھیس
+تجسس
+تنفس
+تئیس
+ٹیکس
+ٹیمس
+ٹینس
+ٹھنس
+ٹھیس
+جبیس
+جسٹس
+جلیس
+جیمس
+جھلس
+چکلس
+چنٹس
+چیفس
+خسیس
+خمیس
+سپیس
+سسکس
+سلیس
+سیکس
+فلپس
+فیکس
+قبیس
+ققنس
+کتیس
+کٹلس
+کسیس
+کتیس
+کھنس
+کھیس
+گیٹس
+گھٹس
+لٹمس
+لشمس
+لعکس
+لمبس
+لنفس
+لینس
+مجلس
+مخمس
+مفلس
+منٹس
+میپس
+میٹس
+میکس
+مینس
+نتیس
+نینس
+نفیس
+ئسنس
+ئیٹس
+ٹیمس
+یفنس
+یکٹس
+یلس
+یننس
+ہبیس
+ہنیں
+ھنیس
+بخشش
+بنگش
+بینش
+پیچش
+تعیش
+جنبش
+جنیش
+چکلش
+حشیش
+خشخش
+کشمش
+گنیش
+لتمش
+لعطش
+مفتش
+مقیش
+مینش
+مہیش
+نگلش
+ہمیش
+تخلص
+تشخص
+خصیص
+قمیص
+لقصص
+مختص
+مخلص
+مفیص
+ملخص
+حضیض
+سعفض
+مفیض
+نقیض
+بسیط
+تحفظ
+تسلط
+ستخط
+محیط
+مسقط
+مسلط
+مقسط
+تحفظ
+تلفظ
+حفیظ
+غلیظ
+للفظ
+مغلظ
+بلیع
+تتبع
+تشیع
+تصنع
+تضیع
+تمتع
+جمیع
+سمیع
+شفیع
+شنیع
+لجمع
+لطبع
+لطیع
+مبلع
+مبیع
+متبع
+مجمع
+مسجع
+مطبع
+مطلع
+مطمع
+مطیع
+مقطع
+ملمع
+منبع
+بلیغ
+مبلغ
+تعفف
+تکلف
+ثقیف
+حلیف
+حنیف
+خفیف
+ضعیف
+عفیف
+فکیف
+کثیف
+کسیف
+لخیف
+لسیف
+لصف
+لطیف
+لکہف
+متصف
+مخفف
+مصحف
+مصنف
+مضعف
+مکلف
+منصف
+نچیف
+نحیف
+نظیف
+یلیف
+تبلق
+تعشق
+تعلق
+تعمق
+تغلق
+تملق
+خلیق
+سحق
+شفیق
+طبلق
+عتیق
+عقیق
+عمیق
+عنیق
+لعلق
+لقلق
+لئیق
+مبیق
+متفق
+محقق
+مشتق
+مشفق
+مطلق
+معلق
+مغلق
+ملحق
+منطق
+نبیق
+ہنبق
+بٹھک
+بلیک
+بیجک
+بیشک
+بینک
+بھبک
+بھپک
+بھٹک
+بھچک
+بھسک
+بھلک
+بھنک
+بھیک
+پبلک
+پشتک
+پشمک
+پکنک
+پیٹک
+پیچک
+پینک
+پھپک
+پھبک
+پھٹک
+پھسک
+پھلک
+پھنک
+تشکک
+تمثک
+تنبک
+تہتک
+تھپک
+تھلک
+ٹیٹک
+ٹیلک
+ٹینک
+ٹھٹک
+بھکل
+ٹھسک
+ٹھمک
+ٹھنک
+ٹھیک
+جسٹک
+جھپک
+جھٹک
+جھجک
+جھلک
+جھمک
+چبلک
+چشمک
+چمبک
+چنبک
+چیٹک
+چیچک
+چیلک
+چھپک
+چھپک
+چھٹک
+چھلک
+چھمک
+چھنک
+چھیک
+خشتک
+سپلک
+سلنگ
+سلیک
+سنیک
+سینک
+صحنک
+طبلک
+علیک
+عینک
+غلطک
+کٹسک
+کلنک
+کیتک
+کھٹک
+کھسک
+کھنک
+گھٹک
+لبیک
+لمپک
+لملک
+مستک
+مسلک
+مشبک
+مضحک
+ممسک
+منسک
+میٹک
+میجک
+مینک
+مہلک
+نتھک
+نیلک
+نیمک
+یکنک
+ینفک
+بتنگ
+بٹنگ
+بجنگ
+بکنگ
+بلنگ
+بیلگ
+بینگ
+بھنگ
+بھیگ
+پتنگ
+پلنگ
+پلیگ
+پینگ
+تفنگ
+تلنگ
+تھلگ
+ٹلنگ
+ٹینگ
+جگمگ
+جننگ
+جھنگ
+چننگ
+چینگ
+سٹنگ
+سسنگ
+سلنگ
+سینگ
+شپنگ
+شلنگ
+علیگ
+فٹنگ
+فلیگ
+کٹنگ
+کسنگ
+کلنگ
+کننگ
+کھنگ
+گینگ
+لفنگ
+لہنگ
+متنگ
+ملنگ
+نٹنگ
+نچنگ
+نہنگ
+ئپنگ
+ئٹنگ
+ئلنگ
+ئننگ
+یٹنگ
+یسنگ
+یلنگ
+یننگ
+ہینگ
+ھینگت
+بخیل
+بسمل
+بشکل
+بعمل
+بفضل
+بکیل
+بکھل
+بگیل
+بلبل
+بمثل
+بنکل
+بنیل
+بیقل
+بیکل
+بھسل
+بھگل
+بھیل
+پتیل
+پتھل
+پٹیل
+پگھل
+پنسل
+پنگل
+پیبل
+پینل
+پیپل
+پیتل
+پیکل
+پھسل
+پھیل
+تجمل
+تحمل
+تخیل
+تشکل
+تعطل
+تعقل
+تفصل
+تفضل
+تکسل
+تمثل
+تنقل
+پٹیل
+ثقیل
+ٹگھل
+ٹیبل
+ٹیکل
+ٹھیل
+ثقیل
+جلیل
+جمیل
+جنبل
+جنٹل
+جنگل
+جیکل
+جھٹل
+جھجل
+جھیل
+چتھل
+چٹیل
+چسکل
+چلچل
+چنبل
+چنچل
+چنگل
+چیپل
+چیتل
+چینل
+چھیل
+حنبل
+خلیل
+سبیل
+ستیل
+سٹیل
+سطبل
+سکیل
+سگنل
+سلسل
+سمپل
+سمگل
+سنبل
+سنچل
+سنکل
+سنگل
+سیمل
+سہگل
+سہیل
+شکیل
+صطبل
+صلصل
+صیقل
+طفیل
+عقیل
+علیل
+غفیل
+غلیل
+فتیل
+فصیل
+فضیل
+فلفل
+فیشل
+فیصل
+قبیل
+قتیل
+قلقل
+قلیل
+قضل
+کتھل
+کٹھل
+کچیل
+کحیل
+کفیل
+کلبل
+کلکل
+کلیل
+کمبل
+کنجل
+کیبل
+کیچل
+کیسل
+کیہل
+کھٹل
+کھکل
+کھیل
+گٹھل
+گلگل
+گھچل
+لحیل
+لعقل
+لفصل
+لفضل
+لفعل
+لفیل
+لکحل
+لکفل
+للیل
+لمثل
+لنٹل
+لنجل
+لنمل
+لیبل
+لیگل
+متصل
+مجمل
+محصل
+محفل
+محلل
+محمل
+محیل
+مختل
+مخمل
+مسہل
+مشعل
+مشکل
+معتل
+معجل
+معطل
+مفصل
+مقبل
+مقتل
+مقفل
+مکمل
+ململ
+ممثل
+منگل
+میبل
+میٹل
+مینل
+مہمل
+نبیل
+نتھلا
+نٹھل
+نجیل
+نچھل
+نسپل
+نشیل
+نکیل
+نیمل
+ئٹیل
+ئیکل
+یٹیل
+یجنل
+یشنل
+یلغا
+یلیل
+ینٹل
+ینجل
+ینمل
+ہلبل
+ہلچل
+ہیکل
+ہیگل
+ھکیل
+ھلمل
+بچشم
+بحکم
+بستم
+بعلم
+بقلم
+بلغم
+تمیم
+بیچم
+بیگم
+بھسم
+پچھم
+پشتم
+پنجم
+پنچم
+پیتم
+پیہم
+تبسم
+تحکم
+تظلم
+تعلم
+تفہم
+تکلم
+تمیم
+تیمم
+تھکم
+جپسم
+حجیم
+جسیم
+جنتے
+جنگم
+جہلم
+جہنم
+جھلم
+چیخم
+چہلم
+چھلم
+حطیم
+حکیم
+حلکم
+حلیم
+حمیم
+سٹیم
+سسٹم
+سقیم
+سکیم
+سکھم
+سلیم
+سنگم
+سہیں
+شبنم
+شحیم
+شلجم
+شلغم
+شمیم
+شیشم
+صلعم
+صمیم
+ضخیم
+ضیغم
+طلسم
+ظلکم
+ظلہم
+عظیم
+عقیم
+علیم
+عمیم
+عنہم
+غنیم
+فہیم
+قسیم
+قلیم
+کسٹم
+کشتم
+کلیم
+کلہم
+کھلم
+کھیم
+گتھم
+گشتم
+گلیم
+گھسم
+لجہم
+لحکم
+لحیم
+لشتم
+لشٹم
+لعلم
+لفہم
+لقلم
+للحم
+للہم
+لنجم
+لئیم
+لیئم
+مبہم
+مجسم
+محکم
+مخیم
+مسلم
+مصمم
+مظلم
+معجم
+معظم
+معلم
+مغلم
+مقیم
+ملہم
+منجم
+منضم
+منظم
+منعم
+منیم
+میٹم
+میثم
+نسیم
+نعیم
+نگھم
+نیلم
+ئیٹم
+یتیم
+یلکم
+یمیم
+ینیم
+ہشتم
+ہفتم
+ہلکم
+ہنگم
+ھنگم
+بلین
+بجھن
+بچپن
+بچھن
+بحسن
+بضین
+بعین
+بقین
+بلبن
+بلین
+بئین
+بیٹن
+بیسن
+بیشن
+بیگن
+بیلن
+بہمن
+بھجن
+بھین
+پٹکن
+پٹین
+پچپن
+پچھم
+پشین
+پکین
+پلٹن
+پلین
+پنشن
+پیلن
+پھبن
+پھٹن
+پھکن
+پھننا
+پھین
+تپکن
+تسنن
+تعفن
+تعین
+تفنن
+تیقن
+تیلن
+تھکن
+ٹپکن
+ٹنگن
+ٹیشن
+ٹیکن
+ٹھکن
+ثمین
+ثنین
+جبین
+جیٹن
+جھکن
+جھلن
+جھین
+چبھن
+چپکن
+چپلن
+چپلن
+چٹخن
+چسکن
+چکٹن
+چلتن
+چلمن
+چمٹن
+چنین
+چیپن
+چھپن
+چھٹن
+چھکن
+چھنن
+چھین
+حبشن
+حسین
+حصین
+حفتن
+حقین
+حمن
+حنین
+سبین
+سپلن
+سپین
+ستین
+سٹین
+سکشن
+سکین
+سلگن
+سلین
+سمین
+سیٹن
+سیشن
+سیگن
+سیلن
+شفین
+صمین
+ضعین
+ظمین
+غضبن
+فطین
+فظین
+فقین
+فیشن
+فیمن
+کٹھن
+کلتن
+کلمن
+کلین
+کمسن
+کمین
+کنچن
+کنگن
+کنلن
+کیبن
+کیچن
+کیشن
+گلبن
+گلشن
+گیلن
+گیمن
+گھٹن
+گھسن
+لپٹن
+لٹکن
+لجین
+لجھن
+لچکن
+لچھن
+لحسن
+لحین
+لعین
+لفین
+لقین
+لکجن
+لکھن
+لمین
+لنکن
+لیٹن
+لیشن
+لیکن
+لیمن
+لینن
+لہسن
+مبین
+متحن
+متین
+مٹھن
+مثمن
+محسن
+مسکن
+مشین
+معجن
+معین
+مقنن
+مکمن
+مکین
+مکھن
+مگین
+ملٹن
+ملین
+ممکن
+منچن
+منمن
+منین
+میشن
+میگن
+میمن
+مہین
+نپین
+نٹین
+نجمن
+نچھن
+نشین
+نچھن
+نطین
+نگٹن
+نگین
+نیشن
+ئبین
+ئقین
+ئلین
+یشین
+یفین
+یقین
+یکشن
+یلین
+یمین
+ہستن
+ہلین
+ہنگن
+ہیگن
+ہیلن
+بتیں
+بٹیں
+بجیں
+پسیں
+بچیں
+پسیں
+بقیں
+بکیں
+بلیں
+بنیں
+بہیں
+پتیں
+پٹیں
+پجیں
+پچیں
+پشیں
+پکیں
+پلیں
+پئیں
+پھیں
+تپیں
+تتیں
+تچیں
+تشیں
+تکیں
+تگیں
+تلیں
+تنیں
+تئیں
+تھیں
+ٹپیں
+ٹتیں
+ٹکیں
+ٹلیں
+ٹھیں
+ثتیں
+جبیں
+جتیں
+جٹیں
+جپیں
+جچیں
+جگیں
+جلیں
+جمیں
+جنیں
+جئیں
+جھیں
+چپیں
+چبیں
+چتیں
+چٹیں
+چسیں
+چقیں
+چکیں
+چگیں
+چلیں
+چنیں
+چئیں
+چھیں
+حتیں
+حٹیں
+حسیں
+حنیں
+خسیں
+ستیں
+سچیں
+سشیں
+سکیں
+سلیں
+سمیں
+سنیں
+سہیم
+ششیں
+شقیں
+صحین
+صفیں
+صلیں
+ظتیں
+عتیں
+عظیں
+فتیں
+فطیں
+فمیں
+قتیں
+قمیں
+کتیں
+کٹیں
+کجیں
+کچیں
+کسیں
+کلیں
+کمیں
+کہیں
+کھیں
+گپیں
+گتیں
+گچیں
+گلیں
+گمیں
+گنیں
+گئیں
+لتیں
+لٹیں
+لچیں
+لفیں
+لکیں
+لگیں
+لنیں
+لیکن
+مبیں
+مٹیں
+مجیں
+متیں
+مچیں
+مسیں
+مکیں
+مگیں
+ملیں
+مہیں
+نپیں
+نتیں
+نٹیں
+نجیں
+نخیں
+نچیں
+نسیں
+نشیں
+نقیں
+نگیں
+نہیں
+نھیں
+ئٹیں
+ئشیں
+ئفیں
+ئلیں
+ئنیں
+یتیں
+یثیں
+یخیں
+یفیں
+یکیں
+یقیں
+یگیں
+یلیں
+یمیں
+ہپیں
+ہتیں
+ہٹیں
+ہشیں
+ہکیں
+ہگیں
+ہلیں
+ہمیں
+ہنیں
+ہئیں
+ھکیں
+ھلیں
+ھنیں
+بپتو
+بتیو
+بتھو
+بٹلو
+بٹنو
+بٹیو
+بٹھو
+بجنو
+بجھو
+بچتو
+بچکو
+بچلو
+بچیو
+بچھو
+بحثو
+بحصو
+بحضو
+بختو
+بخشو
+بخیو
+بشمو
+بشنو
+بطخو
+بعضو
+بعنو
+بغچو
+بغلو
+بقچو
+بقعو
+بکٹو
+بکسو
+بکلو
+بکیو
+بگلو
+بگھو
+بلبو
+بلٹو
+بلتو
+بلکو
+بلو
+بلیو
+بلہو
+بمبو
+بنٹو
+بنجو
+بنسو
+بنکو
+بیتو
+بیٹو
+بیجو
+بیحو
+بیچو
+بیسو
+بیضو
+بیکو
+بیگو
+بیلو
+بیمو
+بینو
+بیہو
+بہبو
+بہتو
+بہکو
+بہلو
+بہنو
+بھبو
+بھٹو
+بھپو
+بھجو
+بھچو
+بھسو
+بھکو
+بھگو
+بھلو
+بھنو
+پئپو
+پتلو
+پٹخو
+پٹکو
+پٹیو
+پٹھو
+پچتو
+پچکو
+پچھو
+پختو
+پستو
+پسلو
+پسیو
+پشتو
+پشیو
+پکھو
+پگلو
+پلٹو
+پلکو
+پمپو
+پنپو
+پنجو
+پنگو
+پیپو
+پیٹو
+پیچو
+پیسو
+پیشو
+پیکو
+پیلو
+پیمو
+پیئو
+پیہو
+پہلو
+پہنو
+پہیو
+پھبو
+پھپو
+پھٹو
+پھچو
+پھکو
+پھچو
+پھگو
+پھلو
+پھنو
+تپکو
+تتلو
+تحفو
+تختو
+تسلو
+تسمو
+تسنو
+تکیو
+تکھو
+تمبو
+تمغو
+تمکو
+تنبو
+تنخو
+تنکو
+تیٹو
+تیجو
+تیسو
+تیغو
+تیلو
+تیمو
+تینو
+تھجو
+تھکو
+تھلو
+تھمو
+تھنو
+تھیو
+ٹپکو
+ٹخنو
+ٹکٹو
+ٹکلو
+ٹکیو
+ٹنگو
+ٹیپو
+ٹیٹو
+ٹیسو
+ٹیکو
+ٹیشو
+ٹیگو
+ٹیلو
+ٹیمو
+ٹہلو
+ٹہنو
+ٹھسو
+ٹھکو
+ٹھگو
+ٹھلو
+ٹھنو
+ٹھئو
+ٹھیو
+ثیقو
+ثیمو
+جبھو
+جتنو
+جستو
+جسکو
+جسمو
+جشنو
+جگتو
+جگنو
+جگہو
+جلسو
+جمبو
+جملو
+جمہو
+جنتو
+جنجو
+جنسو
+جنگو
+جنمو
+جنیو
+جنہو
+جیبو
+جیپو
+جیتو
+جیحو
+جیسو
+جیشو
+جیلو
+جینو
+جیہو
+جہتو
+جھکو
+جھلو
+جھمو
+جھنو
+چبکو
+چبلو
+چبھو
+چپٹو
+چپکو
+چپلو
+چتلو
+چٹخو
+چٹکو
+چٹلو
+چٹیو
+چٹھو
+چچیو
+چسکو
+چسنو
+چشمو
+چسنو
+چکٹو
+چکلو
+چکمو
+چکنو
+چکیو
+چکھو
+چلغو
+چلمو
+چلھو
+چمبو
+چمٹو
+چمپو
+چمچو
+چمکو
+چمنو
+چنٹو
+چنیو
+چیپو
+چیتو
+چیخو
+چیکو
+چیلو
+چہکو
+چہنو
+چھپو
+چھتو
+چھٹو
+چھجو
+چھکو
+چھلو
+چھنو
+حبتو
+حجتو
+حجلو
+حشتو
+حشیو
+حکمو
+حلفو
+حلقو
+حلیو
+حمتو
+حمقو
+حملو
+حیتو
+حیلو
+ختنو
+خشبو
+خشنو
+خشیو
+خصمو
+خصیو
+خطبو
+خلتو
+خلفو
+خلقو
+خلیو
+خمیو
+خیمو
+سبعو
+سبغو
+سبکو
+سپنو
+ستخو
+ستصو
+ستکو
+ستلو
+سٹکو
+سٹلو
+سٹیو
+سٹھو
+سجنو
+سخنو
+سخیو
+سسکو
+سطحو
+سعتو
+سفلو
+سقمو
+سکتو
+سکیو
+سلحو
+سکیو
+سکھو
+سگنو
+سلجو
+سلفو
+سلکو
+سلگو
+سلیو
+سمپو
+سمتو
+سمٹو
+سمنو
+سنبو
+سنپو
+سنتو
+سنجو
+سنکو
+سنگو
+سنلو
+سیبو
+سیٹو
+سیخو
+سیسو
+سیکو
+سیلو
+سیمو
+سینو
+سہلو
+سہمو
+شبخو
+شبکو
+شبہو
+شتیو
+شخصو
+شعبو
+شغلو
+شفٹو
+شکلو
+شکنو
+شگنو
+شلفو
+شمشو
+شمعو
+شملو
+شمنو
+شنٹو
+شنیو
+شیخو
+شیشو
+شیعو
+شیلو
+شہتو
+شہسو
+صبحو
+صبہو
+صحتو
+صحنو
+صفتو
+صفحو
+صلو
+صلیو
+صلا
+صنفو
+صیتو
+صیغو
+صیلو
+صیہو
+ضگیو
+ضلعو
+طبقو
+طبلو
+طشتو
+طعنو
+طمیو
+طنبو
+طیسو
+ظمیو
+ظیفو
+عصفو
+عظمو
+عفتو
+عقلو
+عکسو
+علتو
+علمو
+عملو
+عنفو
+عیبو
+عیتو
+عیسو
+غبتو
+غبیو
+غلبو
+غنچو
+فتحو
+فتنو
+فسٹو
+فصلو
+فضلو
+فعتو
+فعلو
+فغفو
+فلمو
+فلیو
+فیتو
+فیسو
+فیقو
+فیلو
+فینو
+فہمو
+قبضو
+قبلو
+قتلو
+قتیو
+قسطو
+قسمو
+قشقو
+قصبو
+قضیو
+قطعو
+قلتو
+قلعو
+قلمو
+قلیو
+قیبو
+قیطو
+قیفو
+قیقو
+قیلو
+کبھو
+کتبو
+کتنو
+کتیو
+کتھو
+کٹکو
+کٹیو
+کٹھو
+کچکو
+کجکو
+کجلو
+کچلو
+کچھو
+کتھو
+کستو
+کسٹو
+کسفو
+کسلو
+کشتو
+کشٹو
+کشکو
+کشیو
+کعتو
+کفنو
+ککھو
+کلبو
+کلتو
+کلپو
+کلثو
+کلچو
+کلکو
+کلمو
+کلیو
+کلہو
+کمبو
+کمپو
+کمجو
+کمخو
+کملو
+کمیو
+کنبو
+کنٹو
+کنجو
+کنسو
+کنکو
+کیبو
+کنگو
+کیپو
+کیتو
+کیچو
+کیسو
+کیکو
+کیلو
+کیمو
+کینو
+کہلو
+کھپو
+کھتو
+کھٹو
+کھجو
+کھچو
+کھسو
+کھکو
+کھلو
+کھنو
+کھیو
+گپکو
+گتھو
+گٹکو
+گٹھو
+گچھو
+گسٹو
+گلگو
+گلیو
+گملو
+گنجو
+گنگو
+گنیو
+گیتو
+گیسو
+گیلو
+گیمو
+گیہو
+گہکو
+گہنو
+گھپو
+گھٹو
+گھجو
+گھچو
+گھسو
+گھگو
+گھلو
+گھنو
+گھیو
+لبمو
+لپٹو
+لپکو
+لتصو
+لتیو
+لٹکو
+لٹیو
+لثبو
+لجھو
+لچکو
+لچھو
+لحتو
+لحظو
+لحقو
+لحکو
+لخصو
+لسٹو
+لسطو
+لسلو
+لشتو
+لشعو
+لشکو
+لصبو
+لطو
+لعفو
+لعلو
+لعمو
+لغتو
+لغفو
+لغنو
+لغیو
+لفتو
+لفٹو
+لفطو
+لفظو
+لفنو
+لقلو
+لقمو
+لقیو
+لکیو
+لکھو
+لگنو
+لگیو
+لمبو
+لمپو
+لمحو
+لمصو
+لمکو
+لمیو
+لنکو
+لنگو
+لنیو
+لیپو
+لیٹو
+لیحو
+لیچو
+لیسو
+لیفو
+لیقو
+لیکو
+لیگو
+لیلو
+لیمو
+لینو
+لیہو
+لہٹو
+لہجو
+لہچو
+لہکو
+لہلو
+لہنو
+مبسو
+مبعو
+مبلو
+مبہو
+متبو
+متصو
+متلو
+متمو
+متنو
+متھو
+مٹکو
+مٹلو
+مٹیو
+مٹھو
+مثلو
+مثنو
+مجبو
+سنبھا
+مجمو
+مجنو
+مجہو
+مجھو
+مچکو
+مچلو
+مچھو
+محبو
+محتو
+محجو
+محشو
+محضو
+محظو
+محفو
+محکو
+محلو
+محمو
+مخبو
+مختو
+مخصو
+مخطو
+مخلو
+مخمو
+مسبو
+مسٹو
+مستو
+مسجو
+مسطو
+مسعو
+مسکو
+مسلو
+مسمو
+مسنو
+مسئو
+مشحو
+مشغو
+مشقو
+مشکو
+مشمو
+مشہو
+مصلو
+مصمو
+مصنو
+مصئو
+مضبو
+مضمو
+مطبو
+مطلو
+مطعو
+مظبو
+مظنو
+معبو
+معتو
+معجو
+معشو
+معصو
+معطو
+معقو
+معکو
+معلو
+معمو
+معنو
+معیو
+معہو
+مغسو
+مغشو
+مغضو
+مغفو
+مغلو
+مغمو
+مفتو
+مفعو
+مفقو
+مفلو
+مفہو
+مقبو
+مقتو
+مفسو
+مقصو
+مقلو
+مقہو
+مکتو
+مکحو
+مکسو
+مکشو
+مکنو
+مکھو
+ملبو
+ملتو
+ملحو
+ملعو
+ملغو
+ملفو
+ملکو
+ملنو
+ملیو
+مملو
+ممنو
+منتو
+منٹو
+منچو
+منحو
+منسو
+منشو
+منصو
+منطو
+منظو
+منقو
+منگو
+منکو
+منلو
+منیو
+منھو
+میتو
+میٹو
+میجو
+میخو
+میچو
+میسو
+میشو
+میکو
+میگو
+میلو
+میمو
+مینو
+مہجو
+مہکو
+مہمو
+نبٹو
+نبضو
+نبیو
+نبھو
+نپٹو
+نپجو
+نپلو
+نتھو
+نٹیو
+نٹھو
+نجسو
+نجشو
+نجنو
+نجھو
+نچلو
+نچھو
+نحضو
+نخلو
+نسپو
+نسبو
+نسٹو
+نستو
+نسخو
+نسکو
+نسلو
+نسیو
+نطفو
+نظمو
+نعتو
+نعشو
+نعلو
+نغمو
+نفسو
+نفعو
+نفلو
+نقشو
+نقصو
+نقلو
+نکتو
+نکٹو
+نکسو
+نکلو
+نکمو
+نکھو
+نگپو
+نگٹو
+نگلو
+نگیو
+نگھو
+نلکو
+نلیو
+نمٹو
+نمکو
+ننگو
+ننھو
+نیبو
+نیتو
+نیٹو
+نیجو
+نیسو
+نیشو
+نیفو
+نیکو
+نیگو
+نیلو
+نیمو
+نینو
+نہتو
+نہٹو
+نہجو
+ئٹیو
+ئچیو
+ئفلو
+ئلٹو
+ئنگو
+ئیسو
+ئیکو
+ئیلو
+ئینو
+ینپو
+یتھو
+یٹمو
+یٹئو
+یجنو
+یچھو
+یستو
+یشنو
+یشیو
+یعتو
+یعسو
+یعقو
+یکٹو
+یکسو
+یکنو
+یکیو
+یکھو
+یگچو
+یلبو
+یلٹو
+یلیو
+ینٹو
+ینکو
+ینگو
+ہچکو
+ہفتو
+ہکلو
+ہلکو
+ہلگو
+ہمتو
+ہمجو
+ہمچو
+ہمخو
+ہمکو
+ہنجو
+ہنسو
+ہیٹو
+ہیلو
+ہیمو
+ہینو
+ھتیو
+ھجیو
+ھچکو
+ھلکو
+ھمکو
+ھنکو
+ھنگو
+سقئہ
+صفحہ
+ئحئہ
+یچئہ
+ببلی
+ببئی
+بپتی
+بتتی
+بتنی
+بٹتی
+بٹلی
+بٹنی
+بجتی
+بجلی
+بجنی
+بجھی
+بچتی
+بچکی
+بچگی
+بچلی
+بچنی
+بچھی
+بحثی
+بختی
+بخشی
+بستی
+بسنی
+بطخی
+بطنی
+بعضی
+بغچی
+بغضی
+بغلی
+بقچی
+بکتی
+بکٹی
+بکسی
+بکنی
+بکئی
+بکھی
+بگتی
+بگھی
+بلتی
+بلٹی
+بلخی
+بلسی
+بلغی
+بلکی
+بللی
+بلنی
+بلہی
+بمپی
+بنتی
+بنٹی
+بنجی
+بنسی
+بنکی
+بنگی
+بننی
+بیتی
+بیٹی
+بیجی
+بیچی
+بیسی
+بیشی
+بیعی
+بیگی
+بیلی
+بینی
+بہتی
+بہکی
+بہلی
+بہنی
+بھتی
+بھٹی
+بھجی
+بھچی
+بھسی
+بھکی
+بھگی
+بھلی
+بھنی
+بھئی
+پئبی
+پپلی
+پپتی
+پتکی
+پتلی
+پتنی
+پتھی
+پٹتی
+پٹخی
+پٹکی
+پٹنی
+پٹھی
+پجتی
+پجنی
+پچتی
+پچکی
+پچنی
+پچھی
+پخنی
+پستی
+پسلی
+پسنی
+پشتی
+پکتی
+پکشی
+پکنی
+پگلی
+پلتی
+پلٹی
+پلنی
+پمپی
+پپنی
+پنجی
+پنکی
+پیتی
+پیٹی
+پیسی
+پیشی
+پیلی
+پینی
+پہلی
+پہنی
+پھبی
+پھپی
+پھٹی
+پھسی
+پھکی
+پھگی
+پھلی
+پھنی
+تبتی
+تبلی
+تبھی
+تپتی
+تپشی
+تتلی
+تتئی
+تجتی
+تجلی
+تجنی
+تجھی
+تچتی
+تچنی
+تحتی
+تحلی
+تختی
+تخمی
+تسلی
+تشتی
+تشفی
+تشکی
+تضی
+تکتی
+تکنی
+تگتی
+تگنی
+تلتی
+تلخی
+تلسی
+تلکی
+تللی
+تلنی
+تمنی
+تنتی
+تنکی
+تنگی
+تننی
+تیبی
+تیجی
+تیخی
+تیسی
+تیلی
+تہجی
+تھپی
+تھتی
+تھجی
+تھکی
+تھلی
+تھمی
+تھنی
+تھئی
+ٹپتی
+ٹپکی
+ٹپنی
+ٹخنی
+ٹکنی
+ٹکتی
+ٹکلی
+ٹکنی
+ٹگنی
+ٹلتی
+ٹلنی
+ٹمنی
+ٹنگی
+ٹیپی
+ٹیچی
+ٹیکی
+ٹیلی
+ٹیمی
+ٹینی
+ٹہلی
+ٹہنی
+ٹھتی
+ٹھسی
+ٹھگی
+ٹھلی
+ٹھنی
+ثقفی
+ثیقی
+ثیمی
+جبلی
+جبھی
+جپتی
+جپسی
+جپنی
+جتتی
+جتنی
+جٹھی
+جچتی
+جچگی
+جچنی
+جچئی
+جسکی
+جسمی
+جعتی
+جعلی
+جفتی
+جگتی
+جگنی
+جلتی
+جلقی
+جلنی
+جمتی
+جمعی
+جمنی
+جنبی
+جنمی
+جنتی
+جنجو
+جنسی
+جنکی
+جنگی
+جنمی
+جننی
+جیبی
+جیتی
+جیجی
+جیحی
+جیسی
+جیکی
+جیلی
+جیمی
+جینی
+جیہی
+جہتی
+جھتی
+جھکی
+جھگی
+جھلی
+جھنی
+چبتی
+چبکی
+چبلی
+چبنی
+چبھی
+چپتی
+چپٹی
+چپکی
+چپلی
+چپنی
+چتتی
+چتلی
+چتنی
+چٹتی
+چٹخی
+چٹکی
+چٹنی
+چٹھی
+چچلی
+چستی
+چسکی
+چسنی
+چشتی
+چشمی
+چغلی
+چکتی
+چکٹی
+چکلی
+چکنی
+چکئی
+چکھی
+چگتی
+چگنی
+چلتی
+چلنی
+چمپی
+چمٹی
+چمچی
+چمکی
+چملی
+چمنی
+چنتی
+چنگی
+چننی
+چیپی
+چیخی
+چیسی
+چیلی
+چینی
+چہکی
+چہلی
+چبھی
+چھپی
+چھٹی
+چھتی
+چھچی
+چھلی
+چھنی
+چھئی
+حبشی
+حتمی
+حتی
+حجتی
+حسبی
+حسنی
+حکمی
+حلبی
+حلفی
+حلقی
+حلمی
+حمتی
+حنفی
+حیضی
+حیمی
+خبطی
+ختگی
+ختمی
+ختنی
+ختئی
+خستی
+خشکی
+خصتی
+خصمی
+خطمی
+خفگی
+سفلی
+خلتی
+خلقی
+خلفی
+خمچی
+خنکی
+سبکی
+سبھی
+سپتی
+ستتی
+ستکی
+ستگی
+ستلی
+ستمی
+سٹکی
+سٹلی
+سٹھی
+سجتی
+سجنی
+سچلی
+سختی
+سسپی
+سستی
+سسکی
+سسلی
+سطحی
+سطی
+سفلی
+سقنی
+سکتی
+سکسی
+سکنی
+سکھی
+سگسی
+سگنی
+سلبی
+سلتی
+سلکی
+سلگی
+سلمی
+سلنی
+سمبی
+سمتی
+سمٹی
+سمسی
+سمعی
+سمنی
+سنبی
+سنتی
+سنٹی
+سنکی
+سنگی
+سنلی
+سننی
+سیبی
+سیپی
+سیتی
+سیسی
+سیفی
+سیعی
+سیقی
+سیکی
+سیلی
+سیمی
+سینی
+سیہی
+سہتی
+سہلی
+سہمی
+سہنی
+شبعی
+شبلی
+شٹمی
+شخصی
+شخطی
+شطحی
+شفقی
+شکتی
+شکلی
+شکمی
+شکنی
+شگتی
+شگنی
+شمسی
+شمعی
+شمنی
+شیخی
+شیشی
+شیعی
+شہکی
+شہنی
+ضحی
+صلبی
+صلگی
+صیتی
+صیعی
+ضبطی
+ضحی
+ضلعی
+ضمنی
+طبی
+طبعی
+طبلی
+طفلی
+طلبی
+طیبی
+طیسی
+طینی
+ظلمی
+ظہبی
+عجمی
+عشقی
+عشی
+عصبی
+عظمی
+عقبی
+عقلی
+عکسی
+علتی
+علمی
+علی
+عملی
+عمی
+عنہی
+عیبی
+عیتی
+عینی
+غبتی
+غچلی
+غضبی
+غلطی
+غلنی
+غلئی
+غیبی
+فتگی
+فتنی
+فصلی
+فضلی
+فعلی
+ففٹی
+فقہی
+فلکی
+فلمی
+فیضی
+فیقی
+فیلی
+فیمی
+فہمی
+قبطی
+قسمی
+قصی
+قطبی
+قطعی
+قفلی
+قلبی
+قلعی
+قلفی
+قلمی
+قمچی
+قیسی
+قیفی
+قیقی
+کبکی
+کبھی
+کپٹی
+کتنی
+کٹتی
+کٹکی
+کٹنی
+کٹھی
+کجلی
+کچلی
+کچھی
+کسبی
+کستی
+کسلی
+کسنی
+کشتی
+کشفی
+کعتی
+کفنی
+کلبی
+کلتی
+کلٹی
+کلچی
+کلغی
+کلفی
+کلکی
+کلنی
+کمبی
+کمپی
+کمتی
+کمٹی
+کملی
+کمنی
+کنجی
+کنکی
+کنگی
+کیتی
+کیچی
+کیسی
+کیفی
+کیکی
+کیلی
+کہتی
+کہنی
+کھبی
+کھپی
+کھتی
+کھٹی
+کھجی
+کھسی
+کھلی
+کھنی
+گپتی
+گپکی
+گتھی
+گٹکی
+گٹھی
+گجنی
+گجئی
+گجھی
+گچھی
+گشتی
+گفتی
+گلتی
+گلٹی
+گلجی
+گلنی
+گمتی
+گمٹی
+گملی
+گمنی
+گنتی
+گنجی
+گنگی
+گننی
+گیتی
+گیسی
+گیلی
+گینی
+گہکی
+گہمی
+گہنی
+گھپی
+گھٹی
+گھسی
+گھگی
+گھلی
+گھنی
+لبنی
+لپٹی
+لپسی
+لپکی
+لٹتی
+لٹکی
+لٹنی
+لجھی
+لچتی
+لچکی
+لچنی
+لچھی
+لحتی
+لحئی
+لخمی
+لسٹی
+لسکی
+لسئی
+لشتی
+لطفی
+لعلی
+لغنی
+لفظی
+لقمی
+لکتی
+لکٹی
+لکشی
+لکنی
+لکھی
+لگتی
+لگنی
+لمبی
+لمکی
+لنبی
+لنکی
+لنگی
+لیپی
+لیتی
+لیٹی
+لیچی
+لیسی
+لیفی
+لیقی
+لیکی
+لیگی
+لیمی
+لینی
+لیئی
+لیہی
+لہٹی
+لہکی
+لہی
+مبنی
+متقی
+متکی
+متلی
+متنی
+متھی
+مٹتی
+مٹکی
+مٹنی
+مٹھی
+مثنی
+مجھی
+مچتی
+مچکی
+مچلی
+مچنی
+مچھی
+محبی
+محیی
+مخفی
+مستی
+مسکی
+مسلی
+مسنی
+مشتی
+مشفی
+مشقی
+مشکی
+مصفی
+مضی
+معنی
+مغلی
+مغنی
+مفتی
+مقئی
+مکتی
+مکنی
+مکئی
+مکھی
+مگسی
+ملتی
+ملٹی
+ملکی
+ملی
+ملنی
+ممٹی
+منتی
+منجی
+منشی
+منفی
+منقی
+منکی
+منگی
+مننی
+منی
+میٹی
+میجی
+میچی
+میسی
+میشی
+میکی
+میلی
+میمی
+مینی
+مہکی
+مھیی
+نبتی
+نبٹی
+نبھی
+نپتی
+نپٹی
+نپنی
+نبچی
+نتتی
+نتنی
+نتھی
+نٹتی
+نٹنی
+نٹھی
+نجتی
+نجشی
+نجفی
+نجمی
+نجنی
+نجھی
+نچتی
+نچکی
+نچلی
+نچنی
+نچھی
+نحلی
+نسبی
+نستی
+نسٹی
+نسلی
+نسنی
+نظمی
+نغمی
+نفسی
+نفلی
+نقشی
+نقلی
+نکتی
+نکٹی
+نکسی
+نکلی
+نکمی
+نکنی
+نکھی
+نگتی
+نگلی
+نگنی
+نگہی
+نگھی
+نلکی
+نمٹی
+نمنی
+ننگی
+ننھی
+نیتی
+نیثی
+نیچی
+نیشی
+نیکی
+نیگی
+نیلی
+نیمی
+نینی
+نہٹی
+نہلی
+نہنی
+ئنسی
+ئیسی
+ئیشی
+ئیگی
+ئیلی
+ئینی
+یتنی
+یٹمی
+یحیی
+یختی
+یخنی
+یشمی
+یعتی
+یعنی
+یکتی
+یکھی
+یگچی
+یلٹی
+یلچی
+یلسی
+یلمی
+یلہی
+یمنی
+ینٹی
+ہٹتی
+ہٹنی
+ہچکی
+ہستی
+ہسکی
+ہسلی
+ہسنی
+ہضمی
+ہکتی
+ہکلی
+ہکنی
+ہگتی
+ہگلی
+ہلتی
+ہلکی
+ہلگی
+ہلنی
+ہمتی
+ہمکی
+ہمگی
+ہمنی
+ہنسی
+ہنکی
+ہنگی
+ہیتی
+ہیٹی
+ہیلی
+ہیمی
+ھپتی
+ھپنی
+ھستی
+ھسنی
+ھکتی
+ھکنی
+ھلتی
+ھلکی
+ھلنی
+ھمکی
+ھنتی
+ھنسی
+ھنکی
+ھنگی
+ھننی
+ھیلی
+ھیمی
+ھینی
+بپتے
+بتتے
+بتنے
+بتئے
+بٹتے
+بٹنے
+بٹئے
+بجتے
+بجنے
+بجئے
+بجھے
+بچتے
+بچکے
+بچلے
+بچنے
+بچئے
+بچھے
+بختے
+بخشے
+بخئے
+بخیے
+بستے
+بسکے
+بسنے
+بسئے
+بعضے
+بغچے
+بقچے
+بقعے
+بکتے
+بکٹے
+بکسے
+بکلے
+بکنے
+بکئے
+بگلے
+بگھے
+بلتے
+بلٹے
+بلسے
+بلکے
+بللے
+بلنے
+بلئے
+بنتے
+بنٹے
+بنجے
+بننے
+بنئے
+بیتے
+بیٹے
+بیجے
+بیچے
+بیضے
+بیلے
+بیمے
+بینے
+بہتے
+بہکے
+بہلے
+بہنے
+بہئے
+بھٹے
+بھجے
+بھچے
+بھکے
+بھگے
+بھلے
+بھنے
+پتتے
+پتلے
+پتنے
+پتئے
+پتھے
+پٹتے
+پٹخے
+پٹکے
+پٹنے
+پٹئے
+پٹھے
+پجتے
+پجنے
+پجئے
+پچتے
+پچکے
+پچنے
+پچئے
+پچھے
+پستے
+پسنے
+پسئے
+پشتے
+پکتے
+پکنے
+پکئے
+پگلے
+پلتے
+پلٹے
+پلنے
+پلئے
+پپنے
+پنتے
+پنجے
+پیپے
+پیتے
+پیٹے
+پیسے
+پیشے
+پیلے
+پینے
+پیئے
+پہلے
+پہنے
+پہئے
+پھبے
+پھٹے
+پھسے
+پھکے
+پھلے
+پھنے
+تپتے
+تپکے
+تپنے
+تپئے
+تتلے
+تتمے
+تجتے
+تجنے
+تجئے
+تجھے
+تچتے
+تچنے
+تچئے
+تحفے
+تختے
+تسلے
+تسمے
+تشنے
+تکتے
+تکلے
+تکنے
+تکیے
+تکئے
+تگتے
+تگنے
+تلتے
+تللے
+تلنے
+تلئے
+تمغے
+تنتے
+تنکے
+تننے
+تنئے
+تیجے
+تیشے
+تیلے
+تینے
+تھپے
+تھتے
+تھجے
+تھکے
+تھلے
+تھمے
+تھنے
+تھئے
+ٹپتے
+ٹپکے
+ٹپنے
+ٹپئے
+ٹخنے
+ٹکتے
+ٹکلے
+ٹکنے
+ٹکئے
+ٹلتے
+ٹلٹے
+ٹلنے
+ٹلئے
+ٹنٹے
+ٹنگے
+ٹیپے
+ٹیکے
+ٹیلے
+ٹینے
+ٹہلے
+ٹہنے
+ٹھتے
+ٹھٹے
+ٹھسے
+ٹھکے
+ٹھگے
+ٹھلے
+ٹھنے
+ٹھئے
+ثیقے
+جپتے
+جپنے
+جپئے
+جتتے
+جتنے
+جتئے
+جتھے
+جٹتے
+جٹھے
+جٹنے
+جٹئے
+جچتے
+جچنے
+جچئے
+جسکے
+جفتے
+جکتے
+جگتے
+جگنے
+جگئے
+جلتے
+جلسے
+جلنے
+جلئے
+جمتے
+جمعے
+جملے
+جمنے
+جمئے
+جنتے
+جنسے
+جنکے
+جننے
+جنئے
+جنھے
+جیتے
+جیسے
+جینے
+جیئے
+جھتے
+جھکے
+جھلے
+جھنے
+جھئے
+چبتے
+چبکے
+چبلے
+چبنے
+چبئے
+چبھے
+چپتے
+چپٹے
+چپکے
+چپنے
+چپئے
+چتتے
+چتنے
+چتئے
+چٹپے
+چٹتے
+چٹخے
+چٹکے
+چٹلے
+چٹنے
+چٹئے
+چٹھے
+چسکے
+چشمے
+چکتے
+چکٹے
+چکلے
+چکمے
+چکنے
+چکئے
+چکھے
+چگتے
+چگنے
+چگئے
+چلتے
+چلنے
+چلئے
+چمپے
+چمٹے
+چمچے
+چمکے
+چنتے
+چنکے
+چنگے
+چننے
+چنئے
+چیپے
+چیتے
+چیخے
+چیلے
+چہکے
+چھپے
+چھتے
+چھٹے
+چھجے
+چھچے
+چھکے
+چھلے
+چھنے
+چھئے
+حجلے
+حلقے
+حلئے
+حملے
+حیلے
+ختنے
+خشکے
+خطبے
+خلئے
+خیلے
+خیمے
+سپنے
+ستتے
+ستلے
+ستئے
+سٹکے
+سجتے
+سجنے
+سجئے
+سختے
+سخنے
+سستے
+سسکے
+سفلے
+سکتے
+سکنے
+سکئے
+سگتے
+سگنے
+سگئے
+سگلے
+سلتے
+سلحے
+سلکے
+سلگے
+سلنے
+سلئے
+سمبے
+سمٹے
+سمنے
+سنتے
+سنجے
+سنکے
+سنگے
+سنلے
+سننے
+سیتے
+سیسے
+شیشے
+سیلے
+سینے
+سیئے
+سہتے
+سہلے
+سہمے
+سہنے
+سہئے
+شخصے
+شعبے
+شعلے
+شکتے
+شکنے
+شگتے
+شگنے
+شملے
+شیشے
+شیلے
+شیئے
+صفحے
+صیغے
+ضحے
+ضلعے
+طبقے
+طبلے
+طعنے
+بقعے
+ظیفے
+علے
+عملے
+غصے
+غلبے
+غنچے
+فتنے
+فضلے
+فیتے
+فیلے
+فینے
+قبضے
+قبلے
+قتلے
+قشقے
+قصبے
+قطعے
+قعئے
+قلعے
+قیقے
+قیمے
+کبکے
+کتبے
+کتلے
+کتنے
+کتھے
+کٹتے
+کٹکے
+کٹنے
+کٹئے
+کٹھے
+کجلے
+کچلے
+کستے
+کسلے
+کسنے
+کسئے
+کعبے
+کلتے
+کلچے
+کلمے
+کلنے
+کلئے
+کملے
+کمنے
+کنبے
+کنجے
+کنکے
+کیسے
+کیفے
+کیکے
+کیئے
+کیلے
+کہتے
+کہکے
+کہنے
+کہئے
+کھبے
+کھپے
+کھتے
+کھٹے
+کھسے
+کھلے
+کھنے
+کھئے
+گپکے
+گپھے
+گتکے
+گتھے
+گٹکے
+گٹھے
+گجھے
+گلتے
+گلنے
+گلئے
+گمتے
+گملے
+گمنے
+گمئے
+گنتے
+گنجے
+گننے
+گنئے
+گیگے
+گیلے
+گہکے
+گہنے
+گھپے
+گھتے
+گھٹے
+گچھے
+گھسے
+گھلے
+گھنے
+گھئے
+لپٹے
+لپکے
+لٹتے
+لٹکے
+لٹنے
+لٹئے
+لجھے
+لچتے
+لچکے
+لچنے
+لچئے
+لچھے
+لشتے
+لقمے
+لکتے
+لکنے
+لکئے
+لکھے
+لگتے
+لگنے
+لگئے
+لمبے
+لمحے
+لمکے
+لمیے
+لنگے
+لیپے
+لیٹے
+لیجے
+لیچے
+لیسے
+لیکے
+لیگے
+لیمے
+لینے
+لیئے
+لہٹے
+لہجے
+لہکے
+متتے
+متلے
+متنے
+متھے
+مٹتے
+مٹکے
+مٹنے
+مٹئے
+مثلے
+مجلے
+مجھے
+مچتے
+مچکے
+مچلے
+مچنے
+مچئے
+مچھے
+محلے
+مستے
+مسے
+مسکے
+مسلے
+مسنے
+مسئے
+مشتے
+مشکے
+معمے
+مکتے
+مکنے
+مکئے
+ملبے
+ملتے
+ملنے
+ملئے
+منتے
+منکے
+منگے
+مننے
+میٹے
+میجے
+میچے
+میکے
+میلے
+میئے
+مہکے
+نبٹے
+نبھے
+نپتے
+نپٹے
+نپنے
+نپئے
+نتتے
+نٹتے
+نٹنے
+نٹئے
+نجتے
+نجنے
+نجھے
+نچتے
+نچکے
+نچلے
+نچنے
+نچھے
+نحلے
+نخشے
+نستے
+نسخے
+نسلے
+نسنے
+نسئے
+نشچے
+نطفے
+نغمے
+نفعے
+نقشے
+نقطے
+نکتے
+نکٹے
+نکسے
+نکلے
+نکمے
+نکنے
+نکئے
+نکھے
+نگتے
+نگٹے
+نگلے
+نگنے
+نگئے
+نگھے
+نلکے
+نمٹے
+ننگے
+ننھے
+نیٹے
+نیچے
+نیفے
+نیلے
+نہتے
+نہلے
+ئینے
+یتنے
+یٹھے
+یجئے
+یکتے
+یکھے
+یگچے
+یلٹے
+ہپتے
+ہپنے
+ہپئے
+ہٹتے
+ہٹنے
+ہٹئے
+ہچکے
+ہفتے
+ہکتے
+ہکلے
+ہکنے
+ہکئے
+ہگتے
+ہگنے
+ہگئے
+ہلتے
+ہلکے
+ہلگے
+ہلنے
+ہلئے
+ہمتے
+ہمکے
+ہمنے
+ہنسے
+ہٹیے
+ہیضے
+ھپتے
+ھپنے
+ھپئے
+ھچکے
+ھکتے
+ھکنے
+ھکئے
+ھلتے
+ھلکے
+ھلنے
+ھلئے
+ھمکے
+ھنتے
+ھنسے
+ھنکے
+ھنگے
+ھننے
+ھنئے
+ھنیے
+ھیلے
+ھیمے
+ھینے
+بخیہ
+بستہ
+بسکہ
+بغچہ
+بقچہ
+بقعہ
+بقیہ
+بلکہ
+بلیہ
+بمعہ
+بغچہ
+بیحہ
+بیشہ
+بیضہ
+بیعہ
+بیگہ
+بیلہ
+بیمہ
+بینہ
+پٹنہ
+پختہ
+پستہ
+پسنہ
+پشتہ
+پنبہ
+پنجہ
+پیسہ
+پیشہ
+پہیہ
+تتمہ
+تتیہ
+تحفہ
+تحیہ
+تختہ
+تخمہ
+تسمہ
+تشتہ
+تشنہ
+تغمہ
+تفتہ
+تقیہ
+تکمہ
+تکیہ
+تلخہ
+تلہہ
+تمغہ
+تنبہ
+تنگہ
+تیجہ
+تیشہ
+تیغہ
+تہیہ
+ٹکیہ
+ٹیکہ
+ٹیلہ
+ثیبہ
+جبکہ
+جبہہ
+جستہ
+جفتہ
+جلسہ
+جمعہ
+جملہ
+جنبہ
+جیعہ
+جیہہ
+چستہ
+چشمہ
+چکمہ
+چلتہ
+چمبہ
+چمچہ
+چیچہ
+چیمہ
+حبشہ
+حجتہ
+حجفہ
+حجلہ
+حسنہ
+حشفہ
+حقنہ
+حلقہ
+حلیہ
+حمتہ
+حملہ
+حمنہ
+حیطہ
+حیلہ
+حیمہ
+ختنہ
+خستہ
+خشکہ
+خصیہ
+خطبہ
+خطحہ
+خفتہ
+خفیہ
+خلیفہ
+خلیہ
+خمسہ
+خیمہ
+سبحہ
+ستمہ
+سفلہ
+سقہ
+سکتہ
+سکنہ
+سلحہ
+سلمہ
+سنبہ
+سیسہ
+سیفہ
+سیلہ
+سینہ
+شبکہ
+شبیہ
+شحنہ
+شستہ
+شعبہ
+شعفہ
+شغفہ
+شفتہ
+شفعہ
+شمسہ
+شملہ
+شنبہ
+شیبہ
+شیتہ
+شیشہ
+شیعہ
+شیلہ
+صبیہ
+صفحہ
+صفیہ
+صلچہ
+صیحہ
+صیعہ
+صیغہ
+ضحیہ
+ضعطہ
+ضیکہ
+ضیمہ
+ضیلہ
+طبقہ
+طبلہ
+طعمہ
+طعنہ
+طلبہ
+طمتہ
+طمیہ
+طنجہ
+طیبہ
+طیسو
+طیکہ
+ظیفہ
+عتبہ
+عشبہ
+عصبہ
+عضلہ
+عطیہ
+علفہ
+علیہ
+عملہ
+غبطہ
+غشتہ
+غلبہ
+غلطہ
+غنچہ
+فتحہ
+فتنہ
+فضلہ
+فعیہ
+فغفو
+فقیہ
+فیعہ
+فیقہ
+فینہ
+قبضہ
+قتلہ
+قحبہ
+قشقہ
+قصبہ
+قضیہ
+قطعہ
+قلبہ
+قلعہ
+قلیہ
+قمشہ
+قیقہ
+قیمہ
+کپچہ
+کتبہ
+کشتہ
+کعبہ
+کفچہ
+کلبہ
+کلچہ
+کلمہ
+کلیہ
+کنبہ
+کنیہ
+کیسہ
+کینہ
+کہنہ
+گنجفہ
+گستہ
+گشتہ
+گفتہ
+گینہ
+گہنہ
+لبتہ
+لجثہ
+لحجہ
+لحظہ
+لصفہ
+لطمہ
+لطہ
+لفتہ
+لقصہ
+لقطہ
+لقمہ
+للہ
+للھ
+لمحہ
+لمعہ
+لمیہ
+لیچہ
+لیلہ
+لیمہ
+لہجہ
+متعہ
+مثلہ
+مجلہ
+محلہ
+مسکہ
+معمہ
+مقلہ
+ملبہ
+ملکہ
+میلہ
+میمہ
+نبیہ
+نجمہ
+نستہ
+نسخہ
+نسیہ
+نطفہ
+نغمہ
+نفقہ
+نقشہ
+نقطہ
+نقیہ
+نکتہ
+نگیہ
+نملہ
+نیفہ
+نیلہ
+ئستہ
+ئنچہ
+ئیسہ
+ئیکہ
+ئیلہ
+ئینہ
+یبیہ
+یجتہ
+یختہ
+یفتہ
+یقظہ
+یگچہ
+ینکہ
+ہستہ
+ہفتہ
+ہلیہ
+ہیضہ
+ہیمہ
+ہینہ
+ھنیہ
+ھیلہ
+بیٹھ
+پنتھ
+پنکھ
+پیتھ
+ٹھٹھ
+جیتھ
+جیٹھ
+جھٹھ
+چیتھ
+چھٹھ
+سکچھ
+سلجھ
+سمجھ
+سنکھ
+سنگھ
+سیٹھ
+سیکھ
+کسٹھ
+کمبھ
+لنگھ
+لیتھ
+لیٹھ
+لیکھ
+ملچھ
+منجھ
+میٹھ
+میکھ
+میگھ
+مینھ
+نسٹھ
+یسٹھ
+ینٹھ
+ہیتھ
+بقیہ
+حتی
+صلو
+ضحی
+عشی
+علی
+منی
+یحیی
+بطنا
+جیہا
+حلفا
+خصتا
+سہلا
+ضمنا
+طبعا
+عبید
+غصبا
+عقلا
+عملا
+فعلا
+قطعا
+قعتا
+لصتا
+لفظا
+مثلا
+نسلا
+نسیا
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt
new file mode 100644 (file)
index 0000000..f61dbce
--- /dev/null
@@ -0,0 +1,5029 @@
+ببیسا
+بپتنا
+بتکتا
+بتیسا
+بتیلا
+بتھلا
+بجبجا
+بجلیا
+بجھتا
+بجھیا
+بچپنا
+بچکتا
+بچلتا
+بچھتا
+بچھیا
+بحثیا
+بختیا
+بخشتا
+بستگا
+بستیا
+بسیما
+بطگیا
+بغچیا
+بقچیا
+بکبکا
+بکستا
+بکسلا
+بکسیا
+بکیلا
+بگستا
+بگھیا
+بلبلا
+بلٹتا
+بلٹیا
+بلکتا
+بللا
+بلنگا
+بلیسا
+بلیغا
+بلیلا
+بنٹتا
+بنجتا
+بنگلا
+بیتتا
+بیتلا
+بیتیا
+بیٹھا
+بیجتا
+بیچتا
+بیسیا
+بیشما
+بیکسا
+بیکلا
+بیگما
+بیلتا
+بینتا
+بینکا
+بیننا
+بھبھا
+بہکتا
+بہلتا
+بہنیا
+بہئیا
+بہیما
+بھبکا
+بھبھا
+بھلتا
+بھپکا
+بھتنا
+بھٹکا
+بھٹیا
+بھجتا
+بھجیا
+بھچتا
+بھچکا
+بھچنا
+بھسکا
+بھکتا
+بھکیا
+بھگتا
+بھگیا
+بھلیا
+بھینا
+پپلیا
+پپیتا
+پپیہا
+پتلیا
+پتنگا
+پتنیا
+پتیلا
+پتھتا
+پتھنا
+پٹپٹا
+پٹختا
+پٹخیا
+پٹکتا
+پٹیلا
+پٹیما
+پٹھیا
+پچپچا
+پچکتا
+پچھتا
+پچلج
+پچیا
+پستیا
+پسلیا
+پسنگا
+پسیجا
+پسینا
+پشیما
+پکپکا
+پگلتا
+پگلیا
+پگھلا
+پلپلا
+پلٹتا
+پلٹیا
+پلیتا
+پنپتا
+پنجتا
+پنجسا
+پنجنا
+پنچسا
+پنکھا
+پنیلا
+پنیھا
+پنھیا
+پیپٹا
+پیپگا
+پیپلا
+پیٹتا
+پیٹیا
+پیٹھا
+پیچھا
+پیستا
+پیشتا
+پیشکا
+پیشیا
+پیلبا
+پیلپا
+پیلتا
+پیلیا
+پینتا
+پہنتا
+پہنچا
+پہننا
+پھبتا
+پھبکا
+پھبنا
+پھپسا
+پھپکا
+پھپیا
+پھپھا
+پھٹتا
+پھٹکا
+پھٹگا
+پھٹنا
+پھسکا
+پھسلا
+پھکتا
+پھلتا
+پھلکا
+پھلنا
+پھنتا
+پھنسا
+پھنکا
+پھننا
+پھنیا
+پھیکا
+پھیلا
+تپسیا
+تپکتا
+تتلیا
+تتئیا
+تثینا
+تجلیا
+تجملا
+تحفظا
+تحکما
+تختیا
+تسلیا
+تشنگا
+تعصبا
+تعلقا
+تعلا
+تعیشا
+تعینا
+تکتکا
+تکلفا
+تکلیا
+تلتلا
+تلخیا
+تلملا
+تلنگا
+تمتما
+تمسکا
+تمکنا
+تنبیا
+تنتنا
+تنکتا
+تنگیا
+تیجتا
+تیکھا
+تیلیا
+تینتا
+تھپتا
+تھپکا
+تھپنا
+تھتکا
+تھتھا
+تھجتا
+تھکتا
+تھلتا
+تھلکا
+تھلنا
+تھلیا
+تھمتا
+تھنچا
+تھیا
+تھیلا
+ٹپٹپا
+ٹپکتا
+ٹپیلا
+ٹخنیا
+ٹکٹکا
+ٹکسٹا
+ٹکسلا
+ٹکلیا
+ٹگھلا
+ٹلٹلا
+ٹمٹما
+ٹنٹنا
+ٹنگتا
+ٹیپتا
+ٹیکتا
+ٹیکسا
+ٹیکنا
+ٹیکتا
+ٹینٹا
+ٹہلتا
+ٹہلیا
+ٹہنیا
+ٹھپنا
+ٹھٹکا
+ٹھٹھا
+ٹھستا
+ٹھسکا
+ٹھسنا
+ٹھکتا
+ٹھگتا
+ٹھگیا
+ٹھلتا
+ٹھلیا
+ٹھمکا
+ٹھنتا
+ٹھنسا
+ٹھنکا
+ٹھننا
+ٹھیبا
+ٹھیکا
+ٹھیگا
+ٹھیلا
+جیتتا
+جستھا
+جسیلا
+جعلسا
+جعلیا
+جگتیا
+جگجگا
+جگمگا
+جلبلا
+جلیبا
+جمیکا
+جنٹیا
+جنجنا
+جنسیا
+جنگلا
+جیتتا
+جیٹھا
+جینیا
+جھپٹا
+جھپکا
+جھٹکا
+جھٹلا
+جھٹنا
+جھجکا
+جھجلا
+جھجنا
+جھکتا
+جھکیا
+جھگیا
+جھلتا
+جھلسا
+جھلکا
+جھلما
+جھلنا
+جھلیا
+جھمکا
+جھجنا
+جھنکا
+جھنگا
+جھیلا
+جھینا
+چبکتا
+چبینا
+چبھتا
+چپتیا
+چپٹتا
+چپچپا
+چپکتا
+چپکیا
+چپیٹا
+چتھلا
+چٹختا
+چٹکتا
+چٹکلا
+چٹکیا
+چٹنیا
+چٹیلا
+چٹھیا
+چسکتا
+چسکیا
+چسنیا
+چشتیا
+چغلیا
+چکٹتا
+چکلتا
+چکنیا
+چکھتا
+چلبلا
+چلچلا
+چلکنا
+چلیپا
+چمٹتا
+چمٹیا
+چمچما
+چمچیا
+چمکتا
+چمنیا
+چنبھا
+چنچنا
+چنکیا
+چنگلا
+چنگنا
+چنگیا
+چنگھا
+چیپتا
+چیتپا
+چیختا
+چیستا
+چیلکا
+چینٹا
+چینگا
+چہچہا
+چہکتا
+چہیتا
+چھپتا
+چھپکا
+چھپنا
+چھتیا
+چھٹتا
+چھٹکا
+چھٹنا
+چھٹیا
+چھچکا
+چھلتا
+چھلکا
+چھلیا
+چھنتا
+چھنگا
+چھننا
+چھیجا
+چھیکا
+چھیلا
+چھینا
+حتینا
+حسینا
+حکیما
+حنفیا
+حیتنا
+حیثیا
+خصتیا
+خطیبا
+خفتگا
+خلفشا
+خمچیا
+خمیسا
+خنخنا
+سبکسا
+سبکنا
+سبکیا
+سبلیا
+سبیتا
+ستبصا
+ستبعا
+ستثنا
+ستحسا
+ستحصا
+ستحقا
+ستحکا
+ستخفا
+ستخلا
+ستسقا
+ستشہا
+ستعجا
+ستعقا
+ستعلا
+ستعما
+ستغفا
+ستغنا
+ستفتا
+ستفسا
+ستفہا
+ستقبا
+ستقلا
+ستکبا
+ستکشا
+ستکما
+ستلیا
+ستنبا
+ستنجا
+ستیصا
+ستیعا
+ستیلا
+ستیہا
+ستھیا
+سٹکتا
+سٹنہا
+سٹھیا
+سجنیا
+سجیلا
+سختیا
+سسکتا
+سسکیا
+سکیلا
+سکھلا
+سکھیا
+سلٹنا
+سلجھا
+سلسلا
+سلگتا
+سلمہا
+سلنگا
+سلیکا
+سلیما
+سمٹتا
+سمجھا
+سمیٹا
+سنبھا
+سنجتا
+سنجھا
+سنچکا
+سنسنا
+سنکتا
+سنکیا
+سنگسا
+سنگلا
+سنگھا
+سنیگا
+سنیما
+سیپیا
+سیتلا
+سیٹھا
+سیستا
+سیکھا
+سیلتا
+سیمیا
+سینتا
+سینچا
+سینکا
+سینگا
+سینما
+سینیا
+سہلتا
+سہمتا
+شتیہا
+شخصیا
+شطحیا
+شکیبا
+شگنیا
+شلنگا
+شلیتا
+شمنیا
+شنگھا
+شیخیا
+شیشیا
+شہنشا
+ضعیفا
+ضمحلا
+طبیعا
+طلبگا
+طلسما
+طمینا
+طیلسا
+عسقلا
+عصبیا
+عملیا
+عنہما
+غسلخا
+غصیلا
+غضبنا
+غلبلا
+غلطیا
+غمگسا
+غنغنا
+فتحیا
+فتینا
+فسنجا
+فضیتا
+فعلیا
+فلکیا
+فلمسا
+فلیپا
+فیضیا
+فیلبا
+فیلپا
+فہمیا
+قلتیا
+قلفیا
+قلمکا
+قلیما
+کپکپا
+کٹکتا
+کٹنیا
+کٹیکا
+کٹیلا
+کٹھلا
+کٹھنا
+کچکچا
+کچلتا
+کچیلا
+کچھنا
+کسبیا
+کسلتا
+کسلیا
+کسنبا
+کسیلا
+کشتگا
+کشتیا
+ککھلا
+کلبلا
+کلپنا
+کلتکا
+کلٹیا
+کلچیا
+کلسنا
+کلغیا
+کلکتا
+کلکلا
+کلکنا
+کلیجا
+کلیسا
+کلھیا
+کمٹھا
+کملتا
+کمیسا
+کمیلا
+کمھلا
+کنٹھا
+کنجیا
+کنکتا
+کنکیا
+کنگلا
+کنگنا
+کنگھا
+کنلیا
+کنمنا
+کنہیا
+کیتیا
+کیتھا
+کیٹلا
+کیخلا
+کیسیا
+کیشیا
+کیفیا
+کیقبا
+کیکبا
+کیکتا
+کیلتا
+کیمیا
+کینیا
+کیہلا
+کہکشا
+کھپٹا
+کھپلا
+کھپنا
+کھتیا
+کھٹکا
+کھٹلا
+کھٹنا
+کھٹیا
+کھجلا
+کھستا
+کھسکا
+کھسلا
+کھسنا
+کھسیا
+کھکھا
+کھلتا
+کھلگا
+کھلنا
+کھلیا
+کھمبا
+کھما
+کھنچا
+کھنسا
+کھنگا
+کھتیا
+کھیسا
+کھیلا
+کھینا
+گپکتا
+گتھتا
+گتھیا
+گٹکتا
+گٹکیا
+گٹھتا
+گٹھیا
+گجگجا
+گچھیا
+گشتپا
+گلبہا
+گلٹیا
+گلستا
+گلگلا
+گنتیا
+گنٹھا
+گنجیا
+گنگنا
+گنہگا
+گیگلا
+گہکتا
+گھپتا
+گھپلا
+گھپنا
+گھٹتا
+گھٹکا
+گھٹنا
+گھٹیا
+گھچلا
+گھستا
+گھسیا
+گھگیا
+گھلتا
+گھلیا
+گھمسا
+گھنٹا
+گھنسا
+گھنیا
+گھیگا
+گھیلا
+لبلبا
+لبیلا
+لپٹتا
+لپکتا
+لپلپا
+لپیٹا
+لٹکتا
+لیٹنا
+لٹھیا
+لجلجا
+لجھتا
+لجھیا
+لچکتا
+لچلچا
+لچھتا
+لچھیا
+لحمقا
+لحمیا
+لخلخا
+لسبحا
+لسلسا
+لشعشا
+لشہبا
+لطلا
+لعلما
+لفظیا
+لفنگا
+لکشیا
+لکلیا
+لکھتا
+لکھیا
+لگنیا
+لگیلا
+للبقا
+لمپیا
+لمتعا
+لمتخا
+لمکتا
+لمیعا
+لنجھا
+لنگتا
+لنگیا
+لنگھا
+لیپتا
+لیٹتا
+لیچتا
+لیچیا
+لیستا
+لیسیا
+لیکھا
+لہکتا
+لہلہا
+لہنگا
+لہنیا
+لہیا
+مبتلا
+مبہیا
+متصفا
+متھتا
+مٹکتا
+مٹکیا
+مٹھیا
+مجسما
+مجلا
+مچکتا
+مچلتا
+محسنا
+محصنا
+محققا
+محکما
+محنتا
+مختیا
+مخلصا
+مخمسا
+مسبحا
+مستجا
+مستعا
+مشفقا
+مشکبا
+مشکلا
+مشکیا
+مصلحا
+معلقا
+معلما
+مغلظا
+مغیلا
+مفصلا
+مفلسا
+مقتضا
+مقطعا
+مکھنا
+مکھیا
+ملگجا
+ملنسا
+ملیسا
+ممکنا
+منجلا
+منجنا
+منجھا
+منچلا
+منشیا
+منصفا
+منگتا
+منگلا
+منگنا
+منگیا
+منمنا
+منیلا
+منہنا
+منہیا
+میٹتا
+میٹیا
+میٹھا
+میجتا
+میچتا
+میگھا
+میلیا
+میمنا
+میہما
+مہکتا
+مہملا
+مہنتا
+مہنگا
+مہیلا
+مہینا
+نبٹتا
+ننجتا
+نبھتا
+نپٹتا
+نپجتا
+نتیلا
+نتھلا
+نتھنا
+نتھیا
+نٹنیا
+نٹینا
+نٹھتا
+نجمنا
+نجھتا
+نچنیا
+نچھتا
+نشیلا
+نظمیا
+نفسیا
+نکسلا
+نکلتا
+نکمیا
+نکیلا
+نکھتا
+نکھیا
+نگستا
+نگلتا
+نگلیا
+نگیلا
+نگہبا
+نگھتا
+نمٹتا
+نمسکا
+نمکیا
+ننھیا
+نیٹنا
+نیشیا
+نیکیا
+نیکھا
+نیمیا
+ئیشیا
+ئیگیا
+یپلکا
+یتیلا
+یخنیا
+یستبا
+یکھتا
+یگچیا
+یگستا
+یمپلا
+ینٹھا
+ینکتا
+ینگتا
+ینگیا
+ہپہپا
+ہتھیا
+ہٹکنا
+ہٹیلا
+ہٹھیا
+ہچکتا
+ہچکچا
+ہچکیا
+ہسپتا
+ہستیا
+ہلبلا
+ہلپھا
+ہلگتا
+ہلینا
+ہلہلا
+ہمپشا
+ہمکتا
+ہمکیا
+ہنستا
+ہنسیا
+ہنگیا
+ہنہنا
+ہیلنا
+ہینسا
+ہینگا
+ھکنیا
+ھکیلا
+ھلکتا
+ھلکیا
+ھلملا
+ھمکتا
+ھمکیا
+ھنستا
+ھنسیا
+ھنکتا
+ھنکیا
+ھینگا
+بطیب
+تشبیب
+تصلیب
+تنصیب
+کینٹب
+لجیب
+لحسیب
+لحصیب
+لمجیب
+متعجب
+متعصب
+مجتنب
+محتسب
+مسبب
+مستجب
+مسیب
+منتخب
+منتسب
+جھینپ
+سٹیمپ
+سنکلپ
+گھینپ
+بشکست
+بعجلت
+ٹھینگے
+تبنیت
+تمکنت
+تہنیت
+جمعیت
+جنبیت
+جنسیت
+جھٹنت
+حقیقت
+حیثیت
+سلطنت
+سنگیت
+شخصیت
+شیطنت
+شیعیت
+طبیعت
+طیسیت
+عصبیت
+عظیمت
+عقلیت
+علمیت
+غنیمت
+فضیلت
+فضیحت
+فضیلت
+قطبیت
+قطعیت
+کمیت
+کیفیت
+کیمخت
+گھٹنت
+لپھیت
+لٹھیٹ
+لحکمت
+لخلقت
+لعصمت
+لکھپت
+لمقیت
+لممیت
+مسکنت
+مصلحت
+مصیبت
+معصیت
+معیشت
+معیئت
+ملتفت
+ملکیت
+مملکت
+منفعت
+منقبت
+میمنت
+نصیحت
+ئیلیت
+یکلخت
+یکمشت
+ہلسنت
+بیسنٹ
+بھینٹ
+پمفلٹ
+پنگھٹ
+پیٹنٹ
+پھینٹ
+تلچھٹ
+ٹسٹنٹ
+ٹیکسٹ
+جھپیٹ
+جھنجٹ
+چھینٹ
+سٹمنٹ
+سسپنٹ
+سسٹنٹ
+سلفیٹ
+سلیکٹ
+سیمنٹ
+شپمنٹ
+کیبنٹ
+کیمسٹ
+گھسیٹ
+گھینٹ
+لپٹنٹ
+لپمنٹ
+لٹھیٹ
+لجئیٹ
+لفٹنٹ
+میگنٹ
+نیٹنٹ
+ئنٹسٹ
+ہیلمٹ
+بھتیج
+چیلنج
+بھینچ
+پھینچ
+کھینچ
+تسبیح
+تصحیح
+تلمیح
+تنقیح
+مصطلح
+تنسیخ
+بخشند
+بسیند
+بینند
+پنجند
+پیجند
+پیچید
+تجلید
+تحمید
+تصعید
+تعقید
+تفسید
+تقلید
+تکسید
+تمجید
+تمحید
+تمہید
+تنفید
+تنقید
+تہبند
+جتمند
+جمشید
+چھلبد
+خشکید
+سمبند
+سمجھد
+سنجید
+علیحد
+فہمید
+کھلند
+لتمند
+لحمید
+لسعید
+لشہید
+لعقید
+لکھند
+لمجید
+لمسجد
+لمیعد
+لمقتد
+مجتہد
+مچھند
+مستبد
+مستعد
+مستند
+معتضد
+معتمد
+منجمد
+منجھد
+منعقد
+مہمند
+نشمند
+ہشمند
+بلینڈ
+بھٹنڈ
+پیگنڈ
+تلینڈ
+چچینڈ
+سٹینڈ
+سیکنڈ
+سگمنڈ
+شفیلڈ
+کلینڈ
+کنفیڈ
+کیتھڈ
+کیلنڈ
+کیلیڈ
+کینیڈ
+کھلنڈ
+گلینڈ
+گھمنڈ
+لمیٹڈ
+مشٹنڈ
+میتھڈ
+یمبلڈ
+ہسبنڈ
+تلمیذ
+فلہذ
+بجھبر
+بچھیر
+بکٹیر
+بکھیر
+بگستر
+بلیچر
+بیچلر
+بینجر
+بیشتر
+بینٹر
+بینکر
+بہتیر
+بھسٹر
+بھمبر
+بھیتر
+بھیکر
+پبلشر
+پتمبر
+پچھتر
+پسنجر
+پکھیر
+پلستر
+پلمبر
+پلیئر
+پنجیر
+پنشنر
+پنکچر
+پیسٹر
+پیشتر
+پیمبر
+پینتر
+پھپیر
+پھٹکر
+پھلسر
+تبختر
+تحقیر
+تخمیر
+تسخیر
+تسطیر
+تشہیر
+تصغیر
+تطہیر
+تظہیر
+تعبیر
+تعمیر
+تغیر
+تفسیر
+تقصیر
+تقطیر
+تکبیر
+تکثیر
+تکسیر
+تکفیر
+تمسخر
+تنکیر
+تینیر
+تھپیر
+تھمبر
+تھیٹر
+تھیچر
+ٹنکچر
+ٹیسٹر
+ٹیلگر
+ٹیمبر
+ٹینکر
+ٹھپکر
+ٹھیٹر
+ٹھٹھر
+ٹھیکر
+جمبیر
+جیکٹر
+جینیر
+جھجھر
+جھنجر
+جھنگر
+چمچیر
+چنگیر
+چنیسر
+چیٹھر
+چیکٹر
+چیمبر
+چھہتر
+سپنسر
+سپئیر
+سپیکر
+ستغفر
+ستگیر
+ستمبر
+ستمگر
+سٹمپر
+سٹینر
+سٹیکر
+سٹیمر
+سٹیئر
+سکیٹر
+سکیسر
+سکیلر
+سکینر
+سگنلر
+سلیپر
+سلیٹر
+سمسٹر
+سمگلر
+سنپٹر
+سنپیر
+سنتگر
+سنسکر
+سنگتر
+سنئیر
+سنیٹر
+سنیچر
+سکیٹر
+سینٹر
+سینسر
+سینئر
+شلیپر
+شمشیر
+شیلٹر
+علمبر
+غضنفر
+فیکٹر
+فیکچر
+قطمیر
+کبیسر
+کبیشر
+کٹیٹر
+کسٹمر
+کسمپر
+کسنجر
+کشمیر
+کفگیر
+کلکٹر
+کلنسر
+کلینر
+کمشنر
+کمنٹر
+کنٹھر
+کنستر
+کیتھر
+کیسٹر
+کیمبر
+کینبر
+کینسر
+کھنجر
+کھنکر
+کھنگر
+کھچر
+گلیسر
+گلیمر
+گنینر
+گھبیر
+گھگر
+گھمیر
+گھنگر
+گھنیر
+لبصیر
+لتھیر
+لخبیر
+لصغیر
+لکبیر
+لکھیر
+لمطہر
+لمگیر
+لمنظر
+لنٹیر
+لنصیر
+لیسٹر
+لیکٹر
+لیکچر
+لینبر
+لینٹر
+متبحر
+متحیر
+متشکر
+متغیر
+متفکر
+متکبر
+متنفر
+مجسٹر
+مختصر
+مخیر
+مستتر
+مسخر
+مستشر
+مستغر
+مستقر
+مستمر
+مشتہر
+مشینر
+معتبر
+مکسچر
+منتشر
+منتظر
+منجیر
+منچھر
+منحصر
+منسٹر
+منگسر
+منیجر
+میکنز
+منیجر
+نٹسیر
+نچسٹر
+نچھتر
+نخچیر
+نسسٹر
+نکسیر
+نکھتر
+نگسیر
+نگشتر
+نیشتر
+نیکلر
+ئیجیر
+یفلگر
+یکسپر
+یکلچر
+یمسٹر
+ینسٹر
+ینکفر
+ہمشیر
+ہمعصر
+ہیتھر
+ہیمبر
+ہینگر
+بتنگڑ
+بکھیڑ
+بلکھڑ
+بھیکڑ
+پلنگڑ
+پھسکڑ
+پھکڑ
+پھیپڑ
+تھپیڑ
+جھمکڑ
+جھنگڑ
+چمچیڑ
+چیتھڑ
+چیٹھڑ
+چیلھڑ
+چھچھڑ
+چھیچڑ
+سینکڑ
+سینگڑ
+علیگڑ
+کلنگڑ
+کلیگڑ
+کھچیڑ
+کھکیڑ
+کھنگڑ
+گنٹھڑ
+گھسیڑ
+لتھیڑ
+مسکیڑ
+ہتھکڑ
+پیپلز
+پیکلز
+تجہیز
+ٹیشنز
+ٹیکلز
+چنگیز
+سکیچز
+سگنلز
+سنگلز
+کسٹمز
+کشنیز
+متمیز
+مستلز
+مستیز
+مشکیز
+ممیز
+میکنز
+مہمیز
+نیپلز
+نیشنز
+ئیکلز
+یتھنز
+ینجلز
+بلقیس
+بیلنس
+بھینس
+پچیس
+پلیکس
+پینٹس
+تجسس
+تجنیس
+ٹمنٹس
+ٹیلکس
+چھبیس
+چھتیس
+خلیفہ
+سپکٹس
+سٹیٹس
+سمٹکش
+سنگلس
+سنیکس
+فٹنگس
+فلیٹس
+کلپٹس
+کیمپس
+گھنیس
+لخمیس
+لشمس
+لمپکس
+لیٹکس
+لیمپس
+متجسس
+متنفس
+ملتمس
+منعکس
+نلسٹس
+ئمیکس
+ئیسنس
+یجنٹس
+یلیکس
+ینجلس
+پیچکش
+پیشکش
+تفتیش
+چپقلش
+کشمکش
+گھنیش
+تخصیص
+تخلیص
+تشخیص
+تلخیص
+تمحیص
+تنقیص
+لتخلص
+متخلص
+تخلیط
+ٹپن
+لقلیط
+لمقسط
+منضبط
+تحفظ
+لحفیظ
+تشنیع
+تقطیع
+لسمیع
+لشفیع
+لمبلغ
+لمطیع
+لمقطع
+متمتع
+مجتمع
+ممتنع
+منقطع
+تبلیغ
+بللی
+تصحیف
+تصنیف
+تعطف
+تقشف
+تکثیف
+تکلیف
+تنصیف
+سنحیف
+للطیف
+متکلف
+مختلف
+مسقف
+مکلف
+منعطف
+منکشف
+تحقیق
+تخلیق
+تطبیق
+تعلیق
+لعتیق
+لمنطق
+متعلق
+مستحق
+منطبق
+ہنبق
+بیٹھک
+بھننک
+پیتھک
+پیسفک
+پھینک
+تشکیک
+تضحیک
+تکنیک
+تملیک
+ٹیکنک
+جھلنک
+جھینک
+چھینک
+کلینک
+کنجشک
+کھٹیک
+گنجلک
+مجسٹک
+منسلک
+منہمک
+ئنٹفک
+یپبلک
+بیٹنگ
+بیجنگ
+بھجنگ
+بھننگ
+پکٹنگ
+پمپنگ
+پئیگ
+پیکنگ
+پھننگ
+تھلنگ
+ٹیچنگ
+جمپنگ
+جیکنگ
+چیکنگ
+سپننگ
+سیکنگ
+فکسنگ
+فنشنگ
+کیپنگ
+کیٹنگ
+میپنگ
+میٹنگ
+میچنگ
+میکنگ
+میلنگ
+ئٹینگ
+ئٹینگ
+یشننگ
+یکٹنگ
+بسبیل
+بمشکل
+بیمثل
+پھٹکل
+پھلیل
+تجہیل
+تحصیل
+تحلیل
+تخلیل
+تخئیل
+تسلسل
+تسہیل
+تشکیل
+تعجیل
+تعطیل
+تعلیل
+تعمیل
+تفصل
+تفصیل
+تفضل
+تقلیل
+تکفیل
+تکمیل
+تمثیل
+تہلیل
+تھکیل
+ٹیمپل
+جھٹیل
+جھلمل
+جھمیل
+چھیچھڑ
+سپیشل
+سنججل
+سنبھل
+سنپتل
+سیمپل
+فیشنل
+فیشیل
+قیفیں
+کتھیل
+کیپٹل
+کیشنل
+کیمبل
+کینچل
+کینسل
+کینگل
+کھٹمل
+کھکھل
+لجلیل
+لجمیل
+لخلیل
+متحمل
+متکفل
+مچھیل
+محتمل
+مستقل
+مسجل
+مسلسل
+مشتعل
+مشتغل
+مشتمل
+مشخیل
+مضمحل
+معجل
+منتقل
+منفعل
+مینٹل
+مینگل
+نٹیبل
+نسٹبل
+نیشنل
+نینٹل
+ئیسکل
+ہینگل
+بلجیم
+بہنگم
+پچھم
+تجسیم
+تحکیم
+تسلیم
+تسنیم
+تصمیم
+تعظیم
+تعلم
+تعلیم
+تفہیم
+تقسیم
+تنجیم
+تنظیم
+تنعم
+تیمم
+ٹنگھم
+ٹھیکم
+جھیلم
+علیکم
+علیہم
+لبعلم
+لحکیم
+لحلیم
+لعظیم
+لعلیم
+لکلیم
+لمعظم
+لنعیم
+لیتیم
+تبسم
+متبسم
+متعلم
+متکلم
+محتشم
+مختتم
+معتصم
+منتظم
+منتقم
+منظم
+منقسم
+منگھم
+منمنا
+منہضم
+میکسم
+مہتمم
+نشینم
+بجکشن
+بلیٹن
+بینگن
+بھبکن
+بھپکن
+پھسلن
+بھنگن
+پبلکن
+پچھم
+پنجتن
+پیشین
+پھپکن
+پھٹکن
+پھسلن
+تھیلیا
+تبیین
+تحسین
+تخمین
+تسکین
+تضمین
+تکفین
+تلقین
+تلئیں
+تلیئن
+تمکین
+تیئین
+تھپکن
+ٹھٹکن
+ثقلین
+جنکشن
+جیکشن
+جھپٹن
+جھپکن
+جھٹکن
+چھلکن
+چھیجن
+چھیلن
+حسنین
+سبطین
+سٹفین
+سٹیشن
+سلجھن
+سلکشن
+سلکھن
+سنگین
+سیٹھن
+سیکشن
+سیمین
+سینچن
+سینکن
+شنگٹن
+شیخین
+علیین
+غمگین
+فنکشن
+قطبین
+کسیجن
+کلفٹن
+کلیمن
+کمیشن
+کنکشن
+کیپٹن
+کیپشن
+کیٹشن
+کیٹین
+کھٹکن
+کھنجن
+کھنچن
+گھسٹن
+لپیٹن
+لچھمن
+لحسین
+لحصین
+لستشن
+لمتین
+لمکین
+لنشین
+لنگٹن
+لیسین
+لیکسن
+لیکشن
+متعفن
+متعین
+متقین
+متمکن
+متنجن
+لمکین
+لنشین
+مسکین
+مطمئن
+ممتحن
+منقش
+میگلن
+مینشن
+نجبین
+نجکشن
+نشیمن
+نعلین
+نقشین
+نگبین
+نمکین
+نیپکن
+نیلشن
+ئمکین
+ئیشین
+یٹکشن
+یکسین
+یملین
+یسین
+ہمپٹن
+ہملٹن
+بپتیں
+بتتیں
+بتکیں
+بتیس
+بٹتیں
+بجبیں
+بجتیں
+بجھیں
+بچتیں
+بچکیں
+بچلیں
+بچھیں
+بحثیں
+بخشیں
+بستیں
+بطخیں
+بغلیں
+بکتیں
+بلتیں
+بلکیں
+بنتیں
+بنچیں
+بیتیں
+بیچیں
+بیلیں
+بینیں
+بہتیں
+بہکیں
+بہلیں
+بہنیں
+بھچیں
+بھکیں
+بھلیں
+بھنیں
+پتتیں
+پتھیں
+پٹتیں
+پٹخیں
+پٹکیں
+پچتیں
+پچکیں
+پچھیں
+پستیں
+پکتیں
+پگلیں
+پلتیں
+پلکیں
+پنپیں
+پیتیں
+پیشیں
+پیلیں
+پہنیں
+پھبیں
+پھکیں
+پھلیں
+تپتیں
+تپکیں
+تچتیں
+تگتیں
+تلتیں
+تلئیں
+تمہیں
+تنتیں
+تنکیں
+تیغیں
+تھپیں
+تھتیں
+تھجیں
+تھکیں
+تھلیں
+تھمیں
+ٹپتیں
+ٹپکیں
+ٹکتیں
+ٹکٹیں
+ٹلتیں
+ٹنگیں
+ٹیپیں
+ٹیکیں
+ٹیمیں
+ٹہلیں
+ٹھتیں
+ٹھسیں
+ٹھگیں
+ٹھلیں
+ٹھنیں
+جپتیں
+جتتیں
+جچتیں
+جگتیں
+جگہیں
+جلتیں
+جلیس
+جمپیں
+جنتیں
+جنسیں
+جنگیں
+جنہیں
+جنھیں
+جیپیں
+جیتیں
+جیلیں
+جیہیں
+جہتیں
+جھتیں
+جھکیں
+جھلیں
+چبتیں
+چبکیں
+چبلیں
+چبھیں
+چپتیں
+چپٹیں
+چپکیں
+چپلیں
+چتتیں
+چٹخیں
+چٹکیں
+چسکیں
+چکلیں
+چکھیں
+چگتیں
+چلتیں
+چمٹیں
+چمکیں
+چنتیں
+چیپیں
+چیخیں
+چیلیں
+چہکیں
+چھپیں
+چھتیں
+چھلیں
+چھنیں
+حبتیں
+حجتیں
+حشتیں
+حمتیں
+حیتیں
+خلتیں
+ستتیں
+سٹکیں
+سجتیں
+سسکیں
+سعتیں
+سکتیں
+سلتیں
+سلگیں
+سمتیں
+سنتیں
+سنگیں
+سیتیں
+سیجیں
+سیخیں
+سیکیں
+سیلیں
+سیمیں
+چیلنج
+سہتیں
+سہلیں
+سہمیں
+شفٹیں
+شکلیں
+شکنیں
+شلفیں
+شمعیں
+صحتیں
+صفتیں
+صیتیں
+شفٹیں
+علتیں
+غمگیں
+عنیں
+عیتیں
+غبتیں
+غمگیں
+فصلیں
+فعتیں
+فلمیں
+فیسیں
+قسطیں
+قسمیں
+قلتیں
+قلمیں
+کٹتیں
+کٹکیں
+کچلیں
+کستیں
+کسلیں
+کعتیں
+کلتیں
+کملیں
+کیبیں
+کیکیں
+کیلیں
+کہتیں
+کھپیں
+کھتیں
+کھٹیں
+کھلیں
+گپکیں
+گتھیں
+گٹکیں
+گٹھیں
+گلتیں
+گنتیں
+گیسیں
+گہکیں
+گھٹیں
+گھچیں
+گھسیں
+گھلیں
+لپٹیں
+لپکیں
+لٹتیں
+لٹکیں
+لجھیں
+لچتیں
+لچکیں
+لچھیں
+لحتیں
+لسٹیں
+لشتیں
+لغتیں
+لکتیں
+لکھیں
+لگتیں
+لگنیں
+لمکیں
+لنشیں
+لنگیں
+لیپیں
+لیتیں
+لیٹیں
+لیچیں
+لیفیں
+لیقیں
+لیکیں
+لیلیں
+لہکیں
+لہنیں
+مٹتیں
+مٹکیں
+مثلیں
+مچتیں
+مچکیں
+مچلیں
+مسکیں
+مسلیں
+مشقیں
+مشکیں
+مکتیں
+ملتیں
+منتیں
+منکیں
+منگیں
+میتیں
+میٹیں
+میجیں
+میچیں
+میخیں
+میمیں
+مہکیں
+نبٹیں
+نبضیں
+نبھیں
+نپتیں
+نپٹیں
+نتتیں
+نتیس
+نتھیں
+نٹتیں
+نٹھیں
+نجبیں
+نجتیں
+نجشیں
+نجھیں
+نچتیں
+نچھیں
+نستیں
+نسلیں
+نظمیں
+نعتیں
+نسٹھو
+لچسپیا
+مطمع
+ثیق
+مغلظ
+پیچک
+فظے
+محنت
+نعشیں
+نعلیں
+نفلیں
+نقلیں
+نکتیں
+نکلیں
+نکھیں
+نگبیں
+نگتیں
+نگلیں
+نگئیں
+نگھیں
+نمٹیں
+نیتیں
+ئینس
+یشنیں
+یعتیں
+یکھیں
+یلتیں
+ینکیں
+ینگیں
+ہٹتیں
+ہچکیں
+ہکتیں
+ہگتیں
+ہلتیں
+ہلگیں
+ہمتیں
+ہمکیں
+ہمگیں
+ہنسیں
+ھکتیں
+ھلتیں
+ھلکیں
+ھمکیں
+ھنتیں
+ھنسیں
+ھنکیں
+بتیسو
+بٹینو
+بجلیو
+بچھیو
+بحثیو
+بختیو
+بخششو
+بخیلو
+بستیو
+بسکٹو
+بسملو
+بطگیو
+بقچیو
+بکسنو
+بکسیو
+بکیلو
+بگیلو
+بگینو
+بگھیو
+بلبلو
+بلٹیو
+بلخیو
+بلنگو
+بلیمو
+بمبیو
+بنگلو
+بیبیو
+بیتیو
+بیٹیو
+بیٹھو
+بیعتو
+بیکسو
+بیگمو
+بیگنو
+بیلٹو
+بیلچو
+بیلنو
+بینجو
+بینکو
+بھبکو
+بھبو
+بھپکو
+بھتنو
+بھٹکو
+بھٹیو
+بھسکو
+بھشکو
+بھگتو
+بھلسو
+بھمبو
+بھنکو
+بھنگو
+بھیجو
+بھیسو
+بھیگو
+بھیلو
+پپیتو
+پپیہو
+پتلیو
+پتنگو
+پتنیو
+پتیلو
+پٹیلو
+پچپنو
+پچیسو
+پچھلو
+پستیو
+پسلیو
+پسیجو
+پسینو
+پگلیو
+پگھلو
+پلپلو
+پلٹنو
+پلٹیو
+پلنگو
+پنسلو
+پنکھو
+پیٹیو
+پیٹھو
+پھٹکو
+پیچھو
+پیکٹو
+پینٹو
+پیکٹو
+پینٹو
+پینگو
+پہنچو
+پھبکو
+پھنسو
+پھپکو
+پھپھو
+پھٹکو
+پھسکو
+پھسلو
+پھلکو
+پھلیو
+پھنسو
+پھنکو
+پھیکو
+پھیلو
+تبتیو
+تتلیو
+تجلیو
+تختیو
+تسلیو
+تشفیو
+تصفیو
+تعلقو
+تلتلو
+تلخیو
+تنتنو
+تیلتو
+تیلیو
+تینہو
+تہمتو
+تھپکو
+تھنچو
+تھنیو
+تھلو
+ٹکلیو
+ٹگھلو
+ٹلٹلو
+ٹمنٹو
+ٹیبلو
+ٹیسٹو
+ٹیکسو
+ٹیلبو
+ٹیلیو
+ٹینٹو
+ٹینکو
+ٹہنیو
+ٹھٹکو
+ٹھٹھو
+ٹھسکو
+ٹھگنو
+ٹھلیو
+ٹھمکو
+ٹھنسو
+ٹھنکو
+ٹھنیو
+ٹھیکو
+ٹھیلو
+جبینو
+جپسیو
+جثیمو
+جستجو
+جنبشو
+جنبیو
+جنتیو
+جنگلو
+جنئیو
+جیٹھو
+جنیو
+جھپٹو
+جھپکو
+جھٹکن
+جھجکو
+جھکیو
+جھگیو
+جھلسو
+جھلکو
+جھمکو
+جھنجو
+جھنکو
+جھیلو
+چپٹیو
+چٹھیو
+چٹکلو
+چٹکیو
+چٹنیو
+چٹیلو
+چسکیو
+چسنیو
+چشتیو
+چغلیو
+چلبلو
+چلمنو
+چمٹیو
+چمچیو
+چمنیو
+چنکٹو
+چنگیو
+چنگھو
+چنٹو
+چینٹو
+چینگو
+چینیو
+چہچہو
+چہیتو
+چھپنو
+چھٹکو
+چھٹیو
+چھچھل
+چھلکو
+چھنٹو
+چھنکو
+چھیکو
+چھیلو
+چھینو
+حبشنو
+حبشیو
+حبیبو
+حسنیو
+حسینو
+حشتیو
+حشمتو
+حکمتو
+حکیمو
+حلیفو
+حنفیو
+حیتیو
+خبطیو
+خبیثو
+خصتیو
+خصلتو
+خطیبو
+خلفیو
+خلقیو
+خلیجو
+خلیقو
+خمچیو
+خمیسو
+خنکیو
+سبکیو
+سبیلو
+ستخطو
+ستعفو
+ستلیو
+ستنبو
+ستنجو
+سٹیجو
+سٹیچو
+سٹیفو
+سٹینو
+سجنیو
+سختیو
+سسکیو
+سطبلو
+سفینو
+سقنقو
+سقیفو
+سسکچیو
+سیکچو
+سکیلو
+سکیمو
+سگنلو
+سلجھو
+سلسلو
+سلفیو
+سلیٹو
+سلیقو
+سمجھو
+سمیٹو
+سنجیو
+سنجھو
+سنکیو
+سنگتو
+سنگیو
+سنیو
+سیپیو
+سیٹھو
+سیشنو
+سیکھو
+سینتو
+سینٹو
+سینچو
+سینکو
+سینگو
+سینیو
+شبیہو
+شفقتو
+شکستو
+شکنجو
+شکیو
+شلغمو
+شمنیو
+شیخیو
+شیشیو
+شیمپو
+صحبتو
+صحیفو
+صطبلو
+صنعتو
+ضبطیو
+ضعیفو
+ضمیمو
+طبلقو
+طبیبو
+طلعتو
+طنطنو
+طینتو
+ظلمتو
+عجمیو
+عصبیو
+عصمتو
+عظمتو
+علتو
+عملیو
+عنکبو
+عیبیو
+عیلیو
+فیسٹو
+فیصلو
+فیلسو
+فہمیو
+قبطیو
+قبیلو
+قسمتو
+قفیتو
+قلفیو
+قلیتو
+قلیمو
+قمچیو
+قمقمو
+قمیصو
+قیمتو
+قہقہو
+کپکپو
+کتیسو
+کٹکٹو
+کٹنیو
+کسبیو
+کستیو
+کسٹھو
+کلغیو
+کلفتو
+کلیجو
+کلیلو
+کلیمو
+کلھیو
+کمبلو
+کمپیو
+کمسنو
+کمیتو
+کمیلو
+کمنو
+کنٹھو
+کنجیو
+کنکٹو
+کنکئو
+کنگفو
+کنگلو
+کنگنو
+کنگھو
+کیبنو
+کیتیو
+کیسٹو
+کیسیو
+کیمپو
+کینچو
+کھٹکو
+کھٹلو
+کھٹیو
+کھسکو
+کھسلو
+کھکھو
+کھمبو
+کھنچو
+کھنکو
+کھیپو
+کھیتو
+کھیلو
+کھیئو
+گتھنو
+گتھیو
+گٹکیو
+گشتیو
+گفتگو
+گلٹیو
+گلگلو
+گنتیو
+گنٹھو
+گنجیو
+گنگنو
+گھپلو
+گھٹکو
+گھٹنو
+گھسٹو
+گھگھو
+گھنٹو
+گھنگو
+گھیکو
+لبلبو
+لبیلو
+لپیٹو
+لٹکنو
+لجھنو
+لچھنو
+لشتیو
+لطیفو
+لعنتو
+لعینو
+لفینگو
+لکشیو
+لگنیو
+لمحمو
+لمختو
+لمخلو
+لمعبو
+لمعمو
+لمکتو
+لمنظو
+لنگیو
+لنگھو
+لیبلو
+لیتھو
+لیچیو
+لیسیو
+لیگیو
+لیمپو
+لہنگو
+مبلغو
+متقیو
+مٹکیو
+مٹھیو
+مثلثو
+مجسمو
+مجلسو
+مجمعو
+مچلکو
+محبتو
+محسنو
+محفلو
+محققو
+محکمو
+محملو
+محنتو
+مخلصو
+مخمصو
+مخملو
+مخنثو
+مسکنو
+مسلکو
+مسلمو
+مسئلو
+مشعلو
+مشغلو
+مشفقو
+مشقتو
+مشکبو
+مشکلو
+مشکیو
+مشکو
+مشینو
+مصطفو
+مصلحو
+مصنفو
+مطلعو
+معلمو
+مغلپو
+مغنیو
+مفلسو
+مکتبو
+مکینو
+مکھنو
+مکھیو
+ملکیو
+منجمو
+منجنو
+منچلو
+منشیو
+منصبو
+منصبو
+منصفو
+منطقو
+منگنو
+منگھو
+میٹھو
+میکلو
+میمنو
+مہینو
+نتیجو
+نتھنو
+نٹنیو
+نٹیٹو
+نٹھلو
+نجمنو
+نجیبو
+نجیلو
+نچلیو
+نسبتو
+نسٹھو
+نسسکو
+نشستو
+نشیبو
+نشینو
+نصیبو
+نظمیو
+نعمتو
+نقیبو
+نکمو
+نکمیو
+نکیلو
+نکھتو
+نکھٹو
+نکھیو
+نگلیو
+نگینو
+نگیلو
+نلسٹو
+نلکیو
+نمکخو
+نیپچو
+نیسکو
+نیکیو
+نیلگو
+نیمچو
+ئجسٹو
+ئیسکو
+ئیکلو
+ئیگیو
+ئینچو
+یتیمو
+یجنٹو
+یخنیو
+یسٹھو
+یکھیو
+یگچیو
+یلچیو
+یلیمو
+ھکینو
+ھمکیو
+بصیغئہ
+سینئہ
+شعبئہ
+صیغئہ
+عطیئہ
+غنچئہ
+فیقئہ
+قبلئہ
+قلعئہ
+نقطعئہ
+نیمئہ
+ہفتئہ
+ببیسی
+بپتنی
+بتکتی
+بتکنی
+بتیسی
+بجھتی
+بجھنی
+بچکتی
+بچکنی
+بچلتی
+بچلنی
+بچھتی
+بچھنی
+بخشتی
+بخششی
+بخشنی
+بخیلی
+بستگی
+بستنی
+بسکٹی
+بسنتی
+بکبکی
+بکینی
+بگینی
+بگیلی
+بلبلی
+بلٹتی
+بلٹنی
+بلغی
+بلکتی
+بلکنی
+بللی
+بلیسی
+بمبئی
+بنٹتی
+بنٹنی
+بنجتی
+بنجنی
+بنسنی
+بنفشی
+بنیٹی
+بنینی
+بتیتی
+بتینی
+بیٹھی
+بیجتی
+بیجنی
+بیچتی
+بیچنی
+بیسنی
+بیکسی
+بیگمی
+بیگنی
+بیلتی
+بیلتی
+بیلنی
+بینتی
+بینکی
+بیننی
+بیہقی
+بھجتی
+بھجنی
+بہشتی
+بہکتی
+بہکنی
+بہلتی
+بہلنی
+بہنگی
+بھبکی
+بھپکی
+بھتنی
+بھٹکی
+بھٹنی
+بھٹئ
+بھجتی
+بھجنی
+بھچتی
+بھچنی
+بھسکی
+بھشتی
+بھکتی
+بھکنی
+بھگتی
+بھلتی
+بھلسی
+بھلنی
+بھنتی
+بھنچی
+بھنکی
+بھنگی
+بھننی
+بھیجی
+بھیکی
+بھیگی
+بھیلی
+بھینی
+پتیلی
+پتھتی
+پتھنی
+پٹختی
+پٹچنی
+پٹکنی
+پٹکتی
+پٹیتی
+پچکتی
+پچکنی
+پچپسی
+پچھتی
+پچھلی
+پچھمی
+پچھنی
+پچتگی
+پستئ
+پسیجی
+پگلتی
+پگلنی
+پگھلی
+پلپلی
+پلتھی
+پلٹتی
+پلٹنی
+پنبئ
+پنپنی
+پنتھی
+پنچھی
+پنکھی
+پنگتی
+پنیلی
+پیپسی
+پیپلی
+پیتلی
+پیتھی
+پیٹتی
+پیٹنی
+پیٹھی
+پیستی
+پیسنی
+پیشگی
+پیکسی
+پیلتی
+پیلنی
+پینٹی
+پھسکی
+پہنتی
+پہنچی
+پہنی
+پہیلی
+پھبتی
+پھبکی
+پھبنی
+پھپی
+پھپکی
+پھپھی
+پھٹتی
+پھٹکی
+پھٹنی
+پھسکی
+پھسلی
+پھکتی
+پھکنی
+پھلتی
+پھلٹی
+پھلسی
+پھلکی
+پھلنی
+پھنتی
+پھنسی
+پھنکی
+پھنگی
+پھننی
+پھیکی
+پھیلی
+پھینی
+تبتی
+تیبچی
+تپکتی
+تپکنی
+تحفگی
+تشنجی
+تشنگی
+تعصبی
+تعصبی
+تعلقی
+تعلی
+تغلقی
+تکبکی
+تکتکی
+تکلفی
+تکینی
+تلتلی
+تللی
+تلملی
+تلیٹی
+تمیمی
+تنتنی
+تنفسی
+تنکتی
+تنکنی
+تیبچی
+تیپچی
+تیجتی
+تیجنی
+تیکھی
+تھپتی
+تھپکی
+تھپنی
+تھتھی
+تھجتی
+تھجنی
+تھکتی
+تھکلی
+تھکنی
+تھگلی
+تھلتی
+تھلنی
+تھمتی
+تھمنی
+تھنچی
+تھیلی
+ٹپکتی
+ٹکٹکی
+ٹکھلی
+ٹلٹلی
+ٹنگتی
+ٹنگنی
+ٹیپتی
+ٹیپنی
+ٹیکتی
+ٹیکسی
+ٹیکنی
+ٹینکی
+ٹہلتی
+ٹہلنی
+ٹھٹکی
+ٹھٹھی
+ٹھستی
+ٹھسکی
+ٹھسنی
+ٹھکتی
+ٹھکنی
+ٹھگتی
+ٹھگنی
+ٹھلتی
+ٹھلنی
+ٹھمکی
+ٹھنتی
+ٹھنکی
+ٹھنگی
+ٹھننی
+ٹھیکی
+ٹھیگی
+ٹھینی
+ثعلبی
+جستگی
+جلیبی
+جلیسی
+جلیلی
+جملگی
+جمنئ
+جمیلی
+جنگلی
+جیتتی
+جیتنی
+جیٹھی
+جہنمی
+جھپٹی
+جھپکی
+جھجکی
+جھکتی
+جھکنی
+جھلتی
+جھلسی
+جھلکی
+جھلنی
+جھمکی
+جھنجی
+جھیلی
+چبکتی
+چبکنی
+چبینی
+چبھتی
+چبھنی
+چپٹتی
+چپٹنی
+چپکتی
+چپکنی
+چپنٹی
+چپیٹی
+چتھلی
+چٹختی
+چٹخنی
+چٹکتی
+چٹکنی
+ہچکنی
+چسکتی
+چسکنی
+چکٹتی
+چکٹنی
+چکلتی
+چکلنی
+چکھتی
+چکھنی
+چلبلی
+چلچلی
+چلملچی
+چمپئ
+چمٹتی
+چمٹنی
+چمکتی
+چمکنی
+چنبلی
+چنچنی
+چپیتی
+چپینی
+چیختی
+چیخنی
+چپنٹی
+چینگی
+چہکتی
+چہکنی
+چہیتی
+چھپتی
+چھپٹی
+چھپنی
+چھٹتی
+چھٹکی
+چھچھو
+چھلتی
+چھلتی
+چھلکی
+چھلنی
+چھنتی
+چھنٹی
+چھنکی
+چھننی
+چھیپی
+چھیلی
+چھینی
+حبیبی
+حسنی
+حسینی
+حقیقی
+حکمتی
+حکیمی
+حلیلی
+حلیمی
+حنبلی
+خستگی
+خصلتی
+خفتگی
+خلتسی
+خلخلی
+خلیجی
+خمینی
+خنثی
+سپینی
+ستخطی
+ستھنی
+سٹکتی
+سٹکنی
+سجیلی
+سچیتی
+سسکتی
+سسکنی
+سلپـی
+سلجھی
+سلسلی
+سلفچی
+سلگتی
+سلگنی
+سلمی
+سلیٹی
+سلگنی
+سمبلی
+سمبھی
+سمپلی
+سمٹتی
+سمٹنی
+سمجھی
+سمیٹی
+سنسنی
+سنکتی
+سنکلی
+سنکنی
+سککتی
+سیفٹی
+سیکھی
+سیلتی
+سیلنی
+سیمگی
+سینتی
+سینٹی
+سینچی
+سینکی
+سینگی
+سہلتی
+سہلنی
+سہمتی
+سہمنی
+سہیلی
+شبنمی
+شستگی
+شفتگی
+شفتلی
+شکیبی
+شلجمی
+شلغمی
+شمنگی
+صحبتی
+صخحچی
+صلیبی
+صنعتی
+ضعیفی
+طبلچی
+طبیعی
+طفیلی
+طلسمی
+عظمی
+عظیمی
+عقبی
+عقیلی
+علیگی
+غصیلی
+غفلتی
+غلئ
+غنچگی
+غنغنی
+غیبتی
+فلسفی
+فلیٹی
+فیمچی
+فیملی
+فینسی
+قسمتی
+قلعئ
+قلیبی
+قلیتی
+قلیمی
+قیمتی
+قینـی
+کپکپی
+کتھئ
+کٹکٹی
+کٹکنی
+کچکچی
+کچلتی
+کچلنی
+کچھنی
+کسلتی
+کسلنی
+کشتنی
+کشمشی
+کلبلی
+کلتھی
+کلیتی
+کلیٹی
+کلیجی
+کلیمی
+کمپلی
+کمسنی
+کملتی
+کملنی
+کمیتی
+کمیٹی
+کمینی
+کنپٹی
+کنجنی
+کنچنی
+کنکتی
+کنکٹی
+کنکنی
+کنکلی
+کنگھی
+کیتلی
+کیتھی
+کیچلی
+کیکتی
+ککیلنی
+کھبی
+کھپتی
+کھپچی
+کھپنی
+کھتی
+کھتلی
+کھٹتی
+کھٹی
+کھٹکی
+کھٹل
+کھجی
+کھجلی
+کھسکی
+کھسلی
+کھلتی
+کھلنی
+کھمبی
+کھنچی
+کھنسی
+کھنکی
+کھنی
+کھیتی
+کھیلی
+کھینی
+کھیئی
+گپکتی
+گپکنی
+گتھتی
+گتھنی
+گٹکتی
+گٹکنی
+گٹھتی
+گٹھلی
+گٹھنی
+گجگجی
+گشتگی
+گفتنی
+گلتھی
+گلکلی
+گنٹھی
+گنگنی
+گینتی
+گہکتی
+گہکنی
+گھپتی
+گھپنی
+گھٹتی
+گھٹکی
+گھٹنی
+گھچلی
+گھستی
+گھسٹی
+گھسنی
+گھلتی
+گھلنی
+گھنٹی
+گھنگی
+گھنی
+لبلبی
+لبنی
+لنیلی
+لپٹتی
+لپٹنی
+لپکتی
+لپکنی
+لپیٹی
+لٹکتی
+لٹکنی
+لجمعی
+لجھتی
+لجھنی
+لچسپی
+نچکتی
+لچکنی
+لچھتی
+لچھمی
+لچھنی
+لیسنی
+لضحی
+لعنتی
+لفنگی
+لکشمی
+لکعبی
+لکھتی
+لکھنی
+لمحصی
+لمحیی
+لمعطی
+لمغنی
+لمکتی
+لکتی
+لمکنی
+لنسکی
+لنگتی
+کینڑ
+لنگھی
+لیپتی
+لیپنی
+لیٹتی
+لیٹنی
+لیجھی
+لیچتی
+لیچنی
+لیستی
+لیسنی
+لیلی
+لہکتی
+لہکنی
+مبنی
+مثیلی
+مجسٹی
+مجلسی
+مجلی
+مجملی
+مچکتی
+مچکنی
+مچلنی
+مچھلی
+محبتی
+محسنی
+محشی
+محلی
+محنتی
+مخلصی
+مخلی
+مخملی
+مسکتی
+مسکنی
+مسنتی
+مسلنی
+مسمسی
+مسمی
+مسیحی
+مشفقی
+مشقتی
+مثنی
+مشینی
+مصحفی
+مفطکی
+مصطگی
+مصلی
+مطلبی
+معطلی
+معلمی
+معلی
+معینی
+مغلئٖ
+مفلسی
+مقتضی
+مقضی
+مقفی
+مکتبی
+ملتجی
+ملگجی
+ملنکی
+ملہٹی
+منتہی
+منجلی
+منجھی
+منچلی
+منحنی
+منصبی
+منصفی
+منطقی
+منقی
+منکتی
+منکتی
+منگتی
+منگنی
+منمنی
+منہنی
+میتھی
+میٹتی
+میٹنی
+میٹھی
+میجتی
+میجنی
+میچتی
+میچنی
+میکسی
+میگنی
+میلسی
+میمنی
+مہکتی
+مہکنی
+مہنگی
+نبٹتی
+نبٹنی
+نبختی
+نبھتی
+نپٹتی
+نپٹنی
+پنجتی
+پنجنی
+نتھنی
+نٹیلی
+نٹھتی
+نٹھنی
+نجیلی
+نجھتی
+نجھنی
+نچھتی
+نچھنی
+نسبتی
+نسیسی
+نسینی
+نشیبی
+نشیلی
+نشینی
+نعیمی
+نکلتی
+نکلنی
+نکمی
+نکیلی
+نکھتی
+نکھنی
+نگلتی
+نگلنی
+نگیلی
+نگینی
+نگھتی
+نگھنی
+نمٹتی
+نمٹنی
+نطینی
+نیستی
+نیکسی
+نینسی
+ئستگی
+ئینٹی
+ٹینکی
+ئینگی
+یتیلی
+یتیمی
+یجنسی
+یحیی
+یخھنی
+یحیی
+یفتگی
+یقینی
+یکنسی
+یکھتی
+یکھنی
+یلمعی
+یمیمی
+یمینی
+ینٹھی
+ینکتی
+ینکنی
+ینگتی
+ینگنی
+ہتھنی
+نٹیلی
+ہچکتی
+ہچکنی
+ہستگی
+ہستنی
+ہلبلی
+ہلگتی
+ہلگنی
+ہمکنی
+ہنستی
+ہنسلی
+ہنسنی
+ہشیمی
+ھکیلی
+ھلکتی
+ھلکنی
+ھمکتی
+ھمکنی
+ھنستی
+ھسنی
+ھنکتی
+ھنکنی
+بپتنے
+بپتئے
+بتکتے
+بتکنے
+بتکئے
+بجھتے
+بجھنے
+بجھئے
+بچپنے
+بچکتے
+بچکنے
+بچکئے
+بچلتے
+بچلنے
+بچلئے
+بچھتے
+بچھنے
+بچھئے
+بخشتے
+بخشئے
+بکسلے
+بکسنے
+بگیلے
+بگینے
+بلبلے
+بلٹتے
+بلٹئے
+بلکتے
+بلکئے
+بللے
+بنٹتے
+بنٹئے
+بنجتے
+بنجئے
+بنگلے
+بیتتے
+بیتئے
+بیٹھے
+بیجتے
+بیچتے
+بیچئے
+بیلتے
+بیلچے
+بیلنے
+بیلئے
+بینتے
+بینئے
+بہکتے
+بہکئے
+بہلتے
+بہلئے
+بھپکے
+بھتنے
+بھٹکے
+بھجتے
+بھجئے
+بھچتے
+بھچئے
+بھسکے
+بھکتے
+بھکئے
+بھگتے
+بھلتے
+بھلسے
+بھلنے
+بھلئے
+بھنتے
+بھنچے
+بھنگے
+بھننے
+بھنئے
+بھیجے
+بھیگے
+بھیلے
+بھینے
+پپیتے
+پپیہے
+پتنگے
+پتیلے
+پتھتے
+پتھئے
+پٹختے
+پٹخئے
+پٹکتے
+پچکتے
+پچکئے
+پچھتے
+پچھلے
+پچھنے
+پچھئے
+پسیجے
+پسینے
+پگلتے
+پگلئے
+پگھلے
+پلپلے
+پلٹتے
+پلٹئے
+پنپتے
+پنپئے
+پنکھے
+پنیلے
+پیٹتے
+پیٹئے
+پیٹھے
+پیجئے
+پیچھے
+پیستے
+پیسئے
+پیلنے
+پیلئے
+پہنتے
+پہنچے
+پہننے
+پہنئے
+پھبتے
+پھبکے
+پھبنے
+پھبئے
+پھپکے
+پھٹتے
+پھٹکے
+پھٹنے
+پھٹئے
+پھسکے
+پھسلے
+پھکتے
+پھکئے
+پھلتے
+پھلسے
+پھلکے
+پھلنے
+پھلئے
+پھنسے
+پھنکے
+پھننے
+پھیکے
+پھیلے
+تپکتے
+تپکئے
+تصیفے
+تعلقے
+تکملے
+تلتلے
+تلملے
+تنتنے
+تنتئے
+تنکتے
+تنکئے
+تیجتے
+تیجئے
+تیکھے
+تھپتے
+تھپکے
+تھپنے
+تھپئے
+تھجتے
+تھجئے
+تھکتے
+تھکئے
+تھلتے
+تھلئے
+تھمتے
+تھمئے
+تھنچے
+تھیلے
+ٹپکتے
+ٹپکئے
+ٹگھلے
+ٹلٹلے
+ٹنگتے
+ٹنگئے
+ٹیپتے
+ٹیپئے
+ٹیکتے
+ٹیکئے
+ٹہلتے
+ٹہلئے
+ٹھٹکے
+ٹھٹھے
+ٹھستے
+ٹھسکے
+ٹھسئے
+ٹھگتے
+ٹھگئے
+ٹھلتے
+ٹھلئے
+ٹھمکے
+ٹھنتے
+ٹھننے
+ٹھنئے
+ٹھیکے
+ٹھیلے
+جنگلے
+جیتتے
+جیتئے
+جیٹھے
+جھپٹتے
+جھپکے
+جھٹکی
+جھجکے
+جھکتے
+جھکئے
+جھلتے
+جھلسے
+جھلکے
+جھلنے
+جھلئے
+جھمکے
+جھیلے
+چبکتے
+چبکئے
+چبینے
+چبھتے
+چبھئے
+چپٹتے
+چپٹئے
+چپچے
+چپکتے
+چپکئے
+چپیٹے
+چٹختے
+چٹخئے
+چٹکتے
+چٹکلے
+چٹکنے
+چٹکئے
+چسکتے
+چکٹتے
+چکٹئے
+چکلتے
+چکلئے
+چکھتے
+چکھئے
+چلبلے
+چمٹتے
+چمٹئے
+چمکتے
+چمکئے
+چنبھے
+چنچنے
+چیپتے
+چیپئے
+چیختے
+چیخئے
+چینٹے
+چینگے
+چہچہے
+چہکتے
+چہکئے
+چہیتے
+چھپتے
+چھپکے
+چھپنے
+چھپئے
+چھٹتے
+چھٹکے
+چھٹنے
+چھٹئے
+چھلتے
+چھلکے
+چھلنے
+چھلئے
+چھنتے
+چھنکے
+چھننے
+چھننے
+چھنئے
+چھیپے
+چھیلے
+چھینے
+ستعفے
+ستنجے
+سٹکتے
+سٹکئے
+سجیلے
+سسکتے
+سسکئے
+سفینے
+سلجھے
+سلسلے
+سلگتے
+سلگئے
+سلمے
+سلیقے
+سمٹتے
+سمٹئے
+سمجھے
+سمیٹے
+سنکتے
+سنکئے
+سیٹھے
+سیجئے
+سیچتے
+سیچئے
+سیکھے
+سیلتے
+سیلئے
+سینتے
+سینچے
+سینگے
+سہلتے
+سہلئے
+سہمتے
+سہمئے
+شکنجے
+صحیفے
+ضمیمے
+عطیئے
+عقبے
+عقیقے
+غصیلے
+غلبلے
+غلیلے
+فتیلے
+فلسفے
+فلیتے
+فیصلے
+قبیلے
+قضیئے
+قلئیے
+قمقمے
+قہقہے
+کپکپے
+کٹکتے
+کٹکٹے
+کٹکئے
+کٹیلے
+کچکچے
+کچلتے
+کچلئے
+کسلتے
+کسلئے
+کسیلے
+کلبلے
+کلیجے
+کملتے
+کملئے
+کمیلے
+کمینے
+کنٹھے
+کنکتے
+کنکٹے
+کنکنے
+کنکئے
+کنگلے
+کنگنے
+کنگھے
+کیجئے
+کیکتے
+کیکئے
+کیلتے
+کیلئے
+کھپتے
+کھپئے
+کھٹتے
+کھٹکے
+کھٹلے
+کھٹنے
+کھٹئے
+کھجلے
+کھسکے
+کھسلے
+کھلتے
+کھلئے
+کھمبے
+کھنچے
+کھنکے
+کھتے
+کھیلے
+کھنے
+کھیئے
+گپکتے
+گپکئے
+گتھتے
+گتھئے
+گٹھے
+گٹکتے
+گٹکئے
+گٹھتے
+گٹھئے
+گجگجے
+گلگلے
+گنٹھے
+گنگنے
+گہکتے
+گہکئے
+گھپتے
+گھپلے
+گھپنے
+گھپئے
+گھٹتے
+گھٹکے
+گھٹنے
+گھٹئے
+گھچلے
+گھستے
+گھٹے
+گھسئے
+گھلتے
+گھلئے
+گھنٹے
+گھنئے
+لبلبے
+لبیلے
+لپٹتے
+لپٹئے
+لپکتے
+لپکئے
+لپیٹتے
+لٹکتے
+لٹکئے
+لجھتے
+لجھئے
+لچکتے
+لچکئے
+لچھتے
+لچھئے
+لشتیے
+لطیفے
+لفنگے
+لکھتے
+لکھئے
+لمکتے
+لمکئے
+لنگتے
+لنگئے
+لنگھے
+لیپتے
+لیپئے
+لیٹتے
+لیٹئے
+لیجئے
+لیچتے
+لیچئے
+لیستے
+لیسئے
+لیکھے
+لیلے
+لینگے
+لہکتے
+لہکئے
+متھتے
+متھئے
+مٹکتے
+مٹکئے
+مثنے
+مجسمے
+مجلے
+مچکتے
+مچکئے
+مچلتے
+مچلئے
+محکمے
+مخلے
+مخمصے
+مسکتے
+مسکئے
+مسلتے
+مسلئے
+مسئلے
+مشغلے
+مشکلے
+مصلے
+مطلعے
+معلے
+ملگجے
+منجھے
+منچلے
+منکتے
+منکئے
+منگتے
+منگئے
+میٹتے
+میٹئے
+میٹھے
+میجتے
+میجئے
+میچتے
+میچئے
+مہکتے
+مہکئے
+مہنگے
+مہینے
+نبٹتے
+نبٹئے
+نبھتے
+نبھئے
+نپٹتے
+نپٹئے
+نپجتے
+نپجئے
+نتیجے
+نتھنے
+نتھئے
+نٹھئے
+نجھتے
+نجھئے
+نچنئے
+نچھتے
+نچھئے
+نشیلے
+نصیبے
+نکلتے
+نکلئے
+نکمے
+نکیلے
+نکھتے
+نکھئے
+نگلتے
+نگلئے
+نگیلے
+نگینے
+نگھتے
+نگھئے
+نمٹتے
+نمٹئے
+نمستے
+نیٹھے
+نیمچے
+ئینچے
+ئینگے
+یتیلے
+یکھتے
+یکھئے
+ینٹھے
+ینکتے
+ینکئے
+ینگتے
+ینگئے
+ہٹیلے
+ہچکتے
+ہچکئے
+ہلگتے
+ہلگئے
+ہمکتے
+ہمکئے
+ہنستے
+ہنسئے
+ھکیلتے
+ھکیلئے
+ھکیلے
+ھلکتے
+ھلکئے
+ھمکتے
+ھمکئے
+ھنستے
+ھنسئے
+ھنکتے
+ھنکئے
+بصیغہ
+بقیتہ
+بگینہ
+بلیلبہ
+بنفشہ
+بنگلہ
+بیلچہ
+تپنچہ
+تثنیہ
+تخلیہ
+تسمیہ
+تشبیہ
+تصفیہ
+تعلقہ
+تعمیہ
+تکمیلہ
+تمنچہ
+تنبیہ
+تہلکہ
+ٹھٹھہ
+ٹھیکہ
+ٹھیلہ
+ثعلبہ
+ثمینہ
+جلیلہ
+جمعتہ
+جمیلہ
+چشتیہ
+حبیبہ
+حسینہ
+حشتیہ
+حلفیہ
+حلیلہ
+حلیمہ
+حنیفہ
+خبیثہ
+خجستہ
+خفیفہ
+خلیلہ
+سفینہ
+سقیفہ
+شکستہ
+سکینہ
+سلسلہ
+سنبلہ
+سہیلہ
+شبیلہ
+شبینہ
+شعشعہ
+شفیعہ
+شفیقہ
+شقیقہ
+شکبیہ
+شکستہ
+شکنجہ
+شکیبہ
+شکیلہ
+شگفتہ
+شمیمہ
+شنیعہ
+شیفتہ
+شہنشہ
+صبعتہ
+صبغتہ
+صبیحہ
+صحیفہ
+ضحیفہ
+ضمیمہ
+طبیبہ
+طپنچہ
+طلیعہ
+طمنچہ
+طنطنہ
+عجیبہ
+عشقیہ
+عصبیہ
+عطیۂ
+عظیمہعفیفہ
+عقیقہ
+عقیلہ
+عقیمہ
+علقمہ
+علمیہ
+عیلیہ
+غلغلہ
+غلیطہ
+غلیظہ
+غلیلہ
+غنچۂ
+فتیلہ
+فصیحہ
+فلبتہ
+فلسفہ
+فلیتہ
+فیصلہ
+قبیحہ
+قبیلہ
+قتیکہ
+قسمیہ
+قمقمہ
+قہقہہ
+کبیسہ
+کٹکنہ
+کلبلہ
+کلکتہ
+کلمتہ
+کلنکہ
+کلیجہ
+کلیلہ
+کمینہ
+کنینہ
+کہھجلہ
+گنجفہ
+گھنٹہ
+لجمعہ
+لجملہ
+لجنتہ
+لخلخہ
+لشتیہ
+لشعبہ
+لطیفہ
+لعنتہ
+لقلقہ
+لکعبہ
+للغتہ
+للہ
+لمنتہ
+لیلتہ
+مبینہ
+متصلہ
+متفقہ
+متنبہ
+مثبتہ
+مجسمہ
+مجلہ
+مچلکہ
+محسنہ
+محصنہ
+محکمہ
+محلہ
+مخمصہ
+مسلمہ
+مسئلہ
+مسینہ
+مشتبہ
+مشعلہ
+مشغلہ
+مصنفہ
+مضحکہ
+مطلقہ
+مظلمہ
+مظنہ
+معلقہ
+معلمہ
+معینہ
+مغلیہ
+مغنیہ
+مقنہ
+مکتبہ
+منحقہ
+ملیحہ
+ممکنہ
+منصۂ
+منطقہ
+میختہ
+میمنہ
+مہملہ
+مہینہ
+نپیلہ
+نتیجہ
+نسیمہ
+نشستہ
+نصیبہ
+نطینہ
+نظمیہ
+نعتیہ
+نعیمہ
+نگینہ
+نیمچہ
+ئنچہ
+ہلیلہ
+ہمیشہ
+ہمہمہ
+پینٹہ
+ٹھیٹھ
+جھنجھ
+کھنکھ
+لینتھ
+ملیچھ
+ہیلتھ
+لبینتہ
+لعظمتہ
+مشخیل
+حسنی
+خنثی
+عقبی
+عیسی
+لبنی
+لصلو
+مثنی
+مجلی
+مجملا
+محشی
+جلگ
+معلی
+مقفی
+یحیی
+تعلقا
+قیمتا
+مجملا
+مطلقا
+بنجتی
+بنجنی
+بنسنی
+بنفشی
+بنیٹی
+بنینی
+بتیتی
+بتینی
+بیٹھی
+بیجتی
+بیجنی
+بیچتی
+بیچنی
+بیسنی
+بیکسی
+بیگمی
+بیگنی
+بیلتی
+بیلتی
+بیلنی
+بینتی
+بینکی
+بیننی
+بیہقی
+بھجتی
+بھجنی
+بہشتی
+بہکتی
+بہکنی
+بہلتی
+بہلنی
+بہنگی
+بھبکی
+بھپکی
+بھتنی
+بھٹکی
+بھٹنی
+بھٹئ
+بھجتی
+بھجنی
+بھچتی
+بھچنی
+بھسکی
+بھشتی
+بھکتی
+بھکنی
+بھگتی
+بھلتی
+بھلسی
+بھلنی
+بھنتی
+بھنچی
+بھنکی
+بھنگی
+بھننی
+بھیجی
+بھیکی
+بھیگی
+بھیلی
+بھینی
+پتیلی
+پتھتی
+پتھنی
+پٹختی
+پٹچنی
+پٹکنی
+پٹکتی
+پٹیتی
+پچکتی
+پچکنی
+پچپسی
+پچھتی
+پچھلی
+پچھمی
+پچھنی
+پچتگی
+پستئ
+پسیجی
+پگلتی
+پگلنی
+پگھلی
+پلپلی
+پلتھی
+پلٹتی
+پلٹنی
+پنبئ
+پنپنی
+پنتھی
+پنچھی
+پنکھی
+پنگتی
+پنیلی
+پیپسی
+پیپلی
+پیتلی
+پیتھی
+پیٹتی
+پیٹنی
+پیٹھی
+پیستی
+پیسنی
+پیشگی
+پیکسی
+پیلتی
+پیلنی
+پینٹی
+پھسکی
+پہنتی
+پہنچی
+پہنی
+پہیلی
+پھبتی
+پھبکی
+پھبنی
+پھپی
+پھپکی
+پھپھی
+پھٹتی
+پھٹکی
+پھٹنی
+پھسکی
+پھسلی
+پھکتی
+پھکنی
+پھلتی
+پھلٹی
+پھلسی
+پھلکی
+پھلنی
+پھنتی
+پھنسی
+پھنکی
+پھنگی
+پھننی
+پھیکی
+پھیلی
+پھینی
+تبتی
+تیبچی
+تپکتی
+تپکنی
+تحفگی
+تشنجی
+تشنگی
+تعصبی
+تعصبی
+تعلقی
+تعلی
+تغلقی
+تکبکی
+تکتکی
+تکلفی
+تکینی
+تلتلی
+تللی
+تلملی
+تلیٹی
+تمیمی
+تنتنی
+تنفسی
+تنکتی
+تنکنی
+تیبچی
+تیپچی
+تیجتی
+تیجنی
+تیکھی
+تھپتی
+تھپکی
+تھپنی
+تھتھی
+تھجتی
+تھجنی
+تھکتی
+تھکلی
+تھکنی
+تھگلی
+تھلتی
+تھلنی
+تھمتی
+تھمنی
+تھنچی
+تھیلی
+ٹپکتی
+ٹکٹکی
+ٹکھلی
+ٹلٹلی
+ٹنگتی
+ٹنگنی
+ٹیپتی
+ٹیپنی
+ٹیکتی
+ٹیکسی
+ٹیکنی
+ٹینکی
+ٹہلتی
+ٹہلنی
+ٹھٹکی
+ٹھٹھی
+ٹھستی
+ٹھسکی
+ٹھسنی
+ٹھکتی
+ٹھکنی
+ٹھگتی
+ٹھگنی
+ٹھلتی
+ٹھلنی
+ٹھمکی
+ٹھنتی
+ٹھنکی
+ٹھنگی
+ٹھننی
+ٹھیکی
+ٹھیگی
+ٹھینی
+ثعلبی
+جستگی
+جلیبی
+جلیسی
+جلیلی
+جملگی
+جمنئ
+جمیلی
+جنگلی
+جیتتی
+جیتنی
+جیٹھی
+جہنمی
+جھپٹی
+جھپکی
+جھجکی
+جھکتی
+جھکنی
+جھلتی
+جھلسی
+جھلکی
+جھلنی
+جھمکی
+جھنجی
+جھیلی
+چبکتی
+چبکنی
+چبینی
+چبھتی
+چبھنی
+چپٹتی
+چپٹنی
+چپکتی
+چپکنی
+چپنٹی
+چپیٹی
+چتھلی
+چٹختی
+چٹخنی
+چٹکتی
+چٹکنی
+ہچکنی
+چسکتی
+چسکنی
+چکٹتی
+چکٹنی
+چکلتی
+چکلنی
+چکھتی
+چکھنی
+چلبلی
+چلچلی
+چلملچی
+چمپئ
+چمٹتی
+چمٹنی
+چمکتی
+چمکنی
+چنبلی
+چنچنی
+چپیتی
+چپینی
+چیختی
+چیخنی
+چپنٹی
+چینگی
+چہکتی
+چہکنی
+چہیتی
+چھپتی
+چھپٹی
+چھپنی
+چھٹتی
+چھٹکی
+چھچھو
+چھلتی
+چھلتی
+چھلکی
+چھلنی
+چھنتی
+چھنٹی
+چھنکی
+چھننی
+چھیپی
+چھیلی
+چھینی
+حبیبی
+حسنی
+حسینی
+حقیقی
+حکمتی
+حکیمی
+حلیلی
+حلیمی
+حنبلی
+خستگی
+خصلتی
+خفتگی
+خلتسی
+خلخلی
+خلیجی
+خمینی
+خنثی
+سپینی
+ستخطی
+ستھنی
+سٹکتی
+سٹکنی
+سجیلی
+سچیتی
+سسکتی
+سسکنی
+سلپـی
+سلجھی
+سلسلی
+سلفچی
+سلگتی
+سلگنی
+سلمی
+سلیٹی
+سلگنی
+سمبلی
+سمبھی
+سمپلی
+سمٹتی
+سمٹنی
+سمجھی
+سمیٹی
+سنسنی
+سنکتی
+سنکلی
+سنکنی
+سککتی
+سیفٹی
+سیکھی
+سیلتی
+سیلنی
+سیمگی
+سینتی
+سینٹی
+سینچی
+سینکی
+سینگی
+سہلتی
+سہلنی
+سہمتی
+سہمنی
+سہیلی
+شبنمی
+شستگی
+شفتگی
+شفتلی
+شکیبی
+شلجمی
+شلغمی
+شمنگی
+صحبتی
+صخحچی
+صلیبی
+صنعتی
+ضعیفی
+طبلچی
+طبیعی
+طفیلی
+طلسمی
+عظمی
+عظیمی
+عقبی
+عقیلی
+علیگی
+غصیلی
+غفلتی
+غلئ
+غنچگی
+غنغنی
+غیبتی
+فلسفی
+فلیٹی
+فیمچی
+فیملی
+فینسی
+قسمتی
+قلعئ
+قلیبی
+قلیتی
+قلیمی
+قیمتی
+قینـی
+کپکپی
+کتھئ
+کٹکٹی
+کٹکنی
+کچکچی
+کچلتی
+کچلنی
+کچھنی
+کسلتی
+کسلنی
+کشتنی
+کشمشی
+کلبلی
+کلتھی
+کلیتی
+کلیٹی
+کلیجی
+کلیمی
+کمپلی
+کمسنی
+کملتی
+کملنی
+کمیتی
+کمیٹی
+کمینی
+کنپٹی
+کنجنی
+کنچنی
+کنکتی
+کنکٹی
+کنکنی
+کنکلی
+کنگھی
+کیتلی
+کیتھی
+کیچلی
+کیکتی
+ککیلنی
+کھبی
+کھپتی
+کھپچی
+کھپنی
+کھتی
+کھتلی
+کھٹتی
+کھٹی
+کھٹکی
+کھٹل
+کھجی
+کھجلی
+کھسکی
+کھسلی
+کھلتی
+کھلنی
+کھمبی
+کھنچی
+کھنسی
+کھنکی
+کھنی
+کھیتی
+کھیلی
+کھینی
+کھیئی
+گپکتی
+گپکنی
+گتھتی
+گتھنی
+گٹکتی
+گٹکنی
+گٹھتی
+گٹھلی
+گٹھنی
+گجگجی
+گشتگی
+گفتنی
+گلتھی
+گلکلی
+گنٹھی
+گنگنی
+گینتی
+گہکتی
+گہکنی
+گھپتی
+گھپنی
+گھٹتی
+گھٹکی
+گھٹنی
+گھچلی
+گھستی
+گھسٹی
+گھسنی
+گھلتی
+گھلنی
+گھنٹی
+گھنگی
+گھنی
+لبلبی
+لبنی
+لنیلی
+لپٹتی
+لپٹنی
+لپکتی
+لپکنی
+لپیٹی
+لٹکتی
+لٹکنی
+لجمعی
+لجھتی
+لجھنی
+لچسپی
+نچکتی
+لچکنی
+لچھتی
+لچھمی
+لچھنی
+لیسنی
+لضحی
+لعنتی
+لفنگی
+لکشمی
+لکعبی
+لکھتی
+لکھنی
+لمحصی
+لمحیی
+لمعطی
+لمغنی
+لمکتی
+لکتی
+لمکنی
+لنسکی
+لنگتی
+کینڑ
+لنگھی
+لیپتی
+لیپنی
+لیٹتی
+لیٹنی
+لیجھی
+لیچتی
+لیچنی
+لیستی
+لیسنی
+لیلی
+لہکتی
+لہکنی
+مبنی
+مثیلی
+مجسٹی
+مجلسی
+مجلی
+مجملی
+مچکتی
+مچکنی
+مچلنی
+مچھلی
+محبتی
+محسنی
+محشی
+محلی
+محنتی
+مخلصی
+مخلی
+مخملی
+مسکتی
+مسکنی
+مسنتی
+مسلنی
+مسمسی
+مسمی
+مسیحی
+مشفقی
+مشقتی
+مثنی
+مشینی
+مصحفی
+مفطکی
+مصطگی
+مصلی
+مطلبی
+معطلی
+معلمی
+معلی
+معینی
+مغلئٖ
+مفلسی
+مقتضی
+مقضی
+مقفی
+مکتبی
+ملتجی
+ملگجی
+ملنکی
+ملہٹی
+منتہی
+منجلی
+منجھی
+منچلی
+منحنی
+منصبی
+منصفی
+منطقی
+منقی
+منکتی
+منکتی
+منگتی
+منگنی
+منمنی
+منہنی
+میتھی
+میٹتی
+میٹنی
+میٹھی
+میجتی
+میجنی
+میچتی
+میچنی
+میکسی
+میگنی
+میلسی
+میمنی
+مہکتی
+مہکنی
+مہنگی
+نبٹتی
+نبٹنی
+نبختی
+نبھتی
+نپٹتی
+نپٹنی
+پنجتی
+پنجنی
+نتھنی
+نٹیلی
+نٹھتی
+نٹھنی
+نجیلی
+نجھتی
+نجھنی
+نچھتی
+نچھنی
+نسبتی
+نسیسی
+نسینی
+نشیبی
+نشیلی
+نشینی
+نعیمی
+نکلتی
+نکلنی
+نکمی
+نکیلی
+نکھتی
+نکھنی
+نگلتی
+نگلنی
+نگیلی
+نگینی
+نگھتی
+نگھنی
+نمٹتی
+نمٹنی
+نطینی
+نیستی
+نیکسی
+نینسی
+ئستگی
+ئینٹی
+ٹینکی
+ئینگی
+یتیلی
+یتیمی
+یجنسی
+یحیی
+یخھنی
+یحیی
+یفتگی
+یقینی
+یکنسی
+یکھتی
+یکھنی
+یلمعی
+یمیمی
+یمینی
+ینٹھی
+ینکتی
+ینکنی
+ینگتی
+ینگنی
+ہتھنی
+نٹیلی
+ہچکتی
+ہچکنی
+ہستگی
+ہستنی
+ہلبلی
+ہلگتی
+ہلگنی
+ہمکنی
+ہنستی
+ہنسلی
+ہنسنی
+ہشیمی
+ھکیلی
+ھلکتی
+ھلکنی
+ھمکتی
+ھمکنی
+ھنستی
+ھسنی
+ھنکتی
+ھنکنی
+بصیغہ
+بقیتہ
+بگینہ
+بلیلبہ
+بنفشہ
+بنگلہ
+بیلچہ
+تپنچہ
+تثنیہ
+تخلیہ
+تسمیہ
+تشبیہ
+تصفیہ
+تعلقہ
+تعمیہ
+تکمیلہ
+تمنچہ
+تنبیہ
+تہلکہ
+ٹھٹھہ
+ٹھیکہ
+ٹھیلہ
+ثعلبہ
+ثمینہ
+جلیلہ
+جمعتہ
+جمیلہ
+چشتیہ
+حبیبہ
+حسینہ
+حشتیہ
+حلفیہ
+حلیلہ
+حلیمہ
+حنیفہ
+خبیثہ
+خجستہ
+خفیفہ
+خلیلہ
+سفینہ
+سقیفہ
+شکستہ
+سکینہ
+سلسلہ
+سنبلہ
+سہیلہ
+شبیلہ
+شبینہ
+شعشعہ
+شفیعہ
+شفیقہ
+شقیقہ
+شکبیہ
+شکستہ
+شکنجہ
+شکیبہ
+شکیلہ
+شگفتہ
+شمیمہ
+شنیعہ
+شیفتہ
+شہنشہ
+صبعتہ
+صبغتہ
+صبیحہ
+صحیفہ
+ضحیفہ
+ضمیمہ
+طبیبہ
+طپنچہ
+طلیعہ
+طمنچہ
+طنطنہ
+عجیبہ
+عشقیہ
+عصبیہ
+عطیۂ
+عظیمہعفیفہ
+عقیقہ
+عقیلہ
+عقیمہ
+علقمہ
+علمیہ
+عیلیہ
+غلغلہ
+غلیطہ
+غلیظہ
+غلیلہ
+غنچۂ
+فتیلہ
+فصیحہ
+فلبتہ
+فلسفہ
+فلیتہ
+فیصلہ
+قبیحہ
+قبیلہ
+قتیکہ
+قسمیہ
+قمقمہ
+قہقہہ
+کبیسہ
+کٹکنہ
+کلبلہ
+کلکتہ
+کلمتہ
+کلنکہ
+کلیجہ
+کلیلہ
+کمینہ
+کنینہ
+کہھجلہ
+گنجفہ
+گھنٹہ
+لجمعہ
+لجملہ
+لجنتہ
+لخلخہ
+لشتیہ
+لشعبہ
+لطیفہ
+لعنتہ
+لقلقہ
+لکعبہ
+للغتہ
+للہ
+لمنتہ
+لیلتہ
+مبینہ
+متصلہ
+متفقہ
+متنبہ
+مثبتہ
+مجسمہ
+مجلہ
+مچلکہ
+محسنہ
+محصنہ
+محکمہ
+محلہ
+مخمصہ
+مسلمہ
+مسئلہ
+مسینہ
+مشتبہ
+مشعلہ
+مشغلہ
+مصنفہ
+مضحکہ
+مطلقہ
+مظلمہ
+مظنہ
+معلقہ
+معلمہ
+معینہ
+مغلیہ
+مغنیہ
+مقنہ
+مکتبہ
+منحقہ
+ملیحہ
+ممکنہ
+منصۂ
+منطقہ
+میختہ
+میمنہ
+مہملہ
+مہینہ
+نپیلہ
+نتیجہ
+نسیمہ
+نشستہ
+نصیبہ
+نطینہ
+نظمیہ
+نعتیہ
+نعیمہ
+نگینہ
+نیمچہ
+ئنچہ
+ہلیلہ
+ہمیشہ
+ہمہمہ
+پینٹہ
+ٹھیٹھ
+جھنجھ
+کھنکھ
+لینتھ
+ملیچھ
+ہیلتھ
+لبینتہ
+لعظمتہ
+مشخیل
+حسنی
+خنثی
+عقبی
+عیسی
+لبنی
+لصلو
+مثنی
+مجلی
+مجملا
+محشی
+جلگ
+معلی
+مقفی
+یحیی
+تعلقا
+قیمتا
+مجملا
+مطلقا
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt
new file mode 100644 (file)
index 0000000..d1e21f1
--- /dev/null
@@ -0,0 +1,1542 @@
+بھینگا
+ٹھینگا
+پتیلیا
+بلبلیا
+پلپلیا
+تلتلیا
+ٹلٹلیا
+پھینکا
+پگھلتا
+پگھلنا
+ٹگھلتا
+ٹگھلنا
+بنگلیا
+بیٹھتا
+بیٹھنا
+ینٹھتا
+ینٹھنا
+بھیجتا
+بھیجنا
+پہنچتا
+پہنچنا
+بھیلتا
+بھیلنا
+بھیلیا
+پھیلتا
+پھیلنا
+ٹھیلتا
+ٹھیلنا
+ٹیکسٹا
+ٹیکسیا
+پسیجتا
+پسیجنا
+بھبکتا
+بھبکنا
+بھبکیا
+بھپکتا
+بھپکنا
+بھپکیا
+بھٹکتا
+بھنکتا
+بھنکنا
+بھیگتا
+بھیگنا
+پھٹکتا
+پھنکتا
+پھنکنا
+پھنکیا
+تپھکتا
+تپھکیا
+ٹھنکتا
+ٹھنکنا
+ٹھنکیا
+بھٹکنا
+پٹھکنا
+تھپکنا
+بھتیجا
+بھینچا
+پھینچا
+تھیلیا
+ٹھمکتا
+ٹھمکنا
+ٹھمکیا
+ھکیلتا
+پہیلیا
+بھگتنا
+پھسلنا
+پھسلتا
+پھنستا
+پھنسنا
+ٹھنستا
+ٹھنسنا
+چھبیلا
+چٹخنیا
+ھکیلنا
+پھکنیا
+سلجھتا
+سلجھنا
+کھیلتا
+کھیلنا
+کھینچتا
+جھینکا
+جھینگا
+چھینکا
+کھنچنا
+کھٹکتا
+کھٹکنا
+کھٹکیا
+کھنکتا
+کھنکنا
+بھگتتا
+چینٹیا
+جھیلتا
+جھیلنا
+چھیلتا
+چھیلنا
+چینگتا
+چینگنا
+سمجھتا
+سمجھنا
+جھلنگا
+چھلنگا
+جھپٹتا
+جھپٹنا
+جھینپا
+چھنٹتا
+چھنٹنا
+چھیننا
+جھلکتا
+جھلکنا
+جھلکیا
+چھلکتا
+چھلکنا
+چھلکیا
+جھپکتا
+جھپینا
+جھپکیا
+جھٹکتا
+جھٹکنا
+جھکیا
+چھٹکتا
+چھٹکنا
+چھٹکیا
+لپیٹتا
+لپیٹنا
+بھسکنا
+بھسکتا
+ٹھسکتا
+ٹھسکنا
+جھجکنا
+جھجکتا
+چھینتا
+سمیٹنا
+سمیٹتا
+گھنٹیا
+چپیٹتا
+چپیٹنا
+چھینیا
+طبیعیا
+کھسکتا
+کھسکنا
+کھیتیا
+گھٹنیا
+میٹھتا
+میٹھنا
+جھپیٹا
+لبلبیا
+لبیلیا
+ہتھنیا
+چمکیلا
+چھلنیا
+سنکھیا
+سیکھتا
+سیکھنا
+چٹکیلیا
+جلیبیا
+جھلستا
+جھلسنا
+چھینٹا
+سینچتا
+سینچنا
+گھسٹتا
+گھسیٹا
+جھنجلا
+جھلملا
+جھمیلا
+سینکتا
+سینکنا
+فلسفیا
+لہسنیا
+لنگھتا
+لنگھنا
+بہنگیا
+بھینسا
+پتنگیا
+پھلکیا
+تخلیقا
+نتھنیا
+نخلستا
+جھنجھنا
+چھیجتا
+چھنکتا
+چھنکنا
+چبھینا
+سٹکنیا
+کیتلیا
+کنپٹیا
+گھٹلیا
+لچکیلا
+تخمینا
+سینتتا
+سینتنا
+بپتسما
+منگنیا
+مہکیلا
+سنبھلا
+مطلقا
+تحقیقا
+جھنجھیا
+جھمکتا
+جھمکنا
+جھمکیا
+چھتیسا
+سنجھلا
+فضیحتا
+فضیحتا
+متعلقا
+مچھلیا
+ملیشیا
+بھتنیا
+پھبتیا
+کھینچا
+گھیتلا
+گھیتلا
+کنکھیا
+کٹکھنا
+کنگھیا
+چھچھلا
+منجھلا
+سینگنا
+سینگیا
+طلیستا
+کنگنیا
+کھٹہنا
+کھسلتا
+گنٹھیا
+کچھنیا
+کھسلنا
+کیچلیا
+گنجھیا
+گینگٹا
+چھچھنا
+سنسنیا
+گھنگھنا
+کھکھلا
+گنٹھتا
+گنٹھنا
+بھجنگا
+بھنگیا
+ٹھنگنا
+گملیلا
+پھبکتا
+پھبکنا
+پھنگیا
+گینگلا
+پھپکنا
+تحصیلا
+ٹھٹکتا
+ٹھٹکنا
+کھلبلا
+کھنستا
+کھنسنا
+کھیکٹا
+گھٹکتا
+گھٹکنا
+گھینٹا
+گھینپا
+پٹیلتا
+پٹیلنا
+پھینٹا
+پیپلیا
+تسلیا
+تسلیما
+تعصبا
+تعطیلا
+تعلیما
+تعمیلا
+تعیشا
+تکلیفا
+تمثیلا
+تھنچتا
+تھنچنا
+ٹیکسلا
+یمیلیا
+پھسکتا
+پھسکنا
+سبھیتا
+کمپنیا
+معلما
+پھپھیا
+تنصیبا
+نگلستا
+مصطلحا
+گیمبیا
+بکسیلا
+تعظیما
+ٹکسیلا
+کنکٹیا
+تفصیلا
+گھنشیا
+تکلفا
+گھینٹا
+چھیجنا
+لکیمیا
+جھٹپٹا
+بھینٹا
+سنگیتا
+میکنما
+سٹیبلا
+نگینیا
+فلمستا
+فلمسٹا
+بھلسنا
+بھلستا
+سیمینا
+پنکھیا
+پنچھیا
+پھنسیا
+پھسکیا
+قینچیا
+لچیسپیا
+صنعتکا
+تصنیفا
+بلتستا
+تلمیحا
+ملتجیا
+تشبیحا
+بہشتیا
+مصلحتا
+منتظما
+کمیٹیا
+کنٹھیا
+کھچیا
+میکسیا
+بگھلیا
+تصحیفا
+چلمـچیا
+چہیتیا
+سلفچیا
+چمنستا
+لنہیا
+تضحیکا
+بستگیا
+فیملیو
+میگھنا
+پچکلیا
+تنعما
+تنقیحا
+پشیتبا
+ضعیفو
+سمبلیا
+نمیبیا
+منتخبا
+حسینیا
+یجنسیا
+پچیسیا
+یچھنیا
+بتیسیا
+نشینیا
+سہیلیا
+مستجیب
+متعصب
+صنعتیت
+مستغیث
+لحقیقت
+بحیثیت
+لمحصنت
+لسلطنت
+ہلسنت
+بلیسیت
+مسیحیت
+حسینیت
+جھنجھٹ
+لیمینٹ
+یتھلیٹ
+یلپمنٹ
+سٹیٹمنٹ
+لیفٹسٹ
+بینیفٹ
+لیفٹنٹ
+ٹیفیکٹ
+جسٹمنٹ
+مستغیث
+تسبیح
+عقلمند
+نقشبند
+مستفید
+کسلمند
+فلمبند
+قلمبند
+صحتمند
+ٹھیکید
+کشتمند
+تحصیلد
+کمیشنڈ
+نگلینڈ
+پلیٹڈ
+سٹلینڈ
+کھٹمنڈ
+کنسیلڈ
+ہتھکنڈ
+جھینگر
+ٹیلیگر
+نسپکڑ
+پیغمبر
+پیتمبر
+پسینجر
+مینیجر
+لمختصر
+گمبیھر
+ٹھٹھیر
+گھمبیر
+کھینچر
+کیمسٹر
+گلیشیر
+مستعمر
+منگیتر
+سپیکٹر
+مستفسر
+نجینءر
+لمتکبر
+یلفیءر
+سٹیشنر
+گھنگھر
+کھنکھر
+نیپیءر
+نفینٹر
+منٹگر
+ستکھیر
+مستظہر
+لکسمبر
+لگسمبر
+پچھتّر
+لمشتہر
+جھنجھر
+مستنصر
+کمپلسر
+سپینسر
+ٹھیھیر
+مستحصر
+بینظیر
+کینٹیز
+کمیشنر
+لمینڑ
+کمپیءر
+بغلگیر
+بیکٹیر
+لنجھیڑ
+پھلجھڑ
+کھکھپڑ
+بھلکّڑ
+پیکیجز
+کمپنیز
+متمیّز
+منگنیز
+کمیٹیز
+یجنسیز
+فنکشنز
+یلیشنز
+کمیشنر
+جیلنجز
+میٹنگز
+پنیتیس
+کمپلکس
+تینتیس
+ٹیلیکس
+سینتیس
+کلینکس
+لتشخیص
+لمتخلص
+لتخصیص
+مستفیض
+لتصنیف
+منجنیق
+لتحقیق
+ٹیکنیک
+میکینک
+ینگلیک
+تعلّقہ
+میجسٹک
+تھلیٹک
+پینٹنگ
+منیجنگ
+سمگلنگ
+میفکنگ
+کیمپنگ
+ٹیسٹنگ
+بینکنگ
+بلیجنگ
+ٹیکنکل
+نسٹیبل
+یکٹیکل
+لتفصیل
+چھنٹیل
+سٹینسل
+لتحصیل
+سلسبیل
+لتعمیل
+مستعمل
+مستقبل
+مستطیل
+کیمیکل
+بتفصیل
+سمعیل
+مستعجل
+تھلتھل
+کیلسیم
+کیلشیم
+متعلّم
+لتعظیم
+مستقیم
+بکنگھم
+لمنتکم
+مستحکم
+لتعلیم
+مستعصم
+چلبلین
+چمپیءن
+لحسنین
+فلسطین
+سلیکشن
+سلیکشن
+کینٹین
+لیٹیشن
+فسنطین
+کعبتین
+کھنکھن
+لمہیمن
+گبھیلن
+کنسیشن
+مجیشین
+کیپسٹن
+کیسپین
+محققین
+مستحسن
+کنگسٹن
+تھمپٹن
+چھچھلن
+مسلمین
+لثقلین
+متخصصین
+مصنفین
+معلمین
+فٹسمین
+محسنین
+مبلغین
+منصفین
+مصلحین
+بینجمن
+یسیپشن
+بیجتیں
+پٹختیں
+بیچتیں
+تکتیں
+پلٹتیں
+پچکتیں
+جھیلیں
+چھیلیں
+غفلتیں
+بھسکیں
+ٹھسکیں
+بھنتیں
+پھٹتیں
+ٹگھلیں
+پگھلیں
+ٹھنتیں
+نمٹتیں
+پتنگیں
+پینگیں
+پینگیں
+نٹھتیں
+بھیلیں
+پھیلیں
+ٹھیلیں
+پگلتیں
+نکلتیں
+نگلتیں
+نکھتیں
+نگھتیں
+نگھتیں
+بہلتیں
+ٹہلتیں
+بھکتیں
+بھگتیں
+پھکتیں
+ٹھکتیں
+ٹھگتیں
+بھپکیں
+بھٹکیں
+بھٹکیں
+بھیگیں
+پھٹکیں
+پھنکیں
+تھپکیں
+چٹختیں
+بچکتیں
+نکیلیں
+نگیلیں
+بیلتیں
+چبھتیں
+چپکتیں
+چٹکتیں
+کھٹکیں
+کھنکیں
+کھلتیں
+گھلتیں
+سمٹتیں
+سمیٹیں
+نجھتیں
+پچھتیں
+پٹکتیں
+ٹپکتیں
+ٹنگتیں
+ٹیکتیں
+ینکتیں
+ینگتیں
+نچھتیں
+بچھتیں
+کھیتیں
+گھٹتیں
+ھینگیں
+بجھتیں
+بھبکیں
+ٹھنکیں
+بچھئیں
+چپٹتیں
+مٹکتیں
+منگتیں
+محبتیں
+محنتیں
+جھپکیں
+جھٹکیں
+جھیکیں
+جھیکیں
+جیتتیں
+لپٹتیں
+لیپتیں
+لیٹتیں
+کھپتیں
+لپٹیں
+بتکتیں
+چکٹتیں
+لپکتیں
+لٹکتیں
+لنگتیں
+لنگتیں
+ہنستیں
+ھکیلیں
+چلبلیں
+چھپتیں
+چھٹتیں
+چسکتیں
+لہکتیں
+جھپٹیں
+چھنٹیں
+جھلسیں
+لیستیں
+ہچکتیں
+پھسلیں
+پھسلیں
+لجھتیں
+لچھتیں
+پھلتیں
+کیلتیں
+ملتیں
+بچلتیں
+پسیجیں
+بلکتیں
+پہنتیں
+پہنچیں
+بہکتیں
+ٹھستیں
+پھنسیں
+چبکتیں
+چبکتیں
+جھجکیں
+قیمتیں
+کٹکتیں
+گٹکتیں
+گھستیں
+گھسٹیں
+لکھتیں
+مجلسیں
+مچلتیں
+مچکتیں
+مسلیں
+مشکلیں
+میٹتیں
+مہکتیں
+ہمکتیں
+ٹھمکیں
+چمکتیں
+چھلکیں
+سبیلیں
+سنکتیں
+سہلتیں
+کلیلیں
+مشیتیں
+بنفشیں
+چہکتیں
+چھنکیں
+میچتین
+نسبتیں
+گھپتیں
+کھٹتیں
+سینکیں
+سینگیں
+چینگیں
+لچکتیں
+لیکھیں
+فسنطیں
+سیلتیں
+کچلتیں
+کسلتیں
+کلفتیں
+کھسکیں
+کھنچیں
+کھیلیں
+گٹھتیں
+گنٹھیں
+مخملیں
+مکھئں
+جھلکیں
+میجتیں
+بخشتیں
+بھچتیں
+بھیجیں
+سلگتیں
+سہمتیں
+سہمگیں
+سینچیں
+سیکھیں
+فضلتیں
+مسلتیں
+میٹھیں
+پیستیں
+مسکتیں
+لیچتیں
+کملتیں
+گلگلیں
+کھسلیں
+سلجھیں
+سمجھیں
+گتھتیں
+کلبلیں
+نشستیں
+گھٹکیں
+ھمکتیں
+بھلتیں
+پتھتیں
+تپکتیں
+تنکتیں
+تھلتیں
+تھمتیں
+تہمتیں
+ٹھٹکیں
+ٹھٹکیں
+سسکتیں
+سسکتیں
+سینتیں
+گپکتیں
+گپکتیں
+کیکتیں
+لعنتیں
+مشینیں
+ٹھنسیں
+بلنگیں
+پلنگیں
+پھسکیں
+بھنگیں
+پھبکیں
+ٹھلتیں
+گہکتیں
+مثلثیں
+منکتیں
+منکتیں
+تھپتیں
+نخستیں
+صحبتیں
+بگیلیں
+بھجتیں
+تھجتیں
+چپیٹیں
+تیجتیں
+ہلگتیں
+بنجتیں
+بنٹتیں
+بتیتیں
+بیٹھیں
+بینتیں
+پنپتیں
+پیٹتیں
+ٹیپتیں
+نبٹتیں
+نپٹتیں
+چیپتیں
+ینٹھیں
+جھکتیں
+بخششیں
+قسمتیں
+عصمتیں
+صنعتیں
+صنعتیں
+خشمگیں
+خصلتیں
+خصلتیں
+شکستیں
+قمیصیں
+ئجسٹیں
+غیبتیں
+قلیتیں
+خلیجیں
+شفقتیں
+محفلیں
+صلیتیں
+صلیبیں
+حبشنیں
+لجھنیں
+ستینیں
+غلیلیں
+بیلٹیں
+جبینیں
+کیسٹیں
+قفیتیں
+کمیتیں
+منطقیں
+عظمتیں
+جنبشیں
+چپٹتیں
+نجمجنیں
+پلٹنیں
+سکیمیں
+قلیمیں
+مشعلیں
+ہمیتیں
+مشقتیں
+بلبلیں
+سنگتیں
+حشمتیں
+حکمتیں
+سلیٹیں
+بیگمیں
+بھنگنو
+بھنگیو
+بھیلیو
+تھیلیو
+بھینگو
+پھینکو
+ٹھینگو
+پھکینو
+پہیلیو
+بھبکیو
+بھپکیو
+پھنکیو
+ٹھنکیو
+تھپکیو
+بھتیجو
+بھینچو
+پھینچو
+جھینکو
+چھینکو
+جھپیٹو
+جھینپو
+چھینیو
+چھینٹو
+گھٹنیو
+طبلچیو
+ہتھنیو
+طفیلیو
+حقیقتو
+چھلنیو
+لچسپیو
+پھلکیو
+ٹھمکیو
+کیتلیو
+گٹھلیو
+مچھلیو
+ٹیکسیو
+ہتھنیو
+جنگلیو
+فیمچیو
+کیپسیو
+کنپٹیو
+لبلیو
+کھینچو
+کھٹملو
+سٹکنیو
+گھینپو
+تحصیلو
+سنبھلو
+فضیلتو
+فضیحتو
+مسکینو
+گھنگھو
+گھسیٹو
+کنکھیو
+کنگھیو
+کمپنیو
+کمینیو
+کنٹھیو
+کیچلیو
+گنٹھیو
+کنگیو
+منطقیو
+لعنبکو
+بلینکو
+تعطیلو
+تکنیکو
+تنظیمو
+شخصیتو
+متھیلو
+مجسمو
+معلمو
+مملکتو
+ٹیلیفو
+مصلحتو
+سسکچیو
+کیلیفو
+بطلیمو
+بھینسو
+بھمبھو
+بیٹھکو
+مستحقو
+مغنیو
+پتیلیو
+پیپلیو
+ٹمبکٹو
+منگنیو
+بگھیلو
+ٹکھیلو
+کیلیکو
+چمیسفو
+پھنگیو
+چینٹیو
+بمبینو
+بھینٹو
+پھبتیو
+جھلکیو
+جھلکیو
+چھلکیو
+لکھنؤ
+سلطنتو
+کیسینو
+جھنجھو
+سنگینو
+جھمیلو
+پنکھیو
+پنچھیو
+قینچیو
+طبیعتو
+تکلیفو
+پھنسیو
+تصنیفو
+فیسٹیو
+عصبتیو
+مصیبتو
+بہشتیو
+لمسلمو
+بھتنیو
+جھینگو
+کھیتیو
+کیبنٹو
+لچھیو
+فیمیلیا
+کلینکو
+کمیشنو
+کیمسٹو
+میٹنگو
+مطلبیو
+کمیسٹو
+کنکشنو
+نصیحتو
+ٹیکنکو
+تمثیلو
+پیشکشو
+کیفیتو
+کھچیو
+کمیٹیو
+میکسیو
+تفصیلو
+تشبیہو
+تیئسو
+تخمینو
+تخمینو
+نیستیو
+نشیشیو
+چھبیسو
+چھتیسو
+حسینیو
+سنگھیو
+سمبلیو
+سٹیشنو
+ضعیفیا
+سہیلیو
+معیشتو
+نسیسیو
+چیلنجو
+جھمکیو
+لبعلمو
+بستگیو
+جنکشنو
+تبلیغو
+بتیسیو
+سیکشنو
+نگینیو
+لبیلیو
+یجنسیو
+پچیسو
+نطینیو
+تفتیشو
+فنکشکنو
+پیشگیو
+پینسلو
+جمعیتو
+چھبیلو
+جہنمیو
+یچھنیو
+بھشتیو
+فلسفیو
+منتظمو
+پمفلٹو
+تسبیحو
+پیچکشو
+چٹخنیو
+بصیغۂ
+بصیغۂ
+سقیفۂ
+سفینۂ
+منطقۂ
+پگھلتی
+پگھلنی
+ٹگھلتی
+ٹگھلنی
+پسیجتی
+پسیجنی
+بھتیجی
+بھینچی
+پھینچی
+بھگتتی
+بھگتنی
+پہنچتی
+پہنچنی
+پھنستی
+پھنسنی
+ٹھنستی
+ٹھنسنی
+بھینگی
+پھینکی
+ٹھینگی
+بھیلتی
+بھیلنی
+پھیلتی
+پھیلنی
+ٹھیلتی
+ٹھیلنی
+بھپکنی
+بھٹکتی
+بھٹکنی
+پھٹکتی
+پھٹکنی
+ٹھٹکنی
+بھیگتی
+بھیگنی
+بھپکتی
+ٹھمکتی
+ٹھمکنی
+چھپکی
+ستثنی
+بھنکتی
+بھنکنی
+پھنکتی
+پھنکنی
+تھپکتی
+تھپکنی
+ٹھنکتی
+ٹھنکنی
+بیٹھتی
+بیٹھنی
+ینٹھتی
+کھنچتی
+کھنچنی
+تمکینی
+جھلستی
+جھلستی
+جھلسنی
+پھسلتی
+پھسلنی
+جھلکتی
+جھلکنی
+چھلکتی
+چھلکنی
+کھٹکتی
+کھنکتی
+کھنکنی
+نمکینی
+سلجھتی
+سلجھنی
+جھجکتی
+جھجکنی
+چینگتی
+چینگنی
+سمیٹتی
+سمیٹنی
+کھیلتی
+کھیلنی
+لپیٹتی
+لپیٹنی
+بھسکتی
+بھسکنی
+ٹھسکتی
+ٹھسکنی
+چھبیسی
+چھتیسی
+ھکیلتی
+ھکیلنی
+چھنگلی
+چھپیٹی
+چھینتی
+جھپٹتی
+جھپٹنی
+چھنٹتی
+چھنٹنی
+چھیننی
+میٹھتی
+میٹھنی
+جھپکتی
+جھپکنی
+جھٹکتی
+جھٹکنی
+چھٹکتی
+چھٹکنی
+ہتھیلی
+چپیٹتی
+چپیٹنی
+بھبکتی
+بھبکنی
+ٹھٹکتی
+چنبیلی
+جھیلتی
+جھیلنی
+چھیلتی
+چھیلنی
+جھینپی
+جھینکی
+چھٹنکی
+چھینکی
+ہمیشگی
+کھسکتی
+کھسکنی
+گھسٹتی
+گھسٹنی
+گھسیٹی
+چبھینی
+سینکتی
+سینکنی
+سٹیپنی
+سینتتی
+سینتنی
+سینچتی
+سینچنی
+پھینٹی
+لحسنین
+بھیجتی
+بھیجنی
+مقفی
+چھبیلی
+چھیبلی
+مجتبی
+سیکھتی
+سیکھنی
+مسکینی
+تحقیقی
+تخفیفی
+تخلیقی
+نخستگی
+نخستگی
+چھنکتی
+چھنکنی
+سنجھلی
+مینگنی
+نہفتگی
+خجستگی
+لچکیلی
+لمنتہی
+لنگھتی
+لنگھنی
+منجھلی
+معطلی
+کھٹکنی
+کھلبلی
+متمنی
+متنبی
+متبنی
+جھلملی
+جٹکیلی
+چھیجتی
+چھیجنی
+کھپچی
+کہینگی
+کھٹیکی
+کینچلی
+گٹھیلی
+گھنگچی
+معلمی
+مصطفی
+کھسلتی
+کھسلنی
+کھسکنی
+کھٹکٹی
+فضیحتی
+مشعلچی
+مستعفی
+مستقلی
+چمکیلی
+بینجنی
+سنبھلی
+شیفتگی
+گھینٹی
+پھبکتی
+پھبکنی
+پھپکتی
+پھپکنی
+سمجھتی
+سمجھنی
+مستسقی
+بھینٹی
+پبلسٹی
+تخمینی
+تعمیلی
+تفصیلی
+تفضیلی
+سنگینی
+گنٹھنی
+گنٹھتی
+لعظمی
+مسمی
+میجیسٹی
+بلجیمی
+بھلستی
+بھلسنی
+پھلستی
+پھلسنی
+پیگشتی
+شکستگی
+شگفتگی
+گھٹکتی
+گھٹکنی
+لحسنی
+پشیتنی
+پھنگنی
+ٹھنگنی
+یکجہتی
+ستعفی
+تکمیلی
+نگلیسی
+سیلسٹی
+تحلیلی
+ٹکھیلی
+سنکھنی
+مستغنی
+گھینپی
+متحلی
+تعلی
+پیتھنی
+لیکھتی
+پھلیلی
+تمثیلی
+منتقلی
+گلیکسی
+سینکنے
+نسپلٹی
+کھینچی
+لمجستی
+تفہیمی
+تنظیمی
+تبلیغی
+تشکیلی
+فکلٹی
+غمگینی
+پینجنی
+حیثیتی
+کیفیتی
+معیشتی
+تلمیحی
+تشخیصی
+تعظیمی
+بھیکنی
+تھنکنی
+تھنکتی
+بینگنی
+پینلٹی
+سلطنتی
+عقلیتی
+کمینگی
+تہنیتی
+نصیحتی
+لبعلمی
+تفتیشی
+مکینکی
+نگیٹھی
+سلیقگی
+بھیجتے
+بھیجنے
+بھیجئے
+بھتیجے
+بھینچے
+پگھلتے
+پگھلنے
+پگھلنے
+پگھلئے
+ٹگھلتے
+ٹگھلنے
+ٹگھلئے
+پہنچتے
+پہنچنے
+ٹھٹکتے
+ٹھٹکنے
+ھکیلتے
+ھکیلنے
+ھکیلنے
+ھکیلئے
+پسیجتے
+پسیجنے
+پہنچئے
+بھگتئے
+بھپکتے
+بھپکنے
+بھنکتے
+بھنکنے
+بھیگتے
+بھیگنے
+پھنکنے
+تھپکتے
+تھپکنے
+ٹھنکتے
+ٹھنکنے
+بھینگے
+پھینکے
+پسیجئے
+بھبکتے
+بھبکنے
+بھبکئے
+بھپکئے
+بھٹکتے
+بھٹکنے
+بھٹکئے
+بھنکئے
+پھٹکتے
+پھٹکنے
+پھٹکئے
+پھنکئے
+تھپکئے
+ٹھٹکئے
+ٹھینگے
+ٹھینگے
+بھگتنے
+بھگتتے
+بھگتتے
+بھیگئے
+ٹھنکئے
+پھیلتے
+پھیلنے
+بھیلتے
+بھیلنے
+ٹھیلتے
+ٹھیلنے
+ٹھیلئے
+ٹھمکنے
+ٹھمکئے
+ٹھمکتے
+پھسلتے
+پھسلنے
+پھسلئے
+بیٹھنے
+بیٹھتے
+بیٹھئے
+ینٹھئے
+بھیلئے
+پھنستے
+پھنسنے
+پھنسئے
+ٹھنسئے
+چینگتے
+چینگنے
+چینگئے
+جھلستے
+جھلسنے
+جھلسئے
+چھیلئے
+جھلکتے
+جھلکنے
+جھلکئے
+چھلکتے
+چھلکنے
+چھلکئے
+سلجھتے
+سلجھنے
+کھٹکتے
+کھٹکنے
+کھٹکئے
+کھنکتے
+کھنکنے
+کھنکئے
+پھیلئے
+بھسکتے
+بھسکنے
+بھسکئے
+ٹھسکتے
+ٹھسکنے
+ٹھسکئے
+جھپٹتے
+جھپٹنے
+جھپٹئے
+جھینپے
+جھپیٹے
+چھنٹتے
+چھنٹنے
+چھینتے
+چھیننے
+چھینئے
+چھینٹے
+چھنٹئے
+جھپکتے
+جھپکنے
+جھپکئے
+جھٹکتے
+جھٹکنے
+جھٹکئے
+چھٹکتے
+چھٹکنے
+چھٹکئے
+چھنکتے
+چھنکنے
+چھنکئے
+سلجھئے
+سمیٹتے
+سمیٹنے
+کھنچتے
+کھنچنے
+کھنچئے
+جھجکتے
+جھجکنے
+جھجکئے
+سمیٹئے
+سمجھتے
+کھسکتے
+کھسکنے
+کھسکئے
+لپیٹتے
+لپیٹنے
+لپیٹئے
+میٹھتے
+میٹھنے
+میٹھئے
+جھیلئے
+جھینکے
+جھینگے
+چھینکے
+جھیلتے
+جھیلنے
+چھیلتے
+چھیلنے
+چپیٹتے
+چپیٹنے
+سمجھنے
+گھسٹتے
+گھسٹنے
+گھسٹئے
+گھسیٹے
+چپیٹئے
+سیکھتے
+سیکھنے
+سیکھئے
+ینٹھتے
+ینٹھنے
+چٹکیلے
+سمجھئے
+سینکتے
+سینکنے
+سینکئے
+سینتئے
+سینچتے
+سینچنے
+بھلستے
+بھلسنے
+بھلسئے
+پھلستے
+پھلسنے
+پھلسئے
+سٹینلے
+مصطفے
+بھجنگے
+پھسکتے
+پھسکنے
+پھسکئے
+تھنچتے
+تھنچنے
+تھنچئے
+تھنچئے
+جھمیلے
+کھیلتے
+کھیلنے
+چمکیلے
+کھیلئے
+تخمینے
+بھنچتے
+چھٹپٹے
+گنجینے
+لچکیلے
+چھبیلے
+تخمینہ
+متعلقہ
+مفصلہ
+متعینہ
+گنجینہ
+معلمہ
+مقننہ
+معظمہ
+لعظمتہ
+لبینتہ
+بسلسلہ
+تعلقہ
+منسلکہ
+متخیلہ
+پشمینہ
+تشمینہ
+تہمینہ
+لسبیلہ
+مختلفہ
+طلیلیہ
+طلیلیہ
+حسینیہ
+لمحکمہ
+تعلیقہ
+شبیلیہ
+مسیلمہ
+منتخبہ
+منتظمہ
+حنفیہ
+پینسٹھ
+مجتبے
+طبیعتا
+طخمینا
+مصلحتا
+مجتمعا
+تعمیلا
+مستقلا
+تعظیما
+تفصیلا
+تکلفا
+تمثیلا
+تحقیقا
+نتیجتا
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt
new file mode 100644 (file)
index 0000000..5adff9f
--- /dev/null
@@ -0,0 +1,354 @@
+پھینکتا
+پھینکنا
+بھینچتا
+بھینچنا
+بھینچنا
+پھینچتا
+پھینچنا
+پھینٹتا
+پھینٹتا
+پھنیٹنا
+بھنبھنا
+پھٹپھٹا
+نمکینیا
+جھپیٹتا
+جھپیٹنا
+جھینپتا
+جھینپنا
+چھنگلیا
+چنبیلیا
+چھٹنکیا
+چھینکنا
+چھپکلیا
+کھینچتا
+کھینچنا
+جھینکتا
+جھینکنا
+چھینکتا
+گھسیٹتا
+گھسیٹنا
+سنبھلتا
+سنبھلنا
+جھپیٹیا
+کینچلیا
+چھمچھما
+کھلبلیا
+چھلچھلا
+جھمجھما
+کھٹکھٹا
+گھنگھنا
+مستثنیا
+جھمیلیا
+مینگنیا
+بھینٹتا
+بھینٹنا
+پھنپھنا
+چھچھلتا
+چھچھلیا
+چھچھلنا
+کھکھنا
+گھینپتا
+گھینپنا
+کھسکھسا
+ٹکھیلیا
+تعظیما
+بھلبھلا
+پھلپھلا
+تھلتھلا
+جھنجھنا
+چھنچھنا
+تعلیمیا
+کھپکھپا
+بھتیجیا
+ہتھیلیا
+فیکلٹیا
+تھکتھکا
+کمینگیا
+سنگینیا
+چھتیسیا
+نگیٹھیا
+لمحصنت
+لمحصنت
+تشبیہیت
+نیشنلسٹ
+سپلیمنٹ
+سپیشلسٹ
+سٹیٹمنٹ
+یسپشنسٹ
+مینجمنٹ
+کنسلٹنٹ
+یکسچینج
+سلیکٹیڑ
+بھنبھیر
+کمنٹیٹر
+مسکیٹئر
+یکٹیشنر
+جیسلمیر
+سپلیمنٹر
+سیلیبیز
+کیمیکلز
+نٹلیجنس
+میکینکس
+ٹیفکیٹس
+نستعلیق
+سینتھٹک
+مینیجنگ
+میکینکل
+ٹیکنیکل
+پلیٹینم
+تھیلیئم
+تھینیئم
+لمستقیم
+جنٹلمین
+کمپیٹیشن
+متعلقین
+متکلمین
+مستحقیین
+منتظمین
+لمسلمین
+لمطففین
+بیٹسمین
+ٹیفیکیشن
+سبکتگین
+لیٹیشین
+متخصصین
+لنبیین
+منجمین
+ٹیکسیشن
+پنیسلین
+بھسکتیں
+ٹھسکتیں
+ٹھمکتیں
+ٹھٹکتیں
+بھیلتیں
+پھیتلتیں
+ٹھیلتیں
+چینگتیں
+چپٹیتیں
+چھلتیں
+چھنٹتیں
+بیھٹتں
+ینٹھتیں
+بھینچیں
+پھینچیں
+پگھلتیں
+ٹگھلتیں
+بھبکتیں
+بھپکتیں
+بھٹکتیں
+بھنگتیں
+بھنگنیں
+بھیگتیں
+پھٹکتیں
+تھپکتیں
+ٹھنکتین
+جھلکتین
+چھلکتین
+جھینکین
+جھینکین
+جھلستین
+جھپکتین
+جھٹکتین
+چھٹکتین
+جھیلتین
+جھینپین
+جھپٹتین
+چھینتین
+گھسٹتین
+گھسیٹین
+حقیقتین
+لپٹیتین
+پھسلتین
+تحصیلین
+بھیجتین
+پھنستین
+پھنستین
+فضیلتین
+فضیلتین
+کھینچین
+مشیتین
+ھکیلتین
+لنگھتین
+بھگتتین
+پسیجتین
+پھینکین
+سلجھتین
+کھٹکتین
+کھسکتین
+کھیلتین
+چھچھیلین
+پہنچتیں
+چھیجتیں
+سمجھتیں
+سمیٹتیں
+سیکھتیں
+سیکھتیں
+کھینچتیں
+کھینچتیں
+فضیحتیں
+میٹھتیں
+گٹھیلیں
+گنٹھتیں
+تعلیلیں
+تمثیلیں
+سنبھلیں
+سینتتین
+کھسلتیں
+بھینٹیں
+پھبکتیں
+پھپکتیں
+پھسکتیں
+تھنچتیں
+مصلحتیں
+مملکتین
+تنظیمیں
+بھنکتیں
+بھنکتیں
+شخصیتیں
+شخصیتیں
+کھنکتیں
+گھٹکتیں
+جھپیٹیں
+سلطنتیں
+بیٹھکیں
+سنگینیں
+بھینسیں
+تکلیفیں
+طبیعتیں
+ئسکلیں
+مصیبتیں
+کیفیتیں
+کلینکیں
+تفصیلیں
+میٹنگیں
+حیثیتیں
+معیشتیں
+تشبیہیں
+تشبیہیں
+جمعیتیں
+پیشکشیں
+تعطیلیں
+تنبیہیں
+تحقیقیں
+پینسلیں
+تسبیحیں
+نمکینکو
+چھٹنکیو
+چھنگلیو
+چھپکلیو
+چھینکیو
+بھنبھو
+پھٹپٹھو
+مینگنیو
+کھلبلیو
+بھتیجیو
+کیمبلپو
+کیمبلپو
+لجسلیٹیو
+میکسیکو
+نسٹیٹیو
+کینچلیو
+نسٹیبلو
+ہتھیلیو
+منجنیقیو
+گیلیلیو
+ٹیفکیٹو
+کینٹیٹو
+کمینگیو
+لیفٹسٹو
+چنبیلیو
+پینتیسو
+تینتیسو
+سینتیسو
+چھبیلیو
+کمینی
+چھتیسیو
+پینسٹھو
+پیشینگو
+نگیٹھیو
+فٹسمینو
+گنجینہ
+بھینچتی
+بھینچنی
+پھینچتی
+پھینچنی
+پھینٹتی
+پھینٹنی
+جھینپتی
+جھینپنی
+جھینکتی
+جھینکنی
+چھینکتی
+چھینکنی
+پھینکتی
+پھینکنی
+جھپیٹتی
+سنبھلتی
+متبنی
+پھٹپھٹی
+سنبھلنی
+کھٹیکنی
+کھینچتی
+کھینچنی
+گھسیٹتی
+گھسیٹنی
+گتھنیلی
+گھینپتی
+گھینپنی
+بھینٹتی
+بھینٹنی
+مستثنی
+مستغنی
+ہیلسنکی
+فلسطینی
+ٹیکنیکی
+لمنتہی
+پھسپھسی
+بھینچتے
+بھینچنے
+بھینچئے
+پھینچتے
+پھینچنے
+پھینچئے
+پسیجتے
+پھینٹتے
+پھینٹنے
+پھینٹئے
+پھینکئے
+جھینپتے
+جھینپنے
+جھینپئے
+جھینکتے
+جھینکنے
+جھینکئے
+چھینکتے
+چھینکنے
+چھینکئے
+کھینچتے
+کھینچنے
+کھینچئے
+گھسیٹتے
+گھسیٹنے
+گھسیٹئے
+جھپیٹتے
+جھپیٹنے
+جھپیٹئے
+سنبھلتے
+سنبھلنے
+سنبھلئے
+پھٹپھٹے
+چھچھلئے
+گھینپئے
+گھینپتے
+گھینپنے
+چھچھلتے
+چھچھلنے
+بھینٹتے
+بھینٹنے
+بھینٹئے
+پھینکتے
+پھینکنے
+لبینتہ
+لممتحنہ
+متخیلہ
+تفضیلیہ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt
new file mode 100644 (file)
index 0000000..d067491
--- /dev/null
@@ -0,0 +1,26 @@
+چھنچھنیا
+جھنجھٹیا
+جھنجھنیا
+گھنگھنیا
+سپلیمینٹر
+شیکسپئر
+لمطففین
+جھینکتیں
+چھینکتین
+بھینچتین
+پھینچتین
+جھینپتین
+کھینچتین
+گھسیٹتین
+پھینکتین
+گھینپتین
+چھچھلتین
+سنبھلتین
+پھینٹتین
+بھینٹتین
+جھپیٹتین
+فلسطینو
+بیٹسمینو
+نسپیلیٹی
+نیشنیلٹی
+قسطنطیہ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE
new file mode 100644 (file)
index 0000000..85f2b63
--- /dev/null
@@ -0,0 +1,3 @@
+CC BY-NC-SA 3.0
+http://www.crulp.org/software/license/CreativeCommons.html
+https://creativecommons.org/licenses/by-nc-sa/3.0/
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/MANIFEST
new file mode 100644 (file)
index 0000000..c945d0e
--- /dev/null
@@ -0,0 +1,7 @@
+2grams.txt
+3grams.txt
+4grams.txt
+5grams.txt
+6grams.txt
+7grams.txt
+8grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README
new file mode 100644 (file)
index 0000000..33202c4
--- /dev/null
@@ -0,0 +1,16 @@
+ORIGINAL README:
+
+Valid Ligatures of Urdu.
+
+In 1980 Mr. Ahmad Mirza Jamil has invented a ligature based Nastaleeq writing
+system. He has written about 18,000 valid ligatures of Urdu and developed a
+Noori Nastaliq font. Center for Research in Urdu Language Processing (CRULP) is
+releasing a soft copy of these ligatures in Unicode format. CRULP has
+extensively used these ligatures for testing the fonts developed at the center
+and realised that it will be a valuable resource for other font developers.
+These ligatures are grouped in 2 to 8 characters and are sorted in the end
+character order.
+
+These ligatures have been copied from a "Noori Nastaliq computerised Urdu
+calligraphy (list of ligatures)" calligraphically designed and compiled by
+Ahmad Mirza Jamil, Elite Publishers Limited, Karachi.
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES
new file mode 100644 (file)
index 0000000..5e67ed4
--- /dev/null
@@ -0,0 +1,4 @@
+Adapted from:
+
+http://www.crulp.org/software/ling_resources/UrduLigatures.htm
+http://www.crulp.org/Downloads/ling_resources/ligatures/Valid_Urdu_Ligatures_v1.1.zip
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/MANIFEST
new file mode 100644 (file)
index 0000000..0ac75c3
--- /dev/null
@@ -0,0 +1 @@
+diacritics
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/MANIFEST
new file mode 100644 (file)
index 0000000..c71d035
--- /dev/null
@@ -0,0 +1,7 @@
+lam-alef.txt
+language-arabic.txt
+language-persian.txt
+language-urdu.txt
+ligature-components.txt
+ligature-diacritics.txt
+mark-skipping.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt
new file mode 100644 (file)
index 0000000..26f6f7b
--- /dev/null
@@ -0,0 +1,28 @@
+لًا
+ـلًا
+لاً
+ـلاً
+لّا
+ـلّا
+لاّ
+ـلاّ
+لًّا
+ـلًّا
+لاًّ
+ـلاًّ
+لَّا
+ـلَّا
+لاَّ
+ـلاَّ
+لَا
+ـلَا
+لاَ
+ـلاَ
+لُا
+ـلُا
+لاُ
+ـلاُ
+لِا
+ـلِا
+لاِ
+ـلاِ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt
new file mode 100644 (file)
index 0000000..24eb0c9
--- /dev/null
@@ -0,0 +1,695 @@
+ـيًـ
+ـاً
+يُـ
+ـرً
+ـقًـ
+ـدً
+رً
+رٍ
+ـبًـ
+ـرّ
+مًـ
+ـضًـ
+مُـ
+ـدّ
+ـوّ
+ـمًـ
+ـتًـ
+ـيّـ
+يًـ
+تُـ
+ءً
+دً
+نًـ
+ـمُـ
+ـمّـ
+ةً
+حًـ
+ـوً
+ـحًـ
+ـرِّ
+ـةً
+نٍ
+ـمّ
+فًـ
+ـكّـ
+ـعًـ
+ـصًـ
+اً
+سِـ
+ـيُـ
+قِـ
+ـفًـ
+ـذّ
+ـجّـ
+بًـ
+غًـ
+ـلّـ
+ـصّـ
+ـلّ
+ـدَّ
+ـسِّـ
+ـزً
+وّ
+ـثًـ
+بُـ
+ـغّـ
+خِـ
+ـدِّ
+فٍ
+ـسّـ
+ـنًـ
+عًـ
+ـفّـ
+ـيَّـ
+ـلٍ
+ـطًـ
+ـبّـ
+ـطّـ
+ـجِّـ
+عُـ
+ـيّ
+ـنّـ
+كًـ
+ـلِـ
+ـئًـ
+جًـ
+ـذَّ
+قًـ
+ـنُـ
+ـخّـ
+ـتُـ
+رَ
+كّـ
+طًـ
+نُـ
+رّ
+لٍ
+ـضّـ
+بّـ
+عِـ
+زً
+مِـ
+ـكَّـ
+ـدَ
+ـدٍ
+أُ
+ـمَّـ
+ـأً
+ـرَ
+ـزّ
+حِـ
+مَـ
+ـيِّـ
+ـوَّ
+ـمَـ
+صًـ
+ضًـ
+ـرِ
+
+وُ
+يّ
+ـمِّـ
+ـيًّـ
+ـرَّ
+ـوِّ
+ـكًـ
+رِ
+ـلَّـ
+ـجِـ
+يَـ
+ـجَّـ
+ـاّ
+ـذً
+ـقّـ
+ـغِّـ
+ـخًـ
+ـسَّـ
+ـلٍّ
+ـهًـ
+قّـ
+حَـ
+ـجًـ
+ـفَّـ
+شُـ
+جّـ
+ـهّـ
+سَـ
+ـعّـ
+ـدِ
+دٍ
+رِّ
+ـذٍ
+ـبُّـ
+ـتَـ
+دُ
+ـتُ
+لّ
+سِّـ
+لّـ
+دّ
+دِ
+يٍّ
+جَـ
+نّ
+هَّـ
+ـكِّـ
+ـقِّـ
+ـعُـ
+بَـ
+تَـ
+ـنِّـ
+ـلُّـ
+ـسُـ
+مّـ
+قَّـ
+لَـ
+يّـ
+فُـ
+قٍ
+ـتٍ
+سّـ
+وَ
+ـسِـ
+ـتَ
+شِـ
+فَـ
+صُـ
+ـضَّـ
+تَ
+ـقَّـ
+ـطَّـ
+ـفِـ
+سًـ
+فّـ
+وَّ
+كُـ
+ـصَّـ
+عَـ
+لِـ
+ـقِ
+ـقٍ
+ـتّـ
+ـمْـ
+نّـ
+ـقَ
+وٍ
+ـطٍ
+ـةٍ
+هّـ
+هُـ
+ـوٍ
+ـبِـ
+رُ
+حّـ
+تّـ
+وِّ
+زُ
+ـلًـ
+ـفُّـ
+تٍ
+سُـ
+ضٍ
+بِـ
+خَـ
+ىً
+ضّـ
+ـبِّـ
+خّـ
+لًـ
+كَّـ
+ـظًـ
+ظًـ
+ةٍ
+ـغًـ
+ـكِـ
+طُـ
+ـنٍ
+ـقُـ
+ـبُـ
+دَ
+ثًـ
+فِـ
+يٍ
+نْـ
+ضِـ
+جُـ
+هٍ
+ـشِـ
+ـنَّـ
+يًّـ
+فِّـ
+ـفّ
+ـظّـ
+ـسَـ
+ـظِّـ
+ـبَّـ
+رْ
+تَّـ
+بٍ
+ـبَـ
+ـزُّ
+ـدُ
+ـكُـ
+طّـ
+صِـ
+تِـ
+ـغَّـ
+ـعَـ
+ـهِّـ
+ـرُ
+ـثّـ
+سَّـ
+ذً
+ـمَ
+ـلِّـ
+ـزِّ
+يٌّ
+قِّـ
+ـشِّـ
+ـسًـ
+شٍ
+سٍ
+تًـ
+ـلَـ
+ـحُـ
+ـصّ
+ـحِـ
+ـجُـ
+يَّـ
+لَّـ
+قَـ
+ـبْـ
+اِ
+وُّ
+ـشّـ
+خًـ
+ـسَ
+حُـ
+يْ
+نِـ
+كُّـ
+ـطُّـ
+سْـ
+زِ
+يَّ
+هِـ
+نَـ
+مَّـ
+مٍ
+كِـ
+ـيُّـ
+ـمِـ
+ـدٍّ
+ـحّـ
+ـتَّـ
+رِّ
+ـطّ
+ـرُّ
+عٍ
+زّ
+خَّـ
+قُـ
+ـشَـ
+ـحَـ
+ـجِّـ
+مَ
+ـيَّ
+ـقّ
+ـغِ
+ـطِ
+ـشُـ
+صّـ
+شّـ
+جِّـ
+جِـ
+وِ
+ـهِ
+ـهِـ
+ــّـ
+ـرٍ
+ـاًّ
+طَّـ
+ثُـ
+تُ
+بَّـ
+هَـ
+لْـ
+صَـ
+دْ
+يِـ
+كِّـ
+ـعِـ
+ـذَ
+ـةَ
+دَّ
+يِّ
+هًـ
+كْـ
+ـوَ
+ـقَّ
+ـؤّ
+زَ
+حٍ
+يْـ
+كَـ
+فِ
+ـهٍ
+ـنّ
+ـكِ
+ـضَـ
+ـصِـ
+صِّـ
+شِّـ
+رَّ
+يِّـ
+ـاَ
+عُ
+شَـ
+ئًـ
+مٌـ
+لُـ
+ـوِ
+ـقِـ
+ـقَـ
+ـخَـ
+ـةِ
+دِّ
+جْـ
+ةِ
+نْ
+لِّـ
+ـيَـ
+ـنَـ
+ـلٌ
+ـفِ
+ـزَّ
+ـزِ
+ـاِ
+عّـ
+حَّـ
+ثَـ
+أَ
+ـمٍ
+ـكُّـ
+عْـ
+صَّـ
+يٌـ
+مْـ
+مّ
+فُّـ
+ـنْـ
+ـمَّ
+ـكَـ
+ـصِّـ
+ـصَـ
+ـاَّ
+حْـ
+ثّـ
+اُ
+نِ
+كَ
+ـمِ
+ـلٌّ
+ـلِ
+ـلَ
+ـفَـ
+ـفٍ
+ـظَّـ
+ـزَ
+ـةُ
+ـأُ
+عَّـ
+شَّـ
+ـنِـ
+ـلُ
+ـطِّـ
+ـطَـ
+ـضِّـ
+ـصُـ
+ـسُّـ
+ـحُ
+ـثّ
+ـأَ
+ضَـ
+تْ
+اَ
+مًّـ
+ـيِـ
+ـهُـ
+ـمًّـ
+ـكْـ
+ـعْـ
+ـرِّ
+ـتِـ
+ـتً
+ـاُ
+غَـ
+عِ
+طً
+شًـ
+زٍ
+تِ
+بْـ
+بِ
+لِ
+قْـ
+قٌـ
+فّ
+ـىً
+ـلُّ
+ـلُـ
+ـفُـ
+ــُـ
+ـعَّـ
+ـشَّـ
+ـشًـ
+ـذِ
+ـدٌ
+طِـ
+طَـ
+ضَّـ
+صْـ
+رُّ
+ذُ
+جَّـ
+بِّـ
+ئِـ
+ءُ
+هُّـ
+مِّـ
+مُ
+كِ
+قُ
+فْـ
+ـيٍّ
+ـىَّ
+ـوِّ
+ـكَ
+ـعَ
+ـطَ
+ـسْـ
+ـرٌ
+ـذِّ
+ـدُّ
+ـخَّـ
+ـحْ
+ـجَـ
+ـثَّـ
+ـثُـ
+ـتّ
+ـبِ
+ـاْ
+ـإِ
+عَ
+طِّـ
+صُّـ
+زْ
+خِّـ
+خَ
+ثِـ
+تْـ
+تّ
+بٌـ
+ءَ
+ءٍ
+وْ
+نُ
+مِ
+كُ
+فْ
+ـوُّ
+ـلٍـ
+ـقٍّ
+ـفِّـ
+ـفًّـ
+ـعُ
+ـعٍ
+ـطْـ
+ـطِـ
+ـطُـ
+ـصٍ
+ـرْ
+ـرٍّ
+ـذُّ
+ـدْ
+ـدِّ
+ـخِـ
+ـجَّـ
+ـثْ
+ـتَّ
+ـةٌ
+سِ
+خْـ
+ثَ
+تُّـ
+تَّ
+إِ
+أّ
+أً
+ءِ
+ءٌ
+يُّـ
+يُّ
+نٌـ
+لْ
+لُ
+لَ
+قِ
+ـيًّ
+ـيَ
+ـهَّـ
+ـهِّـ
+ـنُّـ
+ـمٍّ
+ـلْـ
+ـلْ
+ـلٍّ
+ـكِّـ
+ـعّ
+ـطَّ
+ـضُـ
+ـضٍ
+ـضٌـ
+ـصْـ
+
+ـصُّـ
+ـصًّـ
+ـسًّـ
+ـدَّ
+ـثِّـ
+ـثِـ
+ـتِّـ
+ـبّ
+ـبَ
+ـأٌ
+غُـ
+ظَـ
+طْـ
+ضْـ
+ضِ
+صّ
+صِ
+شْـ
+سٌـ
+ذْ
+ذَ
+خِ
+خُـ
+خٌـ
+حِّـ
+حٌـ
+بِّ
+بُّ
+بَ
+يٍّ
+ىّ
+نِّـ
+نَّـ
+نٍـ
+نٌ
+مْ
+مٌ
+لُّـ
+قُّـ
+قّ
+فَّـ
+فُ
+فٍـ
+ـيْـ
+ـيَّـ
+ـيً
+ـىّ
+ـوُ
+ـهّ
+ـهَـ
+ـنُ
+ـنَ
+ـمَّـ
+ـلَّ
+ـقٌ
+ـفِّ
+ـفٍّ
+ـفًّ
+ــِّـ
+ــِ
+ــَـ
+ـغِـ
+ـغُـ
+ـغَـ
+ـعٌـ
+ـظّ
+ـظِـ
+ـظَ
+ـطٍّ
+ـطِّـ
+ـطُ
+ـضً
+ـصِ
+ـصَ
+ـصٌ
+ـشّ
+ـسّ
+ـسَّـ
+ـزْ
+ـزُ
+ـرًّ
+ـدًّ
+ـخُـ
+ـخُ
+ـحَّـ
+ـجْـ
+ـثِ
+ـثُ
+ـتْـ
+ـتْ
+ـتِ
+ـبْ
+ـبِّ
+ـبُّـ
+ـبُ
+ـبَّـ
+ـأٰ
+ـأِ
+ـأٍ
+غْـ
+غِّـ
+عْ
+ظِـ
+ضُ
+شّ
+سٍـ
+زِّ
+دُّ
+حْ
+حِ
+جُ
+ثُ
+تٌـ
+تٌ
+ةُ
+ةَ
+ةٌ
+أْ
+أِ
+أٌ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt
new file mode 100644 (file)
index 0000000..00d9840
--- /dev/null
@@ -0,0 +1,48 @@
+ـاً
+اً
+ـهٔ
+هٔ
+وِ
+پُـ
+ـلِ
+سِـ
+اِ
+اُ
+ـهُ
+ـرّ
+گِـ
+کِـ
+کُـ
+ژِ
+ـیِ
+ـنِـ
+ـمُ
+ـصّـ
+ـسّـ
+رِ
+دّ
+دِ
+یِ
+هّ
+لِـ
+لِ
+ـیٰ
+ـیّ
+ـیَـ
+ـنِ
+ـمّـ
+ـعّـ
+ـشِ
+ـسِ
+ـزّ
+ـرِ
+ـذّ
+ـخّـ
+ـحِ
+ـثْ
+ـبّـ
+ـبّ
+ـأُ
+تّـ
+تِ
+بُـ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt
new file mode 100644 (file)
index 0000000..fddb6e5
--- /dev/null
@@ -0,0 +1,188 @@
+ـیّـ
+ـمّـ
+ـلّـ
+ـرّ
+ـاً
+ـلِـ
+ـرِ
+بُـ
+ـوّ
+ؤ
+اً
+اِ
+ـنّـ
+ثّـ
+ـجّـ
+پُـ
+ـصّـ
+ـہٰـ
+ـعّـ
+ـخّـ
+یَـ
+کُـ
+جّـ
+ـنٰـ
+ـظّـ
+دّ
+ـھّـ
+اُ
+کِـ
+لِـ
+بِـ
+نِـ
+لُـ
+ـلٰـ
+ـدّ
+مّـ
+گُـ
+ـوِ
+ـسّـ
+سُـ
+رِ
+ـھُـ
+مِـ
+يُـ
+ـطّـ
+شِـ
+سَـ
+ـگَـ
+زُ
+ـگُـ
+ئِـ
+قّـ
+قِـ
+ـفّـ
+خّـ
+نّـ
+ـبّـ
+ہِ
+تّـ
+بَـ
+فِـ
+بّـ
+ـیٰ
+ـٹّـ
+وَ
+چّـ
+پِـ
+لّـ
+دُ
+ـلِ
+ـبٰـ
+ـچّـ
+سِـ
+کّـ
+ٹِـ
+وِ
+ـی٘ـ
+ـۂ
+ـوٰ
+وّ
+ـۓ
+ـکّـ
+نِ
+مُـ
+ـتّـ
+دِ
+یِـ
+ہِـ
+گَـ
+پَـ
+ٹّ
+یٔ
+یّـ
+ہُـ
+چُـ
+مِ
+ـوُ
+ـاَ
+اَ
+گِـ
+فِ
+ـےٍ
+ـڈّ
+ـؤ
+ـقّـ
+ـجِ
+اٰ
+ـڈِ
+ـپّـ
+ـٹِـ
+ـمِـ
+ـلٔـ
+ـخِ
+رُ
+تِ
+بِ
+ۓ
+کَـ
+ٹُـ
+ـی٘
+ـںَ
+ـو٘
+ـنُـ
+ـعّ
+ـشّـ
+ـرُ
+ـحّـ
+ـجِـ
+ـبَـ
+طّـ
+شِ
+شُـ
+رّ
+جِـ
+ئٰـ
+ہٰـ
+ۂ
+ڈِ
+ڈُ
+چِـ
+نِّـ
+نُـ
+نَـ
+مٰـ
+مّ
+مَـ
+لِّـ
+لِ
+فّـ
+ـیّ
+ـیِـ
+ـہ٘ـ
+ـہّ
+ـہِـ
+ـں٘
+ـگِـ
+ـکٰـ
+ـکِـ
+ـٹَـ
+ـيّـ
+ـوَ
+ـنِـ
+ـفِـ
+ـصِ
+ـسِـ
+ـزّ
+ـرً
+ـدَ
+ـحِـ
+ـحِ
+ـتّٰـ
+ـتِ
+ـبُـ
+ـأ
+عُـ
+ظِ
+صّـ
+صُـ
+زِ
+رَ
+دِّ
+خُـ
+حِ
+حَـ
+جّ
+جُـ
+جَـ
+تَـ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt
new file mode 100644 (file)
index 0000000..0d4d47f
--- /dev/null
@@ -0,0 +1,18 @@
+لّله
+لَّله
+لَّله
+للّه
+للَّه
+للَّه
+للهّ
+للهَّ
+للهَّ
+لّلَه
+لَلّه
+لّلهَ
+لَلهّ
+للّهَ
+للَهّ
+لّلّهَ
+لّلَّه
+لَّلّه
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt
new file mode 100644 (file)
index 0000000..80ba2f7
--- /dev/null
@@ -0,0 +1 @@
+لَا لا لِله للَه لله
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt b/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt
new file mode 100644 (file)
index 0000000..038c921
--- /dev/null
@@ -0,0 +1,10 @@
+تختة
+تخنة
+تخئة
+تخثة
+تخٹة
+تختّة
+تخنّة
+تخئّة
+تخثّة
+تخٹّة
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mandaic/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-mandaic/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mandaic/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-mandaic/misc/MANIFEST
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/MANIFEST
new file mode 100644 (file)
index 0000000..3c76c94
--- /dev/null
@@ -0,0 +1,4 @@
+misc.txt
+non-joining.txt
+poem.txt
+variation-selectors.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt
new file mode 100644 (file)
index 0000000..57317de
--- /dev/null
@@ -0,0 +1,6 @@
+ᠬᠦᠮᠦᠨ ᠮᠤᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠌
+ᠪᠢᠴᠢᠭ᠌ ᠬᠦᠮᠦᠨ ᠮᠤᠩᠭᠣᠯ
+ᠮᠤᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠌ ᠬᠦᠮᠦᠨ
+ᠡ᠆ᠡ
+ᠡ᠇ᠡ
+ᠡ᠊ᠡ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt
new file mode 100644 (file)
index 0000000..93e9dd6
--- /dev/null
@@ -0,0 +1,8 @@
+ᠡᢀᠡ
+ᠡᢁᠡ
+ᠡᢂᠡ
+ᠡᢃᠡ
+ᠡᢄᠡ
+ᠡᢅᠡ
+ᠡᢆᠡ
+ᠡᢇᠡ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt
new file mode 100644 (file)
index 0000000..14ce2d4
--- /dev/null
@@ -0,0 +1,4 @@
+ᠥᠰᠬᠦ ᠡᠴᠡ ᠰᠤᠷᠤᠭᠰᠠᠨ ᠦᠨᠳᠦᠰᠦᠨ ᠬᠡᠯᠡ
+ᠮᠠᠷᠲᠠᠵᠤ ᠪᠣᠯᠣᠰᠢ ᠦᠭᠡᠢ ᠰᠣᠶᠣᠯ
+ᠦᠬᠦᠲᠡᠯ᠎ᠡ ᠣᠷᠣᠰᠢᠬᠤ ᠲᠦᠷᠦᠯᠬᠢ ᠨᠤᠲᠤᠭ
+ᠰᠠᠯᠵᠤ ᠪᠣᠯᠣᠰᠢ ᠦᠭᠡᠢ ᠣᠷᠣᠨ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/variation-selectors.txt b/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/variation-selectors.txt
new file mode 100644 (file)
index 0000000..0ffb498
--- /dev/null
@@ -0,0 +1,8 @@
+ᠺᠣᠮᠫᠢᠦ᠋ᠲ᠋ᠧᠷ
+ᠭ ᠭ᠋ ᠭ᠌ ᠭ᠍‍     isol(,FVS1,FVS2,FVS3)
+ᠭ‍ ᠭ᠋‍ ᠭ᠌‍ ᠭ᠍‍     init(,FVS1,FVS2,FVS3)
+‍ᠭ‍ ‍ᠭ᠋‍ ‍ᠭ᠌‍ ‍ᠭ᠍‍      medi(,FVS1,FVS2,FVS3)
+‍ᠭ ‍ᠭ᠋ ‍ᠭ᠌      fina(,FVS1,FVS2)
+ᠠ‌ᠭᠠᠷ        ZWNJ
+ᠰᠤᠷ‍ ‍ᠭᠠ‍ ‍ᠭᠤᠯᠢ  ZWJ
+ᠪᠠᠢᠭ᠎ᠠ ᠶᠢᠨ   MVS,NNBSP
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-nko/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-nko/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt b/test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt
new file mode 100644 (file)
index 0000000..a86af91
--- /dev/null
@@ -0,0 +1,5 @@
+ߊߊ
+ߊ߳ߊ
+ߊ߳ߺߊ
+ߊߺߊ
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/misc.txt b/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/misc.txt
new file mode 100644 (file)
index 0000000..d535b67
--- /dev/null
@@ -0,0 +1,14 @@
+ꡳꡡ
+ꡡꡳꡡ
+ꡞꡞꡞ ꡞ
+ꡟꡟꡟ ꡟ
+ꡠꡠꡠ ꡠ
+ꡡꡡꡡ ꡡ
+‍ꡡ‍
+‍ꡡ
+ꡡ‍
+ꡞ‌ꡟ‌ꡠ‌ꡡ
+ꡉꡞ
+ꡉꡞ︀
+ꡪꡞ
+ꡪꡞ︀
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-syriac/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/MANIFEST
new file mode 100644 (file)
index 0000000..ae45bdf
--- /dev/null
@@ -0,0 +1 @@
+alaph.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/alaph.txt b/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/alaph.txt
new file mode 100644 (file)
index 0000000..27b035f
--- /dev/null
@@ -0,0 +1,98 @@
+ ܐ
+ ܐܘ
+ ܐܪ
+ ܐܖ
+ ܐܕ
+ ܐܯ
+ ܐܒ
+ܘܐ
+ܘܐܘ
+ܘܐܪ
+ܘܐܖ
+ܘܐܕ
+ܘܐܯ
+ܘܐܒ
+ܪܐ
+ܪܐܘ
+ܪܐܪ
+ܪܐܖ
+ܪܐܕ
+ܪܐܯ
+ܪܐܒ
+ܖܐ
+ܖܐܘ
+ܖܐܪ
+ܖܐܖ
+ܖܐܕ
+ܖܐܯ
+ܖܐܒ
+ܕܐ
+ܕܐܘ
+ܕܐܪ
+ܕܐܖ
+ܕܐܕ
+ܕܐܯ
+ܕܐܒ
+ܯܐ
+ܯܐܘ
+ܯܐܪ
+ܯܐܖ
+ܯܐܕ
+ܯܐܯ
+ܯܐܒ
+ܒܐ
+ܒܐܘ
+ܒܐܪ
+ܒܐܖ
+ܒܐܕ
+ܒܐܯ
+ܒܐܒ
+ ܐܐ
+ ܐܐܘ
+ ܐܐܪ
+ ܐܐܖ
+ ܐܐܕ
+ ܐܐܯ
+ ܐܐܒ
+ܘܐܐ
+ܘܐܐܘ
+ܘܐܐܪ
+ܘܐܐܖ
+ܘܐܐܕ
+ܘܐܐܯ
+ܘܐܐܒ
+ܪܐܐ
+ܪܐܐܘ
+ܪܐܐܪ
+ܪܐܐܖ
+ܪܐܐܕ
+ܪܐܐܯ
+ܪܐܐܒ
+ܖܐܐ
+ܖܐܐܘ
+ܖܐܐܪ
+ܖܐܐܖ
+ܖܐܐܕ
+ܖܐܐܯ
+ܖܐܐܒ
+ܕܐܐ
+ܕܐܐܘ
+ܕܐܐܪ
+ܕܐܐܖ
+ܕܐܐܕ
+ܕܐܐܯ
+ܕܐܐܒ
+ܯܐܐ
+ܯܐܐܘ
+ܯܐܐܪ
+ܯܐܐܖ
+ܯܐܐܕ
+ܯܐܐܯ
+ܯܐܐܒ
+ܒܐܐ
+ܒܐܐܘ
+ܒܐܐܪ
+ܒܐܐܖ
+ܒܐܐܕ
+ܒܐܐܯ
+ܒܐܐܒ
diff --git a/test/shaping/texts/in-tree/shaper-default/MANIFEST b/test/shaping/texts/in-tree/shaper-default/MANIFEST
new file mode 100644 (file)
index 0000000..d08deb7
--- /dev/null
@@ -0,0 +1,5 @@
+script-ethiopic
+script-han
+script-hiragana
+script-linear-b
+script-tifinagh
diff --git a/test/shaping/texts/in-tree/shaper-default/script-ethiopic/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-ethiopic/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt b/test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt
new file mode 100644 (file)
index 0000000..60dd8cc
--- /dev/null
@@ -0,0 +1 @@
+ላ፟ህ
diff --git a/test/shaping/texts/in-tree/shaper-default/script-han/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-han/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-default/script-han/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-han/misc/MANIFEST
new file mode 100644 (file)
index 0000000..003c956
--- /dev/null
@@ -0,0 +1 @@
+cjk-compat.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt b/test/shaping/texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt
new file mode 100644 (file)
index 0000000..b3ab645
--- /dev/null
@@ -0,0 +1,3 @@
+艹
+艹
+艹
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-hiragana/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/MANIFEST
new file mode 100644 (file)
index 0000000..4d2d52c
--- /dev/null
@@ -0,0 +1,2 @@
+kazuraki-liga-lines.txt
+kazuraki-liga.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt b/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt
new file mode 100644 (file)
index 0000000..5bc2d00
--- /dev/null
@@ -0,0 +1,8 @@
+ありあるあれいているべきいろうれし
+うれしくかしこかとがとうくもこと
+こともことをこのこれこれもされ
+しかししてするせんたしたのちる
+とけとしとしてとのともかくとを
+なくなどなどのなるひさひとふるほど
+ますむとめてもしろものをやるゆる
+られるとるものれる〳〵〴〵
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga.txt b/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga.txt
new file mode 100644 (file)
index 0000000..e043e17
--- /dev/null
@@ -0,0 +1,53 @@
+あり
+ある
+あれ
+いて
+いるべき
+いろ
+うれし
+うれしく
+かしこ
+かと
+がとう
+くも
+こと
+ことも
+ことを
+この
+これ
+これも
+され
+しかし
+して
+する
+せん
+たし
+たの
+ちる
+とけ
+とし
+として
+との
+ともかく
+とを
+なく
+など
+などの
+なる
+ひさ
+ひと
+ふる
+ほど
+ます
+むと
+めて
+もしろ
+ものを
+やる
+ゆる
+られ
+ると
+るもの
+れる
+〳〵
+〴〵
diff --git a/test/shaping/texts/in-tree/shaper-default/script-linear-b/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-linear-b/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/misc.txt b/test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/misc.txt
new file mode 100644 (file)
index 0000000..b085605
--- /dev/null
@@ -0,0 +1 @@
+𐀁𐀂𐀃
diff --git a/test/shaping/texts/in-tree/shaper-default/script-tifinagh/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-tifinagh/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt b/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt
new file mode 100644 (file)
index 0000000..0c307eb
--- /dev/null
@@ -0,0 +1,11 @@
+ⵎⵜ
+ⵎ⵿ⵜ
+ⵏⴾ
+ⵏ⵿ⴾ
+ⵏⵜ
+ⵏ⵿ⵜ
+ⵔⵜ
+ⵔ⵿ⵜ
+ⵙⵜ
+ⵙ⵿ⵜ
+
diff --git a/test/shaping/texts/in-tree/shaper-hangul/MANIFEST b/test/shaping/texts/in-tree/shaper-hangul/MANIFEST
new file mode 100644 (file)
index 0000000..ea81716
--- /dev/null
@@ -0,0 +1 @@
+script-hangul
diff --git a/test/shaping/texts/in-tree/shaper-hangul/script-hangul/MANIFEST b/test/shaping/texts/in-tree/shaper-hangul/script-hangul/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt b/test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt
new file mode 100644 (file)
index 0000000..797b1c6
--- /dev/null
@@ -0,0 +1,4 @@
+휴가 가-- (오--)
+휴가 가-- (오--)
+ᄒᆞᆫ
+ᅟᅡᄫᅠ
diff --git a/test/shaping/texts/in-tree/shaper-hebrew/MANIFEST b/test/shaping/texts/in-tree/shaper-hebrew/MANIFEST
new file mode 100644 (file)
index 0000000..12da794
--- /dev/null
@@ -0,0 +1 @@
+script-hebrew
diff --git a/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/MANIFEST b/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/MANIFEST
new file mode 100644 (file)
index 0000000..06ca481
--- /dev/null
@@ -0,0 +1 @@
+diacritics.txt
diff --git a/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/diacritics.txt b/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/diacritics.txt
new file mode 100644 (file)
index 0000000..f3cf91f
--- /dev/null
@@ -0,0 +1,16 @@
+קול דודי הנה־זה בא מדלג על־ההרים מקפץ על־הגבעות
+הֲבֵל הֲבָלִים אָמַר קֹהֶלֶת
+לְהַגִּיד בַּבֹּקֶר חַסְדֶּךָ וֶאֱמוּנָתְךָ בַּלֵּילוֹת
+יְרוּשָׁלִַם
+יְרוּשָׁלִָם
+יְרוּשָׁלְַמָה
+יְרוּשָׁלְָמָה
+נְבֻֽכַדְנֶאצַּ֣ר
+מִתָּ֑͏ַ֜חַת
+אֲ‍ֽ֭דַבְּרָה
+וֽ͏ַיְהִי־֯כֵֽן
+לׅׄוּלֵׅ֗ׄאׅׄ
+אָנָּֽה אָנָּֽה
+תַעֲשֶׂ֦ה
+שֹֽׁטְרֵי֙
+אֲ‍ֽ֭
diff --git a/test/shaping/texts/in-tree/shaper-indic/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/MANIFEST
new file mode 100644 (file)
index 0000000..3f2011f
--- /dev/null
@@ -0,0 +1,2 @@
+indic
+south-east-asian
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/MANIFEST
new file mode 100644 (file)
index 0000000..5e62ebf
--- /dev/null
@@ -0,0 +1,11 @@
+script-assamese
+script-bengali
+script-devanagari
+script-gujarati
+script-gurmukhi
+script-kannada
+script-malayalam
+script-oriya
+script-sinhala
+script-tamil
+script-telugu
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/misc/MANIFEST
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..2bc4fff
--- /dev/null
@@ -0,0 +1,4 @@
+ৠ
+ৡ
+ৢ
+ৣ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..0f8fa91
--- /dev/null
@@ -0,0 +1,40 @@
+ক
+খ
+গ
+ঘ
+ঙ
+চ
+ছ
+জ
+ঝ
+ঞ
+ট
+ঠ
+ড
+ঢ
+ণ
+ত
+থ
+দ
+ধ
+ন
+প
+ফ
+ব
+ভ
+ম
+য
+ৰ
+ৱ
+ল
+ড়
+ঢ়
+য়
+শ
+ষ
+স
+হ
+ৎ
+ং
+ঃ
+ঁ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..ddf03c0
--- /dev/null
@@ -0,0 +1,10 @@
+া
+ি
+ী
+ু
+ূ
+ৃ
+ে
+ৈ
+ো
+ৌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..870ce26
--- /dev/null
@@ -0,0 +1,10 @@
+০
+১
+২
+৩
+৪
+৫
+৬
+৭
+৮
+৯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..821c261
--- /dev/null
@@ -0,0 +1,11 @@
+অ
+আ
+ই
+ঈ
+উ
+ঊ
+ঋ
+এ
+ঐ
+ও
+ঔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..0afc191
--- /dev/null
@@ -0,0 +1,6 @@
+্
+়
+ং
+ঃ
+ঁ
+৺
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..1490dfe
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..ebbc87d
--- /dev/null
@@ -0,0 +1,59 @@
+কঁ
+খঁ
+গঁ
+ঘঁ
+চঁ
+ছঁ
+জঁ
+ঝঁ
+টঁ
+ঠঁ
+ডঁ
+ঢঁ
+তঁ
+থঁ
+দঁ
+ধঁ
+পঁ
+ফঁ
+বঁ
+ভঁ
+মঁ
+যঁ
+ৰঁ
+লঁ
+শঁ
+ষঁ
+সঁ
+হঁ
+ৰ্ক
+ৰ্খ
+ৰ্গ
+ৰ্ঘ
+ৰ্চ
+ৰ্ছ
+ৰ্জ
+ৰ্ঝ
+ৰ্ঞ
+ৰ্ট
+ৰ্ঠ
+ৰ্ড
+ৰ্ঢ
+ৰ্ণ
+ৰ্ত
+ৰ্থ
+ৰ্দ
+ৰ্ধ
+ৰ্ন
+ৰ্প
+ৰ্ফ
+ৰ্ব
+ৰ্ভ
+ৰ্ম
+ৰ্য
+ৰ্ৰ
+ৰ্ল
+ৰ্শ
+ৰ্ষ
+ৰ্স
+ৰ্হ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..accebeb
--- /dev/null
@@ -0,0 +1,131 @@
+কু
+কূ
+কৃ
+খু
+খূ
+খৃ
+গু
+গূ
+গৃ
+ঘু
+ঘূ
+ঘৃ
+ঙু
+ঙূ
+ঙৃ
+চু
+চূ
+চৃ
+ছু
+ছূ
+ছৃ
+জু
+জূ
+জৃ
+ঝু
+ঝূ
+ঝৃ
+ঞু
+ঞূ
+টু
+টূ
+টৃ
+ঠু
+ঠূ
+ঠৃ
+ডু
+ডূ
+ডৃ
+ঢু
+ঢূ
+ঢৃ
+ণু
+ণূ
+ণৃ
+তু
+তূ
+তৃ
+থু
+থূ
+থৃ
+দু
+দূ
+দৃ
+ধু
+ধূ
+ধৃ
+নু
+নূ
+নৃ
+পু
+পূ
+পৃ
+ফু
+ফূ
+ফৃ
+বু
+বূ
+বৃ
+ভু
+ভূ
+ভৃ
+মু
+মূ
+মৃ
+যু
+যূ
+যৃ
+ৰু
+ৰূ
+ৰৃ
+লু
+লূ
+লৃ
+শু
+শূ
+শৃ
+ষু
+ষূ
+ষৃ
+সু
+সূ
+সৃ
+হু
+হূ
+হৃ
+ক্
+খ্
+গ্
+ঘ্
+ঙ্
+চ্
+ছ্
+জ্
+ঝ্
+ঞ্
+ট্
+ঠ্
+ড্
+ঢ্
+ণ্
+ত্
+থ্
+দ্
+ধ্
+ন্
+প্
+ফ্
+ব্
+ভ্
+ম্
+য্
+ৰ্
+ল্
+শ্
+ষ্
+স্
+হ্
+জ়
+ড়
+ঢ়
+য়
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..87e5ea8
--- /dev/null
@@ -0,0 +1,139 @@
+ক্ৰ
+খ্ৰ
+গ্ৰ
+ঘ্ৰ
+জ্ৰ
+ত্ৰ
+দ্ৰ
+ধ্ৰ
+প্ৰ
+ম্ৰ
+শ্ৰ
+স্ৰ
+হ্ৰ
+ক্ল
+গ্ল
+প্ল
+ম্ল
+ল্ল
+শ্ল
+স্ল
+হ্ল
+ক্ক
+ক্ব
+জ্ব
+ট্ব
+ত্ব
+দ্ব
+ধ্ব
+ন্ব
+ব্ব
+ম্ব
+ল্ব
+শ্ব
+ষ্ব
+স্ব
+হ্ব
+ণ্ণ
+ষ্ণ
+ষ্ণু
+হ্ণ
+হ্ণি
+জ্জ
+ট্ট
+ত্ত
+দ্দ
+ন্ন
+প্প
+ব্ব
+ম্ম
+ত্ন
+ম্ন
+স্ন
+হ্ন
+ক্ন
+গ্ন
+ত্ম
+গ্ম
+ঙ্ম
+ট্ম
+ণ্ম
+ত্ম
+দ্ম
+ধ্ম
+ন্ম
+ম্ম
+ল্ম
+শ্ম
+ষ্ম
+হ্ম
+ক্ষ
+ক্ত
+গ্ধ
+ঙ্ক
+ঙ্খ
+ঙ্গ
+ঙ্ঘ
+চ্চ
+চ্ছ
+চ্ঞ
+জ্ঝ
+জ্ঞ
+ঞ্চ
+ঞ্ছ
+ঞ্জ
+ণ্ট
+ক্ট
+ণ্ড
+ন্ড
+দ্গ
+দ্ঘ
+দ্ধ
+দ্ভ
+ন্ত
+ন্থ
+ন্দ
+ন্ধ
+প্ত
+ব্জ
+ব্দ
+ম্প
+ম্ফ
+ম্ব
+ম্ভ
+ল্ক
+ল্গ
+ল্প
+ল্ফ
+ল্ম
+শ্চ
+ষ্ক
+ষ্ট
+ষ্ঠ
+ষ্প
+ষ্ফ
+স্ক
+স্খ
+স্ত
+স্থ
+স্প
+স্ফ
+ক্ষ্ণ
+ক্ষ্ম
+জ্জ্ব
+ত্ত্ব
+ত্ম্য
+ন্ত্ৰ
+ন্ত্ব
+ন্দ্ৰ
+ন্ধ্য
+ন্ন্য
+ম্প্ৰ
+ম্ভ্ৰ
+ৰ্ধ্ব
+ৰ্শ্ব
+ষ্ট্ৰ
+ষ্প্ৰ
+স্ত্ৰ
+চ্ছ্ব
+প্স
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/MANIFEST
new file mode 100644 (file)
index 0000000..3c2a4fb
--- /dev/null
@@ -0,0 +1,2 @@
+misc.txt
+reph.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
new file mode 100644 (file)
index 0000000..aa43590
--- /dev/null
@@ -0,0 +1,53 @@
+অ্য
+ক
+ক়
+কি
+ক্
+ক্ক
+ক্র
+ক্র্ক
+ক্‌ক
+ক্‍ক
+দ্য
+ন্ক
+ন্ধ
+ন্ব
+ন্য
+ন্র
+ন্‌ক
+ন্‌ধ
+ন্‌ব
+ন্‌র
+ন্‍ক
+ন্‍ধ
+ন্‍ব
+ন্‍র
+য্
+র্ক
+র্কি
+র্কৌ
+র্ন্‍
+র্ব্ব
+শ্য
+ষ্য
+স্য
+ি
+কো
+কৌ
+ক্র্ক
+ন্‌ক
+ন্‌ব
+ন্‍ক
+ন্‍ব
+ন্‍র
+র্কাং
+র্কাঃ
+র্কৌ
+র্ভ
+ৰ্ভ
+ৱ্ভ
+অৗ
+ন্ত্র
+ত্যু
+চ্য্র
+ক্‍ষ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/reph.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/reph.txt
new file mode 100644 (file)
index 0000000..9739eaa
--- /dev/null
@@ -0,0 +1,14 @@
+র্ক
+র্কা
+র্কি
+র্কী
+র্কু
+র্কূ
+র্কে
+র্কৈ
+র্কো
+র্কৌ
+র্য
+র্‍য
+র‍্য
+র্র‍্য
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..fd5e6e6
--- /dev/null
@@ -0,0 +1 @@
+codepoint, imagepath, rawcode, desc
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..7554b36
--- /dev/null
@@ -0,0 +1,36 @@
+ক
+খ
+গ
+ঘ
+ঙ
+চ
+ছ
+জ
+ঝ
+ঞ
+ট
+ঠ
+ড
+ঢ
+ণ
+ত
+থ
+দ
+ধ
+ন
+প
+ফ
+ব
+ভ
+ম
+য
+র
+ল
+ড়
+ঢ়
+য়
+শ
+ষ
+স
+হ
+ৎ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..ddf03c0
--- /dev/null
@@ -0,0 +1,10 @@
+া
+ি
+ী
+ু
+ূ
+ৃ
+ে
+ৈ
+ো
+ৌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..870ce26
--- /dev/null
@@ -0,0 +1,10 @@
+০
+১
+২
+৩
+৪
+৫
+৬
+৭
+৮
+৯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..169ba5d
--- /dev/null
@@ -0,0 +1,12 @@
+অ
+আ
+ই
+ঈ
+উ
+ঊ
+ঋ
+ঌ
+এ
+ঐ
+ও
+ঔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..0afc191
--- /dev/null
@@ -0,0 +1,6 @@
+্
+়
+ং
+ঃ
+ঁ
+৺
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..1490dfe
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..7c652be
--- /dev/null
@@ -0,0 +1,58 @@
+কঁ
+খঁ
+গঁ
+ঘঁ
+চঁ
+ছঁ
+জঁ
+ঝঁ
+টঁ
+ঠঁ
+ডঁ
+ঢঁ
+তঁ
+থঁ
+দঁ
+ধঁ
+পঁ
+ফঁ
+বঁ
+ভঁ
+মঁ
+যঁ
+রঁ
+লঁ
+শঁ
+ষঁ
+সঁ
+হঁ
+র্ক
+র্খ
+র্গ
+র্ঘ
+র্চ
+র্ছ
+র্জ
+র্ঝ
+র্ট
+র্ঠ
+র্ড
+র্ঢ
+র্ণ
+র্ত
+র্থ
+র্দ
+র্ধ
+র্ন
+র্প
+র্ফ
+র্ব
+র্ভ
+র্ম
+র্য
+র্র
+র্ল
+র্শ
+র্ষ
+র্স
+র্হ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..2fd42e0
--- /dev/null
@@ -0,0 +1,119 @@
+কু
+কূ
+কৃ
+খু
+খূ
+খৃ
+গু
+গূ
+গৃ
+ঘু
+ঘূ
+ঘৃ
+চু
+চূ
+চৃ
+ছু
+ছূ
+ছৃ
+জু
+জূ
+জৃ
+ঝু
+ঝূ
+ঝৃ
+টু
+টূ
+টৃ
+ঠু
+ঠূ
+ঠৃ
+ডু
+ডূ
+ডৃ
+ঢু
+ঢূ
+ণু
+ণূ
+তু
+তূ
+তৃ
+থু
+থূ
+দু
+দূ
+দৃ
+ধু
+ধূ
+ধৃ
+নু
+নূ
+নৃ
+পু
+পূ
+পৃ
+ফু
+ফূ
+ফৃ
+বু
+বূ
+বৃ
+ভু
+ভূ
+ভৃ
+মু
+মূ
+মৃ
+যু
+যূ
+যৃ
+রু
+রূ
+রৃ
+লু
+লূ
+শু
+শূ
+শৃ
+ষু
+ষূ
+ষৃ
+সু
+সূ
+সৃ
+হু
+হূ
+হৃ
+ক্
+খ্
+গ্
+ঘ্
+ঙ্
+চ্
+ছ্
+জ্
+ঝ্
+ঞ্
+ট্
+ঠ্
+ড্
+ঢ্
+ণ্
+ত্
+থ্
+দ্
+ধ্
+ন্
+প্
+ফ্
+ব্
+ভ্
+ম্
+য্
+র্
+ল্
+শ্
+ষ্
+স্
+হ্
+জ়
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..b45b778
--- /dev/null
@@ -0,0 +1,215 @@
+ক্র
+খ্র
+গ্র
+ঘ্র
+জ্র
+ত্র
+দ্র
+ধ্র
+প্র
+ম্র
+শ্র
+স্র
+হ্র
+ছ্র
+ট্র
+ঠ্র
+ড্র
+থ্র
+ফ্র
+ব্র
+ভ্র
+ক্য
+খ্য
+গ্য
+ঘ্য
+চ্য
+জ্য
+ট্য
+ঠ্য
+ড্য
+ড়্য
+ঢ্য
+ত্য
+থ্য
+দ্য
+ধ্য
+ন্য
+প্য
+ফ্য
+ব্য
+ভ্য
+ম্য
+য্য
+র‍্য
+ল্য
+শ্য
+ষ্য
+স্য
+হ্য
+ক্ল
+গ্ল
+প্ল
+ম্ল
+ল্ল
+শ্ল
+স্ল
+হ্ল
+ক্ক
+ক্ব
+জ্ব
+ট্ব
+ত্ব
+দ্ব
+ধ্ব
+ন্ব
+ব্ব
+ম্ব
+ল্ব
+শ্ব
+ষ্ব
+স্ব
+হ্ব
+ণ্ণ
+ষ্ণ
+ষ্ণু
+হ্ণ
+হ্ণি
+জ্জ
+ট্ট
+ত্ত
+দ্দ
+ন্ন
+প্প
+ত্ন
+ম্ন
+স্ন
+হ্ন
+ক্ন
+গ্ন
+গ্ম
+ঙ্ম
+ট্ম
+ণ্ম
+ত্ম
+দ্ম
+ধ্ম
+ন্ম
+ম্ম
+ল্ম
+শ্ম
+ষ্ম
+হ্ম
+ক্ষ
+ক্ত
+গ্ধ
+ঙ্ক
+ঙ্খ
+ঙ্গ
+ঙ্ঘ
+চ্চ
+চ্ছ
+চ্ঞ
+জ্ঝ
+জ্ঞ
+ঞ্চ
+ঞ্ছ
+ঞ্জ
+ণ্ট
+ক্ট
+ণ্ড
+ন্ড
+দ্গ
+দ্ঘ
+দ্ধ
+দ্ভ
+ন্ত
+ন্থ
+ন্দ
+ন্ধ
+প্ত
+ব্জ
+ব্দ
+ম্প
+ম্ফ
+ম্ভ
+ল্ক
+ল্গ
+ল্প
+ল্ফ
+শ্চ
+ষ্ক
+ষ্ট
+ষ্ঠ
+ষ্প
+ষ্ফ
+স্ক
+স্খ
+স্ত
+স্থ
+স্প
+স্ফ
+ম্থ
+ল্ত
+ল্ধ
+ক্ম
+ক্স
+গ্গ
+ঘ্ন
+চ্ন
+ছ্ব
+ঞ্ঝ
+ড্ড
+ড্ম
+ড়্গ
+ণ্ঠ
+ণ্ঢ
+ণ্ব
+ত্থ
+থ্ব
+ধ্ন
+ন্ট
+ন্ঠ
+ন্স
+প্ট
+প্ন
+ফ্ল
+ব্ধ
+ব্ল
+ভ্ল
+ম্ত
+ম্দ
+ল্ট
+ল্ড
+শ্ছ
+শ্ন
+শ্ত
+স্ট
+স্ম
+চ্ছ্র
+চ্ছ্ব
+দ্দ্ব
+দ্ধ্ব
+ন্ধ্র
+ব্দ্র
+ক্ষ্ণ
+ক্ষ্ম
+জ্জ্ব
+ত্ত্ব
+ত্ম্য
+ন্ত্র
+ন্ত্ব
+ন্দ্র
+ন্ধ্য
+ন্ন্য
+ম্প্র
+ম্ভ্র
+র্ধ্ব
+র্শ্ব
+ষ্ট্র
+ষ্প্র
+স্ত্র
+স্ট্র
+স্ক্র
+ক্ট্র
+প্স
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/MANIFEST
new file mode 100644 (file)
index 0000000..c384b38
--- /dev/null
@@ -0,0 +1,6 @@
+dottedcircle.txt
+eyelash.txt
+joiners.txt
+misc.txt
+spec-deviations.txt
+tricky-reordering.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt
new file mode 100644 (file)
index 0000000..fd0ebdb
--- /dev/null
@@ -0,0 +1,8 @@
+र्◌
+र्◌्च
+र्◌्च्छे
+र्◌ि
+र्◌्
+र्◌़
+◌्च्छे
+र् 
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt
new file mode 100644 (file)
index 0000000..8e11955
--- /dev/null
@@ -0,0 +1,3 @@
+त्र्क
+त्र्‍क
+त्र्‌क
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/joiners.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/joiners.txt
new file mode 100644 (file)
index 0000000..75f85cc
--- /dev/null
@@ -0,0 +1,19 @@
+र्ह
+र्‌ह
+र्‍ह
+ऱ्ह
+ऱ्‌ह
+ऱ्‍ह
+क्क
+क्‍
+क्‌क
+क्‍क
+क्कि
+क्‌कि
+क्‍कि
+क्ष
+क्‌ष
+क्‍ष
+द्सि
+द्‌सि
+द्‍सि
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt
new file mode 100644 (file)
index 0000000..4a8326c
--- /dev/null
@@ -0,0 +1,36 @@
+क
+क़
+कि
+क्
+क्क
+क्र
+क्र्क
+क्र्‍
+क्ष
+क्ष्
+क्‌ष
+क्‍
+क्‍ष
+छ्र्क
+ज्ञ्
+ट्रु
+र्क
+र्कि
+र्क्रि
+र्‍
+ि
+फ़्र
+फ्र
+द्दि
+क्ष
+क्‌ष
+क्‍ष
+र्अ्
+र्अ्‌
+र्अ्‍
+र्आ्र्
+क‌ि
+ऽं
+रुँः
+1ि
+१॑
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt
new file mode 100644 (file)
index 0000000..4814019
--- /dev/null
@@ -0,0 +1 @@
+सा़े
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt
new file mode 100644 (file)
index 0000000..1723ced
--- /dev/null
@@ -0,0 +1,5 @@
+Usage:
+  ./hb-unicode-encode UNICODE_STRING...
+or:
+  ./hb-unicode-encode --stdin
+फि्
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
new file mode 100644 (file)
index 0000000..89cefb6
--- /dev/null
@@ -0,0 +1,8 @@
+क़
+ख़
+ग़
+ज़
+ड़
+ढ़
+फ़
+य
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..9f7cda9
--- /dev/null
@@ -0,0 +1,4 @@
+ॠ
+ॡ
+ॢ
+ॣ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..3aa66ce
--- /dev/null
@@ -0,0 +1,45 @@
+क
+ख
+ग
+घ
+ङ
+च
+छ
+ज
+झ
+ञ
+ट
+ठ
+ड
+ढ
+ण
+त
+थ
+द
+ध
+न
+ऩ
+प
+फ
+ब
+भ
+म
+य
+र
+ऱ
+ल
+ळ
+ऴ
+व
+श
+ष
+स
+ह
+क़
+ख़
+ग़
+ज़
+ड़
+ढ़
+फ़
+य़
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..04cf0a7
--- /dev/null
@@ -0,0 +1,14 @@
+ा
+ि
+ी
+ु
+ू
+ृ
+ॄ
+ॅ
+ॆ
+े
+ै
+ॉ
+ो
+ौ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt
new file mode 100644 (file)
index 0000000..7b0b32c
--- /dev/null
@@ -0,0 +1 @@
+॰
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..1427002
--- /dev/null
@@ -0,0 +1,10 @@
+०
+१
+२
+३
+४
+५
+६
+७
+८
+९
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..b336c35
--- /dev/null
@@ -0,0 +1,16 @@
+अ
+आ
+इ
+ई
+उ
+ऊ
+ऋ
+ऌ
+ऍ
+ऎ
+ए
+ऐ
+ऑ
+ऒ
+ओ
+औ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..2ff3e87
--- /dev/null
@@ -0,0 +1,10 @@
+ँ
+ं
+ः
+़
+ऽ
+्
+ॐ
+॒
+॓
+॔
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..21eb56c
--- /dev/null
@@ -0,0 +1,9 @@
+IndicFontFeatureCodepoint-AdditionalConsonants.txt
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-GenericPunctuation.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..6d57308
--- /dev/null
@@ -0,0 +1,185 @@
+कॅ
+खॅ
+गॅ
+घॅ
+ङॅ
+चॅ
+छॅ
+जॅ
+झॅ
+ञॅ
+टॅ
+ठॅ
+डॅ
+ढॅ
+णॅ
+तॅ
+थॅ
+दॅ
+धॅ
+नॅ
+ऩॅ
+पॅ
+फॅ
+बॅ
+भॅ
+मॅ
+यॅ
+रॅ
+ऱॅ
+लॅ
+ळॅ
+ऴॅ
+वॅ
+शॅ
+षॅ
+सॅ
+हॅ
+कॆ
+खॆ
+गॆ
+घॆ
+ङॆ
+चॆ
+छॆ
+जॆ
+झॆ
+ञॆ
+टॆ
+ठॆ
+डॆ
+ढॆ
+णॆ
+तॆ
+थॆ
+दॆ
+धॆ
+नॆ
+ऩॆ
+पॆ
+फॆ
+बॆ
+भॆ
+मॆ
+यॆ
+रॆ
+ऱॆ
+लॆ
+ळॆ
+ऴॆ
+वॆ
+शॆ
+षॆ
+सॆ
+हॆ
+के
+खे
+गे
+घे
+ङे
+चे
+छे
+जे
+झे
+ञे
+टे
+ठे
+डे
+ढे
+णे
+ते
+थे
+दे
+धे
+ने
+ऩे
+पे
+फे
+बे
+भे
+मे
+ये
+रे
+ऱे
+ले
+ळे
+ऴे
+वे
+शे
+षे
+से
+हे
+कै
+खै
+गै
+घै
+ङै
+चै
+छै
+जै
+झै
+ञै
+टै
+ठै
+डै
+ढै
+णै
+तै
+थै
+दै
+धै
+नै
+ऩै
+पै
+फै
+बै
+भै
+मै
+यै
+रै
+ऱै
+लै
+ळै
+ऴै
+वै
+शै
+षै
+सै
+है
+कँ
+खँ
+गँ
+घँ
+ङँ
+चँ
+छँ
+जँ
+झँ
+ञँ
+टँ
+ठँ
+डँ
+ढँ
+णँ
+तँ
+थँ
+दँ
+धँ
+नँ
+ऩँ
+पँ
+फँ
+बँ
+भँ
+मँ
+यँ
+रँ
+ऱँ
+लँ
+ळँ
+ऴँ
+वँ
+शँ
+षँ
+सँ
+हँ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..bff1a7b
--- /dev/null
@@ -0,0 +1,185 @@
+कु
+खु
+गु
+घु
+ङु
+चु
+छु
+जु
+झु
+ञु
+टु
+ठु
+डु
+ढु
+णु
+तु
+थु
+दु
+धु
+नु
+ऩु
+पु
+फु
+बु
+भु
+मु
+यु
+रु
+ऱु
+लु
+ळु
+ऴु
+वु
+शु
+षु
+सु
+हु
+कू
+खू
+गू
+घू
+ङू
+चू
+छू
+जू
+झू
+ञू
+टू
+ठू
+डू
+ढू
+णू
+तू
+थू
+दू
+धू
+नू
+ऩू
+पू
+फू
+बू
+भू
+मू
+यू
+रू
+ऱू
+लू
+ळू
+ऴू
+वू
+शू
+षू
+सू
+हू
+कृ
+खृ
+गृ
+घृ
+ङृ
+चृ
+छृ
+जृ
+झृ
+ञृ
+टृ
+ठृ
+डृ
+ढृ
+णृ
+तृ
+थृ
+दृ
+धृ
+नृ
+ऩृ
+पृ
+फृ
+बृ
+भृ
+मृ
+यृ
+रृ
+ऱृ
+लृ
+ळृ
+ऴृ
+वृ
+शृ
+षृ
+सृ
+हृ
+कॄ
+खॄ
+गॄ
+घॄ
+ङॄ
+चॄ
+छॄ
+जॄ
+झॄ
+ञॄ
+टॄ
+ठॄ
+डॄ
+ढॄ
+णॄ
+तॄ
+थॄ
+दॄ
+धॄ
+नॄ
+ऩॄ
+पॄ
+फॄ
+बॄ
+भॄ
+मॄ
+यॄ
+रॄ
+ऱॄ
+लॄ
+ळॄ
+ऴॄ
+वॄ
+शॄ
+षॄ
+सॄ
+हॄ
+क्
+ख्
+ग्
+घ्
+ङ्
+च्
+छ्
+ज्
+झ्
+ञ्
+ट्
+ठ्
+ड्
+ढ्
+ण्
+त्
+थ्
+द्
+ध्
+न्
+ऩ्
+प्
+फ्
+ब्
+भ्
+म्
+य्
+र्
+ऱ्
+ल्
+ळ्
+ऴ्
+व्
+श्
+ष्
+स्
+ह्
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..3b5e620
--- /dev/null
@@ -0,0 +1,1367 @@
+क्क
+क्ख
+क्ग
+क्घ
+क्ङ
+क्च
+क्छ
+क्ज
+क्झ
+क्ञ
+क्ट
+क्ठ
+क्ड
+क्ढ
+क्ण
+क्त
+क्थ
+क्द
+क्ध
+क्न
+क्ऩ
+क्प
+क्फ
+क्ब
+क्भ
+क्म
+क्य
+क्र
+क्ऱ
+क्ल
+क्ळ
+क्ऴ
+क्व
+क्श
+क्ष
+क्स
+क्ह
+ख्क
+ख्ख
+ख्ग
+ख्घ
+ख्ङ
+ख्च
+ख्छ
+ख्ज
+ख्झ
+ख्ञ
+ख्ट
+ख्ठ
+ख्ड
+ख्ढ
+ख्ण
+ख्त
+ख्थ
+ख्द
+ख्ध
+ख्न
+ख्ऩ
+ख्प
+ख्फ
+ख्ब
+ख्भ
+ख्म
+ख्य
+ख्र
+ख्ऱ
+ख्ल
+ख्ळ
+ख्ऴ
+ख्व
+ख्श
+ख्ष
+ख्स
+ख्ह
+ग्क
+ग्ख
+ग्ग
+ग्घ
+ग्ङ
+ग्च
+ग्छ
+ग्ज
+ग्झ
+ग्ञ
+ग्ट
+ग्ठ
+ग्ड
+ग्ढ
+ग्ण
+ग्त
+ग्थ
+ग्द
+ग्ध
+ग्न
+ग्ऩ
+ग्प
+ग्फ
+ग्ब
+ग्भ
+ग्म
+ग्य
+ग्र
+ग्ऱ
+ग्ल
+ग्ळ
+ग्ऴ
+ग्व
+ग्श
+ग्ष
+ग्स
+ग्ह
+घ्क
+घ्ख
+घ्ग
+घ्घ
+घ्ङ
+घ्च
+घ्छ
+घ्ज
+घ्झ
+घ्ञ
+घ्ट
+घ्ठ
+घ्ड
+घ्ढ
+घ्ण
+घ्त
+घ्थ
+घ्द
+घ्ध
+घ्न
+घ्ऩ
+घ्प
+घ्फ
+घ्ब
+घ्भ
+घ्म
+घ्य
+घ्र
+घ्ऱ
+घ्ल
+घ्ळ
+घ्ऴ
+घ्व
+घ्श
+घ्ष
+घ्स
+घ्ह
+ङ्क
+ङ्ख
+ङ्ग
+ङ्घ
+ङ्ङ
+ङ्च
+ङ्छ
+ङ्ज
+ङ्झ
+ङ्ञ
+ङ्ट
+ङ्ठ
+ङ्ड
+ङ्ढ
+ङ्ण
+ङ्त
+ङ्थ
+ङ्द
+ङ्ध
+ङ्न
+ङ्ऩ
+ङ्प
+ङ्फ
+ङ्ब
+ङ्भ
+ङ्म
+ङ्य
+ङ्र
+ङ्ऱ
+ङ्ल
+ङ्ळ
+ङ्ऴ
+ङ्व
+ङ्श
+ङ्ष
+ङ्स
+ङ्ह
+च्क
+च्ख
+च्ग
+च्घ
+च्ङ
+च्च
+च्छ
+च्ज
+च्झ
+च्ञ
+च्ट
+च्ठ
+च्ड
+च्ढ
+च्ण
+च्त
+च्थ
+च्द
+च्ध
+च्न
+च्ऩ
+च्प
+च्फ
+च्ब
+च्भ
+च्म
+च्य
+च्र
+च्ऱ
+च्ल
+च्ळ
+च्ऴ
+च्व
+च्श
+च्ष
+च्स
+च्ह
+छ्क
+छ्ख
+छ्ग
+छ्घ
+छ्ङ
+छ्च
+छ्छ
+छ्ज
+छ्झ
+छ्ञ
+छ्ट
+छ्ठ
+छ्ड
+छ्ढ
+छ्ण
+छ्त
+छ्थ
+छ्द
+छ्ध
+छ्न
+छ्ऩ
+छ्प
+छ्फ
+छ्ब
+छ्भ
+छ्म
+छ्य
+छ्र
+छ्ऱ
+छ्ल
+छ्ळ
+छ्ऴ
+छ्व
+छ्श
+छ्ष
+छ्स
+छ्ह
+ज्क
+ज्ख
+ज्ग
+ज्घ
+ज्ङ
+ज्च
+ज्छ
+ज्ज
+ज्झ
+ज्ञ
+ज्ट
+ज्ठ
+ज्ड
+ज्ढ
+ज्ण
+ज्त
+ज्थ
+ज्द
+ज्ध
+ज्न
+ज्ऩ
+ज्प
+ज्फ
+ज्ब
+ज्भ
+ज्म
+ज्य
+ज्र
+ज्ऱ
+ज्ल
+ज्ळ
+ज्ऴ
+ज्व
+ज्श
+ज्ष
+ज्स
+ज्ह
+झ्क
+झ्ख
+झ्ग
+झ्घ
+झ्ङ
+झ्च
+झ्छ
+झ्ज
+झ्झ
+झ्ञ
+झ्ट
+झ्ठ
+झ्ड
+झ्ढ
+झ्ण
+झ्त
+झ्थ
+झ्द
+झ्ध
+झ्न
+झ्ऩ
+झ्प
+झ्फ
+झ्ब
+झ्भ
+झ्म
+झ्य
+झ्र
+झ्ऱ
+झ्ल
+झ्ळ
+झ्ऴ
+झ्व
+झ्श
+झ्ष
+झ्स
+झ्ह
+ञ्क
+ञ्ख
+ञ्ग
+ञ्घ
+ञ्ङ
+ञ्च
+ञ्छ
+ञ्ज
+ञ्झ
+ञ्ञ
+ञ्ट
+ञ्ठ
+ञ्ड
+ञ्ढ
+ञ्ण
+ञ्त
+ञ्थ
+ञ्द
+ञ्ध
+ञ्न
+ञ्ऩ
+ञ्प
+ञ्फ
+ञ्ब
+ञ्भ
+ञ्म
+ञ्य
+ञ्र
+ञ्ऱ
+ञ्ल
+ञ्ळ
+ञ्ऴ
+ञ्व
+ञ्श
+ञ्ष
+ञ्स
+ञ्ह
+ट्क
+ट्ख
+ट्ग
+ट्घ
+ट्ङ
+ट्च
+ट्छ
+ट्ज
+ट्झ
+ट्ञ
+ट्ट
+ट्ठ
+ट्ड
+ट्ढ
+ट्ण
+ट्त
+ट्थ
+ट्द
+ट्ध
+ट्न
+ट्ऩ
+ट्प
+ट्फ
+ट्ब
+ट्भ
+ट्म
+ट्य
+ट्र
+ट्ऱ
+ट्ल
+ट्ळ
+ट्ऴ
+ट्व
+ट्श
+ट्ष
+ट्स
+ट्ह
+ठ्क
+ठ्ख
+ठ्ग
+ठ्घ
+ठ्ङ
+ठ्च
+ठ्छ
+ठ्ज
+ठ्झ
+ठ्ञ
+ठ्ट
+ठ्ठ
+ठ्ड
+ठ्ढ
+ठ्ण
+ठ्त
+ठ्थ
+ठ्द
+ठ्ध
+ठ्न
+ठ्ऩ
+ठ्प
+ठ्फ
+ठ्ब
+ठ्भ
+ठ्म
+ठ्य
+ठ्र
+ठ्ऱ
+ठ्ल
+ठ्ळ
+ठ्ऴ
+ठ्व
+ठ्श
+ठ्ष
+ठ्स
+ठ्ह
+ड्क
+ड्ख
+ड्ग
+ड्घ
+ड्ङ
+ड्च
+ड्छ
+ड्ज
+ड्झ
+ड्ञ
+ड्ट
+ड्ठ
+ड्ड
+ड्ढ
+ड्ण
+ड्त
+ड्थ
+ड्द
+ड्ध
+ड्न
+ड्ऩ
+ड्प
+ड्फ
+ड्ब
+ड्भ
+ड्म
+ड्य
+ड्र
+ड्ऱ
+ड्ल
+ड्ळ
+ड्ऴ
+ड्व
+ड्श
+ड्ष
+ड्स
+ड्ह
+ढ्क
+ढ्ख
+ढ्ग
+ढ्घ
+ढ्ङ
+ढ्च
+ढ्छ
+ढ्ज
+ढ्झ
+ढ्ञ
+ढ्ट
+ढ्ठ
+ढ्ड
+ढ्ढ
+ढ्ण
+ढ्त
+ढ्थ
+ढ्द
+ढ्ध
+ढ्न
+ढ्ऩ
+ढ्प
+ढ्फ
+ढ्ब
+ढ्भ
+ढ्म
+ढ्य
+ढ्र
+ढ्ऱ
+ढ्ल
+ढ्ळ
+ढ्ऴ
+ढ्व
+ढ्श
+ढ्ष
+ढ्स
+ढ्ह
+ण्क
+ण्ख
+ण्ग
+ण्घ
+ण्ङ
+ण्च
+ण्छ
+ण्ज
+ण्झ
+ण्ञ
+ण्ट
+ण्ठ
+ण्ड
+ण्ढ
+ण्ण
+ण्त
+ण्थ
+ण्द
+ण्ध
+ण्न
+ण्ऩ
+ण्प
+ण्फ
+ण्ब
+ण्भ
+ण्म
+ण्य
+ण्र
+ण्ऱ
+ण्ल
+ण्ळ
+ण्ऴ
+ण्व
+ण्श
+ण्ष
+ण्स
+ण्ह
+त्क
+त्ख
+त्ग
+त्घ
+त्ङ
+त्च
+त्छ
+त्ज
+त्झ
+त्ञ
+त्ट
+त्ठ
+त्ड
+त्ढ
+त्ण
+त्त
+त्थ
+त्द
+त्ध
+त्न
+त्ऩ
+त्प
+त्फ
+त्ब
+त्भ
+त्म
+त्य
+त्र
+त्ऱ
+त्ल
+त्ळ
+त्ऴ
+त्व
+त्श
+त्ष
+त्स
+त्ह
+थ्क
+थ्ख
+थ्ग
+थ्घ
+थ्ङ
+थ्च
+थ्छ
+थ्ज
+थ्झ
+थ्ञ
+थ्ट
+थ्ठ
+थ्ड
+थ्ढ
+थ्ण
+थ्त
+थ्थ
+थ्द
+थ्ध
+थ्न
+थ्ऩ
+थ्प
+थ्फ
+थ्ब
+थ्भ
+थ्म
+थ्य
+थ्र
+थ्ऱ
+थ्ल
+थ्ळ
+थ्ऴ
+थ्व
+थ्श
+थ्ष
+थ्स
+थ्ह
+द्क
+द्ख
+द्ग
+द्घ
+द्ङ
+द्च
+द्छ
+द्ज
+द्झ
+द्ञ
+द्ट
+द्ठ
+द्ड
+द्ढ
+द्ण
+द्त
+द्थ
+द्द
+द्ध
+द्न
+द्ऩ
+द्प
+द्फ
+द्ब
+द्भ
+द्म
+द्य
+द्र
+द्ऱ
+द्ल
+द्ळ
+द्ऴ
+द्व
+द्श
+द्ष
+द्स
+द्ह
+ध्क
+ध्ख
+ध्ग
+ध्घ
+ध्ङ
+ध्च
+ध्छ
+ध्ज
+ध्झ
+ध्ञ
+ध्ट
+ध्ठ
+ध्ड
+ध्ढ
+ध्ण
+ध्त
+ध्थ
+ध्द
+ध्ध
+ध्न
+ध्ऩ
+ध्प
+ध्फ
+ध्ब
+ध्भ
+ध्म
+ध्य
+ध्र
+ध्ऱ
+ध्ल
+ध्ळ
+ध्ऴ
+ध्व
+ध्श
+ध्ष
+ध्स
+ध्ह
+न्क
+न्ख
+न्ग
+न्घ
+न्ङ
+न्च
+न्छ
+न्ज
+न्झ
+न्ञ
+न्ट
+न्ठ
+न्ड
+न्ढ
+न्ण
+न्त
+न्थ
+न्द
+न्ध
+न्न
+न्ऩ
+न्प
+न्फ
+न्ब
+न्भ
+न्म
+न्य
+न्र
+न्ऱ
+न्ल
+न्ळ
+न्ऴ
+न्व
+न्श
+न्ष
+न्स
+न्ह
+ऩ्क
+ऩ्ख
+ऩ्ग
+ऩ्घ
+ऩ्ङ
+ऩ्च
+ऩ्छ
+ऩ्ज
+ऩ्झ
+ऩ्ञ
+ऩ्ट
+ऩ्ठ
+ऩ्ड
+ऩ्ढ
+ऩ्ण
+ऩ्त
+ऩ्थ
+ऩ्द
+ऩ्ध
+ऩ्न
+ऩ्ऩ
+ऩ्प
+ऩ्फ
+ऩ्ब
+ऩ्भ
+ऩ्म
+ऩ्य
+ऩ्र
+ऩ्ऱ
+ऩ्ल
+ऩ्ळ
+ऩ्ऴ
+ऩ्व
+ऩ्श
+ऩ्ष
+ऩ्स
+ऩ्ह
+प्क
+प्ख
+प्ग
+प्घ
+प्ङ
+प्च
+प्छ
+प्ज
+प्झ
+प्ञ
+प्ट
+प्ठ
+प्ड
+प्ढ
+प्ण
+प्त
+प्थ
+प्द
+प्ध
+प्न
+प्ऩ
+प्प
+प्फ
+प्ब
+प्भ
+प्म
+प्य
+प्र
+प्ऱ
+प्ल
+प्ळ
+प्ऴ
+प्व
+प्श
+प्ष
+प्स
+प्ह
+फ्क
+फ्ख
+फ्ग
+फ्घ
+फ्ङ
+फ्च
+फ्छ
+फ्ज
+फ्झ
+फ्ञ
+फ्ट
+फ्ठ
+फ्ड
+फ्ढ
+फ्ण
+फ्त
+फ्थ
+फ्द
+फ्ध
+फ्न
+फ्ऩ
+फ्प
+फ्फ
+फ्ब
+फ्भ
+फ्म
+फ्य
+फ्र
+फ्ऱ
+फ्ल
+फ्ळ
+फ्ऴ
+फ्व
+फ्श
+फ्ष
+फ्स
+फ्ह
+ब्क
+ब्ख
+ब्ग
+ब्घ
+ब्ङ
+ब्च
+ब्छ
+ब्ज
+ब्झ
+ब्ञ
+ब्ट
+ब्ठ
+ब्ड
+ब्ढ
+ब्ण
+ब्त
+ब्थ
+ब्द
+ब्ध
+ब्न
+ब्ऩ
+ब्प
+ब्फ
+ब्ब
+ब्भ
+ब्म
+ब्य
+ब्र
+ब्ऱ
+ब्ल
+ब्ळ
+ब्ऴ
+ब्व
+ब्श
+ब्ष
+ब्स
+ब्ह
+भ्क
+भ्ख
+भ्ग
+भ्घ
+भ्ङ
+भ्च
+भ्छ
+भ्ज
+भ्झ
+भ्ञ
+भ्ट
+भ्ठ
+भ्ड
+भ्ढ
+भ्ण
+भ्त
+भ्थ
+भ्द
+भ्ध
+भ्न
+भ्ऩ
+भ्प
+भ्फ
+भ्ब
+भ्भ
+भ्म
+भ्य
+भ्र
+भ्ऱ
+भ्ल
+भ्ळ
+भ्ऴ
+भ्व
+भ्श
+भ्ष
+भ्स
+भ्ह
+म्क
+म्ख
+म्ग
+म्घ
+म्ङ
+म्च
+म्छ
+म्ज
+म्झ
+म्ञ
+म्ट
+म्ठ
+म्ड
+म्ढ
+म्ण
+म्त
+म्थ
+म्द
+म्ध
+म्न
+म्ऩ
+म्प
+म्फ
+म्ब
+म्भ
+म्म
+म्य
+म्र
+म्ऱ
+म्ल
+म्ळ
+म्ऴ
+म्व
+म्श
+म्ष
+म्स
+म्ह
+य्क
+य्ख
+य्ग
+य्घ
+य्ङ
+य्च
+य्छ
+य्ज
+य्झ
+य्ञ
+य्ट
+य्ठ
+य्ड
+य्ढ
+य्ण
+य्त
+य्थ
+य्द
+य्ध
+य्न
+य्ऩ
+य्प
+य्फ
+य्ब
+य्भ
+य्म
+य्य
+य्र
+य्ऱ
+य्ल
+य्ळ
+य्ऴ
+य्व
+य्श
+य्ष
+य्स
+य्ह
+र्क
+र्ख
+र्ग
+र्घ
+र्ङ
+र्च
+र्छ
+र्ज
+र्झ
+र्ञ
+र्ट
+र्ठ
+र्ड
+र्ढ
+र्ण
+र्त
+र्थ
+र्द
+र्ध
+र्न
+र्ऩ
+र्प
+र्फ
+र्ब
+र्भ
+र्म
+र्य
+र्र
+र्ऱ
+र्ल
+र्ळ
+र्ऴ
+र्व
+र्श
+र्ष
+र्स
+र्ह
+ऱ्क
+ऱ्ख
+ऱ्ग
+ऱ्घ
+ऱ्ङ
+ऱ्च
+ऱ्छ
+ऱ्ज
+ऱ्झ
+ऱ्ञ
+ऱ्ट
+ऱ्ठ
+ऱ्ड
+ऱ्ढ
+ऱ्ण
+ऱ्त
+ऱ्थ
+ऱ्द
+ऱ्ध
+ऱ्न
+ऱ्ऩ
+ऱ्प
+ऱ्फ
+ऱ्ब
+ऱ्भ
+ऱ्म
+ऱ्य
+ऱ्र
+ऱ्ऱ
+ऱ्ल
+ऱ्ळ
+ऱ्ऴ
+ऱ्व
+ऱ्श
+ऱ्ष
+ऱ्स
+ऱ्ह
+ल्क
+ल्ख
+ल्ग
+ल्घ
+ल्ङ
+ल्च
+ल्छ
+ल्ज
+ल्झ
+ल्ञ
+ल्ट
+ल्ठ
+ल्ड
+ल्ढ
+ल्ण
+ल्त
+ल्थ
+ल्द
+ल्ध
+ल्न
+ल्ऩ
+ल्प
+ल्फ
+ल्ब
+ल्भ
+ल्म
+ल्य
+ल्र
+ल्ऱ
+ल्ल
+ल्ळ
+ल्ऴ
+ल्व
+ल्श
+ल्ष
+ल्स
+ल्ह
+ळ्क
+ळ्ख
+ळ्ग
+ळ्घ
+ळ्ङ
+ळ्च
+ळ्छ
+ळ्ज
+ळ्झ
+ळ्ञ
+ळ्ट
+ळ्ठ
+ळ्ड
+ळ्ढ
+ळ्ण
+ळ्त
+ळ्थ
+ळ्द
+ळ्ध
+ळ्न
+ळ्ऩ
+ळ्प
+ळ्फ
+ळ्ब
+ळ्भ
+ळ्म
+ळ्य
+ळ्र
+ळ्ऱ
+ळ्ल
+ळ्ळ
+ळ्ऴ
+ळ्व
+ळ्श
+ळ्ष
+ळ्स
+ळ्ह
+ऴ्क
+ऴ्ख
+ऴ्ग
+ऴ्घ
+ऴ्ङ
+ऴ्च
+ऴ्छ
+ऴ्ज
+ऴ्झ
+ऴ्ञ
+ऴ्ट
+ऴ्ठ
+ऴ्ड
+ऴ्ढ
+ऴ्ण
+ऴ्त
+ऴ्थ
+ऴ्द
+ऴ्ध
+ऴ्न
+ऴ्ऩ
+ऴ्प
+ऴ्फ
+ऴ्ब
+ऴ्भ
+ऴ्म
+ऴ्य
+ऴ्र
+ऴ्ऱ
+ऴ्ल
+ऴ्ळ
+ऴ्ऴ
+ऴ्व
+ऴ्श
+ऴ्ष
+ऴ्स
+ऴ्ह
+व्क
+व्ख
+व्ग
+व्घ
+व्ङ
+व्च
+व्छ
+व्ज
+व्झ
+व्ञ
+व्ट
+व्ठ
+व्ड
+व्ढ
+व्ण
+व्त
+व्थ
+व्द
+व्ध
+व्न
+व्ऩ
+व्प
+व्फ
+व्ब
+व्भ
+व्म
+व्य
+व्र
+व्ऱ
+व्ल
+व्ळ
+व्ऴ
+व्व
+व्श
+व्ष
+व्स
+व्ह
+श्क
+श्ख
+श्ग
+श्घ
+श्ङ
+श्च
+श्छ
+श्ज
+श्झ
+श्ञ
+श्ट
+श्ठ
+श्ड
+श्ढ
+श्ण
+श्त
+श्थ
+श्द
+श्ध
+श्न
+श्ऩ
+श्प
+श्फ
+श्ब
+श्भ
+श्म
+श्य
+श्र
+श्ऱ
+श्ल
+श्ळ
+श्ऴ
+श्व
+श्श
+श्ष
+श्स
+श्ह
+ष्क
+ष्ख
+ष्ग
+ष्घ
+ष्ङ
+ष्च
+ष्छ
+ष्ज
+ष्झ
+ष्ञ
+ष्ट
+ष्ठ
+ष्ड
+ष्ढ
+ष्ण
+ष्त
+ष्थ
+ष्द
+ष्ध
+ष्न
+ष्ऩ
+ष्प
+ष्फ
+ष्ब
+ष्भ
+ष्म
+ष्य
+ष्र
+ष्ऱ
+ष्ल
+ष्ळ
+ष्ऴ
+ष्व
+ष्श
+ष्ष
+ष्स
+ष्ह
+स्क
+स्ख
+स्ग
+स्घ
+स्ङ
+स्च
+स्छ
+स्ज
+स्झ
+स्ञ
+स्ट
+स्ठ
+स्ड
+स्ढ
+स्ण
+स्त
+स्थ
+स्द
+स्ध
+स्न
+स्ऩ
+स्प
+स्फ
+स्ब
+स्भ
+स्म
+स्य
+स्र
+स्ऱ
+स्ल
+स्ळ
+स्ऴ
+स्व
+स्श
+स्ष
+स्स
+स्ह
+ह्क
+ह्ख
+ह्ग
+ह्घ
+ह्ङ
+ह्च
+ह्छ
+ह्ज
+ह्झ
+ह्ञ
+ह्ट
+ह्ठ
+ह्ड
+ह्ढ
+ह्ण
+ह्त
+ह्थ
+ह्द
+ह्ध
+ह्न
+ह्ऩ
+ह्प
+ह्फ
+ह्ब
+ह्भ
+ह्म
+ह्य
+ह्र
+ह्ऱ
+ह्ल
+ह्ळ
+ह्ऴ
+ह्व
+ह्श
+ह्ष
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/misc/MANIFEST
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..fd5e6e6
--- /dev/null
@@ -0,0 +1 @@
+codepoint, imagepath, rawcode, desc
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..e91003a
--- /dev/null
@@ -0,0 +1,34 @@
+ક
+ખ
+ગ
+ઘ
+ઙ
+ચ
+છ
+જ
+ઝ
+ઞ
+ટ
+ઠ
+ડ
+ઢ
+ણ
+ત
+થ
+દ
+ધ
+ન
+પ
+ફ
+બ
+ભ
+મ
+ય
+ર
+લ
+ળ
+વ
+શ
+ષ
+સ
+હ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..3650298
--- /dev/null
@@ -0,0 +1,12 @@
+ા
+િ
+ી
+ુ
+ૂ
+ૃ
+ૅ
+ે
+ૈ
+ૉ
+ો
+ૌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..eabae39
--- /dev/null
@@ -0,0 +1,10 @@
+૦
+૧
+૨
+૩
+૪
+૫
+૬
+૭
+૮
+૯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..116eb60
--- /dev/null
@@ -0,0 +1,13 @@
+અ
+આ
+ઇ
+ઈ
+ઉ
+ઊ
+ઋ
+ઍ
+એ
+ઐ
+ઑ
+ઓ
+ઔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..218e507
--- /dev/null
@@ -0,0 +1,7 @@
+ઁ
+ં
+ઃ
+઼
+ઽ
+્
+ૐ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..1490dfe
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..f7ff3af
--- /dev/null
@@ -0,0 +1,170 @@
+કૅ
+ખૅ
+ગૅ
+ઘૅ
+ઙૅ
+ચૅ
+છૅ
+જૅ
+ઝૅ
+ઞૅ
+ટૅ
+ઠૅ
+ડૅ
+ઢૅ
+ણૅ
+તૅ
+થૅ
+દૅ
+ધૅ
+નૅ
+પૅ
+ફૅ
+બૅ
+ભૅ
+મૅ
+યૅ
+રૅ
+લૅ
+ળૅ
+વૅ
+શૅ
+ષૅ
+સૅ
+હૅ
+કે
+ખે
+ગે
+ઘે
+ઙે
+ચે
+છે
+જે
+ઝે
+ઞે
+ટે
+ઠે
+ડે
+ઢે
+ણે
+તે
+થે
+દે
+ધે
+ને
+પે
+ફે
+બે
+ભે
+મે
+યે
+રે
+લે
+ળે
+વે
+શે
+ષે
+સે
+હે
+કૈ
+ખૈ
+ગૈ
+ઘૈ
+ઙૈ
+ચૈ
+છૈ
+જૈ
+ઝૈ
+ઞૈ
+ટૈ
+ઠૈ
+ડૈ
+ઢૈ
+ણૈ
+તૈ
+થૈ
+દૈ
+ધૈ
+નૈ
+પૈ
+ફૈ
+બૈ
+ભૈ
+મૈ
+યૈ
+રૈ
+લૈ
+ળૈ
+વૈ
+શૈ
+ષૈ
+સૈ
+હૈ
+કઁ
+ખઁ
+ગઁ
+ઘઁ
+ઙઁ
+ચઁ
+છઁ
+જઁ
+ઝઁ
+ઞઁ
+ટઁ
+ઠઁ
+ડઁ
+ઢઁ
+ણઁ
+તઁ
+થઁ
+દઁ
+ધઁ
+નઁ
+પઁ
+ફઁ
+બઁ
+ભઁ
+મઁ
+યઁ
+રઁ
+લઁ
+ળઁ
+વઁ
+શઁ
+ષઁ
+સઁ
+હઁ
+કં
+ખં
+ગં
+ઘં
+ઙં
+ચં
+છં
+જં
+ઝં
+ઞં
+ટં
+ઠં
+ડં
+ઢં
+ણં
+તં
+થં
+દં
+ધં
+નં
+પં
+ફં
+બં
+ભં
+મં
+યં
+રં
+લં
+ળં
+વં
+શં
+ષં
+સં
+હં
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..fa658cf
--- /dev/null
@@ -0,0 +1,170 @@
+કુ
+ખુ
+ગુ
+ઘુ
+ઙુ
+ચુ
+છુ
+જુ
+ઝુ
+ઞુ
+ટુ
+ઠુ
+ડુ
+ઢુ
+ણુ
+તુ
+થુ
+દુ
+ધુ
+નુ
+પુ
+ફુ
+બુ
+ભુ
+મુ
+યુ
+રુ
+લુ
+ળુ
+વુ
+શુ
+ષુ
+સુ
+હુ
+કૂ
+ખૂ
+ગૂ
+ઘૂ
+ઙૂ
+ચૂ
+છૂ
+જૂ
+ઝૂ
+ઞૂ
+ટૂ
+ઠૂ
+ડૂ
+ઢૂ
+ણૂ
+તૂ
+થૂ
+દૂ
+ધૂ
+નૂ
+પૂ
+ફૂ
+બૂ
+ભૂ
+મૂ
+યૂ
+રૂ
+લૂ
+ળૂ
+વૂ
+શૂ
+ષૂ
+સૂ
+હૂ
+કૃ
+ખૃ
+ગૃ
+ઘૃ
+ઙૃ
+ચૃ
+છૃ
+જૃ
+ઝૃ
+ઞૃ
+ટૃ
+ઠૃ
+ડૃ
+ઢૃ
+ણૃ
+તૃ
+થૃ
+દૃ
+ધૃ
+નૃ
+પૃ
+ફૃ
+બૃ
+ભૃ
+મૃ
+યૃ
+રૃ
+લૃ
+ળૃ
+વૃ
+શૃ
+ષૃ
+સૃ
+હૃ
+કૄ
+ખૄ
+ગૄ
+ઘૄ
+ઙૄ
+ચૄ
+છૄ
+જૄ
+ઝૄ
+ઞૄ
+ટૄ
+ઠૄ
+ડૄ
+ઢૄ
+ણૄ
+તૄ
+થૄ
+દૄ
+ધૄ
+નૄ
+પૄ
+ફૄ
+બૄ
+ભૄ
+મૄ
+યૄ
+રૄ
+લૄ
+ળૄ
+વૄ
+શૄ
+ષૄ
+સૄ
+હૄ
+ક્
+ખ્
+ગ્
+ઘ્
+ઙ્
+ચ્
+છ્
+જ્
+ઝ્
+ઞ્
+ટ્
+ઠ્
+ડ્
+ઢ્
+ણ્
+ત્
+થ્
+દ્
+ધ્
+ન્
+પ્
+ફ્
+બ્
+ભ્
+મ્
+ય્
+ર્
+લ્
+ળ્
+વ્
+શ્
+ષ્
+સ્
+હ્
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..6211c9b
--- /dev/null
@@ -0,0 +1,1156 @@
+ક્ક
+ક્ખ
+ક્ગ
+ક્ઘ
+ક્ઙ
+ક્ચ
+ક્છ
+ક્જ
+ક્ઝ
+ક્ઞ
+ક્ટ
+ક્ઠ
+ક્ડ
+ક્ઢ
+ક્ણ
+ક્ત
+ક્થ
+ક્દ
+ક્ધ
+ક્ન
+ક્પ
+ક્ફ
+ક્બ
+ક્ભ
+ક્મ
+ક્ય
+ક્ર
+ક્લ
+ક્ળ
+ક્વ
+ક્શ
+ક્ષ
+ક્સ
+ક્હ
+ખ્ક
+ખ્ખ
+ખ્ગ
+ખ્ઘ
+ખ્ઙ
+ખ્ચ
+ખ્છ
+ખ્જ
+ખ્ઝ
+ખ્ઞ
+ખ્ટ
+ખ્ઠ
+ખ્ડ
+ખ્ઢ
+ખ્ણ
+ખ્ત
+ખ્થ
+ખ્દ
+ખ્ધ
+ખ્ન
+ખ્પ
+ખ્ફ
+ખ્બ
+ખ્ભ
+ખ્મ
+ખ્ય
+ખ્ર
+ખ્લ
+ખ્ળ
+ખ્વ
+ખ્શ
+ખ્ષ
+ખ્સ
+ખ્હ
+ગ્ક
+ગ્ખ
+ગ્ગ
+ગ્ઘ
+ગ્ઙ
+ગ્ચ
+ગ્છ
+ગ્જ
+ગ્ઝ
+ગ્ઞ
+ગ્ટ
+ગ્ઠ
+ગ્ડ
+ગ્ઢ
+ગ્ણ
+ગ્ત
+ગ્થ
+ગ્દ
+ગ્ધ
+ગ્ન
+ગ્પ
+ગ્ફ
+ગ્બ
+ગ્ભ
+ગ્મ
+ગ્ય
+ગ્ર
+ગ્લ
+ગ્ળ
+ગ્વ
+ગ્શ
+ગ્ષ
+ગ્સ
+ગ્હ
+ઘ્ક
+ઘ્ખ
+ઘ્ગ
+ઘ્ઘ
+ઘ્ઙ
+ઘ્ચ
+ઘ્છ
+ઘ્જ
+ઘ્ઝ
+ઘ્ઞ
+ઘ્ટ
+ઘ્ઠ
+ઘ્ડ
+ઘ્ઢ
+ઘ્ણ
+ઘ્ત
+ઘ્થ
+ઘ્દ
+ઘ્ધ
+ઘ્ન
+ઘ્પ
+ઘ્ફ
+ઘ્બ
+ઘ્ભ
+ઘ્મ
+ઘ્ય
+ઘ્ર
+ઘ્લ
+ઘ્ળ
+ઘ્વ
+ઘ્શ
+ઘ્ષ
+ઘ્સ
+ઘ્હ
+ઙ્ક
+ઙ્ખ
+ઙ્ગ
+ઙ્ઘ
+ઙ્ઙ
+ઙ્ચ
+ઙ્છ
+ઙ્જ
+ઙ્ઝ
+ઙ્ઞ
+ઙ્ટ
+ઙ્ઠ
+ઙ્ડ
+ઙ્ઢ
+ઙ્ણ
+ઙ્ત
+ઙ્થ
+ઙ્દ
+ઙ્ધ
+ઙ્ન
+ઙ્પ
+ઙ્ફ
+ઙ્બ
+ઙ્ભ
+ઙ્મ
+ઙ્ય
+ઙ્ર
+ઙ્લ
+ઙ્ળ
+ઙ્વ
+ઙ્શ
+ઙ્ષ
+ઙ્સ
+ઙ્હ
+ચ્ક
+ચ્ખ
+ચ્ગ
+ચ્ઘ
+ચ્ઙ
+ચ્ચ
+ચ્છ
+ચ્જ
+ચ્ઝ
+ચ્ઞ
+ચ્ટ
+ચ્ઠ
+ચ્ડ
+ચ્ઢ
+ચ્ણ
+ચ્ત
+ચ્થ
+ચ્દ
+ચ્ધ
+ચ્ન
+ચ્પ
+ચ્ફ
+ચ્બ
+ચ્ભ
+ચ્મ
+ચ્ય
+ચ્ર
+ચ્લ
+ચ્ળ
+ચ્વ
+ચ્શ
+ચ્ષ
+ચ્સ
+ચ્હ
+છ્ક
+છ્ખ
+છ્ગ
+છ્ઘ
+છ્ઙ
+છ્ચ
+છ્છ
+છ્જ
+છ્ઝ
+છ્ઞ
+છ્ટ
+છ્ઠ
+છ્ડ
+છ્ઢ
+છ્ણ
+છ્ત
+છ્થ
+છ્દ
+છ્ધ
+છ્ન
+છ્પ
+છ્ફ
+છ્બ
+છ્ભ
+છ્મ
+છ્ય
+છ્ર
+છ્લ
+છ્ળ
+છ્વ
+છ્શ
+છ્ષ
+છ્સ
+છ્હ
+જ્ક
+જ્ખ
+જ્ગ
+જ્ઘ
+જ્ઙ
+જ્ચ
+જ્છ
+જ્જ
+જ્ઝ
+જ્ઞ
+જ્ટ
+જ્ઠ
+જ્ડ
+જ્ઢ
+જ્ણ
+જ્ત
+જ્થ
+જ્દ
+જ્ધ
+જ્ન
+જ્પ
+જ્ફ
+જ્બ
+જ્ભ
+જ્મ
+જ્ય
+જ્ર
+જ્લ
+જ્ળ
+જ્વ
+જ્શ
+જ્ષ
+જ્સ
+જ્હ
+ઝ્ક
+ઝ્ખ
+ઝ્ગ
+ઝ્ઘ
+ઝ્ઙ
+ઝ્ચ
+ઝ્છ
+ઝ્જ
+ઝ્ઝ
+ઝ્ઞ
+ઝ્ટ
+ઝ્ઠ
+ઝ્ડ
+ઝ્ઢ
+ઝ્ણ
+ઝ્ત
+ઝ્થ
+ઝ્દ
+ઝ્ધ
+ઝ્ન
+ઝ્પ
+ઝ્ફ
+ઝ્બ
+ઝ્ભ
+ઝ્મ
+ઝ્ય
+ઝ્ર
+ઝ્લ
+ઝ્ળ
+ઝ્વ
+ઝ્શ
+ઝ્ષ
+ઝ્સ
+ઝ્હ
+ઞ્ક
+ઞ્ખ
+ઞ્ગ
+ઞ્ઘ
+ઞ્ઙ
+ઞ્ચ
+ઞ્છ
+ઞ્જ
+ઞ્ઝ
+ઞ્ઞ
+ઞ્ટ
+ઞ્ઠ
+ઞ્ડ
+ઞ્ઢ
+ઞ્ણ
+ઞ્ત
+ઞ્થ
+ઞ્દ
+ઞ્ધ
+ઞ્ન
+ઞ્પ
+ઞ્ફ
+ઞ્બ
+ઞ્ભ
+ઞ્મ
+ઞ્ય
+ઞ્ર
+ઞ્લ
+ઞ્ળ
+ઞ્વ
+ઞ્શ
+ઞ્ષ
+ઞ્સ
+ઞ્હ
+ટ્ક
+ટ્ખ
+ટ્ગ
+ટ્ઘ
+ટ્ઙ
+ટ્ચ
+ટ્છ
+ટ્જ
+ટ્ઝ
+ટ્ઞ
+ટ્ટ
+ટ્ઠ
+ટ્ડ
+ટ્ઢ
+ટ્ણ
+ટ્ત
+ટ્થ
+ટ્દ
+ટ્ધ
+ટ્ન
+ટ્પ
+ટ્ફ
+ટ્બ
+ટ્ભ
+ટ્મ
+ટ્ય
+ટ્ર
+ટ્લ
+ટ્ળ
+ટ્વ
+ટ્શ
+ટ્ષ
+ટ્સ
+ટ્હ
+ઠ્ક
+ઠ્ખ
+ઠ્ગ
+ઠ્ઘ
+ઠ્ઙ
+ઠ્ચ
+ઠ્છ
+ઠ્જ
+ઠ્ઝ
+ઠ્ઞ
+ઠ્ટ
+ઠ્ઠ
+ઠ્ડ
+ઠ્ઢ
+ઠ્ણ
+ઠ્ત
+ઠ્થ
+ઠ્દ
+ઠ્ધ
+ઠ્ન
+ઠ્પ
+ઠ્ફ
+ઠ્બ
+ઠ્ભ
+ઠ્મ
+ઠ્ય
+ઠ્ર
+ઠ્લ
+ઠ્ળ
+ઠ્વ
+ઠ્શ
+ઠ્ષ
+ઠ્સ
+ઠ્હ
+ડ્ક
+ડ્ખ
+ડ્ગ
+ડ્ઘ
+ડ્ઙ
+ડ્ચ
+ડ્છ
+ડ્જ
+ડ્ઝ
+ડ્ઞ
+ડ્ટ
+ડ્ઠ
+ડ્ડ
+ડ્ઢ
+ડ્ણ
+ડ્ત
+ડ્થ
+ડ્દ
+ડ્ધ
+ડ્ન
+ડ્પ
+ડ્ફ
+ડ્બ
+ડ્ભ
+ડ્મ
+ડ્ય
+ડ્ર
+ડ્લ
+ડ્ળ
+ડ્વ
+ડ્શ
+ડ્ષ
+ડ્સ
+ડ્હ
+ઢ્ક
+ઢ્ખ
+ઢ્ગ
+ઢ્ઘ
+ઢ્ઙ
+ઢ્ચ
+ઢ્છ
+ઢ્જ
+ઢ્ઝ
+ઢ્ઞ
+ઢ્ટ
+ઢ્ઠ
+ઢ્ડ
+ઢ્ઢ
+ઢ્ણ
+ઢ્ત
+ઢ્થ
+ઢ્દ
+ઢ્ધ
+ઢ્ન
+ઢ્પ
+ઢ્ફ
+ઢ્બ
+ઢ્ભ
+ઢ્મ
+ઢ્ય
+ઢ્ર
+ઢ્લ
+ઢ્ળ
+ઢ્વ
+ઢ્શ
+ઢ્ષ
+ઢ્સ
+ઢ્હ
+ણ્ક
+ણ્ખ
+ણ્ગ
+ણ્ઘ
+ણ્ઙ
+ણ્ચ
+ણ્છ
+ણ્જ
+ણ્ઝ
+ણ્ઞ
+ણ્ટ
+ણ્ઠ
+ણ્ડ
+ણ્ઢ
+ણ્ણ
+ણ્ત
+ણ્થ
+ણ્દ
+ણ્ધ
+ણ્ન
+ણ્પ
+ણ્ફ
+ણ્બ
+ણ્ભ
+ણ્મ
+ણ્ય
+ણ્ર
+ણ્લ
+ણ્ળ
+ણ્વ
+ણ્શ
+ણ્ષ
+ણ્સ
+ણ્હ
+ત્ક
+ત્ખ
+ત્ગ
+ત્ઘ
+ત્ઙ
+ત્ચ
+ત્છ
+ત્જ
+ત્ઝ
+ત્ઞ
+ત્ટ
+ત્ઠ
+ત્ડ
+ત્ઢ
+ત્ણ
+ત્ત
+ત્થ
+ત્દ
+ત્ધ
+ત્ન
+ત્પ
+ત્ફ
+ત્બ
+ત્ભ
+ત્મ
+ત્ય
+ત્ર
+ત્લ
+ત્ળ
+ત્વ
+ત્શ
+ત્ષ
+ત્સ
+ત્હ
+થ્ક
+થ્ખ
+થ્ગ
+થ્ઘ
+થ્ઙ
+થ્ચ
+થ્છ
+થ્જ
+થ્ઝ
+થ્ઞ
+થ્ટ
+થ્ઠ
+થ્ડ
+થ્ઢ
+થ્ણ
+થ્ત
+થ્થ
+થ્દ
+થ્ધ
+થ્ન
+થ્પ
+થ્ફ
+થ્બ
+થ્ભ
+થ્મ
+થ્ય
+થ્ર
+થ્લ
+થ્ળ
+થ્વ
+થ્શ
+થ્ષ
+થ્સ
+થ્હ
+દ્ક
+દ્ખ
+દ્ગ
+દ્ઘ
+દ્ઙ
+દ્ચ
+દ્છ
+દ્જ
+દ્ઝ
+દ્ઞ
+દ્ટ
+દ્ઠ
+દ્ડ
+દ્ઢ
+દ્ણ
+દ્ત
+દ્થ
+દ્દ
+દ્ધ
+દ્ન
+દ્પ
+દ્ફ
+દ્બ
+દ્ભ
+દ્મ
+દ્ય
+દ્ર
+દ્લ
+દ્ળ
+દ્વ
+દ્શ
+દ્ષ
+દ્સ
+દ્હ
+ધ્ક
+ધ્ખ
+ધ્ગ
+ધ્ઘ
+ધ્ઙ
+ધ્ચ
+ધ્છ
+ધ્જ
+ધ્ઝ
+ધ્ઞ
+ધ્ટ
+ધ્ઠ
+ધ્ડ
+ધ્ઢ
+ધ્ણ
+ધ્ત
+ધ્થ
+ધ્દ
+ધ્ધ
+ધ્ન
+ધ્પ
+ધ્ફ
+ધ્બ
+ધ્ભ
+ધ્મ
+ધ્ય
+ધ્ર
+ધ્લ
+ધ્ળ
+ધ્વ
+ધ્શ
+ધ્ષ
+ધ્સ
+ધ્હ
+ન્ક
+ન્ખ
+ન્ગ
+ન્ઘ
+ન્ઙ
+ન્ચ
+ન્છ
+ન્જ
+ન્ઝ
+ન્ઞ
+ન્ટ
+ન્ઠ
+ન્ડ
+ન્ઢ
+ન્ણ
+ન્ત
+ન્થ
+ન્દ
+ન્ધ
+ન્ન
+ન્પ
+ન્ફ
+ન્બ
+ન્ભ
+ન્મ
+ન્ય
+ન્ર
+ન્લ
+ન્ળ
+ન્વ
+ન્શ
+ન્ષ
+ન્સ
+ન્હ
+પ્ક
+પ્ખ
+પ્ગ
+પ્ઘ
+પ્ઙ
+પ્ચ
+પ્છ
+પ્જ
+પ્ઝ
+પ્ઞ
+પ્ટ
+પ્ઠ
+પ્ડ
+પ્ઢ
+પ્ણ
+પ્ત
+પ્થ
+પ્દ
+પ્ધ
+પ્ન
+પ્પ
+પ્ફ
+પ્બ
+પ્ભ
+પ્મ
+પ્ય
+પ્ર
+પ્લ
+પ્ળ
+પ્વ
+પ્શ
+પ્ષ
+પ્સ
+પ્હ
+ફ્ક
+ફ્ખ
+ફ્ગ
+ફ્ઘ
+ફ્ઙ
+ફ્ચ
+ફ્છ
+ફ્જ
+ફ્ઝ
+ફ્ઞ
+ફ્ટ
+ફ્ઠ
+ફ્ડ
+ફ્ઢ
+ફ્ણ
+ફ્ત
+ફ્થ
+ફ્દ
+ફ્ધ
+ફ્ન
+ફ્પ
+ફ્ફ
+ફ્બ
+ફ્ભ
+ફ્મ
+ફ્ય
+ફ્ર
+ફ્લ
+ફ્ળ
+ફ્વ
+ફ્શ
+ફ્ષ
+ફ્સ
+ફ્હ
+બ્ક
+બ્ખ
+બ્ગ
+બ્ઘ
+બ્ઙ
+બ્ચ
+બ્છ
+બ્જ
+બ્ઝ
+બ્ઞ
+બ્ટ
+બ્ઠ
+બ્ડ
+બ્ઢ
+બ્ણ
+બ્ત
+બ્થ
+બ્દ
+બ્ધ
+બ્ન
+બ્પ
+બ્ફ
+બ્બ
+બ્ભ
+બ્મ
+બ્ય
+બ્ર
+બ્લ
+બ્ળ
+બ્વ
+બ્શ
+બ્ષ
+બ્સ
+બ્હ
+ભ્ક
+ભ્ખ
+ભ્ગ
+ભ્ઘ
+ભ્ઙ
+ભ્ચ
+ભ્છ
+ભ્જ
+ભ્ઝ
+ભ્ઞ
+ભ્ટ
+ભ્ઠ
+ભ્ડ
+ભ્ઢ
+ભ્ણ
+ભ્ત
+ભ્થ
+ભ્દ
+ભ્ધ
+ભ્ન
+ભ્પ
+ભ્ફ
+ભ્બ
+ભ્ભ
+ભ્મ
+ભ્ય
+ભ્ર
+ભ્લ
+ભ્ળ
+ભ્વ
+ભ્શ
+ભ્ષ
+ભ્સ
+ભ્હ
+મ્ક
+મ્ખ
+મ્ગ
+મ્ઘ
+મ્ઙ
+મ્ચ
+મ્છ
+મ્જ
+મ્ઝ
+મ્ઞ
+મ્ટ
+મ્ઠ
+મ્ડ
+મ્ઢ
+મ્ણ
+મ્ત
+મ્થ
+મ્દ
+મ્ધ
+મ્ન
+મ્પ
+મ્ફ
+મ્બ
+મ્ભ
+મ્મ
+મ્ય
+મ્ર
+મ્લ
+મ્ળ
+મ્વ
+મ્શ
+મ્ષ
+મ્સ
+મ્હ
+ય્ક
+ય્ખ
+ય્ગ
+ય્ઘ
+ય્ઙ
+ય્ચ
+ય્છ
+ય્જ
+ય્ઝ
+ય્ઞ
+ય્ટ
+ય્ઠ
+ય્ડ
+ય્ઢ
+ય્ણ
+ય્ત
+ય્થ
+ય્દ
+ય્ધ
+ય્ન
+ય્પ
+ય્ફ
+ય્બ
+ય્ભ
+ય્મ
+ય્ય
+ય્ર
+ય્લ
+ય્ળ
+ય્વ
+ય્શ
+ય્ષ
+ય્સ
+ય્હ
+ર્ક
+ર્ખ
+ર્ગ
+ર્ઘ
+ર્ઙ
+ર્ચ
+ર્છ
+ર્જ
+ર્ઝ
+ર્ઞ
+ર્ટ
+ર્ઠ
+ર્ડ
+ર્ઢ
+ર્ણ
+ર્ત
+ર્થ
+ર્દ
+ર્ધ
+ર્ન
+ર્પ
+ર્ફ
+ર્બ
+ર્ભ
+ર્મ
+ર્ય
+ર્ર
+ર્લ
+ર્ળ
+ર્વ
+ર્શ
+ર્ષ
+ર્સ
+ર્હ
+લ્ક
+લ્ખ
+લ્ગ
+લ્ઘ
+લ્ઙ
+લ્ચ
+લ્છ
+લ્જ
+લ્ઝ
+લ્ઞ
+લ્ટ
+લ્ઠ
+લ્ડ
+લ્ઢ
+લ્ણ
+લ્ત
+લ્થ
+લ્દ
+લ્ધ
+લ્ન
+લ્પ
+લ્ફ
+લ્બ
+લ્ભ
+લ્મ
+લ્ય
+લ્ર
+લ્લ
+લ્ળ
+લ્વ
+લ્શ
+લ્ષ
+લ્સ
+લ્હ
+ળ્ક
+ળ્ખ
+ળ્ગ
+ળ્ઘ
+ળ્ઙ
+ળ્ચ
+ળ્છ
+ળ્જ
+ળ્ઝ
+ળ્ઞ
+ળ્ટ
+ળ્ઠ
+ળ્ડ
+ળ્ઢ
+ળ્ણ
+ળ્ત
+ળ્થ
+ળ્દ
+ળ્ધ
+ળ્ન
+ળ્પ
+ળ્ફ
+ળ્બ
+ળ્ભ
+ળ્મ
+ળ્ય
+ળ્ર
+ળ્લ
+ળ્ળ
+ળ્વ
+ળ્શ
+ળ્ષ
+ળ્સ
+ળ્હ
+વ્ક
+વ્ખ
+વ્ગ
+વ્ઘ
+વ્ઙ
+વ્ચ
+વ્છ
+વ્જ
+વ્ઝ
+વ્ઞ
+વ્ટ
+વ્ઠ
+વ્ડ
+વ્ઢ
+વ્ણ
+વ્ત
+વ્થ
+વ્દ
+વ્ધ
+વ્ન
+વ્પ
+વ્ફ
+વ્બ
+વ્ભ
+વ્મ
+વ્ય
+વ્ર
+વ્લ
+વ્ળ
+વ્વ
+વ્શ
+વ્ષ
+વ્સ
+વ્હ
+શ્ક
+શ્ખ
+શ્ગ
+શ્ઘ
+શ્ઙ
+શ્ચ
+શ્છ
+શ્જ
+શ્ઝ
+શ્ઞ
+શ્ટ
+શ્ઠ
+શ્ડ
+શ્ઢ
+શ્ણ
+શ્ત
+શ્થ
+શ્દ
+શ્ધ
+શ્ન
+શ્પ
+શ્ફ
+શ્બ
+શ્ભ
+શ્મ
+શ્ય
+શ્ર
+શ્લ
+શ્ળ
+શ્વ
+શ્શ
+શ્ષ
+શ્સ
+શ્હ
+ષ્ક
+ષ્ખ
+ષ્ગ
+ષ્ઘ
+ષ્ઙ
+ષ્ચ
+ષ્છ
+ષ્જ
+ષ્ઝ
+ષ્ઞ
+ષ્ટ
+ષ્ઠ
+ષ્ડ
+ષ્ઢ
+ષ્ણ
+ષ્ત
+ષ્થ
+ષ્દ
+ષ્ધ
+ષ્ન
+ષ્પ
+ષ્ફ
+ષ્બ
+ષ્ભ
+ષ્મ
+ષ્ય
+ષ્ર
+ષ્લ
+ષ્ળ
+ષ્વ
+ષ્શ
+ષ્ષ
+ષ્સ
+ષ્હ
+સ્ક
+સ્ખ
+સ્ગ
+સ્ઘ
+સ્ઙ
+સ્ચ
+સ્છ
+સ્જ
+સ્ઝ
+સ્ઞ
+સ્ટ
+સ્ઠ
+સ્ડ
+સ્ઢ
+સ્ણ
+સ્ત
+સ્થ
+સ્દ
+સ્ધ
+સ્ન
+સ્પ
+સ્ફ
+સ્બ
+સ્ભ
+સ્મ
+સ્ય
+સ્ર
+સ્લ
+સ્ળ
+સ્વ
+સ્શ
+સ્ષ
+સ્સ
+સ્હ
+હ્ક
+હ્ખ
+હ્ગ
+હ્ઘ
+હ્ઙ
+હ્ચ
+હ્છ
+હ્જ
+હ્ઝ
+હ્ઞ
+હ્ટ
+હ્ઠ
+હ્ડ
+હ્ઢ
+હ્ણ
+હ્ત
+હ્થ
+હ્દ
+હ્ધ
+હ્ન
+હ્પ
+હ્ફ
+હ્બ
+હ્ભ
+હ્મ
+હ્ય
+હ્ર
+હ્લ
+હ્ળ
+હ્વ
+હ્શ
+હ્ષ
+હ્સ
+હ્હ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt
new file mode 100644 (file)
index 0000000..27a39f6
--- /dev/null
@@ -0,0 +1,2 @@
+ਕ੍ਹ
+ਤ੍ਯੋ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..ee8b3be
--- /dev/null
@@ -0,0 +1,38 @@
+ਕ
+ਖ
+ਗ
+ਘ
+ਙ
+ਚ
+ਛ
+ਜ
+ਝ
+ਞ
+ਟ
+ਠ
+ਡ
+ਢ
+ਣ
+ਤ
+ਥ
+ਦ
+ਧ
+ਨ
+ਪ
+ਫ
+ਬ
+ਭ
+ਮ
+ਯ
+ਰ
+ਲ
+ਲ਼
+ਵ
+ਸ਼
+ਸ
+ਹ
+ਖ਼
+ਗ਼
+ਜ਼
+ੜ
+ਫ਼
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..a934caa
--- /dev/null
@@ -0,0 +1,9 @@
+ਾ
+ਿ
+ੀ
+ੁ
+ੂ
+ੇ
+ੈ
+ੋ
+ੌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..d08b7a8
--- /dev/null
@@ -0,0 +1,10 @@
+੦
+੧
+੨
+੩
+੪
+੫
+੬
+੭
+੮
+੯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt
new file mode 100644 (file)
index 0000000..8565c88
--- /dev/null
@@ -0,0 +1,6 @@
+ੰ
+ੱ
+ੲ
+ੳ
+ੴ
+ੵ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..05827ca
--- /dev/null
@@ -0,0 +1,10 @@
+ਅ
+ਆ
+ਇ
+ਈ
+ਉ
+ਊ
+ਏ
+ਐ
+ਓ
+ਔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..adb725e
--- /dev/null
@@ -0,0 +1,6 @@
+ਁ
+ਂ
+ਃ
+਼
+੍
+ੑ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..c213616
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-GurmukhiSpecific.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..7fdf6e4
--- /dev/null
@@ -0,0 +1,22 @@
+ਉਂ
+ਊਂ
+ਏਂ
+ਐਂ
+ਓਂ
+ਔਂ
+ਠਂ
+ਠੇ
+ਠੈ
+ਠੋ
+ਠੌ
+ਠੰ
+ਨਂ
+ਨੇ
+ਨੈ
+ਨੋ
+ਨੌ
+ਨੰ
+ਠੱ
+ਨੱ
+ਲੱ
+ਲ਼ੱ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..63d54a5
--- /dev/null
@@ -0,0 +1,2 @@
+ੳ
+ੲ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..eb2e8ee
--- /dev/null
@@ -0,0 +1,152 @@
+ਕ੍ਯ
+ਖ੍ਯ
+ਗ੍ਯ
+ਘ੍ਯ
+ਙ੍ਯ
+ਚ੍ਯ
+ਛ੍ਯ
+ਜ੍ਯ
+ਝ੍ਯ
+ਞ੍ਯ
+ਟ੍ਯ
+ਠ੍ਯ
+ਡ੍ਯ
+ਢ੍ਯ
+ਣ੍ਯ
+ਤ੍ਯ
+ਥ੍ਯ
+ਦ੍ਯ
+ਧ੍ਯ
+ਨ੍ਯ
+ਪ੍ਯ
+ਫ੍ਯ
+ਬ੍ਯ
+ਭ੍ਯ
+ਮ੍ਯ
+ਯ੍ਯ
+ਰ੍ਯ
+ਲ੍ਯ
+ਲ਼੍ਯ
+ਵ੍ਯ
+ਸ਼੍ਯ
+ਸ੍ਯ
+ਹ੍ਯ
+ਖ਼੍ਯ
+ਗ਼੍ਯ
+ਜ਼੍ਯ
+ੜ੍ਯ
+ਫ਼੍ਯ
+ਕ੍ਰ
+ਖ੍ਰ
+ਗ੍ਰ
+ਘ੍ਰ
+ਙ੍ਰ
+ਚ੍ਰ
+ਛ੍ਰ
+ਜ੍ਰ
+ਝ੍ਰ
+ਞ੍ਰ
+ਟ੍ਰ
+ਠ੍ਰ
+ਡ੍ਰ
+ਢ੍ਰ
+ਣ੍ਰ
+ਤ੍ਰ
+ਥ੍ਰ
+ਦ੍ਰ
+ਧ੍ਰ
+ਨ੍ਰ
+ਪ੍ਰ
+ਫ੍ਰ
+ਬ੍ਰ
+ਭ੍ਰ
+ਮ੍ਰ
+ਯ੍ਰ
+ਰ੍ਰ
+ਲ੍ਰ
+ਲ਼੍ਰ
+ਵ੍ਰ
+ਸ਼੍ਰ
+ਸ੍ਰ
+ਹ੍ਰ
+ਖ਼੍ਰ
+ਗ਼੍ਰ
+ਜ਼੍ਰ
+ੜ੍ਰ
+ਫ਼੍ਰ
+ਕ੍ਵ
+ਖ੍ਵ
+ਗ੍ਵ
+ਘ੍ਵ
+ਙ੍ਵ
+ਚ੍ਵ
+ਛ੍ਵ
+ਜ੍ਵ
+ਝ੍ਵ
+ਞ੍ਵ
+ਟ੍ਵ
+ਠ੍ਵ
+ਡ੍ਵ
+ਢ੍ਵ
+ਣ੍ਵ
+ਤ੍ਵ
+ਥ੍ਵ
+ਦ੍ਵ
+ਧ੍ਵ
+ਨ੍ਵ
+ਪ੍ਵ
+ਫ੍ਵ
+ਬ੍ਵ
+ਭ੍ਵ
+ਮ੍ਵ
+ਯ੍ਵ
+ਰ੍ਵ
+ਲ੍ਵ
+ਲ਼੍ਵ
+ਵ੍ਵ
+ਸ਼੍ਵ
+ਸ੍ਵ
+ਹ੍ਵ
+ਖ਼੍ਵ
+ਗ਼੍ਵ
+ਜ਼੍ਵ
+ੜ੍ਵ
+ਫ਼੍ਵ
+ਕ੍ਹ
+ਖ੍ਹ
+ਗ੍ਹ
+ਘ੍ਹ
+ਙ੍ਹ
+ਚ੍ਹ
+ਛ੍ਹ
+ਜ੍ਹ
+ਝ੍ਹ
+ਞ੍ਹ
+ਟ੍ਹ
+ਠ੍ਹ
+ਡ੍ਹ
+ਢ੍ਹ
+ਣ੍ਹ
+ਤ੍ਹ
+ਥ੍ਹ
+ਦ੍ਹ
+ਧ੍ਹ
+ਨ੍ਹ
+ਪ੍ਹ
+ਫ੍ਹ
+ਬ੍ਹ
+ਭ੍ਹ
+ਮ੍ਹ
+ਯ੍ਹ
+ਰ੍ਹ
+ਲ੍ਹ
+ਲ਼੍ਹ
+ਵ੍ਹ
+ਸ਼੍ਹ
+ਸ੍ਹ
+ਹ੍ਹ
+ਖ਼੍ਹ
+ਗ਼੍ਹ
+ਜ਼੍ਹ
+ੜ੍ਹ
+ਫ਼੍ਹ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/MANIFEST
new file mode 100644 (file)
index 0000000..f53f999
--- /dev/null
@@ -0,0 +1,2 @@
+misc.txt
+right-matras.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
new file mode 100644 (file)
index 0000000..a8a6325
--- /dev/null
@@ -0,0 +1,20 @@
+ಕ್ರ
+ನ್ಡ
+ನ್ನ
+ಯೂ
+ರ್ಕ
+ರ್ಮ
+ರ್‍ಕ
+ವೋ
+ಷೆ
+ಷ್
+ೠ
+೦೧೨
+ಕೀ
+ಕೊ
+ಕೇ
+ಕೈ
+ಕೋ
+ಕ್ಷ
+ಕ್ಷಿ
+ಚ್ಚ್
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/right-matras.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/right-matras.txt
new file mode 100644 (file)
index 0000000..3130f35
--- /dev/null
@@ -0,0 +1,7 @@
+ಸ್ಕು
+ಸ್ಕೂ
+ಸ್ಕೃ
+ಸ್ಕೄ
+ಸ್ಕಾ
+ಸ್ಕೕ
+ಸ್ಕೕ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
new file mode 100644 (file)
index 0000000..fff748a
--- /dev/null
@@ -0,0 +1 @@
+ೞ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..f641547
--- /dev/null
@@ -0,0 +1,4 @@
+ೠ
+ೡ
+ೢ
+ೣ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..650cbf7
--- /dev/null
@@ -0,0 +1,40 @@
+ಕ
+ಖ
+ಗ
+ಘ
+ಙ
+ಚ
+ಛ
+ಜ
+ಝ
+ಞ
+ಟ
+ಠ
+ಡ
+ಢ
+ಣ
+ತ
+ಥ
+ದ
+ಧ
+ನ
+ಪ
+ಫ
+ಬ
+ಭ
+ಮ
+ಯ
+ರ
+ಱ
+ಲ
+ಳ
+ವ
+ಶ
+ಷ
+ಸ
+ಹ
+ಂ
+ಃ
+಼
+ಽ
+್
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..476f39f
--- /dev/null
@@ -0,0 +1,13 @@
+ಾ
+ಿ
+ೀ
+ು
+ೂ
+ೃ
+ೄ
+ೆ
+ೇ
+ೈ
+ೊ
+ೋ
+ೌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..57ac088
--- /dev/null
@@ -0,0 +1,10 @@
+೦
+೧
+೨
+೩
+೪
+೫
+೬
+೭
+೮
+೯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..38f1719
--- /dev/null
@@ -0,0 +1,14 @@
+ಅ
+ಆ
+ಇ
+ಈ
+ಉ
+ಊ
+ಋ
+ಌ
+ಎ
+ಏ
+ಐ
+ಒ
+ಓ
+ಔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..6bbf23e
--- /dev/null
@@ -0,0 +1,9 @@
+ಂ
+ಃ
+಼
+ಽ
+್
+ೕ
+ೖ
+ೱ
+ೲ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..8fac7bc
--- /dev/null
@@ -0,0 +1,8 @@
+IndicFontFeatureCodepoint-AdditionalConsonants.txt
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..4cc0f56
--- /dev/null
@@ -0,0 +1,188 @@
+ಕಾ
+ಖಾ
+ಗಾ
+ಠಾ
+ಡಾ
+ಛಾ
+ಕಿ
+ಖಿ
+ಗಿ
+ಘಿ
+ಙಿ
+ಚಿ
+ಛಿ
+ಜಿ
+ಝಿ
+ಞಿ
+ಟಿ
+ಠಿ
+ಡಿ
+ಢಿ
+ಣಿ
+ತಿ
+ಥಿ
+ದಿ
+ಧಿ
+ನಿ
+ಪಿ
+ಫಿ
+ಬಿ
+ಭಿ
+ಮಿ
+ಯಿ
+ರಿ
+ಱಿ
+ಲಿ
+ಳಿ
+ವಿ
+ಶಿ
+ಷಿ
+ಸಿ
+ಹಿ
+ಕು
+ಗು
+ಜು
+ಟು
+ತು
+ಖು
+ಕೂ
+ಖೂ
+ಗೂ
+ಟೂ
+ಚೂ
+ಛೂ
+ಕೄ
+ಗೄ
+ಜೄ
+ಟೄ
+ತೄ
+ಖೄ
+ಕೇ
+ಗೇ
+ಜೇ
+ಟೇ
+ತೇ
+ಖೇ
+ಕೈ
+ಗೈ
+ಜೈ
+ಟೈ
+ತೈ
+ಖೈ
+ಕೊ
+ಗೊ
+ಜೊ
+ಟೊ
+ತೊ
+ಖೊ
+ಕೋ
+ಗೋ
+ಜೋ
+ಟೋ
+ತೋ
+ಖೋ
+ಕೆ
+ಖೆ
+ಗೆ
+ಘೆ
+ಙೆ
+ಚೆ
+ಛೆ
+ಜೆ
+ಝೆ
+ಞೆ
+ಟೆ
+ಠೆ
+ಡೆ
+ಢೆ
+ಣೆ
+ತೆ
+ಥೆ
+ದೆ
+ಧೆ
+ನೆ
+ಪೆ
+ಫೆ
+ಬೆ
+ಭೆ
+ಮೆ
+ಯೆ
+ರೆ
+ಱೆ
+ಲೆ
+ಳೆ
+ವೆ
+ಶೆ
+ಷೆ
+ಸೆ
+ಹೆ
+ಕೌ
+ಖೌ
+ಗೌ
+ಘೌ
+ಙೌ
+ಚೌ
+ಛೌ
+ಜೌ
+ಝೌ
+ಞೌ
+ಟೌ
+ಠೌ
+ಡೌ
+ಢೌ
+ಣೌ
+ತೌ
+ಥೌ
+ದೌ
+ಧೌ
+ನೌ
+ಪೌ
+ಫೌ
+ಬೌ
+ಭೌ
+ಮೌ
+ಯೌ
+ರೌ
+ಱೌ
+ಲೌ
+ಳೌ
+ವೌ
+ಶೌ
+ಷೌ
+ಸೌ
+ಹೌ
+ಕ್
+ಖ್
+ಗ್
+ಘ್
+ಙ್
+ಚ್
+ಛ್
+ಜ್
+ಝ್
+ಞ್
+ಟ್
+ಠ್
+ಡ್
+ಢ್
+ಣ್
+ತ್
+ಥ್
+ದ್
+ಧ್
+ನ್
+ಪ್
+ಫ್
+ಬ್
+ಭ್
+ಮ್
+ಯ್
+ರ್
+ಱ್
+ಲ್
+ಳ್
+ವ್
+ಶ್
+ಷ್
+ಸ್
+ಹ್
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..49d0284
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..583072d
--- /dev/null
@@ -0,0 +1,306 @@
+ಕ್ಕ
+ಕ್ಖ
+ಕ್ಗ
+ಕ್ಘ
+ಕ್ಙ
+ಕ್ಚ
+ಕ್ಛ
+ಕ್ಜ
+ಕ್ಝ
+ಕ್ಞ
+ಕ್ಟ
+ಕ್ಠ
+ಕ್ಡ
+ಕ್ಢ
+ಕ್ಣ
+ಕ್ತ
+ಕ್ಥ
+ಕ್ದ
+ಕ್ಧ
+ಕ್ನ
+ಕ್ಪ
+ಕ್ಫ
+ಕ್ಬ
+ಕ್ಭ
+ಕ್ಮ
+ಕ್ಯ
+ಕ್ರ
+ಕ್ಲ
+ಕ್ಳ
+ಕ್ವ
+ಕ್ಶ
+ಕ್ಷ
+ಕ್ಸ
+ಕ್ಹ
+ತ್ಕ
+ತ್ಖ
+ತ್ಗ
+ತ್ಘ
+ತ್ಙ
+ತ್ಚ
+ತ್ಛ
+ತ್ಜ
+ತ್ಝ
+ತ್ಞ
+ತ್ಟ
+ತ್ಠ
+ತ್ಡ
+ತ್ಢ
+ತ್ಣ
+ತ್ತ
+ತ್ಥ
+ತ್ದ
+ತ್ಧ
+ತ್ನ
+ತ್ಪ
+ತ್ಫ
+ತ್ಬ
+ತ್ಭ
+ತ್ಮ
+ತ್ಯ
+ತ್ರ
+ತ್ಲ
+ತ್ಳ
+ತ್ವ
+ತ್ಶ
+ತ್ಷ
+ತ್ಸ
+ತ್ಹ
+ನ್ಕ
+ನ್ಖ
+ನ್ಗ
+ನ್ಘ
+ನ್ಙ
+ನ್ಚ
+ನ್ಛ
+ನ್ಜ
+ನ್ಝ
+ನ್ಞ
+ನ್ಟ
+ನ್ಠ
+ನ್ಡ
+ನ್ಢ
+ನ್ಣ
+ನ್ತ
+ನ್ಥ
+ನ್ದ
+ನ್ಧ
+ನ್ನ
+ನ್ಪ
+ನ್ಫ
+ನ್ಬ
+ನ್ಭ
+ನ್ಮ
+ನ್ಯ
+ನ್ರ
+ನ್ಲ
+ನ್ಳ
+ನ್ವ
+ನ್ಶ
+ನ್ಷ
+ನ್ಸ
+ನ್ಹ
+ಮ್ಕ
+ಮ್ಖ
+ಮ್ಗ
+ಮ್ಘ
+ಮ್ಙ
+ಮ್ಚ
+ಮ್ಛ
+ಮ್ಜ
+ಮ್ಝ
+ಮ್ಞ
+ಮ್ಟ
+ಮ್ಠ
+ಮ್ಡ
+ಮ್ಢ
+ಮ್ಣ
+ಮ್ತ
+ಮ್ಥ
+ಮ್ದ
+ಮ್ಧ
+ಮ್ನ
+ಮ್ಪ
+ಮ್ಫ
+ಮ್ಬ
+ಮ್ಭ
+ಮ್ಮ
+ಮ್ಯ
+ಮ್ರ
+ಮ್ಲ
+ಮ್ಳ
+ಮ್ವ
+ಮ್ಶ
+ಮ್ಷ
+ಮ್ಸ
+ಮ್ಹ
+ಯ್ಕ
+ಯ್ಖ
+ಯ್ಗ
+ಯ್ಘ
+ಯ್ಙ
+ಯ್ಚ
+ಯ್ಛ
+ಯ್ಜ
+ಯ್ಝ
+ಯ್ಞ
+ಯ್ಟ
+ಯ್ಠ
+ಯ್ಡ
+ಯ್ಢ
+ಯ್ಣ
+ಯ್ತ
+ಯ್ಥ
+ಯ್ದ
+ಯ್ಧ
+ಯ್ನ
+ಯ್ಪ
+ಯ್ಫ
+ಯ್ಬ
+ಯ್ಭ
+ಯ್ಮ
+ಯ್ಯ
+ಯ್ರ
+ಯ್ಲ
+ಯ್ಳ
+ಯ್ವ
+ಯ್ಶ
+ಯ್ಷ
+ಯ್ಸ
+ಯ್ಹ
+ರ್ಕ
+ರ್ಖ
+ರ್ಗ
+ರ್ಘ
+ರ್ಙ
+ರ್ಚ
+ರ್ಛ
+ರ್ಜ
+ರ್ಝ
+ರ್ಞ
+ರ್ಟ
+ರ್ಠ
+ರ್ಡ
+ರ್ಢ
+ರ್ಣ
+ರ್ತ
+ರ್ಥ
+ರ್ದ
+ರ್ಧ
+ರ್ನ
+ರ್ಪ
+ರ್ಫ
+ರ್ಬ
+ರ್ಭ
+ರ್ಮ
+ರ್ಯ
+ರ್ರ
+ರ್ಲ
+ರ್ಳ
+ರ್ವ
+ರ್ಶ
+ರ್ಷ
+ರ್ಸ
+ರ್ಹ
+ರ್ಕ
+ರ್ಖ
+ರ್ಗ
+ರ್ಘ
+ರ್ಙ
+ರ್ಚ
+ರ್ಛ
+ರ್ಜ
+ರ್ಝ
+ರ್ಞ
+ರ್ಟ
+ರ್ಠ
+ರ್ಡ
+ರ್ಢ
+ರ್ಣ
+ರ್ತ
+ರ್ಥ
+ರ್ದ
+ರ್ಧ
+ರ್ನ
+ರ್ಪ
+ರ್ಫ
+ರ್ಬ
+ರ್ಭ
+ರ್ಮ
+ರ್ಯ
+ರ್ರ
+ರ್ಲ
+ರ್ಳ
+ರ್ವ
+ರ್ಶ
+ರ್ಷ
+ರ್ಸ
+ರ್ಹ
+ಲ್ಕ
+ಲ್ಖ
+ಲ್ಗ
+ಲ್ಘ
+ಲ್ಙ
+ಲ್ಚ
+ಲ್ಛ
+ಲ್ಜ
+ಲ್ಝ
+ಲ್ಞ
+ಲ್ಟ
+ಲ್ಠ
+ಲ್ಡ
+ಲ್ಢ
+ಲ್ಣ
+ಲ್ತ
+ಲ್ಥ
+ಲ್ದ
+ಲ್ಧ
+ಲ್ನ
+ಲ್ಪ
+ಲ್ಫ
+ಲ್ಬ
+ಲ್ಭ
+ಲ್ಮ
+ಲ್ಯ
+ಲ್ರ
+ಲ್ಲ
+ಲ್ಳ
+ಲ್ವ
+ಲ್ಶ
+ಲ್ಷ
+ಲ್ಸ
+ಲ್ಹ
+ವ್ಕ
+ವ್ಖ
+ವ್ಗ
+ವ್ಘ
+ವ್ಙ
+ವ್ಚ
+ವ್ಛ
+ವ್ಜ
+ವ್ಝ
+ವ್ಞ
+ವ್ಟ
+ವ್ಠ
+ವ್ಡ
+ವ್ಢ
+ವ್ಣ
+ವ್ತ
+ವ್ಥ
+ವ್ದ
+ವ್ಧ
+ವ್ನ
+ವ್ಪ
+ವ್ಫ
+ವ್ಬ
+ವ್ಭ
+ವ್ಮ
+ವ್ಯ
+ವ್ರ
+ವ್ಲ
+ವ್ಳ
+ವ್ವ
+ವ್ಶ
+ವ್ಷ
+ವ್ಸ
+ವ್ಹ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/MANIFEST
new file mode 100644 (file)
index 0000000..48800d4
--- /dev/null
@@ -0,0 +1,3 @@
+cibu.txt
+dot-reph.txt
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/cibu.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/cibu.txt
new file mode 100644 (file)
index 0000000..3d53867
--- /dev/null
@@ -0,0 +1,188 @@
+2ാം
+2-ാം
+ല്ം
+എ്ന
+9-൹
+₹100
+൦
+൧
+൨
+൩
+൪
+൫
+൬
+൭
+൮
+൯
+൰
+൱
+൲
+൳
+൴
+൵
+അങ്ങ്
+അത്
+അർത്ഥം
+അന്ധൻ
+അന്യം
+അന്വയം
+അൽപ്പം
+അമ്മ
+അമ്ലം
+അല്പം
+അല
+അവൻ
+അവന്
+അവനു്
+അസോഽസൗ
+അഹല്യ
+അഺ്
+ആമ്പിൿ
+ആല
+ആാ
+ആാാാ
+ഇൻക
+ഇല്ല
+ഇല
+ഇള
+ഇഴ
+ഈറ
+ഈൗ
+ഉമ
+ഉള്ള
+ഊമ
+ഊൗ
+ഋതു
+ൠന്ന്
+ഌകാരം
+ൡതം
+എന്ന
+എന്റെ
+എലി
+എൻറോൾ
+ഏലം
+ഐക്യം
+ഒരു
+ഓരം
+ഓാാാ
+ഔഷധം
+ഔൗ
+കണ്ഢം
+കണ്ണ്
+കണ്വൻ
+കഥ
+കമ്പം
+കമ്രം
+കല്മഷം
+കല
+കാാ
+കീീ
+കുണ്ഠിതം
+കൂൂ
+കൄന്ന്
+കൢപ്തം
+കൣതം
+കൌതുകം
+ക്രൌഞ്ചം
+ഗങ്ഗ
+ഗരം
+ങഞ
+അച്ഛൻ
+ങ്യാവൂ
+ചരം
+ഛായ
+ജലം
+ജാള്യം
+ഝാൻസി
+ഞാൻ
+ടിപ്പു
+ഡപ്പി
+തത്ത
+തെരഞ്ഞെടുപ്പിന്‍െറ
+ദയ
+ദുഃഖം
+ദൃഢം
+ധനം
+നഖം
+നന്ദി
+നന്ന്
+നന്മ
+നാണ്യം
+തന്ത
+ന്രസ്ഥി
+പച്ച
+പട്ട
+പണ്ടു്
+പല
+പറ
+പാഠം
+പാണ്ഡു
+പാണ്ഡ്യൻ
+പാന്ഥൻ
+പാറ്റ
+പിന്നെ
+പുച്ഛം
+പുഞ്ച
+പൊൻനാണ്യം
+ഫലം
+ബലം
+ഭയം
+ഭാൎയ്യ
+ഭാര്യ
+മങ്ക
+മണം
+മണ്ട
+മ്അദനി
+മയം
+മേഘം
+മോഹന്‍ലാല്‍
+യതി
+രണ്ട്
+രമ്യം
+ലത
+അറബ്‌ബസ്സാർ
+ലോക്‌സഭ
+വഅള്
+വരം
+വാഞ്ഛ
+വില്വാദ്രി
+വെണ്മ
+ഷാരം
+ശ്രുതി
+ശരം
+ശാർങ്ഗപക്ഷി
+സമ്യക്
+സംയോഗം
+സംരംഭം
+സമ്രാട്ട്
+സസ്യം
+സാരം
+സ്രാവം
+സ്ലാവിക്
+സ്വരം
+സ്വാതന്ത്ര്യം
+സ്ട്രാപ്പ്
+സ്റ്റിംഗ്
+സ്റ്റ്രീം
+ഹാരം
+റിപ്പോര്‍ട്ട്
+  ന്‍റെ
+ന്റെ
+ൻ്റെ
+ച്ച്യൂ
+യ്ക്ക്യൂ
+ട്ട്യൂ
+യ‍്യ
+വ‍്വ
+ഹൈലൈറ്റ്സ്
+ ച്ല്‍സി
+മലയാളത്തില്‍
+ഡിപ്പാർട്ട്മെന്റിന്റെ
+യ്യ്ര
+ യ്യ്ര
+ ്യ്ര
+ ്യ്യ്ര
+വ്വ്ര
+ വ്വ്ര
+ ്വ്ര
+ ്വ്വ്ര
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt
new file mode 100644 (file)
index 0000000..fc74da9
--- /dev/null
@@ -0,0 +1,15 @@
+ൎക
+ൎക്ക്ര
+ൎന്ന
+ൎഗ്ഗ്രോ
+ൎഗ്രോ
+ൎഗോ
+ൎഗ
+ഗ്ഗ്രോ
+ഗ്ഗ്ര
+ഗ്ഗോ
+ഗ്ഗ
+ഗ്രോ
+ൎകു
+ൎക്കു
+ൎച്ച്
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt
new file mode 100644 (file)
index 0000000..2e732ae
--- /dev/null
@@ -0,0 +1,65 @@
+അൎത്ഥം
+അഥൎവ്വം
+ക്‍
+കായ്‌കറി
+കാര്‍ക്കോടകന്‍
+കുറ്റ്യാടി
+കെ
+കേ
+കൈ
+കൊ
+കോ
+കൌ
+ക്കെ
+ക്കൊ
+ക്ത്ര
+ക്യ
+ക്വ
+ഖ്യ
+ഖ്ര
+ഗ്ദ്ധ്രോ
+ട്ട
+ട്ടു്
+ണ്‍
+ണ്ട
+ത്ത
+ത്തെ
+ത്തൊ
+ദ്ദ
+ന്‍
+ന്ത
+ന്ത്യ
+ന്ത്ര്യ
+പ്ര
+പ്ലോ
+മുഖ്യമന്ത്രി
+മ്പ
+യാത്രാകൂലി
+യും
+യ്ക്കു
+യ്യ
+ര്
+ര്‍
+ര്ക
+ര്യ
+ര്‍വ്വ
+ല്‍
+ല്യ
+ല്ല
+ല്ലാം
+വ്വ
+ഷ്ട്രീ
+സോഫ്റ്റ്‌വെയര്‍
+സ്പ്രി
+സ്പ്രേ
+സ്പ്ലേ
+സ്വാതന്ത്ര്യം
+ഹാര്‍ഡ്‌വെയര്‍
+ള്‍
+ള്യം
+ള്ള
+ല്‍പ്പേ
+ശിം‌
+കോം‌
+യ‍്യ
+സ്റ്റ്
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..b389359
--- /dev/null
@@ -0,0 +1,2 @@
+codepoint
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..0d1a19b
--- /dev/null
@@ -0,0 +1,2 @@
+ൠ
+ൡ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..4924e56
--- /dev/null
@@ -0,0 +1,36 @@
+ക
+ഖ
+ഗ
+ഘ
+ങ
+ച
+ഛ
+ജ
+ഝ
+ഞ
+ട
+ഠ
+ഡ
+ഢ
+ണ
+ത
+ഥ
+ദ
+ധ
+ന
+പ
+ഫ
+ബ
+ഭ
+മ
+യ
+ര
+റ
+ല
+ള
+ഴ
+വ
+ശ
+ഷ
+സ
+ഹ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..dc49691
--- /dev/null
@@ -0,0 +1,12 @@
+ാ
+ി
+ീ
+ു
+ൂ
+ൃ
+െ
+േ
+ൈ
+ൊ
+ോ
+ൌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..c2a9f06
--- /dev/null
@@ -0,0 +1,10 @@
+൦
+൧
+൨
+൩
+൪
+൫
+൬
+൭
+൮
+൯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..d879c3b
--- /dev/null
@@ -0,0 +1,14 @@
+അ
+ആ
+ഇ
+ഈ
+ഉ
+ഊ
+ഋ
+ഌ
+എ
+ഏ
+ഐ
+ഒ
+ഓ
+ഔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..2c976a4
--- /dev/null
@@ -0,0 +1,4 @@
+ം
+ഃ
+്
+ൗ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..1490dfe
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..1053215
--- /dev/null
@@ -0,0 +1,254 @@
+ക്ക
+ച്ച
+ട്ട
+ത്ത
+പ്പ
+ഗ്ഗ
+ജ്ജ
+ഡ്ഡ
+ദ്ദ
+ബ്ബ
+ങ്ങ
+ഞ്ഞ
+ണ്ണ
+ന്ന
+മ്മ
+യ്യ
+ല്ല
+വ്വ
+ശ്ശ
+സ്സ
+ള്ള
+റ്റ
+ക്ത
+ക്ഷ
+ഗ്ന
+ഗ്മ
+ങ്ക
+ച്ഛ
+ജ്ഞ
+ഞ്ച
+ണ്ട
+ണ്മ
+ത്ഥ
+ത്മ
+ത്ഭ
+ത്സ
+ദ്ധ
+ന്ത
+ന്ഥ
+ന്ദ
+ന്ധ
+ന്മ
+ന്റ
+മ്പ
+ബ്ദ
+ബ്ധ
+ശ്ച
+ഷ്ട
+സ്ഥ
+ഹ്ന
+ഹ്മ
+ക്യ
+ഖ്യ
+ഗ്യ
+ഘ്യ
+ങ്യ
+ച്യ
+ഛ്യ
+ജ്യ
+ഝ്യ
+ഞ്യ
+ട്യ
+ഠ്യ
+ഡ്യ
+ഢ്യ
+ണ്യ
+ത്യ
+ഥ്യ
+ദ്യ
+ധ്യ
+ന്യ
+പ്യ
+ഫ്യ
+ബ്യ
+ഭ്യ
+മ്യ
+ര്യ
+റ്യ
+ല്യ
+ള്യ
+ഴ്യ
+വ്യ
+ശ്യ
+ഷ്യ
+സ്യ
+ഹ്യ
+ക്ര
+ഖ്ര
+ഗ്ര
+ഘ്ര
+ച്ര
+ഛ്ര
+ജ്ര
+ട്ര
+ഠ്ര
+ഡ്ര
+ഢ്ര
+ത്ര
+ഥ്ര
+ദ്ര
+ധ്ര
+ന്ര
+പ്ര
+ഫ്ര
+ബ്ര
+ഭ്ര
+മ്ര
+ല്ര
+വ്ര
+ശ്ര
+ഷ്ര
+സ്ര
+ഹ്ര
+ക്ല
+ഖ്ല
+ഗ്ല
+ഘ്ല
+ങ്ല
+ച്ല
+ഛ്ല
+ജ്ല
+ഝ്ല
+ഞ്ല
+ട്ല
+ഠ്ല
+ഡ്ല
+ഢ്ല
+ണ്ല
+ത്ല
+ഥ്ല
+ദ്ല
+ധ്ല
+ന്ല
+പ്ല
+ഫ്ല
+ബ്ല
+ഭ്ല
+മ്ല
+യ്ല
+ര്ല
+റ്ല
+വ്ല
+ശ്ല
+ഷ്ല
+സ്ല
+ഹ്ല
+ക്ള
+ഖ്ള
+ഗ്ള
+ഘ്ള
+ങ്ള
+ച്ള
+ഛ്ള
+ജ്ള
+ഝ്ള
+ഞ്ള
+ട്ള
+ഠ്ള
+ഡ്ള
+ഢ്ള
+ണ്ള
+ത്ള
+ഥ്ള
+ദ്ള
+ധ്ള
+ന്ള
+പ്ള
+ഫ്ള
+ബ്ള
+ഭ്ള
+മ്ള
+യ്ള
+ര്ള
+റ്ള
+വ്ള
+ശ്ള
+ഷ്ള
+സ്ള
+ഹ്ള
+ക്വ
+ഖ്വ
+ഗ്വ
+ഘ്വ
+ങ്വ
+ച്വ
+ഛ്വ
+ജ്വ
+ഝ്വ
+ഞ്വ
+ട്വ
+ഠ്വ
+ഡ്വ
+ഢ്വ
+ണ്വ
+ത്വ
+ഥ്വ
+ദ്വ
+ധ്വ
+ന്വ
+പ്വ
+ഫ്വ
+ബ്വ
+ഭ്വ
+മ്വ
+ര്വ
+റ്വ
+ല്വ
+ള്വ
+ഴ്വ
+ശ്വ
+ഷ്വ
+സ്വ
+ഹ്വ
+ക്
+ഖ്
+ഗ്
+ഘ്
+ങ്
+ച്
+ഛ്
+ജ്
+ഝ്
+ഞ്
+ട്
+ഠ്
+ഡ്
+ഢ്
+ണ്
+ത്
+ഥ്
+ദ്
+ധ്
+ന്
+പ്
+ഫ്
+ബ്
+ഭ്
+മ്
+യ്
+ര്
+റ്
+ല്
+ള്
+ഴ്
+വ്
+ശ്
+ഷ്
+സ്
+ഹ്
+ഡ്രൈവ്
+അപ്ഡേറ്റ്
+അപ്ഗ്രേഡ്
+വ്യക്തം
+ഇന്‍സ്റ്റോള്‍
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/MANIFEST
new file mode 100644 (file)
index 0000000..66a2468
--- /dev/null
@@ -0,0 +1,2 @@
+bindu.txt
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt
new file mode 100644 (file)
index 0000000..13de6ee
--- /dev/null
@@ -0,0 +1,2 @@
+ମୁଁ
+ମୁଂ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/misc.txt
new file mode 100644 (file)
index 0000000..44a53df
--- /dev/null
@@ -0,0 +1,28 @@
+ஃ
+ஃக
+கூ
+கெ
+கொ
+கொ
+க்ஷ
+க்ஷொ
+க்ஷொ
+ஙூ
+சூ
+டி
+டீ
+டூ
+தூ
+மூ
+ரி
+ரீ
+ரூ
+ர்
+லி
+லீ
+କ୍ତ୍ର
+ତ୍ତ୍ବ
+ନ୍ତ୍ବ
+ନ୍ତ୍ର
+ନ୍ତ୍ର୍ଯ
+ସ୍ତ୍ର
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..b389359
--- /dev/null
@@ -0,0 +1,2 @@
+codepoint
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
new file mode 100644 (file)
index 0000000..c311f42
--- /dev/null
@@ -0,0 +1,3 @@
+ଡ଼
+ଢ଼
+ୟ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..c15795c
--- /dev/null
@@ -0,0 +1,2 @@
+ୠ
+ୡ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..5692fa1
--- /dev/null
@@ -0,0 +1,34 @@
+କ
+ଖ
+ଗ
+ଘ
+ଙ
+ଚ
+ଛ
+ଜ
+ଝ
+ଞ
+ଟ
+ଠ
+ଡ
+ଢ
+ଣ
+ତ
+ଥ
+ଦ
+ଧ
+ନ
+ପ
+ଫ
+ବ
+ଭ
+ମ
+ଯ
+ର
+ଲ
+ଳ
+ଵ
+ଶ
+ଷ
+ସ
+ହ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..d95d909
--- /dev/null
@@ -0,0 +1,12 @@
+ା
+ି
+ୀ
+ୁ
+ୂ
+ୃ
+େ
+ୈ
+ୋ
+ୌ
+ୖ
+ୗ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..ce7af5e
--- /dev/null
@@ -0,0 +1,10 @@
+୦
+୧
+୨
+୩
+୪
+୫
+୬
+୭
+୮
+୯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..9d21b9d
--- /dev/null
@@ -0,0 +1,12 @@
+ଅ
+ଆ
+ଇ
+ଈ
+ଉ
+ଊ
+ଋ
+ଌ
+ଏ
+ଐ
+ଓ
+ଔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt
new file mode 100644 (file)
index 0000000..6571b52
--- /dev/null
@@ -0,0 +1,2 @@
+୰
+ୱ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..ce411d2
--- /dev/null
@@ -0,0 +1,8 @@
+ଁ
+ଂ
+ଃ
+଼
+ଽ
+୍
+ୖ
+ୗ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..17fe498
--- /dev/null
@@ -0,0 +1,9 @@
+IndicFontFeatureCodepoint-AdditionalConsonants.txt
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-OriyaSpecific.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..fe11060
--- /dev/null
@@ -0,0 +1,170 @@
+କ୍ଷ
+ଙ୍କ
+ଙ୍ଖ
+ଙ୍ଗ
+ଙ୍ଘ
+ଙ୍ଳ
+ଙ୍କ୍ତ
+ଚ୍ଚ
+ଚ୍ଛ
+ଜ୍ଜ
+ଜ୍ଝ
+ଜ୍ଞ
+ଞ୍ଚ
+ଞ୍ଛ
+ଞ୍ଜ
+ଟ୍ଟ
+ଣ୍ଟ
+ଣ୍ଠ
+ଣ୍ଡ
+ଣ୍ଢ
+ଣ୍ଣ
+ତ୍କ
+ତ୍ତ
+ତ୍ଥ
+ତ୍ନ
+ତ୍ସ
+ତ୍ପ
+ଦ୍ଦ
+ଦ୍ଧ
+ଦ୍ଭ
+ଦ୍ଯ
+ବ୍ଡ
+ବ୍ଦ
+ବ୍ଧ
+ନ୍ତ
+ନ୍ତ୍ର
+ନ୍ଥ
+ନ୍ଦ
+ନ୍ଧ
+ନ୍ନ
+ଯ୍ତ
+ମ୍ପ
+ମ୍ଫ
+ମ୍ବ
+ମ୍ମ
+ମ୍ଭ
+ଶ୍ଚ
+ଶ୍ପ
+ଶ୍ଫ
+ଶ୍କ
+ଶ୍ଟ
+ଷ୍ଟ
+ଷ୍ଟ୍ବ
+ଷ୍ଠ
+ଷ୍ଣ
+ସ୍କ
+ସ୍ଖ
+ସ୍ଘ
+ସ୍ପ
+ସ୍ଫ
+ସ୍ତ
+ସ୍ତ୍ର
+ସ୍ଥ
+ସ୍ବ
+ସ୍ମୃ
+ହ୍ନ
+ହ୍ଳ
+ହ୍ଵ
+ପ୍ଟ
+କ୍କ
+କ୍ଖ
+କ୍ଗ
+କ୍ଘ
+କ୍ଚ
+କ୍ଛ
+କ୍ଜ
+କ୍ଝ
+କ୍ଟ
+କ୍ଠ
+କ୍ଡ
+କ୍ଢ
+କ୍ଣ
+କ୍ତ
+କ୍ଥ
+କ୍ଦ
+କ୍ଧ
+କ୍ନ
+କ୍ପ
+କ୍ଫ
+କ୍ବ
+କ୍ଭ
+କ୍ମ
+କ୍ଯ
+କ୍ର
+କ୍ଳ
+କ୍ଲ
+କ୍ହ
+ର୍କ
+ର୍ଖ
+ର୍ଗ
+ର୍ଘ
+ର୍ଚ
+ର୍ଚ୍ଚ
+ର୍ଚ୍ଛ
+ର୍ଛ
+ର୍ଜ
+ର୍ଝ
+ର୍ଟ
+ର୍ଠ
+ର୍ଡ
+ର୍ଢ
+ର୍ଣ
+ର୍ତ
+ର୍ତ୍ତ
+ର୍ଥ
+ର୍ଦ
+ର୍ଦ୍ଦ
+ର୍ଦ୍ଧ
+ର୍ଧ
+ର୍ନ
+ର୍ପ
+ର୍ଫ
+ର୍ବ
+ର୍ଭ
+ର୍ମ
+ର୍ଯ
+ର୍ଯ୍ଯ
+ର୍ଶ
+ର୍ଷ
+ର୍ସ
+ର୍ହ
+ର୍ଡ଼
+ର୍ଢ଼
+ଖ୍ର
+ଗ୍ର
+ଘ୍ର
+ଚ୍ଚ୍ର
+ଚ୍ଛ୍ର
+ଚ୍ର
+ଛ୍ର
+ଜ୍ର
+ଝ୍ର
+ଟ୍ର
+ଠ୍ର
+ଡ୍ର
+ଢ୍ର
+ଣ୍ର
+ତ୍ର
+ତ୍ତ୍ର
+ତ୍ଥ୍ର
+ଥ୍ର
+ଦ୍ର
+ଦ୍ଦ୍ର
+ଦ୍ଧ୍ର
+ଧ୍ର
+ନ୍ର
+ପ୍ର
+ଫ୍ର
+ବ୍ର
+ଭ୍ର
+ମ୍ର
+ଯ୍ର
+ଶ୍ର
+ଷ୍ର
+ସ୍ର
+ହ୍ର
+ଡ଼୍ର
+ଢ଼୍ର
+ଦ୍ଗ
+ତ୍ମ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/MANIFEST
new file mode 100644 (file)
index 0000000..a00d7ae
--- /dev/null
@@ -0,0 +1,4 @@
+extensive.txt
+misc.txt
+reph.txt
+split-matras.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/extensive.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/extensive.txt
new file mode 100644 (file)
index 0000000..231a1f7
--- /dev/null
@@ -0,0 +1,4390 @@
+අ
+ආ
+ඇ
+ඈ
+ඉ
+ඊ
+උ
+ඌ
+ඍ
+ඎ
+ඏ
+ඐ
+එ
+ඒ
+ඓ
+ඔ
+ඕ
+ඖ
+ක
+කා
+කැ
+කෑ
+කි
+කී
+කු
+කූ
+කෘ
+කෲ
+කෟ
+කෳ
+කෙ
+කේ
+කෛ
+කො
+කෝ
+කෞ
+ක්
+කං
+කඃ
+ක්‍ර
+ක්‍රා
+ක්‍රැ
+ක්‍රෑ
+ක්‍රි
+ක්‍රී
+ක්‍රු
+ක්‍රූ
+ක්‍රෘ
+ක්‍රෲ
+ක්‍රෟ
+ක්‍රෳ
+ක්‍රෙ
+ක්‍රේ
+ක්‍රෛ
+ක්‍රො
+ක්‍රෝ
+ක්‍රෞ
+ක්‍ර්
+ක්‍රං
+ක්‍රඃ
+ක්‍ය
+ක්‍යා
+ක්‍යැ
+ක්‍යෑ
+ක්‍යි
+ක්‍යී
+ක්‍යු
+ක්‍යූ
+ක්‍යෘ
+ක්‍යෲ
+ක්‍යෟ
+ක්‍යෳ
+ක්‍යෙ
+ක්‍යේ
+ක්‍යෛ
+ක්‍යො
+ක්‍යෝ
+ක්‍යෞ
+ක්‍ය්
+ක්‍යං
+ක්‍යඃ
+ර්‍ක
+ර්‍කා
+ර්‍කැ
+ර්‍කෑ
+ර්‍කි
+ර්‍කී
+ර්‍කු
+ර්‍කූ
+ර්‍කෘ
+ර්‍කෲ
+ර්‍කෟ
+ර්‍කෳ
+ර්‍කෙ
+ර්‍කේ
+ර්‍කෛ
+ර්‍කො
+ර්‍කෝ
+ර්‍කෞ
+ර්‍ක්
+ර්‍කං
+ර්‍කඃ
+ඛ
+ඛා
+ඛැ
+ඛෑ
+ඛි
+ඛී
+ඛු
+ඛූ
+ඛෘ
+ඛෲ
+ඛෟ
+ඛෳ
+ඛෙ
+ඛේ
+ඛෛ
+ඛො
+ඛෝ
+ඛෞ
+ඛ්
+ඛං
+ඛඃ
+ඛ්‍ර
+ඛ්‍රා
+ඛ්‍රැ
+ඛ්‍රෑ
+ඛ්‍රි
+ඛ්‍රී
+ඛ්‍රු
+ඛ්‍රූ
+ඛ්‍රෘ
+ඛ්‍රෲ
+ඛ්‍රෟ
+ඛ්‍රෳ
+ඛ්‍රෙ
+ඛ්‍රේ
+ඛ්‍රෛ
+ඛ්‍රො
+ඛ්‍රෝ
+ඛ්‍රෞ
+ඛ්‍ර්
+ඛ්‍රං
+ඛ්‍රඃ
+ඛ්‍ය
+ඛ්‍යා
+ඛ්‍යැ
+ඛ්‍යෑ
+ඛ්‍යි
+ඛ්‍යී
+ඛ්‍යු
+ඛ්‍යූ
+ඛ්‍යෘ
+ඛ්‍යෲ
+ඛ්‍යෟ
+ඛ්‍යෳ
+ඛ්‍යෙ
+ඛ්‍යේ
+ඛ්‍යෛ
+ඛ්‍යො
+ඛ්‍යෝ
+ඛ්‍යෞ
+ඛ්‍ය්
+ඛ්‍යං
+ඛ්‍යඃ
+ර්‍ඛ
+ර්‍ඛා
+ර්‍ඛැ
+ර්‍ඛෑ
+ර්‍ඛි
+ර්‍ඛී
+ර්‍ඛු
+ර්‍ඛූ
+ර්‍ඛෘ
+ර්‍ඛෲ
+ර්‍ඛෟ
+ර්‍ඛෳ
+ර්‍ඛෙ
+ර්‍ඛේ
+ර්‍ඛෛ
+ර්‍ඛො
+ර්‍ඛෝ
+ර්‍ඛෞ
+ර්‍ඛ්
+ර්‍ඛං
+ර්‍ඛඃ
+ග
+ගා
+ගැ
+ගෑ
+ගි
+ගී
+ගු
+ගූ
+ගෘ
+ගෲ
+ගෟ
+ගෳ
+ගෙ
+ගේ
+ගෛ
+ගො
+ගෝ
+ගෞ
+ග්
+ගං
+ගඃ
+ග්‍ර
+ග්‍රා
+ග්‍රැ
+ග්‍රෑ
+ග්‍රි
+ග්‍රී
+ග්‍රු
+ග්‍රූ
+ග්‍රෘ
+ග්‍රෲ
+ග්‍රෟ
+ග්‍රෳ
+ග්‍රෙ
+ග්‍රේ
+ග්‍රෛ
+ග්‍රො
+ග්‍රෝ
+ග්‍රෞ
+ග්‍ර්
+ග්‍රං
+ග්‍රඃ
+ග්‍ය
+ග්‍යා
+ග්‍යැ
+ග්‍යෑ
+ග්‍යි
+ග්‍යී
+ග්‍යු
+ග්‍යූ
+ග්‍යෘ
+ග්‍යෲ
+ග්‍යෟ
+ග්‍යෳ
+ග්‍යෙ
+ග්‍යේ
+ග්‍යෛ
+ග්‍යො
+ග්‍යෝ
+ග්‍යෞ
+ග්‍ය්
+ග්‍යං
+ග්‍යඃ
+ර්‍ග
+ර්‍ගා
+ර්‍ගැ
+ර්‍ගෑ
+ර්‍ගි
+ර්‍ගී
+ර්‍ගු
+ර්‍ගූ
+ර්‍ගෘ
+ර්‍ගෲ
+ර්‍ගෟ
+ර්‍ගෳ
+ර්‍ගෙ
+ර්‍ගේ
+ර්‍ගෛ
+ර්‍ගො
+ර්‍ගෝ
+ර්‍ගෞ
+ර්‍ග්
+ර්‍ගං
+ර්‍ගඃ
+ඝ
+ඝා
+ඝැ
+ඝෑ
+ඝි
+ඝී
+ඝු
+ඝූ
+ඝෘ
+ඝෲ
+ඝෟ
+ඝෳ
+ඝෙ
+ඝේ
+ඝෛ
+ඝො
+ඝෝ
+ඝෞ
+ඝ්
+ඝං
+ඝඃ
+ඝ්‍ර
+ඝ්‍රා
+ඝ්‍රැ
+ඝ්‍රෑ
+ඝ්‍රි
+ඝ්‍රී
+ඝ්‍රු
+ඝ්‍රූ
+ඝ්‍රෘ
+ඝ්‍රෲ
+ඝ්‍රෟ
+ඝ්‍රෳ
+ඝ්‍රෙ
+ඝ්‍රේ
+ඝ්‍රෛ
+ඝ්‍රො
+ඝ්‍රෝ
+ඝ්‍රෞ
+ඝ්‍ර්
+ඝ්‍රං
+ඝ්‍රඃ
+ඝ්‍ය
+ඝ්‍යා
+ඝ්‍යැ
+ඝ්‍යෑ
+ඝ්‍යි
+ඝ්‍යී
+ඝ්‍යු
+ඝ්‍යූ
+ඝ්‍යෘ
+ඝ්‍යෲ
+ඝ්‍යෟ
+ඝ්‍යෳ
+ඝ්‍යෙ
+ඝ්‍යේ
+ඝ්‍යෛ
+ඝ්‍යො
+ඝ්‍යෝ
+ඝ්‍යෞ
+ඝ්‍ය්
+ඝ්‍යං
+ඝ්‍යඃ
+ර්‍ඝ
+ර්‍ඝා
+ර්‍ඝැ
+ර්‍ඝෑ
+ර්‍ඝි
+ර්‍ඝී
+ර්‍ඝු
+ර්‍ඝූ
+ර්‍ඝෘ
+ර්‍ඝෲ
+ර්‍ඝෟ
+ර්‍ඝෳ
+ර්‍ඝෙ
+ර්‍ඝේ
+ර්‍ඝෛ
+ර්‍ඝො
+ර්‍ඝෝ
+ර්‍ඝෞ
+ර්‍ඝ්
+ර්‍ඝං
+ර්‍ඝඃ
+ඞ
+ඞා
+ඞැ
+ඞෑ
+ඞි
+ඞී
+ඞු
+ඞූ
+ඞෘ
+ඞෲ
+ඞෟ
+ඞෳ
+ඞෙ
+ඞේ
+ඞෛ
+ඞො
+ඞෝ
+ඞෞ
+ඞ්
+ඞං
+ඞඃ
+ඞ්‍ර
+ඞ්‍රා
+ඞ්‍රැ
+ඞ්‍රෑ
+ඞ්‍රි
+ඞ්‍රී
+ඞ්‍රු
+ඞ්‍රූ
+ඞ්‍රෘ
+ඞ්‍රෲ
+ඞ්‍රෟ
+ඞ්‍රෳ
+ඞ්‍රෙ
+ඞ්‍රේ
+ඞ්‍රෛ
+ඞ්‍රො
+ඞ්‍රෝ
+ඞ්‍රෞ
+ඞ්‍ර්
+ඞ්‍රං
+ඞ්‍රඃ
+ඞ්‍ය
+ඞ්‍යා
+ඞ්‍යැ
+ඞ්‍යෑ
+ඞ්‍යි
+ඞ්‍යී
+ඞ්‍යු
+ඞ්‍යූ
+ඞ්‍යෘ
+ඞ්‍යෲ
+ඞ්‍යෟ
+ඞ්‍යෳ
+ඞ්‍යෙ
+ඞ්‍යේ
+ඞ්‍යෛ
+ඞ්‍යො
+ඞ්‍යෝ
+ඞ්‍යෞ
+ඞ්‍ය්
+ඞ්‍යං
+ඞ්‍යඃ
+ර්‍ඞ
+ර්‍ඞා
+ර්‍ඞැ
+ර්‍ඞෑ
+ර්‍ඞි
+ර්‍ඞී
+ර්‍ඞු
+ර්‍ඞූ
+ර්‍ඞෘ
+ර්‍ඞෲ
+ර්‍ඞෟ
+ර්‍ඞෳ
+ර්‍ඞෙ
+ර්‍ඞේ
+ර්‍ඞෛ
+ර්‍ඞො
+ර්‍ඞෝ
+ර්‍ඞෞ
+ර්‍ඞ්
+ර්‍ඞං
+ර්‍ඞඃ
+ඟ
+ඟා
+ඟැ
+ඟෑ
+ඟි
+ඟී
+ඟු
+ඟූ
+ඟෘ
+ඟෲ
+ඟෟ
+ඟෳ
+ඟෙ
+ඟේ
+ඟෛ
+ඟො
+ඟෝ
+ඟෞ
+ඟ්
+ඟං
+ඟඃ
+ඟ්‍ර
+ඟ්‍රා
+ඟ්‍රැ
+ඟ්‍රෑ
+ඟ්‍රි
+ඟ්‍රී
+ඟ්‍රු
+ඟ්‍රූ
+ඟ්‍රෘ
+ඟ්‍රෲ
+ඟ්‍රෟ
+ඟ්‍රෳ
+ඟ්‍රෙ
+ඟ්‍රේ
+ඟ්‍රෛ
+ඟ්‍රො
+ඟ්‍රෝ
+ඟ්‍රෞ
+ඟ්‍ර්
+ඟ්‍රං
+ඟ්‍රඃ
+ඟ්‍ය
+ඟ්‍යා
+ඟ්‍යැ
+ඟ්‍යෑ
+ඟ්‍යි
+ඟ්‍යී
+ඟ්‍යු
+ඟ්‍යූ
+ඟ්‍යෘ
+ඟ්‍යෲ
+ඟ්‍යෟ
+ඟ්‍යෳ
+ඟ්‍යෙ
+ඟ්‍යේ
+ඟ්‍යෛ
+ඟ්‍යො
+ඟ්‍යෝ
+ඟ්‍යෞ
+ඟ්‍ය්
+ඟ්‍යං
+ඟ්‍යඃ
+ර්‍ඟ
+ර්‍ඟා
+ර්‍ඟැ
+ර්‍ඟෑ
+ර්‍ඟි
+ර්‍ඟී
+ර්‍ඟු
+ර්‍ඟූ
+ර්‍ඟෘ
+ර්‍ඟෲ
+ර්‍ඟෟ
+ර්‍ඟෳ
+ර්‍ඟෙ
+ර්‍ඟේ
+ර්‍ඟෛ
+ර්‍ඟො
+ර්‍ඟෝ
+ර්‍ඟෞ
+ර්‍ඟ්
+ර්‍ඟං
+ර්‍ඟඃ
+ච
+චා
+චැ
+චෑ
+චි
+චී
+චු
+චූ
+චෘ
+චෲ
+චෟ
+චෳ
+චෙ
+චේ
+චෛ
+චො
+චෝ
+චෞ
+ච්
+චං
+චඃ
+ච්‍ර
+ච්‍රා
+ච්‍රැ
+ච්‍රෑ
+ච්‍රි
+ච්‍රී
+ච්‍රු
+ච්‍රූ
+ච්‍රෘ
+ච්‍රෲ
+ච්‍රෟ
+ච්‍රෳ
+ච්‍රෙ
+ච්‍රේ
+ච්‍රෛ
+ච්‍රො
+ච්‍රෝ
+ච්‍රෞ
+ච්‍ර්
+ච්‍රං
+ච්‍රඃ
+ච්‍ය
+ච්‍යා
+ච්‍යැ
+ච්‍යෑ
+ච්‍යි
+ච්‍යී
+ච්‍යු
+ච්‍යූ
+ච්‍යෘ
+ච්‍යෲ
+ච්‍යෟ
+ච්‍යෳ
+ච්‍යෙ
+ච්‍යේ
+ච්‍යෛ
+ච්‍යො
+ච්‍යෝ
+ච්‍යෞ
+ච්‍ය්
+ච්‍යං
+ච්‍යඃ
+ර්‍ච
+ර්‍චා
+ර්‍චැ
+ර්‍චෑ
+ර්‍චි
+ර්‍චී
+ර්‍චු
+ර්‍චූ
+ර්‍චෘ
+ර්‍චෲ
+ර්‍චෟ
+ර්‍චෳ
+ර්‍චෙ
+ර්‍චේ
+ර්‍චෛ
+ර්‍චො
+ර්‍චෝ
+ර්‍චෞ
+ර්‍ච්
+ර්‍චං
+ර්‍චඃ
+ඡ
+ඡා
+ඡැ
+ඡෑ
+ඡි
+ඡී
+ඡු
+ඡූ
+ඡෘ
+ඡෲ
+ඡෟ
+ඡෳ
+ඡෙ
+ඡේ
+ඡෛ
+ඡො
+ඡෝ
+ඡෞ
+ඡ්
+ඡං
+ඡඃ
+ඡ්‍ර
+ඡ්‍රා
+ඡ්‍රැ
+ඡ්‍රෑ
+ඡ්‍රි
+ඡ්‍රී
+ඡ්‍රු
+ඡ්‍රූ
+ඡ්‍රෘ
+ඡ්‍රෲ
+ඡ්‍රෟ
+ඡ්‍රෳ
+ඡ්‍රෙ
+ඡ්‍රේ
+ඡ්‍රෛ
+ඡ්‍රො
+ඡ්‍රෝ
+ඡ්‍රෞ
+ඡ්‍ර්
+ඡ්‍රං
+ඡ්‍රඃ
+ඡ්‍ය
+ඡ්‍යා
+ඡ්‍යැ
+ඡ්‍යෑ
+ඡ්‍යි
+ඡ්‍යී
+ඡ්‍යු
+ඡ්‍යූ
+ඡ්‍යෘ
+ඡ්‍යෲ
+ඡ්‍යෟ
+ඡ්‍යෳ
+ඡ්‍යෙ
+ඡ්‍යේ
+ඡ්‍යෛ
+ඡ්‍යො
+ඡ්‍යෝ
+ඡ්‍යෞ
+ඡ්‍ය්
+ඡ්‍යං
+ඡ්‍යඃ
+ර්‍ඡ
+ර්‍ඡා
+ර්‍ඡැ
+ර්‍ඡෑ
+ර්‍ඡි
+ර්‍ඡී
+ර්‍ඡු
+ර්‍ඡූ
+ර්‍ඡෘ
+ර්‍ඡෲ
+ර්‍ඡෟ
+ර්‍ඡෳ
+ර්‍ඡෙ
+ර්‍ඡේ
+ර්‍ඡෛ
+ර්‍ඡො
+ර්‍ඡෝ
+ර්‍ඡෞ
+ර්‍ඡ්
+ර්‍ඡං
+ර්‍ඡඃ
+ජ
+ජා
+ජැ
+ජෑ
+ජි
+ජී
+ජු
+ජූ
+ජෘ
+ජෲ
+ජෟ
+ජෳ
+ජෙ
+ජේ
+ජෛ
+ජො
+ජෝ
+ජෞ
+ජ්
+ජං
+ජඃ
+ජ්‍ර
+ජ්‍රා
+ජ්‍රැ
+ජ්‍රෑ
+ජ්‍රි
+ජ්‍රී
+ජ්‍රු
+ජ්‍රූ
+ජ්‍රෘ
+ජ්‍රෲ
+ජ්‍රෟ
+ජ්‍රෳ
+ජ්‍රෙ
+ජ්‍රේ
+ජ්‍රෛ
+ජ්‍රො
+ජ්‍රෝ
+ජ්‍රෞ
+ජ්‍ර්
+ජ්‍රං
+ජ්‍රඃ
+ජ්‍ය
+ජ්‍යා
+ජ්‍යැ
+ජ්‍යෑ
+ජ්‍යි
+ජ්‍යී
+ජ්‍යු
+ජ්‍යූ
+ජ්‍යෘ
+ජ්‍යෲ
+ජ්‍යෟ
+ජ්‍යෳ
+ජ්‍යෙ
+ජ්‍යේ
+ජ්‍යෛ
+ජ්‍යො
+ජ්‍යෝ
+ජ්‍යෞ
+ජ්‍ය්
+ජ්‍යං
+ජ්‍යඃ
+ර්‍ජ
+ර්‍ජා
+ර්‍ජැ
+ර්‍ජෑ
+ර්‍ජි
+ර්‍ජී
+ර්‍ජු
+ර්‍ජූ
+ර්‍ජෘ
+ර්‍ජෲ
+ර්‍ජෟ
+ර්‍ජෳ
+ර්‍ජෙ
+ර්‍ජේ
+ර්‍ජෛ
+ර්‍ජො
+ර්‍ජෝ
+ර්‍ජෞ
+ර්‍ජ්
+ර්‍ජං
+ර්‍ජඃ
+ඣ
+ඣා
+ඣැ
+ඣෑ
+ඣි
+ඣී
+ඣු
+ඣූ
+ඣෘ
+ඣෲ
+ඣෟ
+ඣෳ
+ඣෙ
+ඣේ
+ඣෛ
+ඣො
+ඣෝ
+ඣෞ
+ඣ්
+ඣං
+ඣඃ
+ඣ්‍ර
+ඣ්‍රා
+ඣ්‍රැ
+ඣ්‍රෑ
+ඣ්‍රි
+ඣ්‍රී
+ඣ්‍රු
+ඣ්‍රූ
+ඣ්‍රෘ
+ඣ්‍රෲ
+ඣ්‍රෟ
+ඣ්‍රෳ
+ඣ්‍රෙ
+ඣ්‍රේ
+ඣ්‍රෛ
+ඣ්‍රො
+ඣ්‍රෝ
+ඣ්‍රෞ
+ඣ්‍ර්
+ඣ්‍රං
+ඣ්‍රඃ
+ඣ්‍ය
+ඣ්‍යා
+ඣ්‍යැ
+ඣ්‍යෑ
+ඣ්‍යි
+ඣ්‍යී
+ඣ්‍යු
+ඣ්‍යූ
+ඣ්‍යෘ
+ඣ්‍යෲ
+ඣ්‍යෟ
+ඣ්‍යෳ
+ඣ්‍යෙ
+ඣ්‍යේ
+ඣ්‍යෛ
+ඣ්‍යො
+ඣ්‍යෝ
+ඣ්‍යෞ
+ඣ්‍ය්
+ඣ්‍යං
+ඣ්‍යඃ
+ර්‍ඣ
+ර්‍ඣා
+ර්‍ඣැ
+ර්‍ඣෑ
+ර්‍ඣි
+ර්‍ඣී
+ර්‍ඣු
+ර්‍ඣූ
+ර්‍ඣෘ
+ර්‍ඣෲ
+ර්‍ඣෟ
+ර්‍ඣෳ
+ර්‍ඣෙ
+ර්‍ඣේ
+ර්‍ඣෛ
+ර්‍ඣො
+ර්‍ඣෝ
+ර්‍ඣෞ
+ර්‍ඣ්
+ර්‍ඣං
+ර්‍ඣඃ
+ඥ
+ඥා
+ඥැ
+ඥෑ
+ඥි
+ඥී
+ඥු
+ඥූ
+ඥෘ
+ඥෲ
+ඥෟ
+ඥෳ
+ඥෙ
+ඥේ
+ඥෛ
+ඥො
+ඥෝ
+ඥෞ
+ඥ්
+ඥං
+ඥඃ
+ඥ්‍ර
+ඥ්‍රා
+ඥ්‍රැ
+ඥ්‍රෑ
+ඥ්‍රි
+ඥ්‍රී
+ඥ්‍රු
+ඥ්‍රූ
+ඥ්‍රෘ
+ඥ්‍රෲ
+ඥ්‍රෟ
+ඥ්‍රෳ
+ඥ්‍රෙ
+ඥ්‍රේ
+ඥ්‍රෛ
+ඥ්‍රො
+ඥ්‍රෝ
+ඥ්‍රෞ
+ඥ්‍ර්
+ඥ්‍රං
+ඥ්‍රඃ
+ඥ්‍ය
+ඥ්‍යා
+ඥ්‍යැ
+ඥ්‍යෑ
+ඥ්‍යි
+ඥ්‍යී
+ඥ්‍යු
+ඥ්‍යූ
+ඥ්‍යෘ
+ඥ්‍යෲ
+ඥ්‍යෟ
+ඥ්‍යෳ
+ඥ්‍යෙ
+ඥ්‍යේ
+ඥ්‍යෛ
+ඥ්‍යො
+ඥ්‍යෝ
+ඥ්‍යෞ
+ඥ්‍ය්
+ඥ්‍යං
+ඥ්‍යඃ
+ර්‍ඥ
+ර්‍ඥා
+ර්‍ඥැ
+ර්‍ඥෑ
+ර්‍ඥි
+ර්‍ඥී
+ර්‍ඥු
+ර්‍ඥූ
+ර්‍ඥෘ
+ර්‍ඥෲ
+ර්‍ඥෟ
+ර්‍ඥෳ
+ර්‍ඥෙ
+ර්‍ඥේ
+ර්‍ඥෛ
+ර්‍ඥො
+ර්‍ඥෝ
+ර්‍ඥෞ
+ර්‍ඥ්
+ර්‍ඥං
+ර්‍ඥඃ
+ඤ
+ඤා
+ඤැ
+ඤෑ
+ඤි
+ඤී
+ඤු
+ඤූ
+ඤෘ
+ඤෲ
+ඤෟ
+ඤෳ
+ඤෙ
+ඤේ
+ඤෛ
+ඤො
+ඤෝ
+ඤෞ
+ඤ්
+ඤං
+ඤඃ
+ඤ්‍ර
+ඤ්‍රා
+ඤ්‍රැ
+ඤ්‍රෑ
+ඤ්‍රි
+ඤ්‍රී
+ඤ්‍රු
+ඤ්‍රූ
+ඤ්‍රෘ
+ඤ්‍රෲ
+ඤ්‍රෟ
+ඤ්‍රෳ
+ඤ්‍රෙ
+ඤ්‍රේ
+ඤ්‍රෛ
+ඤ්‍රො
+ඤ්‍රෝ
+ඤ්‍රෞ
+ඤ්‍ර්
+ඤ්‍රං
+ඤ්‍රඃ
+ඤ්‍ය
+ඤ්‍යා
+ඤ්‍යැ
+ඤ්‍යෑ
+ඤ්‍යි
+ඤ්‍යී
+ඤ්‍යු
+ඤ්‍යූ
+ඤ්‍යෘ
+ඤ්‍යෲ
+ඤ්‍යෟ
+ඤ්‍යෳ
+ඤ්‍යෙ
+ඤ්‍යේ
+ඤ්‍යෛ
+ඤ්‍යො
+ඤ්‍යෝ
+ඤ්‍යෞ
+ඤ්‍ය්
+ඤ්‍යං
+ඤ්‍යඃ
+ර්‍ඤ
+ර්‍ඤා
+ර්‍ඤැ
+ර්‍ඤෑ
+ර්‍ඤි
+ර්‍ඤී
+ර්‍ඤු
+ර්‍ඤූ
+ර්‍ඤෘ
+ර්‍ඤෲ
+ර්‍ඤෟ
+ර්‍ඤෳ
+ර්‍ඤෙ
+ර්‍ඤේ
+ර්‍ඤෛ
+ර්‍ඤො
+ර්‍ඤෝ
+ර්‍ඤෞ
+ර්‍ඤ්
+ර්‍ඤං
+ර්‍ඤඃ
+ඦ
+ඦා
+ඦැ
+ඦෑ
+ඦි
+ඦී
+ඦු
+ඦූ
+ඦෘ
+ඦෲ
+ඦෟ
+ඦෳ
+ඦෙ
+ඦේ
+ඦෛ
+ඦො
+ඦෝ
+ඦෞ
+ඦ්
+ඦං
+ඦඃ
+ඦ්‍ර
+ඦ්‍රා
+ඦ්‍රැ
+ඦ්‍රෑ
+ඦ්‍රි
+ඦ්‍රී
+ඦ්‍රු
+ඦ්‍රූ
+ඦ්‍රෘ
+ඦ්‍රෲ
+ඦ්‍රෟ
+ඦ්‍රෳ
+ඦ්‍රෙ
+ඦ්‍රේ
+ඦ්‍රෛ
+ඦ්‍රො
+ඦ්‍රෝ
+ඦ්‍රෞ
+ඦ්‍ර්
+ඦ්‍රං
+ඦ්‍රඃ
+ඦ්‍ය
+ඦ්‍යා
+ඦ්‍යැ
+ඦ්‍යෑ
+ඦ්‍යි
+ඦ්‍යී
+ඦ්‍යු
+ඦ්‍යූ
+ඦ්‍යෘ
+ඦ්‍යෲ
+ඦ්‍යෟ
+ඦ්‍යෳ
+ඦ්‍යෙ
+ඦ්‍යේ
+ඦ්‍යෛ
+ඦ්‍යො
+ඦ්‍යෝ
+ඦ්‍යෞ
+ඦ්‍ය්
+ඦ්‍යං
+ඦ්‍යඃ
+ර්‍ඦ
+ර්‍ඦා
+ර්‍ඦැ
+ර්‍ඦෑ
+ර්‍ඦි
+ර්‍ඦී
+ර්‍ඦු
+ර්‍ඦූ
+ර්‍ඦෘ
+ර්‍ඦෲ
+ර්‍ඦෟ
+ර්‍ඦෳ
+ර්‍ඦෙ
+ර්‍ඦේ
+ර්‍ඦෛ
+ර්‍ඦො
+ර්‍ඦෝ
+ර්‍ඦෞ
+ර්‍ඦ්
+ර්‍ඦං
+ර්‍ඦඃ
+ට
+ටා
+ටැ
+ටෑ
+ටි
+ටී
+ටු
+ටූ
+ටෘ
+ටෲ
+ටෟ
+ටෳ
+ටෙ
+ටේ
+ටෛ
+ටො
+ටෝ
+ටෞ
+ට්
+ටං
+ටඃ
+ට්‍ර
+ට්‍රා
+ට්‍රැ
+ට්‍රෑ
+ට්‍රි
+ට්‍රී
+ට්‍රු
+ට්‍රූ
+ට්‍රෘ
+ට්‍රෲ
+ට්‍රෟ
+ට්‍රෳ
+ට්‍රෙ
+ට්‍රේ
+ට්‍රෛ
+ට්‍රො
+ට්‍රෝ
+ට්‍රෞ
+ට්‍ර්
+ට්‍රං
+ට්‍රඃ
+ට්‍ය
+ට්‍යා
+ට්‍යැ
+ට්‍යෑ
+ට්‍යි
+ට්‍යී
+ට්‍යු
+ට්‍යූ
+ට්‍යෘ
+ට්‍යෲ
+ට්‍යෟ
+ට්‍යෳ
+ට්‍යෙ
+ට්‍යේ
+ට්‍යෛ
+ට්‍යො
+ට්‍යෝ
+ට්‍යෞ
+ට්‍ය්
+ට්‍යං
+ට්‍යඃ
+ර්‍ට
+ර්‍ටා
+ර්‍ටැ
+ර්‍ටෑ
+ර්‍ටි
+ර්‍ටී
+ර්‍ටු
+ර්‍ටූ
+ර්‍ටෘ
+ර්‍ටෲ
+ර්‍ටෟ
+ර්‍ටෳ
+ර්‍ටෙ
+ර්‍ටේ
+ර්‍ටෛ
+ර්‍ටො
+ර්‍ටෝ
+ර්‍ටෞ
+ර්‍ට්
+ර්‍ටං
+ර්‍ටඃ
+ඨ
+ඨා
+ඨැ
+ඨෑ
+ඨි
+ඨී
+ඨු
+ඨූ
+ඨෘ
+ඨෲ
+ඨෟ
+ඨෳ
+ඨෙ
+ඨේ
+ඨෛ
+ඨො
+ඨෝ
+ඨෞ
+ඨ්
+ඨං
+ඨඃ
+ඨ්‍ර
+ඨ්‍රා
+ඨ්‍රැ
+ඨ්‍රෑ
+ඨ්‍රි
+ඨ්‍රී
+ඨ්‍රු
+ඨ්‍රූ
+ඨ්‍රෘ
+ඨ්‍රෲ
+ඨ්‍රෟ
+ඨ්‍රෳ
+ඨ්‍රෙ
+ඨ්‍රේ
+ඨ්‍රෛ
+ඨ්‍රො
+ඨ්‍රෝ
+ඨ්‍රෞ
+ඨ්‍ර්
+ඨ්‍රං
+ඨ්‍රඃ
+ඨ්‍ය
+ඨ්‍යා
+ඨ්‍යැ
+ඨ්‍යෑ
+ඨ්‍යි
+ඨ්‍යී
+ඨ්‍යු
+ඨ්‍යූ
+ඨ්‍යෘ
+ඨ්‍යෲ
+ඨ්‍යෟ
+ඨ්‍යෳ
+ඨ්‍යෙ
+ඨ්‍යේ
+ඨ්‍යෛ
+ඨ්‍යො
+ඨ්‍යෝ
+ඨ්‍යෞ
+ඨ්‍ය්
+ඨ්‍යං
+ඨ්‍යඃ
+ර්‍ඨ
+ර්‍ඨා
+ර්‍ඨැ
+ර්‍ඨෑ
+ර්‍ඨි
+ර්‍ඨී
+ර්‍ඨු
+ර්‍ඨූ
+ර්‍ඨෘ
+ර්‍ඨෲ
+ර්‍ඨෟ
+ර්‍ඨෳ
+ර්‍ඨෙ
+ර්‍ඨේ
+ර්‍ඨෛ
+ර්‍ඨො
+ර්‍ඨෝ
+ර්‍ඨෞ
+ර්‍ඨ්
+ර්‍ඨං
+ර්‍ඨඃ
+ඩ
+ඩා
+ඩැ
+ඩෑ
+ඩි
+ඩී
+ඩු
+ඩූ
+ඩෘ
+ඩෲ
+ඩෟ
+ඩෳ
+ඩෙ
+ඩේ
+ඩෛ
+ඩො
+ඩෝ
+ඩෞ
+ඩ්
+ඩං
+ඩඃ
+ඩ්‍ර
+ඩ්‍රා
+ඩ්‍රැ
+ඩ්‍රෑ
+ඩ්‍රි
+ඩ්‍රී
+ඩ්‍රු
+ඩ්‍රූ
+ඩ්‍රෘ
+ඩ්‍රෲ
+ඩ්‍රෟ
+ඩ්‍රෳ
+ඩ්‍රෙ
+ඩ්‍රේ
+ඩ්‍රෛ
+ඩ්‍රො
+ඩ්‍රෝ
+ඩ්‍රෞ
+ඩ්‍ර්
+ඩ්‍රං
+ඩ්‍රඃ
+ඩ්‍ය
+ඩ්‍යා
+ඩ්‍යැ
+ඩ්‍යෑ
+ඩ්‍යි
+ඩ්‍යී
+ඩ්‍යු
+ඩ්‍යූ
+ඩ්‍යෘ
+ඩ්‍යෲ
+ඩ්‍යෟ
+ඩ්‍යෳ
+ඩ්‍යෙ
+ඩ්‍යේ
+ඩ්‍යෛ
+ඩ්‍යො
+ඩ්‍යෝ
+ඩ්‍යෞ
+ඩ්‍ය්
+ඩ්‍යං
+ඩ්‍යඃ
+ර්‍ඩ
+ර්‍ඩා
+ර්‍ඩැ
+ර්‍ඩෑ
+ර්‍ඩි
+ර්‍ඩී
+ර්‍ඩු
+ර්‍ඩූ
+ර්‍ඩෘ
+ර්‍ඩෲ
+ර්‍ඩෟ
+ර්‍ඩෳ
+ර්‍ඩෙ
+ර්‍ඩේ
+ර්‍ඩෛ
+ර්‍ඩො
+ර්‍ඩෝ
+ර්‍ඩෞ
+ර්‍ඩ්
+ර්‍ඩං
+ර්‍ඩඃ
+ඪ
+ඪා
+ඪැ
+ඪෑ
+ඪි
+ඪී
+ඪු
+ඪූ
+ඪෘ
+ඪෲ
+ඪෟ
+ඪෳ
+ඪෙ
+ඪේ
+ඪෛ
+ඪො
+ඪෝ
+ඪෞ
+ඪ්
+ඪං
+ඪඃ
+ඪ්‍ර
+ඪ්‍රා
+ඪ්‍රැ
+ඪ්‍රෑ
+ඪ්‍රි
+ඪ්‍රී
+ඪ්‍රු
+ඪ්‍රූ
+ඪ්‍රෘ
+ඪ්‍රෲ
+ඪ්‍රෟ
+ඪ්‍රෳ
+ඪ්‍රෙ
+ඪ්‍රේ
+ඪ්‍රෛ
+ඪ්‍රො
+ඪ්‍රෝ
+ඪ්‍රෞ
+ඪ්‍ර්
+ඪ්‍රං
+ඪ්‍රඃ
+ඪ්‍ය
+ඪ්‍යා
+ඪ්‍යැ
+ඪ්‍යෑ
+ඪ්‍යි
+ඪ්‍යී
+ඪ්‍යු
+ඪ්‍යූ
+ඪ්‍යෘ
+ඪ්‍යෲ
+ඪ්‍යෟ
+ඪ්‍යෳ
+ඪ්‍යෙ
+ඪ්‍යේ
+ඪ්‍යෛ
+ඪ්‍යො
+ඪ්‍යෝ
+ඪ්‍යෞ
+ඪ්‍ය්
+ඪ්‍යං
+ඪ්‍යඃ
+ර්‍ඪ
+ර්‍ඪා
+ර්‍ඪැ
+ර්‍ඪෑ
+ර්‍ඪි
+ර්‍ඪී
+ර්‍ඪු
+ර්‍ඪූ
+ර්‍ඪෘ
+ර්‍ඪෲ
+ර්‍ඪෟ
+ර්‍ඪෳ
+ර්‍ඪෙ
+ර්‍ඪේ
+ර්‍ඪෛ
+ර්‍ඪො
+ර්‍ඪෝ
+ර්‍ඪෞ
+ර්‍ඪ්
+ර්‍ඪං
+ර්‍ඪඃ
+ණ
+ණා
+ණැ
+ණෑ
+ණි
+ණී
+ණු
+ණූ
+ණෘ
+ණෲ
+ණෟ
+ණෳ
+ණෙ
+ණේ
+ණෛ
+ණො
+ණෝ
+ණෞ
+ණ්
+ණං
+ණඃ
+ණ්‍ර
+ණ්‍රා
+ණ්‍රැ
+ණ්‍රෑ
+ණ්‍රි
+ණ්‍රී
+ණ්‍රු
+ණ්‍රූ
+ණ්‍රෘ
+ණ්‍රෲ
+ණ්‍රෟ
+ණ්‍රෳ
+ණ්‍රෙ
+ණ්‍රේ
+ණ්‍රෛ
+ණ්‍රො
+ණ්‍රෝ
+ණ්‍රෞ
+ණ්‍ර්
+ණ්‍රං
+ණ්‍රඃ
+ණ්‍ය
+ණ්‍යා
+ණ්‍යැ
+ණ්‍යෑ
+ණ්‍යි
+ණ්‍යී
+ණ්‍යු
+ණ්‍යූ
+ණ්‍යෘ
+ණ්‍යෲ
+ණ්‍යෟ
+ණ්‍යෳ
+ණ්‍යෙ
+ණ්‍යේ
+ණ්‍යෛ
+ණ්‍යො
+ණ්‍යෝ
+ණ්‍යෞ
+ණ්‍ය්
+ණ්‍යං
+ණ්‍යඃ
+ර්‍ණ
+ර්‍ණා
+ර්‍ණැ
+ර්‍ණෑ
+ර්‍ණි
+ර්‍ණී
+ර්‍ණු
+ර්‍ණූ
+ර්‍ණෘ
+ර්‍ණෲ
+ර්‍ණෟ
+ර්‍ණෳ
+ර්‍ණෙ
+ර්‍ණේ
+ර්‍ණෛ
+ර්‍ණො
+ර්‍ණෝ
+ර්‍ණෞ
+ර්‍ණ්
+ර්‍ණං
+ර්‍ණඃ
+ඬ
+ඬා
+ඬැ
+ඬෑ
+ඬි
+ඬී
+ඬු
+ඬූ
+ඬෘ
+ඬෲ
+ඬෟ
+ඬෳ
+ඬෙ
+ඬේ
+ඬෛ
+ඬො
+ඬෝ
+ඬෞ
+ඬ්
+ඬං
+ඬඃ
+ඬ්‍ර
+ඬ්‍රා
+ඬ්‍රැ
+ඬ්‍රෑ
+ඬ්‍රි
+ඬ්‍රී
+ඬ්‍රු
+ඬ්‍රූ
+ඬ්‍රෘ
+ඬ්‍රෲ
+ඬ්‍රෟ
+ඬ්‍රෳ
+ඬ්‍රෙ
+ඬ්‍රේ
+ඬ්‍රෛ
+ඬ්‍රො
+ඬ්‍රෝ
+ඬ්‍රෞ
+ඬ්‍ර්
+ඬ්‍රං
+ඬ්‍රඃ
+ඬ්‍ය
+ඬ්‍යා
+ඬ්‍යැ
+ඬ්‍යෑ
+ඬ්‍යි
+ඬ්‍යී
+ඬ්‍යු
+ඬ්‍යූ
+ඬ්‍යෘ
+ඬ්‍යෲ
+ඬ්‍යෟ
+ඬ්‍යෳ
+ඬ්‍යෙ
+ඬ්‍යේ
+ඬ්‍යෛ
+ඬ්‍යො
+ඬ්‍යෝ
+ඬ්‍යෞ
+ඬ්‍ය්
+ඬ්‍යං
+ඬ්‍යඃ
+ර්‍ඬ
+ර්‍ඬා
+ර්‍ඬැ
+ර්‍ඬෑ
+ර්‍ඬි
+ර්‍ඬී
+ර්‍ඬු
+ර්‍ඬූ
+ර්‍ඬෘ
+ර්‍ඬෲ
+ර්‍ඬෟ
+ර්‍ඬෳ
+ර්‍ඬෙ
+ර්‍ඬේ
+ර්‍ඬෛ
+ර්‍ඬො
+ර්‍ඬෝ
+ර්‍ඬෞ
+ර්‍ඬ්
+ර්‍ඬං
+ර්‍ඬඃ
+ත
+තා
+තැ
+තෑ
+ති
+තී
+තු
+තූ
+තෘ
+තෲ
+තෟ
+තෳ
+තෙ
+තේ
+තෛ
+තො
+තෝ
+තෞ
+ත්
+තං
+තඃ
+ත්‍ර
+ත්‍රා
+ත්‍රැ
+ත්‍රෑ
+ත්‍රි
+ත්‍රී
+ත්‍රු
+ත්‍රූ
+ත්‍රෘ
+ත්‍රෲ
+ත්‍රෟ
+ත්‍රෳ
+ත්‍රෙ
+ත්‍රේ
+ත්‍රෛ
+ත්‍රො
+ත්‍රෝ
+ත්‍රෞ
+ත්‍ර්
+ත්‍රං
+ත්‍රඃ
+ත්‍ය
+ත්‍යා
+ත්‍යැ
+ත්‍යෑ
+ත්‍යි
+ත්‍යී
+ත්‍යු
+ත්‍යූ
+ත්‍යෘ
+ත්‍යෲ
+ත්‍යෟ
+ත්‍යෳ
+ත්‍යෙ
+ත්‍යේ
+ත්‍යෛ
+ත්‍යො
+ත්‍යෝ
+ත්‍යෞ
+ත්‍ය්
+ත්‍යං
+ත්‍යඃ
+ර්‍ත
+ර්‍තා
+ර්‍තැ
+ර්‍තෑ
+ර්‍ති
+ර්‍තී
+ර්‍තු
+ර්‍තූ
+ර්‍තෘ
+ර්‍තෲ
+ර්‍තෟ
+ර්‍තෳ
+ර්‍තෙ
+ර්‍තේ
+ර්‍තෛ
+ර්‍තො
+ර්‍තෝ
+ර්‍තෞ
+ර්‍ත්
+ර්‍තං
+ර්‍තඃ
+ථ
+ථා
+ථැ
+ථෑ
+ථි
+ථී
+ථු
+ථූ
+ථෘ
+ථෲ
+ථෟ
+ථෳ
+ථෙ
+ථේ
+ථෛ
+ථො
+ථෝ
+ථෞ
+ථ්
+ථං
+ථඃ
+ථ්‍ර
+ථ්‍රා
+ථ්‍රැ
+ථ්‍රෑ
+ථ්‍රි
+ථ්‍රී
+ථ්‍රු
+ථ්‍රූ
+ථ්‍රෘ
+ථ්‍රෲ
+ථ්‍රෟ
+ථ්‍රෳ
+ථ්‍රෙ
+ථ්‍රේ
+ථ්‍රෛ
+ථ්‍රො
+ථ්‍රෝ
+ථ්‍රෞ
+ථ්‍ර්
+ථ්‍රං
+ථ්‍රඃ
+ථ්‍ය
+ථ්‍යා
+ථ්‍යැ
+ථ්‍යෑ
+ථ්‍යි
+ථ්‍යී
+ථ්‍යු
+ථ්‍යූ
+ථ්‍යෘ
+ථ්‍යෲ
+ථ්‍යෟ
+ථ්‍යෳ
+ථ්‍යෙ
+ථ්‍යේ
+ථ්‍යෛ
+ථ්‍යො
+ථ්‍යෝ
+ථ්‍යෞ
+ථ්‍ය්
+ථ්‍යං
+ථ්‍යඃ
+ර්‍ථ
+ර්‍ථා
+ර්‍ථැ
+ර්‍ථෑ
+ර්‍ථි
+ර්‍ථී
+ර්‍ථු
+ර්‍ථූ
+ර්‍ථෘ
+ර්‍ථෲ
+ර්‍ථෟ
+ර්‍ථෳ
+ර්‍ථෙ
+ර්‍ථේ
+ර්‍ථෛ
+ර්‍ථො
+ර්‍ථෝ
+ර්‍ථෞ
+ර්‍ථ්
+ර්‍ථං
+ර්‍ථඃ
+ද
+දා
+දැ
+දෑ
+දි
+දී
+දු
+දූ
+දෘ
+දෲ
+දෟ
+දෳ
+දෙ
+දේ
+දෛ
+දො
+දෝ
+දෞ
+ද්
+දං
+දඃ
+ද්‍ර
+ද්‍රා
+ද්‍රැ
+ද්‍රෑ
+ද්‍රි
+ද්‍රී
+ද්‍රු
+ද්‍රූ
+ද්‍රෘ
+ද්‍රෲ
+ද්‍රෟ
+ද්‍රෳ
+ද්‍රෙ
+ද්‍රේ
+ද්‍රෛ
+ද්‍රො
+ද්‍රෝ
+ද්‍රෞ
+ද්‍ර්
+ද්‍රං
+ද්‍රඃ
+ද්‍ය
+ද්‍යා
+ද්‍යැ
+ද්‍යෑ
+ද්‍යි
+ද්‍යී
+ද්‍යු
+ද්‍යූ
+ද්‍යෘ
+ද්‍යෲ
+ද්‍යෟ
+ද්‍යෳ
+ද්‍යෙ
+ද්‍යේ
+ද්‍යෛ
+ද්‍යො
+ද්‍යෝ
+ද්‍යෞ
+ද්‍ය්
+ද්‍යං
+ද්‍යඃ
+ර්‍ද
+ර්‍දා
+ර්‍දැ
+ර්‍දෑ
+ර්‍දි
+ර්‍දී
+ර්‍දු
+ර්‍දූ
+ර්‍දෘ
+ර්‍දෲ
+ර්‍දෟ
+ර්‍දෳ
+ර්‍දෙ
+ර්‍දේ
+ර්‍දෛ
+ර්‍දො
+ර්‍දෝ
+ර්‍දෞ
+ර්‍ද්
+ර්‍දං
+ර්‍දඃ
+ධ
+ධා
+ධැ
+ධෑ
+ධි
+ධී
+ධු
+ධූ
+ධෘ
+ධෲ
+ධෟ
+ධෳ
+ධෙ
+ධේ
+ධෛ
+ධො
+ධෝ
+ධෞ
+ධ්
+ධං
+ධඃ
+ධ්‍ර
+ධ්‍රා
+ධ්‍රැ
+ධ්‍රෑ
+ධ්‍රි
+ධ්‍රී
+ධ්‍රු
+ධ්‍රූ
+ධ්‍රෘ
+ධ්‍රෲ
+ධ්‍රෟ
+ධ්‍රෳ
+ධ්‍රෙ
+ධ්‍රේ
+ධ්‍රෛ
+ධ්‍රො
+ධ්‍රෝ
+ධ්‍රෞ
+ධ්‍ර්
+ධ්‍රං
+ධ්‍රඃ
+ධ්‍ය
+ධ්‍යා
+ධ්‍යැ
+ධ්‍යෑ
+ධ්‍යි
+ධ්‍යී
+ධ්‍යු
+ධ්‍යූ
+ධ්‍යෘ
+ධ්‍යෲ
+ධ්‍යෟ
+ධ්‍යෳ
+ධ්‍යෙ
+ධ්‍යේ
+ධ්‍යෛ
+ධ්‍යො
+ධ්‍යෝ
+ධ්‍යෞ
+ධ්‍ය්
+ධ්‍යං
+ධ්‍යඃ
+ර්‍ධ
+ර්‍ධා
+ර්‍ධැ
+ර්‍ධෑ
+ර්‍ධි
+ර්‍ධී
+ර්‍ධු
+ර්‍ධූ
+ර්‍ධෘ
+ර්‍ධෲ
+ර්‍ධෟ
+ර්‍ධෳ
+ර්‍ධෙ
+ර්‍ධේ
+ර්‍ධෛ
+ර්‍ධො
+ර්‍ධෝ
+ර්‍ධෞ
+ර්‍ධ්
+ර්‍ධං
+ර්‍ධඃ
+න
+නා
+නැ
+නෑ
+නි
+නී
+නු
+නූ
+නෘ
+නෲ
+නෟ
+නෳ
+නෙ
+නේ
+නෛ
+නො
+නෝ
+නෞ
+න්
+නං
+නඃ
+න්‍ර
+න්‍රා
+න්‍රැ
+න්‍රෑ
+න්‍රි
+න්‍රී
+න්‍රු
+න්‍රූ
+න්‍රෘ
+න්‍රෲ
+න්‍රෟ
+න්‍රෳ
+න්‍රෙ
+න්‍රේ
+න්‍රෛ
+න්‍රො
+න්‍රෝ
+න්‍රෞ
+න්‍ර්
+න්‍රං
+න්‍රඃ
+න්‍ය
+න්‍යා
+න්‍යැ
+න්‍යෑ
+න්‍යි
+න්‍යී
+න්‍යු
+න්‍යූ
+න්‍යෘ
+න්‍යෲ
+න්‍යෟ
+න්‍යෳ
+න්‍යෙ
+න්‍යේ
+න්‍යෛ
+න්‍යො
+න්‍යෝ
+න්‍යෞ
+න්‍ය්
+න්‍යං
+න්‍යඃ
+ර්‍න
+ර්‍නා
+ර්‍නැ
+ර්‍නෑ
+ර්‍නි
+ර්‍නී
+ර්‍නු
+ර්‍නූ
+ර්‍නෘ
+ර්‍නෲ
+ර්‍නෟ
+ර්‍නෳ
+ර්‍නෙ
+ර්‍නේ
+ර්‍නෛ
+ර්‍නො
+ර්‍නෝ
+ර්‍නෞ
+ර්‍න්
+ර්‍නං
+ර්‍නඃ
+ඳ
+ඳා
+ඳැ
+ඳෑ
+ඳි
+ඳී
+ඳු
+ඳූ
+ඳෘ
+ඳෲ
+ඳෟ
+ඳෳ
+ඳෙ
+ඳේ
+ඳෛ
+ඳො
+ඳෝ
+ඳෞ
+ඳ්
+ඳං
+ඳඃ
+ඳ්‍ර
+ඳ්‍රා
+ඳ්‍රැ
+ඳ්‍රෑ
+ඳ්‍රි
+ඳ්‍රී
+ඳ්‍රු
+ඳ්‍රූ
+ඳ්‍රෘ
+ඳ්‍රෲ
+ඳ්‍රෟ
+ඳ්‍රෳ
+ඳ්‍රෙ
+ඳ්‍රේ
+ඳ්‍රෛ
+ඳ්‍රො
+ඳ්‍රෝ
+ඳ්‍රෞ
+ඳ්‍ර්
+ඳ්‍රං
+ඳ්‍රඃ
+ඳ්‍ය
+ඳ්‍යා
+ඳ්‍යැ
+ඳ්‍යෑ
+ඳ්‍යි
+ඳ්‍යී
+ඳ්‍යු
+ඳ්‍යූ
+ඳ්‍යෘ
+ඳ්‍යෲ
+ඳ්‍යෟ
+ඳ්‍යෳ
+ඳ්‍යෙ
+ඳ්‍යේ
+ඳ්‍යෛ
+ඳ්‍යො
+ඳ්‍යෝ
+ඳ්‍යෞ
+ඳ්‍ය්
+ඳ්‍යං
+ඳ්‍යඃ
+ර්‍ඳ
+ර්‍ඳා
+ර්‍ඳැ
+ර්‍ඳෑ
+ර්‍ඳි
+ර්‍ඳී
+ර්‍ඳු
+ර්‍ඳූ
+ර්‍ඳෘ
+ර්‍ඳෲ
+ර්‍ඳෟ
+ර්‍ඳෳ
+ර්‍ඳෙ
+ර්‍ඳේ
+ර්‍ඳෛ
+ර්‍ඳො
+ර්‍ඳෝ
+ර්‍ඳෞ
+ර්‍ඳ්
+ර්‍ඳං
+ර්‍ඳඃ
+ප
+පා
+පැ
+පෑ
+පි
+පී
+පු
+පූ
+පෘ
+පෲ
+පෟ
+පෳ
+පෙ
+පේ
+පෛ
+පො
+පෝ
+පෞ
+ප්
+පං
+පඃ
+ප්‍ර
+ප්‍රා
+ප්‍රැ
+ප්‍රෑ
+ප්‍රි
+ප්‍රී
+ප්‍රු
+ප්‍රූ
+ප්‍රෘ
+ප්‍රෲ
+ප්‍රෟ
+ප්‍රෳ
+ප්‍රෙ
+ප්‍රේ
+ප්‍රෛ
+ප්‍රො
+ප්‍රෝ
+ප්‍රෞ
+ප්‍ර්
+ප්‍රං
+ප්‍රඃ
+ප්‍ය
+ප්‍යා
+ප්‍යැ
+ප්‍යෑ
+ප්‍යි
+ප්‍යී
+ප්‍යු
+ප්‍යූ
+ප්‍යෘ
+ප්‍යෲ
+ප්‍යෟ
+ප්‍යෳ
+ප්‍යෙ
+ප්‍යේ
+ප්‍යෛ
+ප්‍යො
+ප්‍යෝ
+ප්‍යෞ
+ප්‍ය්
+ප්‍යං
+ප්‍යඃ
+ර්‍ප
+ර්‍පා
+ර්‍පැ
+ර්‍පෑ
+ර්‍පි
+ර්‍පී
+ර්‍පු
+ර්‍පූ
+ර්‍පෘ
+ර්‍පෲ
+ර්‍පෟ
+ර්‍පෳ
+ර්‍පෙ
+ර්‍පේ
+ර්‍පෛ
+ර්‍පො
+ර්‍පෝ
+ර්‍පෞ
+ර්‍ප්
+ර්‍පං
+ර්‍පඃ
+ඵ
+ඵා
+ඵැ
+ඵෑ
+ඵි
+ඵී
+ඵු
+ඵූ
+ඵෘ
+ඵෲ
+ඵෟ
+ඵෳ
+ඵෙ
+ඵේ
+ඵෛ
+ඵො
+ඵෝ
+ඵෞ
+ඵ්
+ඵං
+ඵඃ
+ඵ්‍ර
+ඵ්‍රා
+ඵ්‍රැ
+ඵ්‍රෑ
+ඵ්‍රි
+ඵ්‍රී
+ඵ්‍රු
+ඵ්‍රූ
+ඵ්‍රෘ
+ඵ්‍රෲ
+ඵ්‍රෟ
+ඵ්‍රෳ
+ඵ්‍රෙ
+ඵ්‍රේ
+ඵ්‍රෛ
+ඵ්‍රො
+ඵ්‍රෝ
+ඵ්‍රෞ
+ඵ්‍ර්
+ඵ්‍රං
+ඵ්‍රඃ
+ඵ්‍ය
+ඵ්‍යා
+ඵ්‍යැ
+ඵ්‍යෑ
+ඵ්‍යි
+ඵ්‍යී
+ඵ්‍යු
+ඵ්‍යූ
+ඵ්‍යෘ
+ඵ්‍යෲ
+ඵ්‍යෟ
+ඵ්‍යෳ
+ඵ්‍යෙ
+ඵ්‍යේ
+ඵ්‍යෛ
+ඵ්‍යො
+ඵ්‍යෝ
+ඵ්‍යෞ
+ඵ්‍ය්
+ඵ්‍යං
+ඵ්‍යඃ
+ර්‍ඵ
+ර්‍ඵා
+ර්‍ඵැ
+ර්‍ඵෑ
+ර්‍ඵි
+ර්‍ඵී
+ර්‍ඵු
+ර්‍ඵූ
+ර්‍ඵෘ
+ර්‍ඵෲ
+ර්‍ඵෟ
+ර්‍ඵෳ
+ර්‍ඵෙ
+ර්‍ඵේ
+ර්‍ඵෛ
+ර්‍ඵො
+ර්‍ඵෝ
+ර්‍ඵෞ
+ර්‍ඵ්
+ර්‍ඵං
+ර්‍ඵඃ
+බ
+බා
+බැ
+බෑ
+බි
+බී
+බු
+බූ
+බෘ
+බෲ
+බෟ
+බෳ
+බෙ
+බේ
+බෛ
+බො
+බෝ
+බෞ
+බ්
+බං
+බඃ
+බ්‍ර
+බ්‍රා
+බ්‍රැ
+බ්‍රෑ
+බ්‍රි
+බ්‍රී
+බ්‍රු
+බ්‍රූ
+බ්‍රෘ
+බ්‍රෲ
+බ්‍රෟ
+බ්‍රෳ
+බ්‍රෙ
+බ්‍රේ
+බ්‍රෛ
+බ්‍රො
+බ්‍රෝ
+බ්‍රෞ
+බ්‍ර්
+බ්‍රං
+බ්‍රඃ
+බ්‍ය
+බ්‍යා
+බ්‍යැ
+බ්‍යෑ
+බ්‍යි
+බ්‍යී
+බ්‍යු
+බ්‍යූ
+බ්‍යෘ
+බ්‍යෲ
+බ්‍යෟ
+බ්‍යෳ
+බ්‍යෙ
+බ්‍යේ
+බ්‍යෛ
+බ්‍යො
+බ්‍යෝ
+බ්‍යෞ
+බ්‍ය්
+බ්‍යං
+බ්‍යඃ
+ර්‍බ
+ර්‍බා
+ර්‍බැ
+ර්‍බෑ
+ර්‍බි
+ර්‍බී
+ර්‍බු
+ර්‍බූ
+ර්‍බෘ
+ර්‍බෲ
+ර්‍බෟ
+ර්‍බෳ
+ර්‍බෙ
+ර්‍බේ
+ර්‍බෛ
+ර්‍බො
+ර්‍බෝ
+ර්‍බෞ
+ර්‍බ්
+ර්‍බං
+ර්‍බඃ
+භ
+භා
+භැ
+භෑ
+භි
+භී
+භු
+භූ
+භෘ
+භෲ
+භෟ
+භෳ
+භෙ
+භේ
+භෛ
+භො
+භෝ
+භෞ
+භ්
+භං
+භඃ
+භ්‍ර
+භ්‍රා
+භ්‍රැ
+භ්‍රෑ
+භ්‍රි
+භ්‍රී
+භ්‍රු
+භ්‍රූ
+භ්‍රෘ
+භ්‍රෲ
+භ්‍රෟ
+භ්‍රෳ
+භ්‍රෙ
+භ්‍රේ
+භ්‍රෛ
+භ්‍රො
+භ්‍රෝ
+භ්‍රෞ
+භ්‍ර්
+භ්‍රං
+භ්‍රඃ
+භ්‍ය
+භ්‍යා
+භ්‍යැ
+භ්‍යෑ
+භ්‍යි
+භ්‍යී
+භ්‍යු
+භ්‍යූ
+භ්‍යෘ
+භ්‍යෲ
+භ්‍යෟ
+භ්‍යෳ
+භ්‍යෙ
+භ්‍යේ
+භ්‍යෛ
+භ්‍යො
+භ්‍යෝ
+භ්‍යෞ
+භ්‍ය්
+භ්‍යං
+භ්‍යඃ
+ර්‍භ
+ර්‍භා
+ර්‍භැ
+ර්‍භෑ
+ර්‍භි
+ර්‍භී
+ර්‍භු
+ර්‍භූ
+ර්‍භෘ
+ර්‍භෲ
+ර්‍භෟ
+ර්‍භෳ
+ර්‍භෙ
+ර්‍භේ
+ර්‍භෛ
+ර්‍භො
+ර්‍භෝ
+ර්‍භෞ
+ර්‍භ්
+ර්‍භං
+ර්‍භඃ
+ම
+මා
+මැ
+මෑ
+මි
+මී
+මු
+මූ
+මෘ
+මෲ
+මෟ
+මෳ
+මෙ
+මේ
+මෛ
+මො
+මෝ
+මෞ
+ම්
+මං
+මඃ
+ම්‍ර
+ම්‍රා
+ම්‍රැ
+ම්‍රෑ
+ම්‍රි
+ම්‍රී
+ම්‍රු
+ම්‍රූ
+ම්‍රෘ
+ම්‍රෲ
+ම්‍රෟ
+ම්‍රෳ
+ම්‍රෙ
+ම්‍රේ
+ම්‍රෛ
+ම්‍රො
+ම්‍රෝ
+ම්‍රෞ
+ම්‍ර්
+ම්‍රං
+ම්‍රඃ
+ම්‍ය
+ම්‍යා
+ම්‍යැ
+ම්‍යෑ
+ම්‍යි
+ම්‍යී
+ම්‍යු
+ම්‍යූ
+ම්‍යෘ
+ම්‍යෲ
+ම්‍යෟ
+ම්‍යෳ
+ම්‍යෙ
+ම්‍යේ
+ම්‍යෛ
+ම්‍යො
+ම්‍යෝ
+ම්‍යෞ
+ම්‍ය්
+ම්‍යං
+ම්‍යඃ
+ර්‍ම
+ර්‍මා
+ර්‍මැ
+ර්‍මෑ
+ර්‍මි
+ර්‍මී
+ර්‍මු
+ර්‍මූ
+ර්‍මෘ
+ර්‍මෲ
+ර්‍මෟ
+ර්‍මෳ
+ර්‍මෙ
+ර්‍මේ
+ර්‍මෛ
+ර්‍මො
+ර්‍මෝ
+ර්‍මෞ
+ර්‍ම්
+ර්‍මං
+ර්‍මඃ
+ඹ
+ඹා
+ඹැ
+ඹෑ
+ඹි
+ඹී
+ඹු
+ඹූ
+ඹෘ
+ඹෲ
+ඹෟ
+ඹෳ
+ඹෙ
+ඹේ
+ඹෛ
+ඹො
+ඹෝ
+ඹෞ
+ඹ්
+ඹං
+ඹඃ
+ඹ්‍ර
+ඹ්‍රා
+ඹ්‍රැ
+ඹ්‍රෑ
+ඹ්‍රි
+ඹ්‍රී
+ඹ්‍රු
+ඹ්‍රූ
+ඹ්‍රෘ
+ඹ්‍රෲ
+ඹ්‍රෟ
+ඹ්‍රෳ
+ඹ්‍රෙ
+ඹ්‍රේ
+ඹ්‍රෛ
+ඹ්‍රො
+ඹ්‍රෝ
+ඹ්‍රෞ
+ඹ්‍ර්
+ඹ්‍රං
+ඹ්‍රඃ
+ඹ්‍ය
+ඹ්‍යා
+ඹ්‍යැ
+ඹ්‍යෑ
+ඹ්‍යි
+ඹ්‍යී
+ඹ්‍යු
+ඹ්‍යූ
+ඹ්‍යෘ
+ඹ්‍යෲ
+ඹ්‍යෟ
+ඹ්‍යෳ
+ඹ්‍යෙ
+ඹ්‍යේ
+ඹ්‍යෛ
+ඹ්‍යො
+ඹ්‍යෝ
+ඹ්‍යෞ
+ඹ්‍ය්
+ඹ්‍යං
+ඹ්‍යඃ
+ර්‍ඹ
+ර්‍ඹා
+ර්‍ඹැ
+ර්‍ඹෑ
+ර්‍ඹි
+ර්‍ඹී
+ර්‍ඹු
+ර්‍ඹූ
+ර්‍ඹෘ
+ර්‍ඹෲ
+ර්‍ඹෟ
+ර්‍ඹෳ
+ර්‍ඹෙ
+ර්‍ඹේ
+ර්‍ඹෛ
+ර්‍ඹො
+ර්‍ඹෝ
+ර්‍ඹෞ
+ර්‍ඹ්
+ර්‍ඹං
+ර්‍ඹඃ
+ය
+යා
+යැ
+යෑ
+යි
+යී
+යු
+යූ
+යෘ
+යෲ
+යෟ
+යෳ
+යෙ
+යේ
+යෛ
+යො
+යෝ
+යෞ
+ය්
+යං
+යඃ
+ය්‍ර
+ය්‍රා
+ය්‍රැ
+ය්‍රෑ
+ය්‍රි
+ය්‍රී
+ය්‍රු
+ය්‍රූ
+ය්‍රෘ
+ය්‍රෲ
+ය්‍රෟ
+ය්‍රෳ
+ය්‍රෙ
+ය්‍රේ
+ය්‍රෛ
+ය්‍රො
+ය්‍රෝ
+ය්‍රෞ
+ය්‍ර්
+ය්‍රං
+ය්‍රඃ
+ය්‍ය
+ය්‍යා
+ය්‍යැ
+ය්‍යෑ
+ය්‍යි
+ය්‍යී
+ය්‍යු
+ය්‍යූ
+ය්‍යෘ
+ය්‍යෲ
+ය්‍යෟ
+ය්‍යෳ
+ය්‍යෙ
+ය්‍යේ
+ය්‍යෛ
+ය්‍යො
+ය්‍යෝ
+ය්‍යෞ
+ය්‍ය්
+ය්‍යං
+ය්‍යඃ
+ර්‍ය
+ර්‍යා
+ර්‍යැ
+ර්‍යෑ
+ර්‍යි
+ර්‍යී
+ර්‍යු
+ර්‍යූ
+ර්‍යෘ
+ර්‍යෲ
+ර්‍යෟ
+ර්‍යෳ
+ර්‍යෙ
+ර්‍යේ
+ර්‍යෛ
+ර්‍යො
+ර්‍යෝ
+ර්‍යෞ
+ර්‍ය්
+ර්‍යං
+ර්‍යඃ
+ර
+රා
+රැ
+රෑ
+රි
+රී
+රු
+රූ
+රෘ
+රෲ
+රෟ
+රෳ
+රෙ
+රේ
+රෛ
+රො
+රෝ
+රෞ
+ර්
+රං
+රඃ
+ර්‍ර
+ර්‍රා
+ර්‍රැ
+ර්‍රෑ
+ර්‍රි
+ර්‍රී
+ර්‍රු
+ර්‍රූ
+ර්‍රෘ
+ර්‍රෲ
+ර්‍රෟ
+ර්‍රෳ
+ර්‍රෙ
+ර්‍රේ
+ර්‍රෛ
+ර්‍රො
+ර්‍රෝ
+ර්‍රෞ
+ර්‍ර්
+ර්‍රං
+ර්‍රඃ
+ර්‍ය
+ර්‍යා
+ර්‍යැ
+ර්‍යෑ
+ර්‍යි
+ර්‍යී
+ර්‍යු
+ර්‍යූ
+ර්‍යෘ
+ර්‍යෲ
+ර්‍යෟ
+ර්‍යෳ
+ර්‍යෙ
+ර්‍යේ
+ර්‍යෛ
+ර්‍යො
+ර්‍යෝ
+ර්‍යෞ
+ර්‍ය්
+ර්‍යං
+ර්‍යඃ
+ර්‍ර
+ර්‍රා
+ර්‍රැ
+ර්‍රෑ
+ර්‍රි
+ර්‍රී
+ර්‍රු
+ර්‍රූ
+ර්‍රෘ
+ර්‍රෲ
+ර්‍රෟ
+ර්‍රෳ
+ර්‍රෙ
+ර්‍රේ
+ර්‍රෛ
+ර්‍රො
+ර්‍රෝ
+ර්‍රෞ
+ර්‍ර්
+ර්‍රං
+ර්‍රඃ
+ල
+ලා
+ලැ
+ලෑ
+ලි
+ලී
+ලු
+ලූ
+ලෘ
+ලෲ
+ලෟ
+ලෳ
+ලෙ
+ලේ
+ලෛ
+ලො
+ලෝ
+ලෞ
+ල්
+ලං
+ලඃ
+ල්‍ර
+ල්‍රා
+ල්‍රැ
+ල්‍රෑ
+ල්‍රි
+ල්‍රී
+ල්‍රු
+ල්‍රූ
+ල්‍රෘ
+ල්‍රෲ
+ල්‍රෟ
+ල්‍රෳ
+ල්‍රෙ
+ල්‍රේ
+ල්‍රෛ
+ල්‍රො
+ල්‍රෝ
+ල්‍රෞ
+ල්‍ර්
+ල්‍රං
+ල්‍රඃ
+ල්‍ය
+ල්‍යා
+ල්‍යැ
+ල්‍යෑ
+ල්‍යි
+ල්‍යී
+ල්‍යු
+ල්‍යූ
+ල්‍යෘ
+ල්‍යෲ
+ල්‍යෟ
+ල්‍යෳ
+ල්‍යෙ
+ල්‍යේ
+ල්‍යෛ
+ල්‍යො
+ල්‍යෝ
+ල්‍යෞ
+ල්‍ය්
+ල්‍යං
+ල්‍යඃ
+ර්‍ල
+ර්‍ලා
+ර්‍ලැ
+ර්‍ලෑ
+ර්‍ලි
+ර්‍ලී
+ර්‍ලු
+ර්‍ලූ
+ර්‍ලෘ
+ර්‍ලෲ
+ර්‍ලෟ
+ර්‍ලෳ
+ර්‍ලෙ
+ර්‍ලේ
+ර්‍ලෛ
+ර්‍ලො
+ර්‍ලෝ
+ර්‍ලෞ
+ර්‍ල්
+ර්‍ලං
+ර්‍ලඃ
+ව
+වා
+වැ
+වෑ
+වි
+වී
+වු
+වූ
+වෘ
+වෲ
+වෟ
+වෳ
+වෙ
+වේ
+වෛ
+වො
+වෝ
+වෞ
+ව්
+වං
+වඃ
+ව්‍ර
+ව්‍රා
+ව්‍රැ
+ව්‍රෑ
+ව්‍රි
+ව්‍රී
+ව්‍රු
+ව්‍රූ
+ව්‍රෘ
+ව්‍රෲ
+ව්‍රෟ
+ව්‍රෳ
+ව්‍රෙ
+ව්‍රේ
+ව්‍රෛ
+ව්‍රො
+ව්‍රෝ
+ව්‍රෞ
+ව්‍ර්
+ව්‍රං
+ව්‍රඃ
+ව්‍ය
+ව්‍යා
+ව්‍යැ
+ව්‍යෑ
+ව්‍යි
+ව්‍යී
+ව්‍යු
+ව්‍යූ
+ව්‍යෘ
+ව්‍යෲ
+ව්‍යෟ
+ව්‍යෳ
+ව්‍යෙ
+ව්‍යේ
+ව්‍යෛ
+ව්‍යො
+ව්‍යෝ
+ව්‍යෞ
+ව්‍ය්
+ව්‍යං
+ව්‍යඃ
+ර්‍ව
+ර්‍වා
+ර්‍වැ
+ර්‍වෑ
+ර්‍වි
+ර්‍වී
+ර්‍වු
+ර්‍වූ
+ර්‍වෘ
+ර්‍වෲ
+ර්‍වෟ
+ර්‍වෳ
+ර්‍වෙ
+ර්‍වේ
+ර්‍වෛ
+ර්‍වො
+ර්‍වෝ
+ර්‍වෞ
+ර්‍ව්
+ර්‍වං
+ර්‍වඃ
+ශ
+ශා
+ශැ
+ශෑ
+ශි
+ශී
+ශු
+ශූ
+ශෘ
+ශෲ
+ශෟ
+ශෳ
+ශෙ
+ශේ
+ශෛ
+ශො
+ශෝ
+ශෞ
+ශ්
+ශං
+ශඃ
+ශ්‍ර
+ශ්‍රා
+ශ්‍රැ
+ශ්‍රෑ
+ශ්‍රි
+ශ්‍රී
+ශ්‍රු
+ශ්‍රූ
+ශ්‍රෘ
+ශ්‍රෲ
+ශ්‍රෟ
+ශ්‍රෳ
+ශ්‍රෙ
+ශ්‍රේ
+ශ්‍රෛ
+ශ්‍රො
+ශ්‍රෝ
+ශ්‍රෞ
+ශ්‍ර්
+ශ්‍රං
+ශ්‍රඃ
+ශ්‍ය
+ශ්‍යා
+ශ්‍යැ
+ශ්‍යෑ
+ශ්‍යි
+ශ්‍යී
+ශ්‍යු
+ශ්‍යූ
+ශ්‍යෘ
+ශ්‍යෲ
+ශ්‍යෟ
+ශ්‍යෳ
+ශ්‍යෙ
+ශ්‍යේ
+ශ්‍යෛ
+ශ්‍යො
+ශ්‍යෝ
+ශ්‍යෞ
+ශ්‍ය්
+ශ්‍යං
+ශ්‍යඃ
+ර්‍ශ
+ර්‍ශා
+ර්‍ශැ
+ර්‍ශෑ
+ර්‍ශි
+ර්‍ශී
+ර්‍ශු
+ර්‍ශූ
+ර්‍ශෘ
+ර්‍ශෲ
+ර්‍ශෟ
+ර්‍ශෳ
+ර්‍ශෙ
+ර්‍ශේ
+ර්‍ශෛ
+ර්‍ශො
+ර්‍ශෝ
+ර්‍ශෞ
+ර්‍ශ්
+ර්‍ශං
+ර්‍ශඃ
+ෂ
+ෂා
+ෂැ
+ෂෑ
+ෂි
+ෂී
+ෂු
+ෂූ
+ෂෘ
+ෂෲ
+ෂෟ
+ෂෳ
+ෂෙ
+ෂේ
+ෂෛ
+ෂො
+ෂෝ
+ෂෞ
+ෂ්
+ෂං
+ෂඃ
+ෂ්‍ර
+ෂ්‍රා
+ෂ්‍රැ
+ෂ්‍රෑ
+ෂ්‍රි
+ෂ්‍රී
+ෂ්‍රු
+ෂ්‍රූ
+ෂ්‍රෘ
+ෂ්‍රෲ
+ෂ්‍රෟ
+ෂ්‍රෳ
+ෂ්‍රෙ
+ෂ්‍රේ
+ෂ්‍රෛ
+ෂ්‍රො
+ෂ්‍රෝ
+ෂ්‍රෞ
+ෂ්‍ර්
+ෂ්‍රං
+ෂ්‍රඃ
+ෂ්‍ය
+ෂ්‍යා
+ෂ්‍යැ
+ෂ්‍යෑ
+ෂ්‍යි
+ෂ්‍යී
+ෂ්‍යු
+ෂ්‍යූ
+ෂ්‍යෘ
+ෂ්‍යෲ
+ෂ්‍යෟ
+ෂ්‍යෳ
+ෂ්‍යෙ
+ෂ්‍යේ
+ෂ්‍යෛ
+ෂ්‍යො
+ෂ්‍යෝ
+ෂ්‍යෞ
+ෂ්‍ය්
+ෂ්‍යං
+ෂ්‍යඃ
+ර්‍ෂ
+ර්‍ෂා
+ර්‍ෂැ
+ර්‍ෂෑ
+ර්‍ෂි
+ර්‍ෂී
+ර්‍ෂු
+ර්‍ෂූ
+ර්‍ෂෘ
+ර්‍ෂෲ
+ර්‍ෂෟ
+ර්‍ෂෳ
+ර්‍ෂෙ
+ර්‍ෂේ
+ර්‍ෂෛ
+ර්‍ෂො
+ර්‍ෂෝ
+ර්‍ෂෞ
+ර්‍ෂ්
+ර්‍ෂං
+ර්‍ෂඃ
+ස
+සා
+සැ
+සෑ
+සි
+සී
+සු
+සූ
+සෘ
+සෲ
+සෟ
+සෳ
+සෙ
+සේ
+සෛ
+සො
+සෝ
+සෞ
+ස්
+සං
+සඃ
+ස්‍ර
+ස්‍රා
+ස්‍රැ
+ස්‍රෑ
+ස්‍රි
+ස්‍රී
+ස්‍රු
+ස්‍රූ
+ස්‍රෘ
+ස්‍රෲ
+ස්‍රෟ
+ස්‍රෳ
+ස්‍රෙ
+ස්‍රේ
+ස්‍රෛ
+ස්‍රො
+ස්‍රෝ
+ස්‍රෞ
+ස්‍ර්
+ස්‍රං
+ස්‍රඃ
+ස්‍ය
+ස්‍යා
+ස්‍යැ
+ස්‍යෑ
+ස්‍යි
+ස්‍යී
+ස්‍යු
+ස්‍යූ
+ස්‍යෘ
+ස්‍යෲ
+ස්‍යෟ
+ස්‍යෳ
+ස්‍යෙ
+ස්‍යේ
+ස්‍යෛ
+ස්‍යො
+ස්‍යෝ
+ස්‍යෞ
+ස්‍ය්
+ස්‍යං
+ස්‍යඃ
+ර්‍ස
+ර්‍සා
+ර්‍සැ
+ර්‍සෑ
+ර්‍සි
+ර්‍සී
+ර්‍සු
+ර්‍සූ
+ර්‍සෘ
+ර්‍සෲ
+ර්‍සෟ
+ර්‍සෳ
+ර්‍සෙ
+ර්‍සේ
+ර්‍සෛ
+ර්‍සො
+ර්‍සෝ
+ර්‍සෞ
+ර්‍ස්
+ර්‍සං
+ර්‍සඃ
+හ
+හා
+හැ
+හෑ
+හි
+හී
+හු
+හූ
+හෘ
+හෲ
+හෟ
+හෳ
+හෙ
+හේ
+හෛ
+හො
+හෝ
+හෞ
+හ්
+හං
+හඃ
+හ්‍ර
+හ්‍රා
+හ්‍රැ
+හ්‍රෑ
+හ්‍රි
+හ්‍රී
+හ්‍රු
+හ්‍රූ
+හ්‍රෘ
+හ්‍රෲ
+හ්‍රෟ
+හ්‍රෳ
+හ්‍රෙ
+හ්‍රේ
+හ්‍රෛ
+හ්‍රො
+හ්‍රෝ
+හ්‍රෞ
+හ්‍ර්
+හ්‍රං
+හ්‍රඃ
+හ්‍ය
+හ්‍යා
+හ්‍යැ
+හ්‍යෑ
+හ්‍යි
+හ්‍යී
+හ්‍යු
+හ්‍යූ
+හ්‍යෘ
+හ්‍යෲ
+හ්‍යෟ
+හ්‍යෳ
+හ්‍යෙ
+හ්‍යේ
+හ්‍යෛ
+හ්‍යො
+හ්‍යෝ
+හ්‍යෞ
+හ්‍ය්
+හ්‍යං
+හ්‍යඃ
+ර්‍හ
+ර්‍හා
+ර්‍හැ
+ර්‍හෑ
+ර්‍හි
+ර්‍හී
+ර්‍හු
+ර්‍හූ
+ර්‍හෘ
+ර්‍හෲ
+ර්‍හෟ
+ර්‍හෳ
+ර්‍හෙ
+ර්‍හේ
+ර්‍හෛ
+ර්‍හො
+ර්‍හෝ
+ර්‍හෞ
+ර්‍හ්
+ර්‍හං
+ර්‍හඃ
+ළ
+ළා
+ළැ
+ළෑ
+ළි
+ළී
+ළු
+ළූ
+ළෘ
+ළෲ
+ළෟ
+ළෳ
+ළෙ
+ළේ
+ළෛ
+ළො
+ළෝ
+ළෞ
+ළ්
+ළං
+ළඃ
+ළ්‍ර
+ළ්‍රා
+ළ්‍රැ
+ළ්‍රෑ
+ළ්‍රි
+ළ්‍රී
+ළ්‍රු
+ළ්‍රූ
+ළ්‍රෘ
+ළ්‍රෲ
+ළ්‍රෟ
+ළ්‍රෳ
+ළ්‍රෙ
+ළ්‍රේ
+ළ්‍රෛ
+ළ්‍රො
+ළ්‍රෝ
+ළ්‍රෞ
+ළ්‍ර්
+ළ්‍රං
+ළ්‍රඃ
+ළ්‍ය
+ළ්‍යා
+ළ්‍යැ
+ළ්‍යෑ
+ළ්‍යි
+ළ්‍යී
+ළ්‍යු
+ළ්‍යූ
+ළ්‍යෘ
+ළ්‍යෲ
+ළ්‍යෟ
+ළ්‍යෳ
+ළ්‍යෙ
+ළ්‍යේ
+ළ්‍යෛ
+ළ්‍යො
+ළ්‍යෝ
+ළ්‍යෞ
+ළ්‍ය්
+ළ්‍යං
+ළ්‍යඃ
+ර්‍ළ
+ර්‍ළා
+ර්‍ළැ
+ර්‍ළෑ
+ර්‍ළි
+ර්‍ළී
+ර්‍ළු
+ර්‍ළූ
+ර්‍ළෘ
+ර්‍ළෲ
+ර්‍ළෟ
+ර්‍ළෳ
+ර්‍ළෙ
+ර්‍ළේ
+ර්‍ළෛ
+ර්‍ළො
+ර්‍ළෝ
+ර්‍ළෞ
+ර්‍ළ්
+ර්‍ළං
+ර්‍ළඃ
+ෆ
+ෆා
+ෆැ
+ෆෑ
+ෆි
+ෆී
+ෆු
+ෆූ
+ෆෘ
+ෆෲ
+ෆෟ
+ෆෳ
+ෆෙ
+ෆේ
+ෆෛ
+ෆො
+ෆෝ
+ෆෞ
+ෆ්
+ෆං
+ෆඃ
+ෆ්‍ර
+ෆ්‍රා
+ෆ්‍රැ
+ෆ්‍රෑ
+ෆ්‍රි
+ෆ්‍රී
+ෆ්‍රු
+ෆ්‍රූ
+ෆ්‍රෘ
+ෆ්‍රෲ
+ෆ්‍රෟ
+ෆ්‍රෳ
+ෆ්‍රෙ
+ෆ්‍රේ
+ෆ්‍රෛ
+ෆ්‍රො
+ෆ්‍රෝ
+ෆ්‍රෞ
+ෆ්‍ර්
+ෆ්‍රං
+ෆ්‍රඃ
+ෆ්‍ය
+ෆ්‍යා
+ෆ්‍යැ
+ෆ්‍යෑ
+ෆ්‍යි
+ෆ්‍යී
+ෆ්‍යු
+ෆ්‍යූ
+ෆ්‍යෘ
+ෆ්‍යෲ
+ෆ්‍යෟ
+ෆ්‍යෳ
+ෆ්‍යෙ
+ෆ්‍යේ
+ෆ්‍යෛ
+ෆ්‍යො
+ෆ්‍යෝ
+ෆ්‍යෞ
+ෆ්‍ය්
+ෆ්‍යං
+ෆ්‍යඃ
+ර්‍ෆ
+ර්‍ෆා
+ර්‍ෆැ
+ර්‍ෆෑ
+ර්‍ෆි
+ර්‍ෆී
+ර්‍ෆු
+ර්‍ෆූ
+ර්‍ෆෘ
+ර්‍ෆෲ
+ර්‍ෆෟ
+ර්‍ෆෳ
+ර්‍ෆෙ
+ර්‍ෆේ
+ර්‍ෆෛ
+ර්‍ෆො
+ර්‍ෆෝ
+ර්‍ෆෞ
+ර්‍ෆ්
+ර්‍ෆං
+ර්‍ෆඃ
+ක්‍ෂ
+ක්‍ෂා
+ක්‍ෂැ
+ක්‍ෂෑ
+ක්‍ෂි
+ක්‍ෂී
+ක්‍ෂු
+ක්‍ෂූ
+ක්‍ෂෘ
+ක්‍ෂෲ
+ක්‍ෂෟ
+ක්‍ෂෳ
+ක්‍ෂෙ
+ක්‍ෂේ
+ක්‍ෂෛ
+ක්‍ෂො
+ක්‍ෂෝ
+ක්‍ෂෞ
+ක්‍ෂ්
+ක්‍ෂං
+ක්‍ෂඃ
+ක්‍ෂ්‍ර
+ක්‍ෂ්‍රා
+ක්‍ෂ්‍රැ
+ක්‍ෂ්‍රෑ
+ක්‍ෂ්‍රි
+ක්‍ෂ්‍රී
+ක්‍ෂ්‍රු
+ක්‍ෂ්‍රූ
+ක්‍ෂ්‍රෘ
+ක්‍ෂ්‍රෲ
+ක්‍ෂ්‍රෟ
+ක්‍ෂ්‍රෳ
+ක්‍ෂ්‍රෙ
+ක්‍ෂ්‍රේ
+ක්‍ෂ්‍රෛ
+ක්‍ෂ්‍රො
+ක්‍ෂ්‍රෝ
+ක්‍ෂ්‍රෞ
+ක්‍ෂ්‍ර්
+ක්‍ෂ්‍රං
+ක්‍ෂ්‍රඃ
+ක්‍ෂ්‍ය
+ක්‍ෂ්‍යා
+ක්‍ෂ්‍යැ
+ක්‍ෂ්‍යෑ
+ක්‍ෂ්‍යි
+ක්‍ෂ්‍යී
+ක්‍ෂ්‍යු
+ක්‍ෂ්‍යූ
+ක්‍ෂ්‍යෘ
+ක්‍ෂ්‍යෲ
+ක්‍ෂ්‍යෟ
+ක්‍ෂ්‍යෳ
+ක්‍ෂ්‍යෙ
+ක්‍ෂ්‍යේ
+ක්‍ෂ්‍යෛ
+ක්‍ෂ්‍යො
+ක්‍ෂ්‍යෝ
+ක්‍ෂ්‍යෞ
+ක්‍ෂ්‍ය්
+ක්‍ෂ්‍යං
+ක්‍ෂ්‍යඃ
+ර්‍ක්‍ෂ
+ර්‍ක්‍ෂා
+ර්‍ක්‍ෂැ
+ර්‍ක්‍ෂෑ
+ර්‍ක්‍ෂි
+ර්‍ක්‍ෂී
+ර්‍ක්‍ෂු
+ර්‍ක්‍ෂූ
+ර්‍ක්‍ෂෘ
+ර්‍ක්‍ෂෲ
+ර්‍ක්‍ෂෟ
+ර්‍ක්‍ෂෳ
+ර්‍ක්‍ෂෙ
+ර්‍ක්‍ෂේ
+ර්‍ක්‍ෂෛ
+ර්‍ක්‍ෂො
+ර්‍ක්‍ෂෝ
+ර්‍ක්‍ෂෞ
+ර්‍ක්‍ෂ්
+ර්‍ක්‍ෂං
+ර්‍ක්‍ෂඃ
+ක්‍ව
+ක්‍වා
+ක්‍වැ
+ක්‍වෑ
+ක්‍වි
+ක්‍වී
+ක්‍වු
+ක්‍වූ
+ක්‍වෘ
+ක්‍වෲ
+ක්‍වෟ
+ක්‍වෳ
+ක්‍වෙ
+ක්‍වේ
+ක්‍වෛ
+ක්‍වො
+ක්‍වෝ
+ක්‍වෞ
+ක්‍ව්
+ක්‍වං
+ක්‍වඃ
+ක්‍ව්‍ර
+ක්‍ව්‍රා
+ක්‍ව්‍රැ
+ක්‍ව්‍රෑ
+ක්‍ව්‍රි
+ක්‍ව්‍රී
+ක්‍ව්‍රු
+ක්‍ව්‍රූ
+ක්‍ව්‍රෘ
+ක්‍ව්‍රෲ
+ක්‍ව්‍රෟ
+ක්‍ව්‍රෳ
+ක්‍ව්‍රෙ
+ක්‍ව්‍රේ
+ක්‍ව්‍රෛ
+ක්‍ව්‍රො
+ක්‍ව්‍රෝ
+ක්‍ව්‍රෞ
+ක්‍ව්‍ර්
+ක්‍ව්‍රං
+ක්‍ව්‍රඃ
+ක්‍ව්‍ය
+ක්‍ව්‍යා
+ක්‍ව්‍යැ
+ක්‍ව්‍යෑ
+ක්‍ව්‍යි
+ක්‍ව්‍යී
+ක්‍ව්‍යු
+ක්‍ව්‍යූ
+ක්‍ව්‍යෘ
+ක්‍ව්‍යෲ
+ක්‍ව්‍යෟ
+ක්‍ව්‍යෳ
+ක්‍ව්‍යෙ
+ක්‍ව්‍යේ
+ක්‍ව්‍යෛ
+ක්‍ව්‍යො
+ක්‍ව්‍යෝ
+ක්‍ව්‍යෞ
+ක්‍ව්‍ය්
+ක්‍ව්‍යං
+ක්‍ව්‍යඃ
+ර්‍ක්‍ව
+ර්‍ක්‍වා
+ර්‍ක්‍වැ
+ර්‍ක්‍වෑ
+ර්‍ක්‍වි
+ර්‍ක්‍වී
+ර්‍ක්‍වු
+ර්‍ක්‍වූ
+ර්‍ක්‍වෘ
+ර්‍ක්‍වෲ
+ර්‍ක්‍වෟ
+ර්‍ක්‍වෳ
+ර්‍ක්‍වෙ
+ර්‍ක්‍වේ
+ර්‍ක්‍වෛ
+ර්‍ක්‍වො
+ර්‍ක්‍වෝ
+ර්‍ක්‍වෞ
+ර්‍ක්‍ව්
+ර්‍ක්‍වං
+ර්‍ක්‍වඃ
+ත්‍ථ
+ත්‍ථා
+ත්‍ථැ
+ත්‍ථෑ
+ත්‍ථි
+ත්‍ථී
+ත්‍ථු
+ත්‍ථූ
+ත්‍ථෘ
+ත්‍ථෲ
+ත්‍ථෟ
+ත්‍ථෳ
+ත්‍ථෙ
+ත්‍ථේ
+ත්‍ථෛ
+ත්‍ථො
+ත්‍ථෝ
+ත්‍ථෞ
+ත්‍ථ්
+ත්‍ථං
+ත්‍ථඃ
+ත්‍ථ්‍ර
+ත්‍ථ්‍රා
+ත්‍ථ්‍රැ
+ත්‍ථ්‍රෑ
+ත්‍ථ්‍රි
+ත්‍ථ්‍රී
+ත්‍ථ්‍රු
+ත්‍ථ්‍රූ
+ත්‍ථ්‍රෘ
+ත්‍ථ්‍රෲ
+ත්‍ථ්‍රෟ
+ත්‍ථ්‍රෳ
+ත්‍ථ්‍රෙ
+ත්‍ථ්‍රේ
+ත්‍ථ්‍රෛ
+ත්‍ථ්‍රො
+ත්‍ථ්‍රෝ
+ත්‍ථ්‍රෞ
+ත්‍ථ්‍ර්
+ත්‍ථ්‍රං
+ත්‍ථ්‍රඃ
+ත්‍ථ්‍ය
+ත්‍ථ්‍යා
+ත්‍ථ්‍යැ
+ත්‍ථ්‍යෑ
+ත්‍ථ්‍යි
+ත්‍ථ්‍යී
+ත්‍ථ්‍යු
+ත්‍ථ්‍යූ
+ත්‍ථ්‍යෘ
+ත්‍ථ්‍යෲ
+ත්‍ථ්‍යෟ
+ත්‍ථ්‍යෳ
+ත්‍ථ්‍යෙ
+ත්‍ථ්‍යේ
+ත්‍ථ්‍යෛ
+ත්‍ථ්‍යො
+ත්‍ථ්‍යෝ
+ත්‍ථ්‍යෞ
+ත්‍ථ්‍ය්
+ත්‍ථ්‍යං
+ත්‍ථ්‍යඃ
+ර්‍ත්‍ථ
+ර්‍ත්‍ථා
+ර්‍ත්‍ථැ
+ර්‍ත්‍ථෑ
+ර්‍ත්‍ථි
+ර්‍ත්‍ථී
+ර්‍ත්‍ථු
+ර්‍ත්‍ථූ
+ර්‍ත්‍ථෘ
+ර්‍ත්‍ථෲ
+ර්‍ත්‍ථෟ
+ර්‍ත්‍ථෳ
+ර්‍ත්‍ථෙ
+ර්‍ත්‍ථේ
+ර්‍ත්‍ථෛ
+ර්‍ත්‍ථො
+ර්‍ත්‍ථෝ
+ර්‍ත්‍ථෞ
+ර්‍ත්‍ථ්
+ර්‍ත්‍ථං
+ර්‍ත්‍ථඃ
+ත්‍ව
+ත්‍වා
+ත්‍වැ
+ත්‍වෑ
+ත්‍වි
+ත්‍වී
+ත්‍වු
+ත්‍වූ
+ත්‍වෘ
+ත්‍වෲ
+ත්‍වෟ
+ත්‍වෳ
+ත්‍වෙ
+ත්‍වේ
+ත්‍වෛ
+ත්‍වො
+ත්‍වෝ
+ත්‍වෞ
+ත්‍ව්
+ත්‍වං
+ත්‍වඃ
+ත්‍ව්‍ර
+ත්‍ව්‍රා
+ත්‍ව්‍රැ
+ත්‍ව්‍රෑ
+ත්‍ව්‍රි
+ත්‍ව්‍රී
+ත්‍ව්‍රු
+ත්‍ව්‍රූ
+ත්‍ව්‍රෘ
+ත්‍ව්‍රෲ
+ත්‍ව්‍රෟ
+ත්‍ව්‍රෳ
+ත්‍ව්‍රෙ
+ත්‍ව්‍රේ
+ත්‍ව්‍රෛ
+ත්‍ව්‍රො
+ත්‍ව්‍රෝ
+ත්‍ව්‍රෞ
+ත්‍ව්‍ර්
+ත්‍ව්‍රං
+ත්‍ව්‍රඃ
+ත්‍ව්‍ය
+ත්‍ව්‍යා
+ත්‍ව්‍යැ
+ත්‍ව්‍යෑ
+ත්‍ව්‍යි
+ත්‍ව්‍යී
+ත්‍ව්‍යු
+ත්‍ව්‍යූ
+ත්‍ව්‍යෘ
+ත්‍ව්‍යෲ
+ත්‍ව්‍යෟ
+ත්‍ව්‍යෳ
+ත්‍ව්‍යෙ
+ත්‍ව්‍යේ
+ත්‍ව්‍යෛ
+ත්‍ව්‍යො
+ත්‍ව්‍යෝ
+ත්‍ව්‍යෞ
+ත්‍ව්‍ය්
+ත්‍ව්‍යං
+ත්‍ව්‍යඃ
+ර්‍ත්‍ව
+ර්‍ත්‍වා
+ර්‍ත්‍වැ
+ර්‍ත්‍වෑ
+ර්‍ත්‍වි
+ර්‍ත්‍වී
+ර්‍ත්‍වු
+ර්‍ත්‍වූ
+ර්‍ත්‍වෘ
+ර්‍ත්‍වෲ
+ර්‍ත්‍වෟ
+ර්‍ත්‍වෳ
+ර්‍ත්‍වෙ
+ර්‍ත්‍වේ
+ර්‍ත්‍වෛ
+ර්‍ත්‍වො
+ර්‍ත්‍වෝ
+ර්‍ත්‍වෞ
+ර්‍ත්‍ව්
+ර්‍ත්‍වං
+ර්‍ත්‍වඃ
+න්‍ථ
+න්‍ථා
+න්‍ථැ
+න්‍ථෑ
+න්‍ථි
+න්‍ථී
+න්‍ථු
+න්‍ථූ
+න්‍ථෘ
+න්‍ථෲ
+න්‍ථෟ
+න්‍ථෳ
+න්‍ථෙ
+න්‍ථේ
+න්‍ථෛ
+න්‍ථො
+න්‍ථෝ
+න්‍ථෞ
+න්‍ථ්
+න්‍ථං
+න්‍ථඃ
+න්‍ථ්‍ර
+න්‍ථ්‍රා
+න්‍ථ්‍රැ
+න්‍ථ්‍රෑ
+න්‍ථ්‍රි
+න්‍ථ්‍රී
+න්‍ථ්‍රු
+න්‍ථ්‍රූ
+න්‍ථ්‍රෘ
+න්‍ථ්‍රෲ
+න්‍ථ්‍රෟ
+න්‍ථ්‍රෳ
+න්‍ථ්‍රෙ
+න්‍ථ්‍රේ
+න්‍ථ්‍රෛ
+න්‍ථ්‍රො
+න්‍ථ්‍රෝ
+න්‍ථ්‍රෞ
+න්‍ථ්‍ර්
+න්‍ථ්‍රං
+න්‍ථ්‍රඃ
+න්‍ථ්‍ය
+න්‍ථ්‍යා
+න්‍ථ්‍යැ
+න්‍ථ්‍යෑ
+න්‍ථ්‍යි
+න්‍ථ්‍යී
+න්‍ථ්‍යු
+න්‍ථ්‍යූ
+න්‍ථ්‍යෘ
+න්‍ථ්‍යෲ
+න්‍ථ්‍යෟ
+න්‍ථ්‍යෳ
+න්‍ථ්‍යෙ
+න්‍ථ්‍යේ
+න්‍ථ්‍යෛ
+න්‍ථ්‍යො
+න්‍ථ්‍යෝ
+න්‍ථ්‍යෞ
+න්‍ථ්‍ය්
+න්‍ථ්‍යං
+න්‍ථ්‍යඃ
+ර්‍න්‍ථ
+ර්‍න්‍ථා
+ර්‍න්‍ථැ
+ර්‍න්‍ථෑ
+ර්‍න්‍ථි
+ර්‍න්‍ථී
+ර්‍න්‍ථු
+ර්‍න්‍ථූ
+ර්‍න්‍ථෘ
+ර්‍න්‍ථෲ
+ර්‍න්‍ථෟ
+ර්‍න්‍ථෳ
+ර්‍න්‍ථෙ
+ර්‍න්‍ථේ
+ර්‍න්‍ථෛ
+ර්‍න්‍ථො
+ර්‍න්‍ථෝ
+ර්‍න්‍ථෞ
+ර්‍න්‍ථ්
+ර්‍න්‍ථං
+ර්‍න්‍ථඃ
+න්‍ද
+න්‍දා
+න්‍දැ
+න්‍දෑ
+න්‍දි
+න්‍දී
+න්‍දු
+න්‍දූ
+න්‍දෘ
+න්‍දෲ
+න්‍දෟ
+න්‍දෳ
+න්‍දෙ
+න්‍දේ
+න්‍දෛ
+න්‍දො
+න්‍දෝ
+න්‍දෞ
+න්‍ද්
+න්‍දං
+න්‍දඃ
+න්‍ද්‍ර
+න්‍ද්‍රා
+න්‍ද්‍රැ
+න්‍ද්‍රෑ
+න්‍ද්‍රි
+න්‍ද්‍රී
+න්‍ද්‍රු
+න්‍ද්‍රූ
+න්‍ද්‍රෘ
+න්‍ද්‍රෲ
+න්‍ද්‍රෟ
+න්‍ද්‍රෳ
+න්‍ද්‍රෙ
+න්‍ද්‍රේ
+න්‍ද්‍රෛ
+න්‍ද්‍රො
+න්‍ද්‍රෝ
+න්‍ද්‍රෞ
+න්‍ද්‍ර්
+න්‍ද්‍රං
+න්‍ද්‍රඃ
+න්‍ද්‍ය
+න්‍ද්‍යා
+න්‍ද්‍යැ
+න්‍ද්‍යෑ
+න්‍ද්‍යි
+න්‍ද්‍යී
+න්‍ද්‍යු
+න්‍ද්‍යූ
+න්‍ද්‍යෘ
+න්‍ද්‍යෲ
+න්‍ද්‍යෟ
+න්‍ද්‍යෳ
+න්‍ද්‍යෙ
+න්‍ද්‍යේ
+න්‍ද්‍යෛ
+න්‍ද්‍යො
+න්‍ද්‍යෝ
+න්‍ද්‍යෞ
+න්‍ද්‍ය්
+න්‍ද්‍යං
+න්‍ද්‍යඃ
+ර්‍න්‍ද
+ර්‍න්‍දා
+ර්‍න්‍දැ
+ර්‍න්‍දෑ
+ර්‍න්‍දි
+ර්‍න්‍දී
+ර්‍න්‍දු
+ර්‍න්‍දූ
+ර්‍න්‍දෘ
+ර්‍න්‍දෲ
+ර්‍න්‍දෟ
+ර්‍න්‍දෳ
+ර්‍න්‍දෙ
+ර්‍න්‍දේ
+ර්‍න්‍දෛ
+ර්‍න්‍දො
+ර්‍න්‍දෝ
+ර්‍න්‍දෞ
+ර්‍න්‍ද්
+ර්‍න්‍දං
+ර්‍න්‍දඃ
+න්‍ධ
+න්‍ධා
+න්‍ධැ
+න්‍ධෑ
+න්‍ධි
+න්‍ධී
+න්‍ධු
+න්‍ධූ
+න්‍ධෘ
+න්‍ධෲ
+න්‍ධෟ
+න්‍ධෳ
+න්‍ධෙ
+න්‍ධේ
+න්‍ධෛ
+න්‍ධො
+න්‍ධෝ
+න්‍ධෞ
+න්‍ධ්
+න්‍ධං
+න්‍ධඃ
+න්‍ධ්‍ර
+න්‍ධ්‍රා
+න්‍ධ්‍රැ
+න්‍ධ්‍රෑ
+න්‍ධ්‍රි
+න්‍ධ්‍රී
+න්‍ධ්‍රු
+න්‍ධ්‍රූ
+න්‍ධ්‍රෘ
+න්‍ධ්‍රෲ
+න්‍ධ්‍රෟ
+න්‍ධ්‍රෳ
+න්‍ධ්‍රෙ
+න්‍ධ්‍රේ
+න්‍ධ්‍රෛ
+න්‍ධ්‍රො
+න්‍ධ්‍රෝ
+න්‍ධ්‍රෞ
+න්‍ධ්‍ර්
+න්‍ධ්‍රං
+න්‍ධ්‍රඃ
+න්‍ධ්‍ය
+න්‍ධ්‍යා
+න්‍ධ්‍යැ
+න්‍ධ්‍යෑ
+න්‍ධ්‍යි
+න්‍ධ්‍යී
+න්‍ධ්‍යු
+න්‍ධ්‍යූ
+න්‍ධ්‍යෘ
+න්‍ධ්‍යෲ
+න්‍ධ්‍යෟ
+න්‍ධ්‍යෳ
+න්‍ධ්‍යෙ
+න්‍ධ්‍යේ
+න්‍ධ්‍යෛ
+න්‍ධ්‍යො
+න්‍ධ්‍යෝ
+න්‍ධ්‍යෞ
+න්‍ධ්‍ය්
+න්‍ධ්‍යං
+න්‍ධ්‍යඃ
+ර්‍න්‍ධ
+ර්‍න්‍ධා
+ර්‍න්‍ධැ
+ර්‍න්‍ධෑ
+ර්‍න්‍ධි
+ර්‍න්‍ධී
+ර්‍න්‍ධු
+ර්‍න්‍ධූ
+ර්‍න්‍ධෘ
+ර්‍න්‍ධෲ
+ර්‍න්‍ධෟ
+ර්‍න්‍ධෳ
+ර්‍න්‍ධෙ
+ර්‍න්‍ධේ
+ර්‍න්‍ධෛ
+ර්‍න්‍ධො
+ර්‍න්‍ධෝ
+ර්‍න්‍ධෞ
+ර්‍න්‍ධ්
+ර්‍න්‍ධං
+ර්‍න්‍ධඃ
+න්‍ව
+න්‍වා
+න්‍වැ
+න්‍වෑ
+න්‍වි
+න්‍වී
+න්‍වු
+න්‍වූ
+න්‍වෘ
+න්‍වෲ
+න්‍වෟ
+න්‍වෳ
+න්‍වෙ
+න්‍වේ
+න්‍වෛ
+න්‍වො
+න්‍වෝ
+න්‍වෞ
+න්‍ව්
+න්‍වං
+න්‍වඃ
+න්‍ව්‍ර
+න්‍ව්‍රා
+න්‍ව්‍රැ
+න්‍ව්‍රෑ
+න්‍ව්‍රි
+න්‍ව්‍රී
+න්‍ව්‍රු
+න්‍ව්‍රූ
+න්‍ව්‍රෘ
+න්‍ව්‍රෲ
+න්‍ව්‍රෟ
+න්‍ව්‍රෳ
+න්‍ව්‍රෙ
+න්‍ව්‍රේ
+න්‍ව්‍රෛ
+න්‍ව්‍රො
+න්‍ව්‍රෝ
+න්‍ව්‍රෞ
+න්‍ව්‍ර්
+න්‍ව්‍රං
+න්‍ව්‍රඃ
+න්‍ව්‍ය
+න්‍ව්‍යා
+න්‍ව්‍යැ
+න්‍ව්‍යෑ
+න්‍ව්‍යි
+න්‍ව්‍යී
+න්‍ව්‍යු
+න්‍ව්‍යූ
+න්‍ව්‍යෘ
+න්‍ව්‍යෲ
+න්‍ව්‍යෟ
+න්‍ව්‍යෳ
+න්‍ව්‍යෙ
+න්‍ව්‍යේ
+න්‍ව්‍යෛ
+න්‍ව්‍යො
+න්‍ව්‍යෝ
+න්‍ව්‍යෞ
+න්‍ව්‍ය්
+න්‍ව්‍යං
+න්‍ව්‍යඃ
+ර්‍න්‍ව
+ර්‍න්‍වා
+ර්‍න්‍වැ
+ර්‍න්‍වෑ
+ර්‍න්‍වි
+ර්‍න්‍වී
+ර්‍න්‍වු
+ර්‍න්‍වූ
+ර්‍න්‍වෘ
+ර්‍න්‍වෲ
+ර්‍න්‍වෟ
+ර්‍න්‍වෳ
+ර්‍න්‍වෙ
+ර්‍න්‍වේ
+ර්‍න්‍වෛ
+ර්‍න්‍වො
+ර්‍න්‍වෝ
+ර්‍න්‍වෞ
+ර්‍න්‍ව්
+ර්‍න්‍වං
+ර්‍න්‍වඃ
+ද්‍ව
+ද්‍වා
+ද්‍වැ
+ද්‍වෑ
+ද්‍වි
+ද්‍වී
+ද්‍වු
+ද්‍වූ
+ද්‍වෘ
+ද්‍වෲ
+ද්‍වෟ
+ද්‍වෳ
+ද්‍වෙ
+ද්‍වේ
+ද්‍වෛ
+ද්‍වො
+ද්‍වෝ
+ද්‍වෞ
+ද්‍ව්
+ද්‍වං
+ද්‍වඃ
+ද්‍ව්‍ර
+ද්‍ව්‍රා
+ද්‍ව්‍රැ
+ද්‍ව්‍රෑ
+ද්‍ව්‍රි
+ද්‍ව්‍රී
+ද්‍ව්‍රු
+ද්‍ව්‍රූ
+ද්‍ව්‍රෘ
+ද්‍ව්‍රෲ
+ද්‍ව්‍රෟ
+ද්‍ව්‍රෳ
+ද්‍ව්‍රෙ
+ද්‍ව්‍රේ
+ද්‍ව්‍රෛ
+ද්‍ව්‍රො
+ද්‍ව්‍රෝ
+ද්‍ව්‍රෞ
+ද්‍ව්‍ර්
+ද්‍ව්‍රං
+ද්‍ව්‍රඃ
+ද්‍ව්‍ය
+ද්‍ව්‍යා
+ද්‍ව්‍යැ
+ද්‍ව්‍යෑ
+ද්‍ව්‍යි
+ද්‍ව්‍යී
+ද්‍ව්‍යු
+ද්‍ව්‍යූ
+ද්‍ව්‍යෘ
+ද්‍ව්‍යෲ
+ද්‍ව්‍යෟ
+ද්‍ව්‍යෳ
+ද්‍ව්‍යෙ
+ද්‍ව්‍යේ
+ද්‍ව්‍යෛ
+ද්‍ව්‍යො
+ද්‍ව්‍යෝ
+ද්‍ව්‍යෞ
+ද්‍ව්‍ය්
+ද්‍ව්‍යං
+ද්‍ව්‍යඃ
+ර්‍ද්‍ව
+ර්‍ද්‍වා
+ර්‍ද්‍වැ
+ර්‍ද්‍වෑ
+ර්‍ද්‍වි
+ර්‍ද්‍වී
+ර්‍ද්‍වු
+ර්‍ද්‍වූ
+ර්‍ද්‍වෘ
+ර්‍ද්‍වෲ
+ර්‍ද්‍වෟ
+ර්‍ද්‍වෳ
+ර්‍ද්‍වෙ
+ර්‍ද්‍වේ
+ර්‍ද්‍වෛ
+ර්‍ද්‍වො
+ර්‍ද්‍වෝ
+ර්‍ද්‍වෞ
+ර්‍ද්‍ව්
+ර්‍ද්‍වං
+ර්‍ද්‍වඃ
+ද්‍ධ
+ද්‍ධා
+ද්‍ධැ
+ද්‍ධෑ
+ද්‍ධි
+ද්‍ධී
+ද්‍ධු
+ද්‍ධූ
+ද්‍ධෘ
+ද්‍ධෲ
+ද්‍ධෟ
+ද්‍ධෳ
+ද්‍ධෙ
+ද්‍ධේ
+ද්‍ධෛ
+ද්‍ධො
+ද්‍ධෝ
+ද්‍ධෞ
+ද්‍ධ්
+ද්‍ධං
+ද්‍ධඃ
+ද්‍ධ්‍ර
+ද්‍ධ්‍රා
+ද්‍ධ්‍රැ
+ද්‍ධ්‍රෑ
+ද්‍ධ්‍රි
+ද්‍ධ්‍රී
+ද්‍ධ්‍රු
+ද්‍ධ්‍රූ
+ද්‍ධ්‍රෘ
+ද්‍ධ්‍රෲ
+ද්‍ධ්‍රෟ
+ද්‍ධ්‍රෳ
+ද්‍ධ්‍රෙ
+ද්‍ධ්‍රේ
+ද්‍ධ්‍රෛ
+ද්‍ධ්‍රො
+ද්‍ධ්‍රෝ
+ද්‍ධ්‍රෞ
+ද්‍ධ්‍ර්
+ද්‍ධ්‍රං
+ද්‍ධ්‍රඃ
+ද්‍ධ්‍ය
+ද්‍ධ්‍යා
+ද්‍ධ්‍යැ
+ද්‍ධ්‍යෑ
+ද්‍ධ්‍යි
+ද්‍ධ්‍යී
+ද්‍ධ්‍යු
+ද්‍ධ්‍යූ
+ද්‍ධ්‍යෘ
+ද්‍ධ්‍යෲ
+ද්‍ධ්‍යෟ
+ද්‍ධ්‍යෳ
+ද්‍ධ්‍යෙ
+ද්‍ධ්‍යේ
+ද්‍ධ්‍යෛ
+ද්‍ධ්‍යො
+ද්‍ධ්‍යෝ
+ද්‍ධ්‍යෞ
+ද්‍ධ්‍ය්
+ද්‍ධ්‍යං
+ද්‍ධ්‍යඃ
+ර්‍ද්‍ධ
+ර්‍ද්‍ධා
+ර්‍ද්‍ධැ
+ර්‍ද්‍ධෑ
+ර්‍ද්‍ධි
+ර්‍ද්‍ධී
+ර්‍ද්‍ධු
+ර්‍ද්‍ධූ
+ර්‍ද්‍ධෘ
+ර්‍ද්‍ධෲ
+ර්‍ද්‍ධෟ
+ර්‍ද්‍ධෳ
+ර්‍ද්‍ධෙ
+ර්‍ද්‍ධේ
+ර්‍ද්‍ධෛ
+ර්‍ද්‍ධො
+ර්‍ද්‍ධෝ
+ර්‍ද්‍ධෞ
+ර්‍ද්‍ධ්
+ර්‍ද්‍ධං
+ර්‍ද්‍ධඃ
+ට්‍ඨ
+ට්‍ඨා
+ට්‍ඨැ
+ට්‍ඨෑ
+ට්‍ඨි
+ට්‍ඨී
+ට්‍ඨු
+ට්‍ඨූ
+ට්‍ඨෘ
+ට්‍ඨෲ
+ට්‍ඨෟ
+ට්‍ඨෳ
+ට්‍ඨෙ
+ට්‍ඨේ
+ට්‍ඨෛ
+ට්‍ඨො
+ට්‍ඨෝ
+ට්‍ඨෞ
+ට්‍ඨ්
+ට්‍ඨං
+ට්‍ඨඃ
+ට්‍ඨ්‍ර
+ට්‍ඨ්‍රා
+ට්‍ඨ්‍රැ
+ට්‍ඨ්‍රෑ
+ට්‍ඨ්‍රි
+ට්‍ඨ්‍රී
+ට්‍ඨ්‍රු
+ට්‍ඨ්‍රූ
+ට්‍ඨ්‍රෘ
+ට්‍ඨ්‍රෲ
+ට්‍ඨ්‍රෟ
+ට්‍ඨ්‍රෳ
+ට්‍ඨ්‍රෙ
+ට්‍ඨ්‍රේ
+ට්‍ඨ්‍රෛ
+ට්‍ඨ්‍රො
+ට්‍ඨ්‍රෝ
+ට්‍ඨ්‍රෞ
+ට්‍ඨ්‍ර්
+ට්‍ඨ්‍රං
+ට්‍ඨ්‍රඃ
+ට්‍ඨ්‍ය
+ට්‍ඨ්‍යා
+ට්‍ඨ්‍යැ
+ට්‍ඨ්‍යෑ
+ට්‍ඨ්‍යි
+ට්‍ඨ්‍යී
+ට්‍ඨ්‍යු
+ට්‍ඨ්‍යූ
+ට්‍ඨ්‍යෘ
+ට්‍ඨ්‍යෲ
+ට්‍ඨ්‍යෟ
+ට්‍ඨ්‍යෳ
+ට්‍ඨ්‍යෙ
+ට්‍ඨ්‍යේ
+ට්‍ඨ්‍යෛ
+ට්‍ඨ්‍යො
+ට්‍ඨ්‍යෝ
+ට්‍ඨ්‍යෞ
+ට්‍ඨ්‍ය්
+ට්‍ඨ්‍යං
+ට්‍ඨ්‍යඃ
+ර්‍ට්‍ඨ
+ර්‍ට්‍ඨා
+ර්‍ට්‍ඨැ
+ර්‍ට්‍ඨෑ
+ර්‍ට්‍ඨි
+ර්‍ට්‍ඨී
+ර්‍ට්‍ඨු
+ර්‍ට්‍ඨූ
+ර්‍ට්‍ඨෘ
+ර්‍ට්‍ඨෲ
+ර්‍ට්‍ඨෟ
+ර්‍ට්‍ඨෳ
+ර්‍ට්‍ඨෙ
+ර්‍ට්‍ඨේ
+ර්‍ට්‍ඨෛ
+ර්‍ට්‍ඨො
+ර්‍ට්‍ඨෝ
+ර්‍ට්‍ඨෞ
+ර්‍ට්‍ඨ්
+ර්‍ට්‍ඨං
+ර්‍ට්‍ඨඃ
+්‍ර
+්‍ය
+ර්‍
+෴
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt
new file mode 100644 (file)
index 0000000..c43cb95
--- /dev/null
@@ -0,0 +1,41 @@
+ක
+කං
+කඃ
+කා
+කැ
+කෑ
+කි
+කී
+කු
+කූ
+කෘ
+කෲ
+කෟ
+කෳ
+කෙ
+කො
+කෞ
+කේ
+කේ
+කෛ
+කො
+කෝ
+කෝ
+කෞ
+ක්
+ක්‍ය
+ක්‍ර
+ක‍්‍රම
+ර්‍ම
+ශී‍්‍ර
+ස්ට්‍රේ
+ග්‍යෙ
+ර්‍ය්‍ය
+එ‍ඬේ
+න්ගේ
+න්‍ගේ
+න‍්ගේ
+ර්‍
+ක්‍රා
+කේ
+ගර්‍
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt
new file mode 100644 (file)
index 0000000..f5f2f53
--- /dev/null
@@ -0,0 +1,3 @@
+ර්ධ
+ර්‍ධ
+ර්‌ධ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/split-matras.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/split-matras.txt
new file mode 100644 (file)
index 0000000..2a73a40
--- /dev/null
@@ -0,0 +1,4 @@
+කේ
+කො
+කෝ
+කෞ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..0e8810a
--- /dev/null
@@ -0,0 +1,41 @@
+ක
+ඛ
+ග
+ඝ
+ඞ
+ඟ
+ච
+ඡ
+ජ
+ඣ
+ඤ
+ඥ
+ඦ
+ට
+ඨ
+ඩ
+ඪ
+ණ
+ඬ
+ත
+ථ
+ද
+ධ
+න
+ඳ
+ප
+ඵ
+බ
+භ
+ම
+ඹ
+ය
+ර
+ල
+ව
+ශ
+ෂ
+ස
+හ
+ළ
+ෆ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..27911e4
--- /dev/null
@@ -0,0 +1,17 @@
+ා
+ැ
+ෑ
+ි
+ී
+ු
+ූ
+ෘ
+ෙ
+ේ
+ෛ
+ො
+ෝ
+ෞ
+ෟ
+ෲ
+ෳ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..939be04
--- /dev/null
@@ -0,0 +1,18 @@
+අ
+ආ
+ඇ
+ඈ
+ඉ
+ඊ
+උ
+ඌ
+ඍ
+ඎ
+ඏ
+ඐ
+එ
+ඒ
+ඓ
+ඔ
+ඕ
+ඖ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt
new file mode 100644 (file)
index 0000000..d6c6809
--- /dev/null
@@ -0,0 +1 @@
+෴
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..a65a9ba
--- /dev/null
@@ -0,0 +1,3 @@
+ං
+ඃ
+්
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..48e393c
--- /dev/null
@@ -0,0 +1,5 @@
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Punctuation.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt
new file mode 100644 (file)
index 0000000..7cd1eac
--- /dev/null
@@ -0,0 +1,162 @@
+කේ
+කෛ
+කී
+කෑ
+කූ
+කෲ
+ගේ
+ගෛ
+ගී
+ගෑ
+ගූ
+ගෲ
+තේ
+තෛ
+තී
+තෑ
+තූ
+තෲ
+ටේ
+ටෛ
+ටී
+ටෑ
+ටූ
+ටෲ
+ඩේ
+ඩෛ
+ඩී
+ඩෑ
+ඩූ
+ඩෲ
+චේ
+චෛ
+චී
+චෑ
+චූ
+චෲ
+ඡේ
+ඡෛ
+ඡී
+ඡෑ
+ඡූ
+ඡෲ
+ණේ
+ණෛ
+ණී
+ණෑ
+ණූ
+ණෲ
+පේ
+පෛ
+පී
+පෑ
+පූ
+පෲ
+දේ
+දෛ
+දී
+දෑ
+දූ
+දෲ
+ඳේ
+ඳෛ
+ඳී
+ඳෑ
+ඳූ
+ඳෲ
+ධේ
+ධෛ
+ධී
+ධෑ
+ධූ
+ධෲ
+බේ
+බෛ
+බී
+බෑ
+බූ
+බෲ
+මේ
+මෛ
+මී
+මෑ
+මූ
+මෲ
+වේ
+වෛ
+වී
+වෑ
+වූ
+වෲ
+හේ
+හෛ
+හී
+හෑ
+හූ
+හෲ
+රේ
+රෛ
+රී
+රෑ
+රූ
+රෲ
+ෆේ
+ෆෛ
+ෆී
+ෆෑ
+ෆූ
+ෆෲ
+ළේ
+ළෛ
+ළී
+ළෑ
+ළූ
+ළෲ
+ලේ
+ලෛ
+ලී
+ලෑ
+ලූ
+ලෲ
+යේ
+යෛ
+යී
+යෑ
+යූ
+යෲ
+සේ
+සෛ
+සී
+සෑ
+සූ
+සෲ
+ශේ
+ශෛ
+ශී
+ශෑ
+ශූ
+ශෲ
+ෂේ
+ෂෛ
+ෂී
+ෂෑ
+ෂූ
+ෂෲ
+ඹේ
+ඹෛ
+ඹී
+ඹෑ
+ඹූ
+ඹෲ
+ඵේ
+ඵෛ
+ඵී
+ඵෑ
+ඵූ
+ඵෲ
+ථේ
+ථෛ
+ථී
+ථෑ
+ථූ
+ථෲ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..f4d0fc3
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGPOS.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt
new file mode 100644 (file)
index 0000000..a100c69
--- /dev/null
@@ -0,0 +1 @@
+්‍
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt
new file mode 100644 (file)
index 0000000..bf89a71
--- /dev/null
@@ -0,0 +1,41 @@
+ක්‍ර
+ඛ්‍ර
+ග්‍ර
+ඝ්‍ර
+ඞ්‍ර
+ඟ්‍ර
+ච්‍ර
+ඡ්‍ර
+ජ්‍ර
+ඣ්‍ර
+ඤ්‍ර
+ඥ්‍ර
+ඦ්‍ර
+ට්‍ර
+ඨ්‍ර
+ඩ්‍ර
+ඪ්‍ර
+ණ්‍ර
+ඬ්‍ර
+ත්‍ර
+ථ්‍ර
+ද්‍ර
+ධ්‍ර
+න්‍ර
+ඳ්‍ර
+ප්‍ර
+ඵ්‍ර
+බ්‍ර
+භ්‍ර
+ම්‍ර
+ඹ්‍ර
+ය්‍ර
+ර්‍ර
+ල්‍ර
+ව්‍ර
+ශ්‍ර
+ෂ්‍ර
+ස්‍ර
+හ්‍ර
+ළ්‍ර
+ෆ්‍ර
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt
new file mode 100644 (file)
index 0000000..6f0293d
--- /dev/null
@@ -0,0 +1,42 @@
+කර්‍ක
+ඛර්‍ක
+ගර්‍ක
+ඝර්‍ක
+ඞර්‍ක
+ඟර්‍ක
+චර්‍ක
+ඡර්‍ක
+ජර්‍ක
+ඣර්‍ක
+ඤර්‍ක
+ඥර්‍ක
+ඦර්‍ක
+ටර්‍ක
+ඨර්‍ක
+ඩර්‍ක
+ඪර්‍ක
+ණර්‍ක
+ඬර්‍ක
+තර්‍ක
+ථර්‍ක
+දර්‍ක
+ධර්‍ක
+නර්‍ක
+ඳර්‍ක
+පර්‍ක
+ඵර්‍ක
+බර්‍ක
+භර්‍ක
+මර්‍ක
+ඹර්‍ක
+යර්‍ක
+රර්‍ක
+ලර්‍ක
+වර්‍ක
+ශර්‍ක
+ෂර්‍ක
+සර්‍ක
+හර්‍ක
+ළර්‍ක
+ෆර්‍ක
+කර්‍ය්‍ය
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt
new file mode 100644 (file)
index 0000000..109c873
--- /dev/null
@@ -0,0 +1,2 @@
+ක්‍ෂ
+න්‍ද
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt
new file mode 100644 (file)
index 0000000..105b295
--- /dev/null
@@ -0,0 +1 @@
+‍්
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt
new file mode 100644 (file)
index 0000000..299ca9d
--- /dev/null
@@ -0,0 +1,41 @@
+ක්‍ය
+ඛ්‍ය
+ග්‍ය
+ඝ්‍ය
+ඞ්‍ය
+ඟ්‍ය
+ච්‍ය
+ඡ්‍ය
+ජ්‍ය
+ඣ්‍ය
+ඤ්‍ය
+ඥ්‍ය
+ඦ්‍ය
+ට්‍ය
+ඨ්‍ය
+ඩ්‍ය
+ඪ්‍ය
+ණ්‍ය
+ඬ්‍ය
+ත්‍ය
+ථ්‍ය
+ද්‍ය
+ධ්‍ය
+න්‍ය
+ඳ්‍ය
+ප්‍ය
+ඵ්‍ය
+බ්‍ය
+භ්‍ය
+ම්‍ය
+ඹ්‍ය
+ය්‍ය
+ර්‍ය
+ල්‍ය
+ව්‍ය
+ශ්‍ය
+ෂ්‍ය
+ස්‍ය
+හ්‍ය
+ළ්‍ය
+ෆ්‍ය
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..fd5e6e6
--- /dev/null
@@ -0,0 +1 @@
+codepoint, imagepath, rawcode, desc
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..6aa964b
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureGSUB-Conjunct.txt
+IndicFontFeatureGSUB-Rakaaraansaya.txt
+IndicFontFeatureGSUB-Repaya.txt
+IndicFontFeatureGSUB-Special-Cases.txt
+IndicFontFeatureGSUB-TouchingLetters.txt
+IndicFontFeatureGSUB-Yansaya.txt
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/misc.txt
new file mode 100644 (file)
index 0000000..c72be69
--- /dev/null
@@ -0,0 +1,43 @@
+தமிழ்நாடு
+ஓர்
+இந்திய
+மாநிலமாகும்.
+தமிழ்நாடு,
+தமிழகம்
+என்றும்
+பரவலாக
+அழைக்கப்படுகிறது.
+ஆங்கிலத்தில்
+மெட்ராஸ்
+ஸ்டேட்
+என்றும்
+தமிழில்
+சென்னை
+ராஜ்ஜியம்
+என்றும்
+அழைக்கப்பெற்றது.
+இதனை
+தமிழ்நாடு
+என்று
+மாற்றக்கோரி
+போராட்டங்கள்
+நடைபெற்றன.
+சங்கரலிங்கனார்
+என்பவர்
+நாட்கள்
+உண்ணாவிரதம்
+இருந்து
+உயிர்துறந்தார்.
+பின்னர்
+மதராசு
+ஸ்டேட்
+என்று
+இருந்த
+பெயர்
+ஆம்
+ஆண்டு
+தமிழ்நாடு
+என்று
+மாற்றப்பட்டது.
+ஸ்ரீ
+க்ஷ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..7a26510
--- /dev/null
@@ -0,0 +1,23 @@
+க
+ங
+ச
+ஜ
+ஞ
+ட
+ண
+த
+ந
+ன
+ப
+ம
+ய
+ர
+ற
+ல
+ள
+ழ
+வ
+ஶ
+ஷ
+ஸ
+ஹ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt
new file mode 100644 (file)
index 0000000..f70ba6a
--- /dev/null
@@ -0,0 +1 @@
+௹
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..f22470c
--- /dev/null
@@ -0,0 +1,11 @@
+ா
+ி
+ீ
+ு
+ூ
+ெ
+ே
+ை
+ொ
+ோ
+ௌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..47b1d62
--- /dev/null
@@ -0,0 +1,10 @@
+௦
+௧
+௨
+௩
+௪
+௫
+௬
+௭
+௮
+௯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..3940ad3
--- /dev/null
@@ -0,0 +1,12 @@
+அ
+ஆ
+இ
+ஈ
+உ
+ஊ
+எ
+ஏ
+ஐ
+ஒ
+ஓ
+ஔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt
new file mode 100644 (file)
index 0000000..33f6850
--- /dev/null
@@ -0,0 +1,3 @@
+௰
+௱
+௲
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt
new file mode 100644 (file)
index 0000000..a7d89e8
--- /dev/null
@@ -0,0 +1,6 @@
+௳
+௴
+௵
+௶
+௷
+௸
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt
new file mode 100644 (file)
index 0000000..2d4bdc1
--- /dev/null
@@ -0,0 +1 @@
+௺
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..49c469c
--- /dev/null
@@ -0,0 +1,4 @@
+ஂ
+ஃ
+்
+ௗ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..3e28731
--- /dev/null
@@ -0,0 +1,10 @@
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-CurrencySymbols.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Numerics.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-Symbols.txt
+IndicFontFeatureCodepoint-TamilSymbol.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..40b2b21
--- /dev/null
@@ -0,0 +1,64 @@
+கி
+ஙி
+சி
+ஜி
+ஞி
+டி
+ணி
+தி
+நி
+னி
+பி
+மி
+யி
+ரி
+றி
+லி
+ளி
+ழி
+வி
+ஷி
+ஸி
+ஹி
+கீ
+ஙீ
+சீ
+ஜீ
+ஞீ
+டீ
+ணீ
+தீ
+நீ
+னீ
+பீ
+மீ
+யீ
+ரீ
+றீ
+லீ
+ளீ
+ழீ
+வீ
+ஷீ
+ஸீ
+க்
+ங்
+ச்
+ஜ்
+ஞ்
+ட்
+ண்
+த்
+ந்
+ன்
+ப்
+ம்
+ய்
+ர்
+ற்
+ல்
+ழ்
+வ்
+ஷ்
+ஸ்
+ஹ்
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
new file mode 100644 (file)
index 0000000..847495a
--- /dev/null
@@ -0,0 +1,44 @@
+கு
+ஙு
+சு
+ஜு
+ஞு
+டு
+ணு
+து
+நு
+னு
+பு
+மு
+யு
+ரு
+று
+லு
+ளு
+ழு
+வு
+ஷு
+ஸு
+ஹு
+கூ
+ஙூ
+சூ
+ஜூ
+ஞூ
+டூ
+ணூ
+தூ
+நூ
+னூ
+பூ
+மூ
+யூ
+ரூ
+றூ
+லூ
+ளூ
+ழூ
+வூ
+ஷூ
+ஸூ
+ஹூ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..d7ae70e
--- /dev/null
@@ -0,0 +1,2 @@
+IndicFontFeatureGPOS-AboveBase.txt
+IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..2ca1df3
--- /dev/null
@@ -0,0 +1,4 @@
+க்ஷ
+க்ஷி
+க்ஷீ
+ஷ்ரீ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/MANIFEST
new file mode 100644 (file)
index 0000000..ecb8d96
--- /dev/null
@@ -0,0 +1,2 @@
+misc
+utrrs
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/misc.txt
new file mode 100644 (file)
index 0000000..ff522d2
--- /dev/null
@@ -0,0 +1,12 @@
+కై
+క్
+క్కై
+క్ర
+క్రి
+క్రై
+క్ర్
+క్ర్క
+క్ష
+క్ష్
+క్ష్ణ
+ఽం
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/LICENSE b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/LICENSE
new file mode 100644 (file)
index 0000000..2cf8228
--- /dev/null
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/MANIFEST
new file mode 100644 (file)
index 0000000..0658824
--- /dev/null
@@ -0,0 +1,3 @@
+codepoint
+gpos
+gsub
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/README b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/README
new file mode 100644 (file)
index 0000000..8bad337
--- /dev/null
@@ -0,0 +1,13 @@
+Introduction:
+A system to compare a reference image of a text character, word or phrase with another image of the character, word or phrase that was rendered by a text rendering engine. Differences between the reference image and the rendered image may be recorded for subsequent analysis. Performance of a text rendering engine producing text according to typographical rules applicable to a natural language can be evaluated by one with no knowledge or ability to read the natural language
+
+
+COPYRIGHT: Red Hat Inc. 2010
+
+license: this project is under MIT license
+
+
+AUTHORS:
+Lawrence Lim
+Satyabrata Maitra
+Amanpreet Singh Brar
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/SOURCES b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/SOURCES
new file mode 100644 (file)
index 0000000..0ed1a89
--- /dev/null
@@ -0,0 +1,2 @@
+https://fedorahosted.org/utrrs/
+Fetched in late 2011
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
new file mode 100644 (file)
index 0000000..a92b179
--- /dev/null
@@ -0,0 +1,2 @@
+ౠ
+ౡ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
new file mode 100644 (file)
index 0000000..9b8ff69
--- /dev/null
@@ -0,0 +1,38 @@
+క
+ఖ
+గ
+ఘ
+ఙ
+చ
+ఛ
+జ
+ఝ
+ఞ
+ట
+ఠ
+డ
+ఢ
+ణ
+త
+థ
+ద
+ధ
+న
+ప
+ఫ
+బ
+భ
+మ
+య
+ర
+ఱ
+ల
+ళ
+వ
+శ
+ష
+స
+హ
+ఁ
+ం
+ః
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
new file mode 100644 (file)
index 0000000..b48ed5d
--- /dev/null
@@ -0,0 +1,13 @@
+ా
+ి
+ీ
+ు
+ూ
+ృ
+ౄ
+ె
+ే
+ై
+ొ
+ో
+ౌ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
new file mode 100644 (file)
index 0000000..8751b40
--- /dev/null
@@ -0,0 +1,10 @@
+౦
+౧
+౨
+౩
+౪
+౫
+౬
+౭
+౮
+౯
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
new file mode 100644 (file)
index 0000000..53c6daf
--- /dev/null
@@ -0,0 +1,14 @@
+అ
+ఆ
+ఇ
+ఈ
+ఉ
+ఊ
+ఋ
+ఌ
+ఎ
+ఏ
+ఐ
+ఒ
+ఓ
+ఔ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
new file mode 100644 (file)
index 0000000..66a7ca4
--- /dev/null
@@ -0,0 +1,2 @@
+।
+॥
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
new file mode 100644 (file)
index 0000000..ebefb52
--- /dev/null
@@ -0,0 +1,6 @@
+ఁ
+ం
+ః
+్
+ౕ
+ౖ
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/MANIFEST
new file mode 100644 (file)
index 0000000..1490dfe
--- /dev/null
@@ -0,0 +1,7 @@
+IndicFontFeatureCodepoint-AdditionalVowels.txt
+IndicFontFeatureCodepoint-Consonants.txt
+IndicFontFeatureCodepoint-DependentVowels.txt
+IndicFontFeatureCodepoint-Digits.txt
+IndicFontFeatureCodepoint-IndependentVowels.txt
+IndicFontFeatureCodepoint-Reserved.txt
+IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
new file mode 100644 (file)
index 0000000..939e44a
--- /dev/null
@@ -0,0 +1,385 @@
+కా
+ఖా
+గా
+ఘా
+ఙా
+చా
+ఛా
+జా
+ఝా
+ఞా
+టా
+ఠా
+డా
+ఢా
+ణా
+తా
+థా
+దా
+ధా
+నా
+పా
+ఫా
+బా
+భా
+మా
+యా
+రా
+ఱా
+లా
+ళా
+వా
+శా
+షా
+సా
+హా
+కి
+ఖి
+గి
+ఘి
+ఙి
+చి
+ఛి
+జి
+ఝి
+ఞి
+టి
+ఠి
+డి
+ఢి
+ణి
+తి
+థి
+ది
+ధి
+ని
+పి
+ఫి
+బి
+భి
+మి
+యి
+రి
+ఱి
+లి
+ళి
+వి
+శి
+షి
+సి
+హి
+కీ
+ఖీ
+గీ
+ఘీ
+ఙీ
+చీ
+ఛీ
+జీ
+ఝీ
+ఞీ
+టీ
+ఠీ
+డీ
+ఢీ
+ణీ
+తీ
+థీ
+దీ
+ధీ
+నీ
+పీ
+ఫీ
+బీ
+భీ
+మీ
+యీ
+రీ
+ఱీ
+లీ
+ళీ
+వీ
+శీ
+షీ
+సీ
+హీ
+కె
+ఖె
+గె
+ఘె
+ఙె
+చె
+ఛె
+జె
+ఝె
+ఞె
+టె
+ఠె
+డె
+ఢె
+ణె
+తె
+థె
+దె
+ధె
+నె
+పె
+ఫె
+బె
+భె
+మె
+యె
+రె
+ఱె
+లె
+ళె
+వె
+శె
+షె
+సె
+హె
+కే
+ఖే
+గే
+ఘే
+ఙే
+చే
+ఛే
+జే
+ఝే
+ఞే
+టే
+ఠే
+డే
+ఢే
+ణే
+తే
+థే
+దే
+ధే
+నే
+పే
+ఫే
+బే
+భే
+మే
+యే
+రే
+ఱే
+లే
+ళే
+వే
+శే
+షే
+సే
+హే
+కై
+ఖై
+గై
+ఘై
+ఙై
+చై
+ఛై
+జై
+ఝై
+ఞై
+టై
+ఠై
+డై
+ఢై
+ణై
+తై
+థై
+దై
+ధై
+నై
+పై
+ఫై
+బై
+భై
+మై
+యై
+రై
+ఱై
+లై
+ళై
+వై
+శై
+షై
+సై
+హై
+కొ
+ఖొ
+గొ
+ఘొ
+ఙొ
+చొ
+ఛొ
+జొ
+ఝొ
+ఞొ
+టొ
+ఠొ
+డొ
+ఢొ
+ణొ
+తొ
+థొ
+దొ
+ధొ
+నొ
+పొ
+ఫొ
+బొ
+భొ
+మొ
+యొ
+రొ
+ఱొ
+లొ
+ళొ
+వొ
+శొ
+షొ
+సొ
+హొ
+కో
+ఖో
+గో
+ఘో
+ఙో
+చో
+ఛో
+జో
+ఝో
+ఞో
+టో
+ఠో
+డో
+ఢో
+ణో
+తో
+థో
+దో
+ధో
+నో
+పో
+ఫో
+బో
+భో
+మో
+యో
+రో
+ఱో
+లో
+ళో
+వో
+శో
+షో
+సో
+హో
+కౌ
+ఖౌ
+గౌ
+ఘౌ
+ఙౌ
+చౌ
+ఛౌ
+జౌ
+ఝౌ
+ఞౌ
+టౌ
+ఠౌ
+డౌ
+ఢౌ
+ణౌ
+తౌ
+థౌ
+దౌ
+ధౌ
+నౌ
+పౌ
+ఫౌ
+బౌ
+భౌ
+మౌ
+యౌ
+రౌ
+ఱౌ
+లౌ
+ళౌ
+వౌ
+శౌ
+షౌ
+సౌ
+హౌ
+కఁ
+ఖఁ
+గఁ
+ఘఁ
+ఙఁ
+చఁ
+ఛఁ
+జఁ
+ఝఁ
+ఞఁ
+టఁ
+ఠఁ
+డఁ
+ఢఁ
+ణఁ
+తఁ
+థఁ
+దఁ
+ధఁ
+నఁ
+పఁ
+ఫఁ
+బఁ
+భఁ
+మఁ
+యఁ
+రఁ
+ఱఁ
+లఁ
+ళఁ
+వఁ
+శఁ
+షఁ
+సఁ
+హఁ
+క్
+ఖ్
+గ్
+ఘ్
+ఙ్
+చ్
+ఛ్
+జ్
+ఝ్
+ఞ్
+ట్
+ఠ్
+డ్
+ఢ్
+ణ్
+త్
+థ్
+ద్
+ధ్
+న్
+ప్
+ఫ్
+బ్
+భ్
+మ్
+య్
+ర్
+ఱ్
+ల్
+ళ్
+వ్
+శ్
+ష్
+స్
+హ్
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/MANIFEST
new file mode 100644 (file)
index 0000000..49d0284
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt
new file mode 100644 (file)
index 0000000..50b630b
--- /dev/null
@@ -0,0 +1,287 @@
+క్క
+క్ఖ
+క్గ
+క్ఘ
+క్ఙ
+క్చ
+క్ఛ
+క్జ
+క్ఝ
+క్ఞ
+క్ట
+క్ఠ
+క్డ
+క్ఢ
+క్ణ
+క్త
+క్థ
+క్ద
+క్ధ
+క్న
+క్ప
+క్ఫ
+క్బ
+క్భ
+క్మ
+క్య
+క్ర
+క్ఱ
+క్ల
+క్ళ
+క్వ
+క్శ
+క్ష
+క్స
+క్హ
+త్క
+త్ఖ
+త్గ
+త్ఘ
+త్ఙ
+త్చ
+త్ఛ
+త్జ
+త్ఝ
+త్ఞ
+త్ట
+త్ఠ
+త్డ
+త్ఢ
+త్ణ
+త్త
+త్థ
+త్ద
+త్ధ
+త్న
+త్ప
+త్ఫ
+త్బ
+త్భ
+త్మ
+త్య
+త్ర
+త్ఱ
+త్ల
+త్ళ
+త్వ
+త్శ
+త్ష
+త్స
+త్హ
+న్క
+న్ఖ
+న్గ
+న్ఘ
+న్ఙ
+న్చ
+న్ఛ
+న్జ
+న్ఝ
+న్ఞ
+న్ట
+న్ఠ
+న్డ
+న్ఢ
+న్ణ
+న్త
+న్థ
+న్ద
+న్ధ
+న్న
+న్ప
+న్ఫ
+న్బ
+న్భ
+న్మ
+న్య
+న్ర
+న్ఱ
+న్ల
+న్ళ
+న్వ
+న్శ
+న్ష
+న్స
+న్హ
+మ్క
+మ్ఖ
+మ్గ
+మ్ఘ
+మ్ఙ
+మ్చ
+మ్ఛ
+మ్జ
+మ్ఝ
+మ్ఞ
+మ్ట
+మ్ఠ
+మ్డ
+మ్ఢ
+మ్ణ
+మ్త
+మ్థ
+మ్ద
+మ్ధ
+మ్న
+మ్ప
+మ్ఫ
+మ్బ
+మ్భ
+మ్మ
+మ్య
+మ్ర
+మ్ఱ
+మ్ల
+మ్ళ
+మ్వ
+మ్శ
+మ్ష
+మ్స
+మ్హ
+య్క
+య్ఖ
+య్గ
+య్ఘ
+య్ఙ
+య్చ
+య్ఛ
+య్జ
+య్ఝ
+య్ఞ
+య్ట
+య్ఠ
+య్డ
+య్ఢ
+య్ణ
+య్త
+య్థ
+య్ద
+య్ధ
+య్న
+య్ప
+య్ఫ
+య్బ
+య్భ
+య్మ
+య్య
+య్ర
+య్ఱ
+య్ల
+య్ళ
+య్వ
+య్శ
+య్ష
+య్స
+య్హ
+ర్క
+ర్ఖ
+ర్గ
+ర్ఘ
+ర్ఙ
+ర్చ
+ర్ఛ
+ర్జ
+ర్ఝ
+ర్ఞ
+ర్ట
+ర్ఠ
+ర్డ
+ర్ఢ
+ర్ణ
+ర్త
+ర్థ
+ర్ద
+ర్ధ
+ర్న
+ర్ప
+ర్ఫ
+ర్బ
+ర్భ
+ర్మ
+ర్య
+ర్ర
+ర్ఱ
+ర్ల
+ర్ళ
+ర్వ
+ర్శ
+ర్ష
+ర్స
+ర్హ
+ల్క
+ల్ఖ
+ల్గ
+ల్ఘ
+ల్ఙ
+ల్చ
+ల్ఛ
+ల్జ
+ల్ఝ
+ల్ఞ
+ల్ట
+ల్ఠ
+ల్డ
+ల్ఢ
+ల్ణ
+ల్త
+ల్థ
+ల్ద
+ల్ధ
+ల్న
+ల్ప
+ల్ఫ
+ల్బ
+ల్భ
+ల్మ
+ల్య
+ల్ర
+ల్ఱ
+ల్ల
+ల్ళ
+ల్వ
+ల్శ
+ల్ష
+ల్స
+ల్హ
+వ్క
+వ్ఖ
+వ్గ
+వ్ఘ
+వ్ఙ
+వ్చ
+వ్ఛ
+వ్జ
+వ్ఝ
+వ్ఞ
+వ్ట
+వ్ఠ
+వ్డ
+వ్ఢ
+వ్ణ
+వ్త
+వ్థ
+వ్ద
+వ్ధ
+వ్న
+వ్ప
+వ్ఫ
+వ్బ
+వ్భ
+వ్మ
+వ్య
+వ్ర
+వ్ఱ
+వ్ల
+వ్ళ
+వ్వ
+వ్శ
+వ్ష
+వ్స
+వ్హ
+స్త్ర
+స్త్రి
+స్త్రీ
+ష్ట్ర
+షటరీ
+క్ష్మ
+క్ష్మి
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/MANIFEST
new file mode 100644 (file)
index 0000000..4b47068
--- /dev/null
@@ -0,0 +1 @@
+IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST
new file mode 100644 (file)
index 0000000..9627b9e
--- /dev/null
@@ -0,0 +1 @@
+script-khmer
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/MANIFEST
new file mode 100644 (file)
index 0000000..fde3fa1
--- /dev/null
@@ -0,0 +1,3 @@
+misc.txt
+other-marks-invalid.txt
+other-marks.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt
new file mode 100644 (file)
index 0000000..945dd1d
--- /dev/null
@@ -0,0 +1,23 @@
+ខ្មែ
+ជា
+ថ្ងៃ
+មា
+ម្ពុ
+រ
+រី
+រ៍
+សៅ
+រ្ឥ
+ងឹ្ឈ
+ង្ឈឹ
+ង្គ្រ
+ង្រ្គ
+ម៉្លេះ
+ម‌៉្លេះ
+ប៊័
+នែ៎
+កេ្រ
+កៀ្រ
+កោ្រ
+កៅ្រ
+ព៑ា
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt
new file mode 100644 (file)
index 0000000..213cfc2
--- /dev/null
@@ -0,0 +1,4 @@
+ព់្ឈា
+ព្ឈា៉
+ព្ឈា៌
+ព្ឈ៌ា
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt b/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt
new file mode 100644 (file)
index 0000000..1fd350c
--- /dev/null
@@ -0,0 +1,7 @@
+ព្ឈា
+ព្ឈា់
+ព្ឈ់ា
+ព្ឈ៉ា
+ព៉្ឈា
+ព៌្ឈា
+ក៝ៈនូយ្សក៝ៈនហ៝ម់
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/MANIFEST b/test/shaping/texts/in-tree/shaper-myanmar/MANIFEST
new file mode 100644 (file)
index 0000000..895bcea
--- /dev/null
@@ -0,0 +1 @@
+script-myanmar
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/MANIFEST b/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/MANIFEST
new file mode 100644 (file)
index 0000000..b5a09c0
--- /dev/null
@@ -0,0 +1,3 @@
+misc.txt
+otspec.txt
+utn11.txt
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt b/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt
new file mode 100644 (file)
index 0000000..9dc6332
--- /dev/null
@@ -0,0 +1,7 @@
+သီဟိုဠ်မှ ဉာဏ်ကြီးရှင်သည် အာယုဝဍ္ဎနဆေးညွှန်းစာကို ဇလွန်ဈေးဘေးဗာဒံပင်ထက် အဓိဋ္ဌာန်လျက် ဂဃနဏဖတ်ခဲ့သည်။
+။း
+င်္၎
+နၣ်
+နၢၣ်
+ဂ်ျ
+ဂျ်
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt b/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt
new file mode 100644 (file)
index 0000000..66779cb
--- /dev/null
@@ -0,0 +1,2 @@
+င်္က္ကျြွှေို့်ာှီ့ၤဲံ့းႍ
+
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/utn11.txt b/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/utn11.txt
new file mode 100644 (file)
index 0000000..d5cea7c
--- /dev/null
@@ -0,0 +1,34 @@
+စာ
+ခါ
+သိက္ခာ
+သဒ္ဓါ
+ညို
+ထုံး
+နေ
+ပေါ
+ဖျား
+ကြေး
+မွေး
+မှု
+ပတ္တာ
+ထင်
+ကြဉ်
+ကော်
+စင်္ကြံ
+သင်္ဘော
+ပသျှူး
+မြွှာ
+သျှောင်
+ကောင်လေးတွေကျောင်းကိုသွားကြတယ်။
+အိပ်ခန်းတံခါးကို
+အိပ်ခန်းတံ⁠ခါးကို
+အင်္ဝေ
+အငွေ
+ယောက်ျား
+ကျွန်ုပ်
+ဝါကျ
+ဂိမှာန်
+ဥယ‌ျာန
+က္လ
+ကျ္လပ်
+နိယ္အ်
diff --git a/test/shaping/texts/in-tree/shaper-sea/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/MANIFEST
new file mode 100644 (file)
index 0000000..ba95488
--- /dev/null
@@ -0,0 +1,3 @@
+script-cham
+script-new-tai-lue
+script-tai-tham
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-cham/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-cham/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-cham/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-cham/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-cham/misc/misc.txt b/test/shaping/texts/in-tree/shaper-sea/script-cham/misc/misc.txt
new file mode 100644 (file)
index 0000000..32b793a
--- /dev/null
@@ -0,0 +1,3 @@
+ꩀꨴ
+ꨗꨪꨇꨮꩃꨯꨗꨱꨧꨩꩂꨯꨨꨱꩃꨨꨮ
+ꨆꨴꨯ
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/misc.txt b/test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/misc.txt
new file mode 100644 (file)
index 0000000..11224a1
--- /dev/null
@@ -0,0 +1 @@
+ᦀᦷᧃᧈ
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/MANIFEST
new file mode 100644 (file)
index 0000000..cfc4f65
--- /dev/null
@@ -0,0 +1,2 @@
+misc.txt
+torture.txt
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/misc.txt b/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/misc.txt
new file mode 100644 (file)
index 0000000..62e9317
--- /dev/null
@@ -0,0 +1,2 @@
+ᨠ᩠ᨠᩮᩕ
+ᩋᩫᨶ᩠ᨲᩕᩣ᩠ᨿ
diff --git a/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/torture.txt b/test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/torture.txt
new file mode 100644 (file)
index 0000000..faee302
--- /dev/null
@@ -0,0 +1,23 @@
+ᨣᩕ᩵ᩣᩴᨣᩕ᩠ᩅᩁ
+ᨣᩕ᩵ᩮ᩠ᨦᨣᩕᩢ᩠ᨯ
+ᩅᩥᨣᩅᩰᩬᩡ
+ᩋᩫᨶ᩠ᨲᩕᩣ᩠ᨿ
+ᨶᩫᨶ᩠ᨲᩕᩧ
+ᩈ᩠ᨾ᩵ᩣᩴᩈ᩠ᨾᩮᩬᩥ
+ᩀᩢ᩠᩵ᨦᨶ᩶ᩣᩴ
+ᩉᩫ᩠ᨯᩉ᩠ᨿᩬᩴ᩶
+ᩅᩥᨱ᩠ᨬᩣ᩠ᨱ
+ᨠᩕᩫ᩠ᨮᩉᩫ᩠ᩅᨷᩫ᩠ᩅ
+ᨷᩴ᩠᩵ᨯᩲ᩶
+ᨷᩴ᩠᩶ᨯᩲ᩵
+ᨺᩮᩥᩢ᩠ᨠ
+ᨡᩧ᩠᩶ᨦ᩻
+ᨸᩢ᩠᩶ᨶ
+ᨵᩥᩢ᩠᩶ᨶ
+ᨷᩣ᩠ᨦ
+ᨷᩤ᩠ᨦ
+ᨻᩮᩬᩧ᩵ᩋᩉᩲ᩶
+ᨾᩨᨤᩕᩢ᩠᩵ᨦ
+ᨴᩣᩴᩋᩁᩲ
+ᩈᩢᨬ᩠ᨬᩣ
+◌ᩲ
diff --git a/test/shaping/texts/in-tree/shaper-thai/MANIFEST b/test/shaping/texts/in-tree/shaper-thai/MANIFEST
new file mode 100644 (file)
index 0000000..32b5476
--- /dev/null
@@ -0,0 +1,2 @@
+script-lao
+script-thai
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-lao/MANIFEST b/test/shaping/texts/in-tree/shaper-thai/script-lao/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-lao/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-thai/script-lao/misc/MANIFEST
new file mode 100644 (file)
index 0000000..ffd16f1
--- /dev/null
@@ -0,0 +1 @@
+sara-am.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-lao/misc/sara-am.txt b/test/shaping/texts/in-tree/shaper-thai/script-lao/misc/sara-am.txt
new file mode 100644 (file)
index 0000000..234d8c0
--- /dev/null
@@ -0,0 +1,20 @@
+ດຳ
+ດ໋ຳ
+ດໍ໋າ
+ດ໋ໍາ
+ມັຳ
+ມິຳ
+ມີຳ
+ມຶຳ
+ມືຳ
+ມຸຳ
+ມູຳ
+ມ຺ຳ
+ມ໇ຳ
+ມ່ຳ
+ມ້ຳ
+ມ໊ຳ
+ມ໋ຳ
+ມ໌ຳ
+ມໍຳ
+ມ໎ຳ
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/MANIFEST b/test/shaping/texts/in-tree/shaper-thai/script-thai/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/MANIFEST
new file mode 100644 (file)
index 0000000..6b5ca6f
--- /dev/null
@@ -0,0 +1,4 @@
+misc.txt
+phinthu.txt
+pua-shaping.txt
+sara-am.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/misc.txt b/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/misc.txt
new file mode 100644 (file)
index 0000000..b4f164b
--- /dev/null
@@ -0,0 +1,11 @@
+ป่ำ
+ป่ำซ้ำพ่อปู่พี่ปี่ฎุฐุญุ
+ก่ํา
+กํ่า
+กุเ
+กะ
+ก่ื
+กื
+กำ
+ก่ำ
+ก่
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/phinthu.txt b/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/phinthu.txt
new file mode 100644 (file)
index 0000000..e304777
--- /dev/null
@@ -0,0 +1,16 @@
+ป
+ปฺ
+ปุ
+ปู
+ปุู
+ปูุ
+ปฺุ
+ปฺุ
+ปฺู
+ปฺู
+ปฺุู
+ปฺุู
+ปฺุู
+ปฺูุ
+ปฺูุ
+ปฺูุ
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/pua-shaping.txt b/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/pua-shaping.txt
new file mode 100644 (file)
index 0000000..c17834b
--- /dev/null
@@ -0,0 +1,11 @@
+นี
+น่
+นี่
+น่ี
+ป็
+ญ
+ญุ
+ฝิ
+ฝิ่
+ฝ่
+ฎู
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt b/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt
new file mode 100644 (file)
index 0000000..9f044ce
--- /dev/null
@@ -0,0 +1,20 @@
+ดำ
+ด๋ำ
+ดํ๋า
+ด๋ํา
+มัำ
+มิำ
+มีำ
+มึำ
+มืำ
+มุำ
+มูำ
+มฺำ
+ม็ำ
+ม่ำ
+ม้ำ
+ม๊ำ
+ม๋ำ
+ม์ำ
+มํำ
+ม๎ำ
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/MANIFEST b/test/shaping/texts/in-tree/shaper-tibetan/MANIFEST
new file mode 100644 (file)
index 0000000..3ed6c85
--- /dev/null
@@ -0,0 +1 @@
+script-tibetan
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/MANIFEST b/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/MANIFEST
new file mode 100644 (file)
index 0000000..b8752e7
--- /dev/null
@@ -0,0 +1 @@
+misc
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/MANIFEST b/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/MANIFEST
new file mode 100644 (file)
index 0000000..29cfb2f
--- /dev/null
@@ -0,0 +1 @@
+misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt b/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt
new file mode 100644 (file)
index 0000000..a5d4082
--- /dev/null
@@ -0,0 +1,2 @@
+སྟྲཱ
+ཀ࿆ྃ
index 944b1aa..266681c 100644 (file)
@@ -9,6 +9,7 @@ MAINTAINERCLEANFILES =
 bin_PROGRAMS =
 
 AM_CPPFLAGS = \
 bin_PROGRAMS =
 
 AM_CPPFLAGS = \
+       -DHB_DISABLE_DEPRECATED \
        -I$(top_srcdir)/src/ \
        -I$(top_builddir)/src/ \
        $(GLIB_CFLAGS) \
        -I$(top_srcdir)/src/ \
        -I$(top_builddir)/src/ \
        $(GLIB_CFLAGS) \
@@ -23,8 +24,8 @@ LDADD = \
        $(NULL)
 
 if HAVE_GLIB
        $(NULL)
 
 if HAVE_GLIB
-if HAVE_FREETYPE
 
 
+if HAVE_FREETYPE
 if HAVE_CAIRO_FT
 hb_view_SOURCES = \
        hb-view.cc \
 if HAVE_CAIRO_FT
 hb_view_SOURCES = \
        hb-view.cc \
@@ -48,6 +49,7 @@ hb_view_LDADD = \
        $(NULL)
 bin_PROGRAMS += hb-view
 endif # HAVE_CAIRO_FT
        $(NULL)
 bin_PROGRAMS += hb-view
 endif # HAVE_CAIRO_FT
+endif # HAVE_FREETYPE
 
 hb_shape_SOURCES = \
        hb-shape.cc \
 
 hb_shape_SOURCES = \
        hb-shape.cc \
@@ -68,7 +70,6 @@ hb_ot_shape_closure_SOURCES = \
 bin_PROGRAMS += hb-ot-shape-closure
 endif # HAVE_OT
 
 bin_PROGRAMS += hb-ot-shape-closure
 endif # HAVE_OT
 
-endif # HAVE_FREETYPE
 endif # HAVE_GLIB
 
 -include $(top_srcdir)/git.mk
 endif # HAVE_GLIB
 
 -include $(top_srcdir)/git.mk
index 888b7d9..4bc79ac 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # Process this file with automake to produce Makefile.in
 
 VPATH = @srcdir@
 # Process this file with automake to produce Makefile.in
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -38,16 +82,17 @@ build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_1 = hb-view
 host_triplet = @host@
 bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_1 = hb-view
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__append_2 = hb-shape
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_3 = hb-ot-shape-closure
+@HAVE_GLIB_TRUE@am__append_2 = hb-shape
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_3 = hb-ot-shape-closure
 subdir = util
 subdir = util
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
-       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -55,16 +100,18 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__EXEEXT_1 = hb-view$(EXEEXT)
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__EXEEXT_1 = hb-view$(EXEEXT)
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am__EXEEXT_2 = hb-shape$(EXEEXT)
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__EXEEXT_3 = hb-ot-shape-closure$(EXEEXT)
+@HAVE_GLIB_TRUE@am__EXEEXT_2 = hb-shape$(EXEEXT)
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__EXEEXT_3 =  \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ hb-ot-shape-closure$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
 am__hb_ot_shape_closure_SOURCES_DIST = hb-ot-shape-closure.cc \
        options.cc options.hh main-font-text.hh
 am__objects_1 =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
 am__hb_ot_shape_closure_SOURCES_DIST = hb-ot-shape-closure.cc \
        options.cc options.hh main-font-text.hh
 am__objects_1 =
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am_hb_ot_shape_closure_OBJECTS = hb-ot-shape-closure.$(OBJEXT) \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     options.$(OBJEXT) \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     $(am__objects_1)
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am_hb_ot_shape_closure_OBJECTS =  \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ hb-ot-shape-closure.$(OBJEXT) \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ options.$(OBJEXT) \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(am__objects_1)
 hb_ot_shape_closure_OBJECTS = $(am_hb_ot_shape_closure_OBJECTS)
 hb_ot_shape_closure_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 hb_ot_shape_closure_OBJECTS = $(am_hb_ot_shape_closure_OBJECTS)
 hb_ot_shape_closure_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
@@ -74,12 +121,11 @@ hb_ot_shape_closure_DEPENDENCIES = $(top_builddir)/src/libharfbuzz.la \
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+am__v_lt_1 = 
 am__hb_shape_SOURCES_DIST = hb-shape.cc options.cc options.hh \
        main-font-text.hh shape-consumer.hh
 am__hb_shape_SOURCES_DIST = hb-shape.cc options.cc options.hh \
        main-font-text.hh shape-consumer.hh
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am_hb_shape_OBJECTS =  \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   hb-shape.$(OBJEXT) \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   options.$(OBJEXT) \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   $(am__objects_1)
+@HAVE_GLIB_TRUE@am_hb_shape_OBJECTS = hb-shape.$(OBJEXT) \
+@HAVE_GLIB_TRUE@       options.$(OBJEXT) $(am__objects_1)
 hb_shape_OBJECTS = $(am_hb_shape_OBJECTS)
 hb_shape_LDADD = $(LDADD)
 hb_shape_DEPENDENCIES = $(top_builddir)/src/libharfbuzz.la \
 hb_shape_OBJECTS = $(am_hb_shape_OBJECTS)
 hb_shape_LDADD = $(LDADD)
 hb_shape_DEPENDENCIES = $(top_builddir)/src/libharfbuzz.la \
@@ -105,6 +151,18 @@ am__DEPENDENCIES_2 = $(top_builddir)/src/libharfbuzz.la \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -117,17 +175,16 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
        $(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_@AM_V@)
 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 CXXLD = $(CXX)
 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD " $@;
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -136,21 +193,42 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
        $(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC    " $@;
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN   " $@;
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(hb_ot_shape_closure_SOURCES) $(hb_shape_SOURCES) \
        $(hb_view_SOURCES)
 DIST_SOURCES = $(am__hb_ot_shape_closure_SOURCES_DIST) \
        $(am__hb_shape_SOURCES_DIST) $(am__hb_view_SOURCES_DIST)
 SOURCES = $(hb_ot_shape_closure_SOURCES) $(hb_shape_SOURCES) \
        $(hb_view_SOURCES)
 DIST_SOURCES = $(am__hb_ot_shape_closure_SOURCES_DIST) \
        $(am__hb_shape_SOURCES_DIST) $(am__hb_view_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -191,6 +269,7 @@ EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 FGREP = @FGREP@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
+GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
@@ -199,22 +278,34 @@ GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
-GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
-GTHREAD_LIBS = @GTHREAD_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
 HB_LIBTOOL_VERSION_INFO = @HB_LIBTOOL_VERSION_INFO@
 HB_VERSION = @HB_VERSION@
 HB_VERSION_MAJOR = @HB_VERSION_MAJOR@
 HB_VERSION_MICRO = @HB_VERSION_MICRO@
 HB_VERSION_MINOR = @HB_VERSION_MINOR@
+HTML_DIR = @HTML_DIR@
 ICU_CFLAGS = @ICU_CFLAGS@
 ICU_CFLAGS = @ICU_CFLAGS@
-ICU_LE_CFLAGS = @ICU_LE_CFLAGS@
-ICU_LE_LIBS = @ICU_LE_LIBS@
+ICU_CONFIG = @ICU_CONFIG@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -244,6 +335,7 @@ PKG_CONFIG = @PKG_CONFIG@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+RAGEL = @RAGEL@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -312,6 +404,7 @@ CLEANFILES =
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
 AM_CPPFLAGS = \
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
 AM_CPPFLAGS = \
+       -DHB_DISABLE_DEPRECATED \
        -I$(top_srcdir)/src/ \
        -I$(top_builddir)/src/ \
        $(GLIB_CFLAGS) \
        -I$(top_srcdir)/src/ \
        -I$(top_builddir)/src/ \
        $(GLIB_CFLAGS) \
@@ -348,20 +441,20 @@ LDADD = \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(CAIRO_FT_LIBS) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(NULL)
 
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(CAIRO_FT_LIBS) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(NULL)
 
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@hb_shape_SOURCES = \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   hb-shape.cc \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   options.cc \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   options.hh \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   main-font-text.hh \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   shape-consumer.hh \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@   $(NULL)
-
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@hb_ot_shape_closure_SOURCES = \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     hb-ot-shape-closure.cc \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     options.cc \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     options.hh \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     main-font-text.hh \
-@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@     $(NULL)
+@HAVE_GLIB_TRUE@hb_shape_SOURCES = \
+@HAVE_GLIB_TRUE@       hb-shape.cc \
+@HAVE_GLIB_TRUE@       options.cc \
+@HAVE_GLIB_TRUE@       options.hh \
+@HAVE_GLIB_TRUE@       main-font-text.hh \
+@HAVE_GLIB_TRUE@       shape-consumer.hh \
+@HAVE_GLIB_TRUE@       $(NULL)
+
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@hb_ot_shape_closure_SOURCES = \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ hb-ot-shape-closure.cc \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ options.cc \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ options.hh \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ main-font-text.hh \
+@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(NULL)
 
 all: all-am
 
 
 all: all-am
 
@@ -399,14 +492,19 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
 $(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
        for p in $$list; do echo "$$p $$p"; done | \
        sed 's/$(EXEEXT)$$//' | \
        for p in $$list; do echo "$$p $$p"; done | \
        sed 's/$(EXEEXT)$$//' | \
-       while read p p1; do if test -f $$p || test -f $$p1; \
-         then echo "$$p"; echo "$$p"; else :; fi; \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
        done | \
        done | \
-       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
        $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
        $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -427,7 +525,8 @@ uninstall-binPROGRAMS:
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        files=`for p in $$list; do echo "$$p"; done | \
          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        files=`for p in $$list; do echo "$$p"; done | \
          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-             -e 's/$$/$(EXEEXT)/' `; \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
        test -n "$$list" || exit 0; \
        echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(bindir)" && rm -f $$files
        test -n "$$list" || exit 0; \
        echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(bindir)" && rm -f $$files
@@ -456,12 +555,15 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS)
            else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
          done; \
        done; rm -f c$${pid}_.???; exit $$bad
            else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
          done; \
        done; rm -f c$${pid}_.???; exit $$bad
+
 hb-ot-shape-closure$(EXEEXT): $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_DEPENDENCIES) $(EXTRA_hb_ot_shape_closure_DEPENDENCIES) 
        @rm -f hb-ot-shape-closure$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_LDADD) $(LIBS)
 hb-ot-shape-closure$(EXEEXT): $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_DEPENDENCIES) $(EXTRA_hb_ot_shape_closure_DEPENDENCIES) 
        @rm -f hb-ot-shape-closure$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_ot_shape_closure_OBJECTS) $(hb_ot_shape_closure_LDADD) $(LIBS)
+
 hb-shape$(EXEEXT): $(hb_shape_OBJECTS) $(hb_shape_DEPENDENCIES) $(EXTRA_hb_shape_DEPENDENCIES) 
        @rm -f hb-shape$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_shape_OBJECTS) $(hb_shape_LDADD) $(LIBS)
 hb-shape$(EXEEXT): $(hb_shape_OBJECTS) $(hb_shape_DEPENDENCIES) $(EXTRA_hb_shape_DEPENDENCIES) 
        @rm -f hb-shape$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_shape_OBJECTS) $(hb_shape_LDADD) $(LIBS)
+
 hb-view$(EXEEXT): $(hb_view_OBJECTS) $(hb_view_DEPENDENCIES) $(EXTRA_hb_view_DEPENDENCIES) 
        @rm -f hb-view$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_view_OBJECTS) $(hb_view_LDADD) $(LIBS)
 hb-view$(EXEEXT): $(hb_view_OBJECTS) $(hb_view_DEPENDENCIES) $(EXTRA_hb_view_DEPENDENCIES) 
        @rm -f hb-view$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(hb_view_OBJECTS) $(hb_view_LDADD) $(LIBS)
@@ -508,26 +610,15 @@ mostlyclean-libtool:
 clean-libtool:
        -rm -rf .libs _libs
 
 clean-libtool:
        -rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -539,15 +630,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -556,6 +643,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -702,19 +804,20 @@ uninstall-am: uninstall-binPROGRAMS
 
 .MAKE: install-am install-strip
 
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-       clean-generic clean-libtool ctags distclean distclean-compile \
-       distclean-generic distclean-libtool distclean-tags distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-binPROGRAMS install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am \
-       installcheck-binPROGRAMS installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags uninstall uninstall-am uninstall-binPROGRAMS
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+       clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installcheck-binPROGRAMS \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-binPROGRAMS
 
 
 -include $(top_srcdir)/git.mk
 
 
 -include $(top_srcdir)/git.mk
index 873bee8..0fc3719 100644 (file)
 #include <unistd.h> /* for isatty() */
 #endif
 
 #include <unistd.h> /* for isatty() */
 #endif
 
+#ifdef _MSC_VER
+static inline long int
+lround (double x)
+{
+  if (x >= 0)
+    return floor (x + 0.5);
+  else
+    return ceil (x - 0.5);
+}
+#endif
+
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 
 #define CELL_W 8
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 
 #define CELL_W 8
@@ -146,6 +157,7 @@ struct biimage_t
   biimage_t (unsigned int width, unsigned int height) :
                width (width),
                height (height),
   biimage_t (unsigned int width, unsigned int height) :
                width (width),
                height (height),
+               bg (0), fg (0), unicolor (true),
                data ((uint8_t *) malloc (sizeof (data[0]) * width * height)) {}
   ~biimage_t (void)
   { free (data); }
                data ((uint8_t *) malloc (sizeof (data[0]) * width * height)) {}
   ~biimage_t (void)
   { free (data); }
index fd9756b..03de7e6 100644 (file)
@@ -79,9 +79,10 @@ struct shape_closure_consumer_t : option_group_t
        first = false;
       else
        printf (" ");
        first = false;
       else
        printf (" ");
-      char glyph_name[32];
-      if (show_glyph_names) {
-       hb_font_get_glyph_name (font, i, glyph_name, sizeof (glyph_name));
+      if (show_glyph_names)
+      {
+       char glyph_name[64];
+       hb_font_glyph_to_string (font, i, glyph_name, sizeof (glyph_name));
        printf ("%s", glyph_name);
       } else
        printf ("%u", i);
        printf ("%s", glyph_name);
       } else
        printf ("%u", i);
index 852f9cf..01081ea 100644 (file)
 struct output_buffer_t
 {
   output_buffer_t (option_parser_t *parser)
 struct output_buffer_t
 {
   output_buffer_t (option_parser_t *parser)
-                 : options (parser,
-                            g_strjoinv ("/", (gchar**) hb_buffer_serialize_list_formats ())),
-                   format (parser) {}
+                 : options (parser, hb_buffer_serialize_list_formats ()),
+                   format (parser),
+                   gs (NULL),
+                   line_no (0),
+                   font (NULL) {}
 
   void init (const font_options_t *font_opts)
   {
 
   void init (const font_options_t *font_opts)
   {
@@ -46,18 +48,22 @@ struct output_buffer_t
       output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
     else
       output_format = hb_buffer_serialize_format_from_string (options.output_format, -1);
       output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
     else
       output_format = hb_buffer_serialize_format_from_string (options.output_format, -1);
-    if (!hb_buffer_serialize_format_to_string (output_format))
+    /* An empty "output_format" parameter basically skips output generating.
+     * Useful for benchmarking. */
+    if ((!options.output_format || *options.output_format) &&
+       !hb_buffer_serialize_format_to_string (output_format))
     {
       if (options.explicit_output_format)
        fail (false, "Unknown output format `%s'; supported formats are: %s",
     {
       if (options.explicit_output_format)
        fail (false, "Unknown output format `%s'; supported formats are: %s",
-             options.output_format, options.supported_formats);
+             options.output_format,
+             g_strjoinv ("/", const_cast<char**> (options.supported_formats)));
       else
        /* Just default to TEXT if not explicitly requested and the
         * file extension is not recognized. */
        output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
     }
 
       else
        /* Just default to TEXT if not explicitly requested and the
         * file extension is not recognized. */
        output_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT;
     }
 
-    unsigned int flags = HB_BUFFER_SERIALIZE_FLAGS_DEFAULT;
+    unsigned int flags = HB_BUFFER_SERIALIZE_FLAG_DEFAULT;
     if (!format.show_glyph_names)
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES;
     if (!format.show_clusters)
     if (!format.show_glyph_names)
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES;
     if (!format.show_clusters)
index f7c0660..376bf2b 100644 (file)
@@ -57,7 +57,7 @@ helper_cairo_surface_write_to_ansi_stream (cairo_surface_t    *surface,
     cairo_surface_reference (surface);
 
   unsigned int stride = cairo_image_surface_get_stride (surface);
     cairo_surface_reference (surface);
 
   unsigned int stride = cairo_image_surface_get_stride (surface);
-  const uint32_t *data = (uint32_t *) cairo_image_surface_get_data (surface);
+  const uint32_t *data = (uint32_t *) (void *) cairo_image_surface_get_data (surface);
 
   /* We don't have rows to spare on the terminal window...
    * Find the tight image top/bottom and only print in between. */
 
   /* We don't have rows to spare on the terminal window...
    * Find the tight image top/bottom and only print in between. */
index bc44e8e..ee940ae 100644 (file)
@@ -60,6 +60,15 @@ _cairo_eps_surface_create_for_stream (cairo_write_func_t  write_func,
 #  endif
 #endif
 
 #  endif
 #endif
 
+
+static FT_Library ft_library;
+
+static inline
+void free_ft_library (void)
+{
+  FT_Done_FreeType (ft_library);
+}
+
 cairo_scaled_font_t *
 helper_cairo_create_scaled_font (const font_options_t *font_opts,
                                 double font_size)
 cairo_scaled_font_t *
 helper_cairo_create_scaled_font (const font_options_t *font_opts,
                                 double font_size)
@@ -69,10 +78,26 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts,
   cairo_font_face_t *cairo_face;
   FT_Face ft_face = hb_ft_font_get_face (font);
   if (!ft_face)
   cairo_font_face_t *cairo_face;
   FT_Face ft_face = hb_ft_font_get_face (font);
   if (!ft_face)
+  {
+    if (!ft_library)
+    {
+      FT_Init_FreeType (&ft_library);
+#ifdef HAVE_ATEXIT
+      atexit (free_ft_library);
+#endif
+    }
+    FT_New_Face (ft_library,
+                font_opts->font_file,
+                font_opts->face_index,
+                &ft_face);
+  }
+  if (!ft_face)
+  {
     /* This allows us to get some boxes at least... */
     cairo_face = cairo_toy_font_face_create ("@cairo:sans",
                                             CAIRO_FONT_SLANT_NORMAL,
                                             CAIRO_FONT_WEIGHT_NORMAL);
     /* This allows us to get some boxes at least... */
     cairo_face = cairo_toy_font_face_create ("@cairo:sans",
                                             CAIRO_FONT_SLANT_NORMAL,
                                             CAIRO_FONT_WEIGHT_NORMAL);
+  }
   else
     cairo_face = cairo_ft_font_face_create_for_ft_face (ft_face, 0);
   cairo_matrix_t ctm, font_matrix;
   else
     cairo_face = cairo_ft_font_face_create_for_ft_face (ft_face, 0);
   cairo_matrix_t ctm, font_matrix;
@@ -246,24 +271,26 @@ stdio_write_func (void                *closure,
   return CAIRO_STATUS_SUCCESS;
 }
 
   return CAIRO_STATUS_SUCCESS;
 }
 
-const char helper_cairo_supported_formats[] =
-  "ansi"
+const char *helper_cairo_supported_formats[] =
+{
+  "ansi",
   #ifdef CAIRO_HAS_PNG_FUNCTIONS
   #ifdef CAIRO_HAS_PNG_FUNCTIONS
-  "/png"
+  "png",
   #endif
   #ifdef CAIRO_HAS_SVG_SURFACE
   #endif
   #ifdef CAIRO_HAS_SVG_SURFACE
-  "/svg"
+  "svg",
   #endif
   #ifdef CAIRO_HAS_PDF_SURFACE
   #endif
   #ifdef CAIRO_HAS_PDF_SURFACE
-  "/pdf"
+  "pdf",
   #endif
   #ifdef CAIRO_HAS_PS_SURFACE
   #endif
   #ifdef CAIRO_HAS_PS_SURFACE
-  "/ps"
+  "ps",
    #ifdef HAS_EPS
    #ifdef HAS_EPS
-    "/eps"
+    "eps",
    #endif
   #endif
    #endif
   #endif
-;
+  NULL
+};
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
@@ -343,7 +370,8 @@ helper_cairo_create_context (double w, double h,
     surface = constructor2 (stdio_write_func, f, w, h, content);
   else
     fail (false, "Unknown output format `%s'; supported formats are: %s%s",
     surface = constructor2 (stdio_write_func, f, w, h, content);
   else
     fail (false, "Unknown output format `%s'; supported formats are: %s%s",
-         extension, helper_cairo_supported_formats,
+         extension,
+         g_strjoinv ("/", const_cast<char**> (helper_cairo_supported_formats)),
          out_opts->explicit_output_format ? "" :
          "\nTry setting format using --output-format");
 
          out_opts->explicit_output_format ? "" :
          "\nTry setting format using --output-format");
 
index b2ac9e4..567777e 100644 (file)
@@ -36,7 +36,7 @@ cairo_scaled_font_t *
 helper_cairo_create_scaled_font (const font_options_t *font_opts,
                                 double font_size);
 
 helper_cairo_create_scaled_font (const font_options_t *font_opts,
                                 double font_size);
 
-extern const char helper_cairo_supported_formats[];
+extern const char *helper_cairo_supported_formats[];
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
index 17ad8e6..0adc179 100644 (file)
 #ifdef HAVE_FREETYPE
 #include <hb-ft.h>
 #endif
 #ifdef HAVE_FREETYPE
 #include <hb-ft.h>
 #endif
+#ifdef HAVE_OT
+#include <hb-ot-font.h>
+#endif
+
+struct supported_font_funcs_t {
+       char name[4];
+       void (*func) (hb_font_t *);
+} supported_font_funcs[] =
+{
+#ifdef HAVE_FREETYPE
+  {"ft",       hb_ft_font_set_funcs},
+#endif
+#ifdef HAVE_OT
+  {"ot",       hb_ot_font_set_funcs},
+#endif
+};
 
 
 void
 
 
 void
@@ -244,8 +260,8 @@ view_options_t::add_options (option_parser_t *parser)
   GOptionEntry entries[] =
   {
     {"annotate",       0, 0, G_OPTION_ARG_NONE,        &this->annotate,                "Annotate output rendering",                            NULL},
   GOptionEntry entries[] =
   {
     {"annotate",       0, 0, G_OPTION_ARG_NONE,        &this->annotate,                "Annotate output rendering",                            NULL},
-    {"background",     0, 0, G_OPTION_ARG_STRING,      &this->back,                    "Set background color (default: " DEFAULT_BACK ")",     "red/#rrggbb/#rrggbbaa"},
-    {"foreground",     0, 0, G_OPTION_ARG_STRING,      &this->fore,                    "Set foreground color (default: " DEFAULT_FORE ")",     "red/#rrggbb/#rrggbbaa"},
+    {"background",     0, 0, G_OPTION_ARG_STRING,      &this->back,                    "Set background color (default: " DEFAULT_BACK ")",     "rrggbb/rrggbbaa"},
+    {"foreground",     0, 0, G_OPTION_ARG_STRING,      &this->fore,                    "Set foreground color (default: " DEFAULT_FORE ")",     "rrggbb/rrggbbaa"},
     {"line-space",     0, 0, G_OPTION_ARG_DOUBLE,      &this->line_space,              "Set space between lines (default: 0)",                 "units"},
     {"margin",         0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_margin,       "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"},
     {"font-size",      0, 0, G_OPTION_ARG_DOUBLE,      &this->font_size,               "Font size (default: " G_STRINGIFY(DEFAULT_FONT_SIZE) ")","size"},
     {"line-space",     0, 0, G_OPTION_ARG_DOUBLE,      &this->line_space,              "Set space between lines (default: 0)",                 "units"},
     {"margin",         0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_margin,       "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"},
     {"font-size",      0, 0, G_OPTION_ARG_DOUBLE,      &this->font_size,               "Font size (default: " G_STRINGIFY(DEFAULT_FONT_SIZE) ")","size"},
@@ -267,7 +283,7 @@ shape_options_t::add_options (option_parser_t *parser)
                              G_OPTION_ARG_CALLBACK,    (gpointer) &list_shapers,       "List available shapers and quit",      NULL},
     {"shaper",         0, G_OPTION_FLAG_HIDDEN,
                              G_OPTION_ARG_CALLBACK,    (gpointer) &parse_shapers,      "Hidden duplicate of --shapers",        NULL},
                              G_OPTION_ARG_CALLBACK,    (gpointer) &list_shapers,       "List available shapers and quit",      NULL},
     {"shaper",         0, G_OPTION_FLAG_HIDDEN,
                              G_OPTION_ARG_CALLBACK,    (gpointer) &parse_shapers,      "Hidden duplicate of --shapers",        NULL},
-    {"shapers",                0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_shapers,      "Comma-separated list of shapers to try","list"},
+    {"shapers",                0, 0, G_OPTION_ARG_CALLBACK,    (gpointer) &parse_shapers,      "Set comma-separated list of shapers to try","list"},
     {"direction",      0, 0, G_OPTION_ARG_STRING,      &this->direction,               "Set text direction (default: auto)",   "ltr/rtl/ttb/btt"},
     {"language",       0, 0, G_OPTION_ARG_STRING,      &this->language,                "Set text language (default: $LANG)",   "langstr"},
     {"script",         0, 0, G_OPTION_ARG_STRING,      &this->script,                  "Set text script (default: auto)",      "ISO-15924 tag"},
     {"direction",      0, 0, G_OPTION_ARG_STRING,      &this->direction,               "Set text direction (default: auto)",   "ltr/rtl/ttb/btt"},
     {"language",       0, 0, G_OPTION_ARG_STRING,      &this->language,                "Set text language (default: $LANG)",   "langstr"},
     {"script",         0, 0, G_OPTION_ARG_STRING,      &this->script,                  "Set text script (default: auto)",      "ISO-15924 tag"},
@@ -276,6 +292,7 @@ shape_options_t::add_options (option_parser_t *parser)
     {"preserve-default-ignorables",0, 0, G_OPTION_ARG_NONE,    &this->preserve_default_ignorables,     "Preserve Default-Ignorable characters",        NULL},
     {"utf8-clusters",  0, 0, G_OPTION_ARG_NONE,        &this->utf8_clusters,           "Use UTF8 byte indices, not char indices",      NULL},
     {"normalize-glyphs",0, 0, G_OPTION_ARG_NONE,       &this->normalize_glyphs,        "Rearrange glyph clusters in nominal order",    NULL},
     {"preserve-default-ignorables",0, 0, G_OPTION_ARG_NONE,    &this->preserve_default_ignorables,     "Preserve Default-Ignorable characters",        NULL},
     {"utf8-clusters",  0, 0, G_OPTION_ARG_NONE,        &this->utf8_clusters,           "Use UTF8 byte indices, not char indices",      NULL},
     {"normalize-glyphs",0, 0, G_OPTION_ARG_NONE,       &this->normalize_glyphs,        "Rearrange glyph clusters in nominal order",    NULL},
+    {"num-iterations", 0, 0, G_OPTION_ARG_INT,         &this->num_iterations,          "Run shaper N times (default: 1)",      "N"},
     {NULL}
   };
   parser->add_group (entries,
     {NULL}
   };
   parser->add_group (entries,
@@ -287,7 +304,9 @@ shape_options_t::add_options (option_parser_t *parser)
   const gchar *features_help = "Comma-separated list of font features\n"
     "\n"
     "    Features can be enabled or disabled, either globally or limited to\n"
   const gchar *features_help = "Comma-separated list of font features\n"
     "\n"
     "    Features can be enabled or disabled, either globally or limited to\n"
-    "    specific character ranges.\n"
+    "    specific character ranges.  The format for specifying feature settings\n"
+    "    follows.  All valid CSS font-feature-settings values other than 'normal'\n"
+    "    and 'inherited' are also accepted, though, not documented below.\n"
     "\n"
     "    The range indices refer to the positions between Unicode characters,\n"
     "    unless the --utf8-clusters is provided, in which case range indices\n"
     "\n"
     "    The range indices refer to the positions between Unicode characters,\n"
     "    unless the --utf8-clusters is provided, in which case range indices\n"
@@ -333,10 +352,28 @@ shape_options_t::add_options (option_parser_t *parser)
 void
 font_options_t::add_options (option_parser_t *parser)
 {
 void
 font_options_t::add_options (option_parser_t *parser)
 {
+  char *text = NULL;
+
+  {
+    ASSERT_STATIC (ARRAY_LENGTH_CONST (supported_font_funcs) > 0);
+    GString *s = g_string_new (NULL);
+    g_string_printf (s, "Set font functions implementation to use (default: %s)\n\n    Supported font function implementations are: %s",
+                    supported_font_funcs[0].name,
+                    supported_font_funcs[0].name);
+    for (unsigned int i = 1; i < ARRAY_LENGTH (supported_font_funcs); i++)
+    {
+      g_string_append_c (s, '/');
+      g_string_append (s, supported_font_funcs[i].name);
+    }
+    text = g_string_free (s, FALSE);
+    parser->free_later (text);
+  }
+
   GOptionEntry entries[] =
   {
   GOptionEntry entries[] =
   {
-    {"font-file",      0, 0, G_OPTION_ARG_STRING,      &this->font_file,               "Font file-name",                                       "filename"},
-    {"face-index",     0, 0, G_OPTION_ARG_INT,         &this->face_index,              "Face index (default: 0)",                              "index"},
+    {"font-file",      0, 0, G_OPTION_ARG_STRING,      &this->font_file,               "Set font file-name",                   "filename"},
+    {"face-index",     0, 0, G_OPTION_ARG_INT,         &this->face_index,              "Set face index (default: 0)",          "index"},
+    {"font-funcs",     0, 0, G_OPTION_ARG_STRING,      &this->font_funcs,              text,                                   "format"},
     {NULL}
   };
   parser->add_group (entries,
     {NULL}
   };
   parser->add_group (entries,
@@ -372,7 +409,12 @@ output_options_t::add_options (option_parser_t *parser)
   if (NULL == supported_formats)
     text = "Set output format";
   else
   if (NULL == supported_formats)
     text = "Set output format";
   else
-    text = g_strdup_printf ("Set output format\n\n    Supported formats are: %s", supported_formats);
+  {
+    char *items = g_strjoinv ("/", const_cast<char **> (supported_formats));
+    text = g_strdup_printf ("Set output format\n\n    Supported output formats are: %s", items);
+    g_free (items);
+    parser->free_later ((char *) text);
+  }
 
   GOptionEntry entries[] =
   {
 
   GOptionEntry entries[] =
   {
@@ -413,8 +455,8 @@ font_options_t::get_font (void) const
       /* read it */
       GString *gs = g_string_new (NULL);
       char buf[BUFSIZ];
       /* read it */
       GString *gs = g_string_new (NULL);
       char buf[BUFSIZ];
-#ifdef HAVE__SETMODE
-      _setmode (fileno (stdin), _O_BINARY);
+#if defined(_WIN32) || defined(__CYGWIN__)
+      setmode (fileno (stdin), _O_BINARY);
 #endif
       while (!feof (stdin)) {
        size_t ret = fread (buf, 1, sizeof (buf), stdin);
 #endif
       while (!feof (stdin)) {
        size_t ret = fread (buf, 1, sizeof (buf), stdin);
@@ -476,9 +518,37 @@ font_options_t::get_font (void) const
   hb_font_set_scale (font, upem, upem);
   hb_face_destroy (face);
 
   hb_font_set_scale (font, upem, upem);
   hb_face_destroy (face);
 
-#ifdef HAVE_FREETYPE
-  hb_ft_font_set_funcs (font);
-#endif
+  void (*set_font_funcs) (hb_font_t *) = NULL;
+  if (!font_funcs)
+  {
+    set_font_funcs = supported_font_funcs[0].func;
+  }
+  else
+  {
+    for (unsigned int i = 0; i < ARRAY_LENGTH (supported_font_funcs); i++)
+      if (0 == strcasecmp (font_funcs, supported_font_funcs[i].name))
+      {
+       set_font_funcs = supported_font_funcs[i].func;
+       break;
+      }
+    if (!set_font_funcs)
+    {
+      GString *s = g_string_new (NULL);
+      for (unsigned int i = 0; i < ARRAY_LENGTH (supported_font_funcs); i++)
+      {
+        if (i)
+         g_string_append_c (s, '/');
+       g_string_append (s, supported_font_funcs[i].name);
+      }
+      char *p = g_string_free (s, FALSE);
+      fail (false, "Unknown font function implementation `%s'; supported values are: %s; default is %s",
+           font_funcs,
+           p,
+           supported_font_funcs[0].name);
+      //free (p);
+    }
+  }
+  set_font_funcs (font);
 
   return font;
 }
 
   return font;
 }
@@ -557,8 +627,8 @@ output_options_t::get_file_handle (void)
   if (output_file)
     fp = fopen (output_file, "wb");
   else {
   if (output_file)
     fp = fopen (output_file, "wb");
   else {
-#ifdef HAVE__SETMODE
-    _setmode (fileno (stdout), _O_BINARY);
+#if defined(_WIN32) || defined(__CYGWIN__)
+    setmode (fileno (stdout), _O_BINARY);
 #endif
     fp = stdout;
   }
 #endif
     fp = stdout;
   }
index ad925b2..223778d 100644 (file)
@@ -43,8 +43,8 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h> /* for isatty() */
 #endif
 #ifdef HAVE_UNISTD_H
 #include <unistd.h> /* for isatty() */
 #endif
-#ifdef HAVE_IO_H
-#include <io.h> /* for _setmode() under Windows */
+#if defined(_WIN32) || defined(__CYGWIN__)
+#include <io.h> /* for setmode() under Windows */
 #endif
 
 #include <hb.h>
 #endif
 
 #include <hb.h>
 #include <glib.h>
 #include <glib/gprintf.h>
 
 #include <glib.h>
 #include <glib/gprintf.h>
 
+#if !GLIB_CHECK_VERSION (2, 22, 0)
+# define g_mapped_file_unref g_mapped_file_free
+#endif
+
+
+/* A few macros copied from hb-private.hh. */
+
+#if __GNUC__ >= 4
+#define HB_UNUSED      __attribute__((unused))
+#else
+#define HB_UNUSED
+#endif
+
 #undef MIN
 template <typename Type> static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
 
 #undef MAX
 template <typename Type> static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; }
 
 #undef MIN
 template <typename Type> static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
 
 #undef MAX
 template <typename Type> static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; }
 
+#undef  ARRAY_LENGTH
+template <typename Type, unsigned int n>
+static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
+/* A const version, but does not detect erratically being called on pointers. */
+#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
 
 
-void fail (hb_bool_t suggest_help, const char *format, ...) G_GNUC_NORETURN;
+#define _ASSERT_STATIC1(_line, _cond)  HB_UNUSED typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _ASSERT_STATIC0(_line, _cond)  _ASSERT_STATIC1 (_line, (_cond))
+#define ASSERT_STATIC(_cond)           _ASSERT_STATIC0 (__LINE__, (_cond))
+
+
+void fail (hb_bool_t suggest_help, const char *format, ...) G_GNUC_NORETURN G_GNUC_PRINTF (2, 3);
 
 
 extern hb_bool_t debug;
 
 
 extern hb_bool_t debug;
@@ -81,11 +104,14 @@ struct option_parser_t
     memset (this, 0, sizeof (*this));
     usage_str = usage;
     context = g_option_context_new (usage);
     memset (this, 0, sizeof (*this));
     usage_str = usage;
     context = g_option_context_new (usage);
+    to_free = g_ptr_array_new ();
 
     add_main_options ();
   }
   ~option_parser_t (void) {
     g_option_context_free (context);
 
     add_main_options ();
   }
   ~option_parser_t (void) {
     g_option_context_free (context);
+    g_ptr_array_foreach (to_free, (GFunc) g_free, NULL);
+    g_ptr_array_free (to_free, TRUE);
   }
 
   void add_main_options (void);
   }
 
   void add_main_options (void);
@@ -96,6 +122,10 @@ struct option_parser_t
                  const gchar    *help_description,
                  option_group_t *option_group);
 
                  const gchar    *help_description,
                  option_group_t *option_group);
 
+  void free_later (char *p) {
+    g_ptr_array_add (to_free, p);
+  }
+
   void parse (int *argc, char ***argv);
 
   G_GNUC_NORETURN void usage (void) {
   void parse (int *argc, char ***argv);
 
   G_GNUC_NORETURN void usage (void) {
@@ -103,8 +133,10 @@ struct option_parser_t
     exit (1);
   }
 
     exit (1);
   }
 
+  private:
   const char *usage_str;
   GOptionContext *context;
   const char *usage_str;
   GOptionContext *context;
+  GPtrArray *to_free;
 };
 
 
 };
 
 
@@ -150,6 +182,7 @@ struct shape_options_t : option_group_t
     shapers = NULL;
     utf8_clusters = false;
     normalize_glyphs = false;
     shapers = NULL;
     utf8_clusters = false;
     normalize_glyphs = false;
+    num_iterations = 1;
 
     add_options (parser);
   }
 
     add_options (parser);
   }
@@ -166,10 +199,11 @@ struct shape_options_t : option_group_t
     hb_buffer_set_direction (buffer, hb_direction_from_string (direction, -1));
     hb_buffer_set_script (buffer, hb_script_from_string (script, -1));
     hb_buffer_set_language (buffer, hb_language_from_string (language, -1));
     hb_buffer_set_direction (buffer, hb_direction_from_string (direction, -1));
     hb_buffer_set_script (buffer, hb_script_from_string (script, -1));
     hb_buffer_set_language (buffer, hb_language_from_string (language, -1));
-    hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAGS_DEFAULT |
+    hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAG_DEFAULT |
                         (bot ? HB_BUFFER_FLAG_BOT : 0) |
                         (eot ? HB_BUFFER_FLAG_EOT : 0) |
                         (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0)));
                         (bot ? HB_BUFFER_FLAG_BOT : 0) |
                         (eot ? HB_BUFFER_FLAG_EOT : 0) |
                         (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0)));
+    hb_buffer_guess_segment_properties (buffer);
   }
 
   void populate_buffer (hb_buffer_t *buffer, const char *text, int text_len,
   }
 
   void populate_buffer (hb_buffer_t *buffer, const char *text, int text_len,
@@ -233,6 +267,7 @@ struct shape_options_t : option_group_t
   char **shapers;
   hb_bool_t utf8_clusters;
   hb_bool_t normalize_glyphs;
   char **shapers;
   hb_bool_t utf8_clusters;
   hb_bool_t normalize_glyphs;
+  unsigned int num_iterations;
 };
 
 
 };
 
 
@@ -241,6 +276,7 @@ struct font_options_t : option_group_t
   font_options_t (option_parser_t *parser) {
     font_file = NULL;
     face_index = 0;
   font_options_t (option_parser_t *parser) {
     font_file = NULL;
     face_index = 0;
+    font_funcs = NULL;
 
     font = NULL;
 
 
     font = NULL;
 
@@ -256,6 +292,7 @@ struct font_options_t : option_group_t
 
   const char *font_file;
   int face_index;
 
   const char *font_file;
   int face_index;
+  const char *font_funcs;
 
   private:
   mutable hb_font_t *font;
 
   private:
   mutable hb_font_t *font;
@@ -311,7 +348,7 @@ struct text_options_t : option_group_t
 struct output_options_t : option_group_t
 {
   output_options_t (option_parser_t *parser,
 struct output_options_t : option_group_t
 {
   output_options_t (option_parser_t *parser,
-                   const char *supported_formats_ = NULL) {
+                   const char **supported_formats_ = NULL) {
     output_file = NULL;
     output_format = NULL;
     supported_formats = supported_formats_;
     output_file = NULL;
     output_format = NULL;
     supported_formats = supported_formats_;
@@ -347,7 +384,7 @@ struct output_options_t : option_group_t
 
   const char *output_file;
   const char *output_format;
 
   const char *output_file;
   const char *output_format;
-  const char *supported_formats;
+  const char **supported_formats;
   bool explicit_output_format;
 
   mutable FILE *fp;
   bool explicit_output_format;
 
   mutable FILE *fp;
index bf1a22d..422c8cd 100644 (file)
@@ -34,8 +34,10 @@ template <typename output_t>
 struct shape_consumer_t
 {
   shape_consumer_t (option_parser_t *parser)
 struct shape_consumer_t
 {
   shape_consumer_t (option_parser_t *parser)
-                 : shaper (parser),
-                   output (parser) {}
+                 : failed (false),
+                   shaper (parser),
+                   output (parser),
+                   font (NULL) {}
 
   void init (const font_options_t *font_opts)
   {
 
   void init (const font_options_t *font_opts)
   {
@@ -51,14 +53,17 @@ struct shape_consumer_t
   {
     output.new_line ();
 
   {
     output.new_line ();
 
-    shaper.populate_buffer (buffer, text, text_len, text_before, text_after);
-    output.consume_text (buffer, text, text_len, shaper.utf8_clusters);
-
-    if (!shaper.shape (font, buffer)) {
-      failed = true;
-      hb_buffer_set_length (buffer, 0);
-      output.shape_failed (buffer, text, text_len, shaper.utf8_clusters);
-      return;
+    for (unsigned int n = shaper.num_iterations; n; n--)
+    {
+      shaper.populate_buffer (buffer, text, text_len, text_before, text_after);
+      if (n == 1)
+       output.consume_text (buffer, text, text_len, shaper.utf8_clusters);
+      if (!shaper.shape (font, buffer)) {
+       failed = true;
+       hb_buffer_set_length (buffer, 0);
+       output.shape_failed (buffer, text, text_len, shaper.utf8_clusters);
+       return;
+      }
     }
 
     output.consume_glyphs (buffer, text, text_len, shaper.utf8_clusters);
     }
 
     output.consume_glyphs (buffer, text, text_len, shaper.utf8_clusters);
index f273464..9dea06e 100644 (file)
 #define VIEW_CAIRO_HH
 
 
 #define VIEW_CAIRO_HH
 
 
-struct view_cairo_t {
+struct view_cairo_t
+{
   view_cairo_t (option_parser_t *parser)
               : output_options (parser, helper_cairo_supported_formats),
   view_cairo_t (option_parser_t *parser)
               : output_options (parser, helper_cairo_supported_formats),
-                view_options (parser) {}
+                view_options (parser),
+                direction (HB_DIRECTION_INVALID),
+                lines (0), scale (1.0) {}
   ~view_cairo_t (void) {
     if (debug)
       cairo_debug_reset_static_data ();
   ~view_cairo_t (void) {
     if (debug)
       cairo_debug_reset_static_data ();
@@ -79,7 +82,11 @@ struct view_cairo_t {
       helper_cairo_line_t &line = g_array_index (lines, helper_cairo_line_t, i);
       line.finish ();
     }
       helper_cairo_line_t &line = g_array_index (lines, helper_cairo_line_t, i);
       line.finish ();
     }
+#if GLIB_CHECK_VERSION (2, 22, 0)
     g_array_unref (lines);
     g_array_unref (lines);
+#else
+    g_array_free (lines, TRUE);
+#endif
   }
 
   protected:
   }
 
   protected: